Skip to content
API referenceChat Completions (OpenAI)

Chat Completions (OpenAI)

OpenAI-style /v1/chat/completions over Claude models.

Model protocol

POST /v1/chat/completions is the OpenAI-compatible form for Claude. Set the Guard address, key and exact model in the SDK; other fields must follow the contract below. A server prompt is configured separately and does not require a different endpoint.

python
from openai import OpenAI
client = OpenAI(
    api_key=KEY,
    base_url="https://api.guardrelay.ai/v1",
)
resp = client.chat.completions.create(
    model="claude-sonnet-5",
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Hello!"},
    ],
)
print(resp.choices[0].message.content)

Kimi, Composer and Grok on this endpoint

All four families work here. Kimi passes unknown fields upstream as they are on this surface only: on the other two its field list is closed. Kimi fields are covered separately on the Kimi · Chat Completions page.

Kimi request

python
from openai import OpenAI
client = OpenAI(
    api_key=KEY,
    base_url="https://api.guardrelay.ai/v1",
)
resp = client.chat.completions.create(
    model="k3",
    messages=[{"role": "user", "content": "Hello!"}],
    max_tokens=512,
)
print(resp.choices[0].message.content)

Grok request

python
from openai import OpenAI
client = OpenAI(
    api_key=KEY,
    base_url="https://api.guardrelay.ai/v1",
)
resp = client.chat.completions.create(
    model="cursor-grok-4.6-medium",
    messages=[{"role": "user", "content": "Hello!"}],
    max_tokens=512,
)
print(resp.choices[0].message.content)

Composer request

python
from openai import OpenAI
client = OpenAI(
    api_key=KEY,
    base_url="https://api.guardrelay.ai/v1",
)
resp = client.chat.completions.create(
    model="composer-2.5",
    messages=[{"role": "user", "content": "Hello!"}],
    max_tokens=512,
)
print(resp.choices[0].message.content)
WhatHow it works for Composer and Grok
Request fieldsmodel, messages, max_tokens or max_completion_tokens, stream, tools
Both limits at oncemax_tokens and max_completion_tokens in one request return 400; send one
Rolesuser, assistant, plus system and developer as ordinary messages in the array
Content blockstext blocks with exactly the type and text keys; Grok also takes image_url with inline base64
Responsethe ordinary OpenAI shape: choices[0].message.content, finish_reason: "stop", cache in usage.prompt_tokens_details.cached_tokens
Response with a tool callchoices[0].message.tool_calls with id, name and arguments, and finish_reason is tool_calls. You answer such a turn with a message whose role is tool

Documentation sections

On this page