Conversa

Conclusões de chat

A API Chat Completions da OpenAI, para todos os modelos de texto: o mesmo pedido e a mesma resposta, o mesmo streaming, os mesmos SDKs.

POST/v1/chat/completions

Pedido

modelstringobrigatório
Um ID de modelo da página de modelos, como claude-opus-5-5 ou gpt-6-sol.
messagesarrayobrigatório
A conversa: mensagens system (ou developer), user, assistant e tool. content é uma string ou um array de partes para adicionar imagens, PDFs, áudio ou vídeo.
streamboolean
Envia a resposta como server-sent events à medida que é escrita. Consulte Streaming abaixo.
stream_optionsobject
{ "include_usage": true } adiciona um bloco final com o consumo de tokens.
max_completion_tokensinteger
O número máximo de tokens a gerar, incluindo o raciocínio. max_tokens também funciona.
temperaturenumber
0 a 2. Valores mais baixos dão respostas mais focadas, valores mais altos dão respostas mais variadas. Alguns modelos de raciocínio ignoram este parâmetro. O Claude a partir do Opus 4.7 (Opus 5 e 5.5, Fable 5 e 5.1, Sonnet 5.5, Haiku 5.5) não o aceita, por isso omitimo-lo nesses modelos.
top_pnumber
Amostragem por núcleo, 0 a 1. Altere este parâmetro ou temperature, não ambos. É omitido nos mesmos modelos Claude, tal como top_k nesses modelos e no Muse Wonder.
stopstring | array
Até 4 sequências que fazem parar a geração.
toolsarray
Funções que o modelo pode chamar. Consulte Chamadas de ferramentas abaixo.
tool_choicestring | object
auto, none, required ou uma função específica. Quando o laboratório de um modelo recusa ou ignora uma opção (uma ferramenta imposta no Claude Opus 5.5, Sonnet 5.5 e Fable 5.1; qualquer opção exceto auto no Muse Wonder; none em alguns modelos Gemini, DeepSeek Flash, MiMo, HY4 e MiniMax), enviamo-la num formato que o modelo respeita e indicamos ao modelo o que pediu; uma função imposta pelo nome é apresentada como a única disponível.
response_formatobject
Saída em JSON: { "type": "json_object" } ou json_schema com um esquema. Consulte Saída estruturada abaixo.
reasoning_effortstring
O esforço de raciocínio do modelo: none, minimal, low, medium, high, xhigh ou max. Cada modelo aceita alguns destes níveis (consulte Raciocínio abaixo); se escolher outro nível, é usado o nível aceite mais próximo. Um nível mais alto prolonga o raciocínio e consome mais tokens de saída.
seedinteger
Reprodutibilidade na medida do possível, nos modelos que a suportam.
modelsarray
Encaminhamento inteligente para este pedido: alternativas a tentar, por ordem, se o modelo estiver indisponível. Consulte Encaminhamento inteligente.
Os restantes parâmetros da OpenAI são enviados para o modelo sem alterações, exceto user e metadata, que ficam do nosso lado. Os parâmetros que cada modelo respeita (ferramentas, esquemas JSON, raciocínio) dependem do próprio modelo, tal como acontece ao usá-lo diretamente através do laboratório. Com o SDK Python da OpenAI, envie models como extra_body={"models": [...]}.

Resposta

Resposta
{
"id": "chatcmpl-AbC123...",
"object": "chat.completion",
"created": 1790870400,
"model": "claude-opus-5-5",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Here's the summary..."
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 1204,
"completion_tokens": 312,
"total_tokens": 1516,
"prompt_tokens_details": { "cached_tokens": 1024 },
"completion_tokens_details": { "reasoning_tokens": 128 }
}
}
  • model é o modelo que respondeu. É o que pediu, a menos que o encaminhamento inteligente tenha usado uma alternativa.
  • Os modelos de raciocínio podem acrescentar reasoning_content à mensagem: o raciocínio do modelo, quando este o partilha.
  • usage corresponde à utilização faturada. cached_tokens são tokens de entrada lidos da cache de prompts do modelo, faturados ao preço de cache quando o modelo tem um.

Todas as respostas incluem também estes cabeçalhos:

CabeçalhoValor
x-request-idO ID do pedido, tal como aparece no seu registo de pedidos. Indique-o ao contactar o apoio.
x-zurelay-modelO modelo que respondeu.
x-zurelay-routed-fromApenas após o encaminhamento inteligente: o modelo que pediu.
x-zurelay-reasoning-effortApenas quando o pedido definiu um nível de raciocínio: o nível usado pelo modelo, o mais próximo que este suporta (consulte Raciocínio).
x-zurelay-stoppedApenas quando o saldo ou o orçamento da chave se esgotou durante a resposta, ou quando a resposta atingiu o max_tokens para o qual o limite foi reduzido por não haver saldo ou orçamento suficiente para mais: insufficient_quota, key_budget_exceeded ou key_daily_budget_exceeded. A resposta contém o que foi escrito até esse momento, com finish_reason: "length".

Streaming

Com stream: true, a resposta chega como eventos enviados pelo servidor no formato de blocos da OpenAI, terminando com data: [DONE]. Todos os SDKs leem estes eventos por si.

import os
from openai import OpenAI
client = OpenAI(
base_url="https://api.zurelay.com/v1",
api_key=os.environ["ZURELAY_API_KEY"],
)
stream = client.chat.completions.create(
model="claude-sonnet-5-5",
messages=[
{
"role": "user",
"content": "Write a limerick about databases."
}
],
stream=True,
stream_options={
"include_usage": True
},
)
for chunk in stream:
if chunk.choices and chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)
  • Não é enviada qualquer resposta até o modelo produzir o primeiro token, pelo que uma nova tentativa ou a mudança para outra via passa despercebida.
  • Nos períodos sem dados (enquanto o modelo raciocina entre passos), são enviadas linhas de comentário SSE (: keep-alive) a cada 15 segundos. Os clientes ignoram-nas; servem para impedir que os proxies fechem a ligação. Se o primeiro token demorar mais de 20 segundos (devido a um prompt longo ou a uma via bloqueada que está a ser substituída), o stream abre nessa altura: os cabeçalhos e os comentários de manutenção da ligação chegam enquanto espera. Cada via tem até 3 minutos para começar (5 com esforço de raciocínio elevado) antes de se tentar a seguinte, por isso defina o tempo limite do cliente para 10 minutos.
  • Um stream aberto antes do primeiro token só inclui x-zurelay-model quando nenhum outro modelo pode responder (encaminhamento inteligente desativado), e um erro após a abertura chega como um evento de erro no stream (com a mesma estrutura do corpo de erro), em vez de um código de estado de erro.
  • Com include_usage, o último bloco antes de [DONE] contém uma lista choices vazia e usage.

Chamada de ferramentas

Descreva as funções em tools; quando o modelo quiser usar uma, responde com tool_calls em vez de texto. Execute a função, devolva o resultado numa mensagem tool com o ID da chamada, e o modelo continua.

import os
from openai import OpenAI
client = OpenAI(
base_url="https://api.zurelay.com/v1",
api_key=os.environ["ZURELAY_API_KEY"],
)
response = client.chat.completions.create(
model="gpt-6-sol",
messages=[
{
"role": "user",
"content": "What's the weather in Lisbon right now?"
}
],
tools=[
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Current weather for a city",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string"
}
},
"required": [
"city"
]
}
}
}
],
)
print(response.choices[0].message.content)

Saída estruturada

Peça JSON com response_format. Um json_schema obriga os modelos que o suportam a seguir o seu esquema; json_object pede qualquer JSON válido (indique-o também no prompt).

import os
from openai import OpenAI
client = OpenAI(
base_url="https://api.zurelay.com/v1",
api_key=os.environ["ZURELAY_API_KEY"],
)
response = client.chat.completions.create(
model="gpt-6.1-sol",
messages=[
{
"role": "user",
"content": "Extract the people: 'Ana met Ben and Chloe in Porto.'"
}
],
response_format={
"type": "json_schema",
"json_schema": {
"name": "people",
"schema": {
"type": "object",
"properties": {
"names": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"names"
]
}
}
},
)
print(response.choices[0].message.content)

Raciocínio

Os modelos de raciocínio pensam antes de responder. Defina reasoning_effort para equilibrar rapidez e custo com profundidade: um nível mais elevado prolonga o raciocínio, demora mais tempo e usa mais tokens de saída. Cada modelo aceita os níveis documentados pelo respetivo laboratório, de none (sem raciocínio), passando por minimal, low, medium, high e xhigh (extra-alto), até max; a tabela abaixo apresenta-os. Se omitir este parâmetro, o modelo usa o nível predefinido. Funciona da mesma forma com qualquer SDK da OpenAI, e pode experimentar cada nível no Área de testes do painel.

from openai import OpenAI
client = OpenAI(base_url="https://api.zurelay.com/v1", api_key="YOUR_ZURELAY_KEY")
response = client.chat.completions.create(
model="zurelay-auto",
reasoning_effort="high",
messages=[{"role": "user", "content": "How many primes are there below 1,000?"}],
)
message = response.choices[0].message
print(getattr(message, "reasoning_content", None)) # the thinking, when the model shares it
print(message.content)

Nos modelos que o partilham, o raciocínio é devolvido com a resposta em message.reasoning_content (em streaming, em delta.reasoning_content); alguns dão ao campo o nome reasoning. É faturado como tokens de saída e faz sempre parte de completion_tokens; completion_tokens_details.reasoning_tokens contabiliza-o separadamente quando o modelo fornece essa informação. Com esforço elevado, uma resposta pode demorar minutos a começar, por isso defina um tempo limite generoso no cliente (consulte Fiabilidade e tempos limite).

Níveis por modelo

Com base na documentação de cada laboratório. Um nível que o modelo não suporte é substituído pelo nível suportado mais próximo (entre dois igualmente próximos, o mais baixo; e o raciocínio só é desativado quando envia none), pelo que o mesmo pedido funciona em todos os modelos, incluindo com encaminhamento inteligente. O cabeçalho de resposta x-zurelay-reasoning-effort indica o nível usado. Uma palavra que não corresponda a um nível é rejeitada com um 400 que lista os níveis do modelo.

ModeloIDNíveisPredefinido
Abliterated Large V2abliterated-large-v2low, high, maxmax
Claude Fable 5claude-fable-5low, medium, high, xhigh, maxhigh
Claude Fable 5.1claude-fable-5-1low, medium, high, xhigh, maxhigh
Claude Haiku 5.5claude-haiku-5-5low, medium, high, xhigh, maxmedium
Claude Opus 4.6claude-opus-4-6low, medium, high, maxDesativado até definir um nível
Claude Opus 4.7claude-opus-4-7low, medium, high, xhigh, maxDesativado até definir um nível
Claude Opus 4.8claude-opus-4-8low, medium, high, xhigh, maxDesativado até definir um nível
Claude Opus 5claude-opus-5low, medium, high, xhigh, maxhigh
Claude Opus 5.5claude-opus-5-5low, medium, high, xhigh, maxmedium
Claude Sonnet 5.5claude-sonnet-5-5low, medium, high, xhigh, maxhigh
DeepSeek V4 Flashdeepseek-v4-flashnone, high, maxhigh
DeepSeek V4 Flash 0731deepseek-v4-flash-0731none, low, high, maxhigh
DeepSeek V4 Pro 0813deepseek-v4-pro-0813none, low, high, maxhigh
DeepSeek V4.1 Flashdeepseek-v4.1-flashnone, high, maxhigh
DeepSeek V4.1 Flash 1017deepseek-v4.1-flash-1017none, high, maxhigh
Gemini 3.1 Flash-Litegemini-3.1-flash-liteminimal, low, medium, highminimal
Gemini 3.1 Progemini-3.1-prolow, medium, highhigh
Gemini 3.5 Flash-Litegemini-3.5-flash-liteminimal, low, medium, highminimal
Gemini 3.7 Flashgemini-3.7-flashlow, medium, highmedium
Gemini 3.8 Flashgemini-3.8-flashlow, medium, highmedium
Gemini 4 Argongemini-4-argonlow, medium, highmedium
GLM-5.2glm-5.2none, high, maxmax
GLM-5.3glm-5.3low, high, maxmax
GLM-5.3 Flashglm-5.3-flashlow, high, maxmax
GLM-5.3 FlashXglm-5.3-flashxlow, high, maxmax
GPT-5.6 Lunagpt-5.6-lunanone, low, medium, high, xhigh, maxmedium
GPT-5.6 Solgpt-5.6-solnone, low, medium, high, xhigh, maxmedium
GPT-5.6 Terragpt-5.6-terranone, low, medium, high, xhigh, maxmedium
GPT-6 Astragpt-6-astralow, medium, high, xhigh, maxmedium
GPT-6 Lunagpt-6-lunanone, low, medium, high, xhigh, maxmedium
GPT-6 Solgpt-6-solnone, low, medium, high, xhigh, maxmedium
GPT-6.1 Solgpt-6.1-sollow, medium, high, xhigh, maxmedium
GPT-6.1 Terragpt-6.1-terranone, low, medium, high, xhigh, maxmedium
Grok 4.7grok-4.7low, medium, high, xhighhigh
HY4 Previewhy4-previewnone, highhigh
Kimi K2.5kimi-k2.5none, highhigh
Kimi K2.6kimi-k2.6none, highhigh
Kimi K3kimi-k3low, high, maxmax
Kimi K3.1 Prokimi-k3.1-prolow, high, maxmax
Kimi K3.1 Pro Highspeedkimi-k3.1-pro-highspeedlow, high, maxmax
MiMo V2.6 Flashmimo-v2.6-flashnone, highhigh
MiMo V2.6 Promimo-v2.6-pronone, highhigh
MiniMax M3minimax-m3none, highhigh
MiniMax M3.1 Flashminimax-m3.1-flashlow, medium, high, xhigh, maxmax
Muse Spark 1.3 Contributormuse-spark-1.3-contributorminimal, low, medium, high, xhighmedium
Muse Wondermuse-wonder-1.0minimal, low, medium, high, xhigh, maxhigh
Qwen 3.8 Flashqwen3.8-flashnone, low, medium, xhighxhigh
Qwen 3.8 Maxqwen3.8-maxnone, low, medium, xhighxhigh
Qwen 3.8 Omni Flashqwen3.8-omni-flashnone, low, medium, xhighxhigh
Passo 5 Previewstep-5-previewlow, medium, highmedium
Zurelay Autozurelay-autonone, minimal, low, medium, high, xhigh, maxDesativado até definir um nível
MiniMax M2.5minimax-m2.5Nada a definirRaciocina sempre
Claude Haiku 4.5claude-haiku-4-5Nenhum (um orçamento de raciocínio no formato da Anthropic)Desativado
Ministral 3 14Bministral-3-14bNenhumDesativado
Ministral 3 3Bministral-3-3bNenhumDesativado

Raciocínio do Claude

Neste endpoint, o Claude aceita reasoning_effort como qualquer outro modelo: low, medium, high, xhigh ou max (o Opus 4.6 não tem xhigh). No formato da própria Anthropic, o Claude raciocina de forma adaptativa a um determinado nível: envie thinking: { type: "adaptive", display: "summarized" } com output_config: { effort: "xhigh" } e leia os blocos de raciocínio. Consulte Anthropic Messages.

Tem dúvidas ou falta alguma coisa? Contacte a nossa equipa de apoio e responderemos por email, normalmente num minuto.