Claude Opus 5.5 já está disponível no SeedRouter

Text

Referência da API GLM-5.3

View Markdown

Campos de requisição, raciocínio, ferramentas, streaming e uso do GLM-5.3, com exemplos completos de Chat, Responses e Messages.

GLM-5.3 aceita texto e retorna texto ou chamadas de ferramentas. Sempre raciocina, oferece os níveis low, high e max e permite até 131.072 tokens de saída. Use glm-5.3 para a opção Default. Seu grupo padrão é glm; glm-5.3:glm continua sendo uma seleção explícita desse mesmo grupo. Grupos adicionais usam seu próprio sufixo no modelo.

URL base: https://api.seedrouter.ai. Autentique com Authorization: Bearer $SEEDROUTER_API_KEY. Mantenha as credenciais no servidor. Messages também aceita o cabeçalho compatível x-api-key.

Esta referência segue o contrato Chat da Z.ai, o esquema Responses do fabricante e seu guia de compatibilidade Messages. Os limites específicos vêm do guia GLM-5.3. O alinhamento à documentação não comprova todos os comportamentos reais. Os testes de 29 de outubro de 2026 concluíram requisições de texto e streaming nos três formatos, chamadas de funções em Chat, saída em objeto JSON e continuação de resposta salva. Não foram comprovados acertos de cache, prazos explícitos de cache nem todos os controles de compatibilidade. Os campos de referência Messages abaixo são diferenciados dos campos GLM documentados pelo fabricante.

Especificação OpenAPI · Referência Markdown · Modelo e Playground · Guia de preços

Início rápido

Cada exemplo envia uma requisição Chat Completions. max_tokens: 2048 é um orçamento de exemplo, não o padrão. O raciocínio e a resposta visível compartilham esse orçamento; confira finish_reason antes de considerar a resposta completa.

curl https://api.seedrouter.ai/v1/chat/completions \
  -H "Authorization: Bearer $SEEDROUTER_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"model":"glm-5.3","messages":[{"role":"user","content":"Explain an idempotency key with one concrete example."}],"reasoning_effort":"low","max_tokens":2048}'
import os
from openai import OpenAI

client = OpenAI(api_key=os.environ["SEEDROUTER_API_KEY"], base_url="https://api.seedrouter.ai/v1")
response = client.chat.completions.create(
    model="glm-5.3",
    messages=[{"role": "user", "content": "Explain an idempotency key with one concrete example."}],
    max_tokens=2048,
    extra_body={"reasoning_effort": "low"},
)
print(response.choices[0].message.content)
print(response.usage)
import OpenAI from 'openai';
const client = new OpenAI({apiKey: process.env.SEEDROUTER_API_KEY, baseURL: 'https://api.seedrouter.ai/v1'});
const response = await client.chat.completions.create({
  model: 'glm-5.3',
  messages: [{role: 'user', content: 'Explain an idempotency key with one concrete example.'}],
  reasoning_effort: 'low',
  max_tokens: 2048,
});
console.log(response.choices[0].message.content);
console.log(response.usage);
package main

import (
    "bytes"
    "fmt"
    "io"
    "net/http"
    "os"
    "time"
)

func main() {
    body := []byte(`{"model":"glm-5.3","messages":[{"role":"user","content":"Explain an idempotency key with one concrete example."}],"reasoning_effort":"low","max_tokens":2048}`)
    req, err := http.NewRequest("POST", "https://api.seedrouter.ai/v1/chat/completions", bytes.NewReader(body))
    if err != nil { panic(err) }
    req.Header.Set("Authorization", "Bearer " + os.Getenv("SEEDROUTER_API_KEY"))
    req.Header.Set("Content-Type", "application/json")
    client := &http.Client{Timeout: 3 * time.Minute}
    res, err := client.Do(req)
    if err != nil { panic(err) }
    defer res.Body.Close()
    data, err := io.ReadAll(res.Body)
    if err != nil { panic(err) }
    if res.StatusCode != http.StatusOK { panic(fmt.Sprintf("HTTP %d: %s", res.StatusCode, data)) }
    fmt.Println(string(data))
}

Chat Completions

POST /v1/chat/completions aceita 16 campos de nível superior. Os campos não aceitam null salvo indicação explícita. Campos opcionais podem ser omitidos; não envie null no lugar da omissão.

CampoTipoObrigatórioPadrão e restrições
modelstringSimglm-5.3 (Default)
messagesarraySimPelo menos uma mensagem; deve conter uma mensagem de usuário ou ferramenta
do_samplebooleanNãotrue; false torna temperature e top_p ineficazes
streambooleanNãofalse
thinkingobjectNãotype: enabled; clear_thinking: true
reasoning_effortstringNãolow, high, max; padrão max
temperaturenumberNão0–1 inclusivo; padrão 1
top_pnumberNão0.01–1 inclusivo; padrão 0.95
max_tokensintegerNão1–131072; sem padrão publicado para Chat
tool_streambooleanNãofalse; true exige stream: true
toolsarrayNãoFunção, retrieval ou web_search; até 128 entradas
tool_choicestringNãoauto somente
stopstring arrayNãoAté quatro strings no esquema oficial; quatro foram aceitas em uma requisição real, mas a correspondência de parada não foi exercitada
response_formatobjectNãotype obrigatório: text ou json_object; padrão text
request_idstringNão6–64 caracteres; identificador exclusivo da requisição definido pelo cliente
user_idstringNão6–128 caracteres; evite informações pessoais

Mensagens system e user exigem content em string. Uma mensagem assistant pode conter content em string, reasoning_content e tool_calls. Uma mensagem tool exige content e tool_call_id. Preserve exatamente o raciocínio histórico ao usar thinking.clear_thinking: false, incluindo a ordem das chamadas do assistente e dos resultados de ferramentas. Não é possível desativar o raciocínio.

Uma ferramenta de função usa {type:"function", function:{name, description, parameters}}. O nome contém de 1 a 64 letras ASCII, dígitos, sublinhados ou hífens. O esquema legível por máquina exige description e parameters; o texto menciona a omissão para funções sem parâmetros. Use a estrutura completa até que esse conflito seja resolvido. parameters é o JSON Schema da sua função; não é interpretado como conteúdo da mensagem.

Uma ferramenta de recuperação usa {type:"retrieval", retrieval:{knowledge_id, prompt_template?}}. O ID de conhecimento pertence à conta que atende à requisição; declarar essa ferramenta não cria uma base de conhecimento.

Uma ferramenta de busca na web usa {type:"web_search", web_search:{search_engine:"search_pro_jina"}}. Os campos opcionais incluem enable, search_query, count (1–50), search_domain_filter, search_recency_filter (oneDay, oneWeek, oneMonth, oneYear, noLimit), content_size (medium, high), result_sequence (before, after), search_result, require_search e search_prompt. Consulte os tipos exatos no OpenAPI. A disponibilidade de busca e recuperação por conta precisa de verificação real.

O modo de objeto JSON produz JSON, mas não impõe um JSON Schema fornecido. Inclua os campos desejados no prompt e valide o resultado no seu aplicativo.

Responses

POST /v1/responses aceita 15 campos de criação de nível superior. Isso segue o esquema Responses do fabricante, especializado para GLM-5.3; o comportamento exato entre serviços continua sujeito a verificação.

curl https://api.seedrouter.ai/v1/responses \
  -H "Authorization: Bearer $SEEDROUTER_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"model":"glm-5.3","input":[{"type":"message","role":"user","content":"Give a concise example of a safe retry."}],"reasoning":{"effort":"low"},"max_output_tokens":2048,"store":false}'
CampoTipoObrigatórioPadrão e restrições
modelstringSimglm-5.3
inputstring ou arraySimItens nativos de entrada listados abaixo
instructionsstringNãoInstruções de sistema
streambooleanNãofalse
temperaturenumberNão0–1, no máximo duas casas decimais; padrão 1
top_pnumberNão0.01–1, no máximo duas casas decimais; padrão 0.95
max_output_tokensintegerNão1–131072; padrão 65536, incluindo raciocínio
stopstring arrayNãoNenhum limite de quantidade declarado neste protocolo
toolsarrayNãoFunção, namespace, custom ou web_search
tool_choicestringNãonone ou auto
reasoningobjectNãoeffort: low, high, max; padrão max
textobjectNãoformat.type: text ou json_object
prompt_cache_keystringNãoChave de cache; sem limite de tamanho documentado
previous_response_idstringNãoReferencia uma resposta salva anteriormente
storebooleanNãofalse; se esta resposta deve ser salva

Itens de mensagem de entrada exigem type: "message", um papel (user, system, assistant, developer) e conteúdo. O conteúdo pode ser uma string, um bloco de texto ou uma lista de blocos de texto. Use input_text ou output_text do assistente com text em string. Esquemas genéricos de imagem/arquivo não conferem capacidade de visão a este modelo somente de texto.

Itens de entrada de chamada de função exigem type: "function_call", name, call_id e arguments como string JSON; namespace é opcional. Resultados exigem type: "function_call_output", call_id e output em string. Itens de raciocínio usam type: "reasoning" e um único objeto content: {type:"reasoning_text", text:"..."}. Preserve-o sem converter em lista.

Ferramentas de função exigem type: "function" e name, com description e parameters opcionais. Ferramentas namespace exigem type: "namespace" e name e podem conter tools de função. Ferramentas personalizadas exigem type: "custom" e name. Ferramentas de busca na web exigem type: "web_search". Não copie para este formato os campos obrigatórios de funções de Chat.

A resposta anterior referenciada precisa ter sido armazenada. Salvar a resposta atual é uma escolha separada; previous_response_id não força store: true na requisição atual. O prazo de retenção do fabricante é de sete dias. Um teste real salvou uma resposta e continuou a partir do ID com store: false na requisição atual; isso não comprova todas as operações com respostas salvas.

Operações com respostas salvas

Quando store: true funcionar, preserve o ID retornado sem alterações. Estas operações autenticadas usam a mesma conta que criou a resposta:

  • GET /v1/responses/{response_id} recupera a resposta salva.
  • GET /v1/responses/{response_id}/input_items lista os itens de entrada. Campos de consulta opcionais: order (asc ou desc, padrão desc), limit (inteiro de 1–100, padrão 20) e after (last_id da página anterior).
  • DELETE /v1/responses/{response_id} exclui a resposta salva.

Uma requisição de criação posterior pode usar o ID salvo como previous_response_id. O acesso exige que o usuário original ainda tenha acesso ao modelo. A retenção é de no máximo sete dias; respostas expiradas ou excluídas não podem ser continuadas. Recuperação, exclusão e continuação mantêm o vínculo com a conta original. Não há endpoint de cancelamento documentado. Essas operações são cobertas por testes locais de contrato. O teste real de 29 de outubro confirmou salvamento e continuação; recuperação e listagem de itens de entrada retornaram 404, e a exclusão não foi testada. Não dependa de recuperação, listagem ou exclusão até confirmar sua disponibilidade.

Compatibilidade com Messages

POST /v1/messages usa um envelope compatível com Anthropic. Inclua anthropic-version: 2023-06-01. O fabricante demonstra diretamente model, messages, max_tokens e stream. Não publica um esquema GLM Messages completo e alerta para diferenças em relação ao Claude. Os controles restantes são campos da referência de compatibilidade, não capacidades GLM verificadas individualmente.

curl https://api.seedrouter.ai/v1/messages \
  -H "Authorization: Bearer $SEEDROUTER_API_KEY" \
  -H 'Content-Type: application/json' \
  -H 'anthropic-version: 2023-06-01' \
  -d '{"model":"glm-5.3","messages":[{"role":"user","content":"Explain a safe retry in two sentences."}],"max_tokens":2048}'
CampoEstrutura e validaçãoEvidência
modelString obrigatória glm-5.3Exemplo GLM
messagesLista user/assistant obrigatória e não vazia; string ou blocos nativos de texto/ferramentaExemplo de texto GLM; formatos dos blocos seguem a referência de compatibilidade
max_tokensInteiro obrigatório 1–131072Exemplo GLM e limite de saída do modelo
streamBooleano; padrão falseExemplo GLM
systemString ou lista de blocos de textoReferência de compatibilidade
temperatureNúmero 0–1Referência de compatibilidade; mapeamento não verificado
top_pNúmero 0.01–1Referência de compatibilidade; mapeamento não verificado
top_kInteiro não negativoReferência de compatibilidade; mapeamento não verificado
stop_sequencesLista de stringsReferência de compatibilidade
toolsFerramentas de cliente: name, input_schema, description opcionalReferência de compatibilidade
tool_choiceObjeto com type auto, none, any ou tool; ferramenta nomeada exige nameReferência de compatibilidade
thinkingenabled com budget_tokens, ou adaptive; não é possível desativar o raciocínioReferência de compatibilidade mais a regra de raciocínio sempre ativo do GLM
output_configObjeto com effort low, high ou maxNome de campo compatível; mapeamento não verificado
metadataObjeto com user_id opcionalReferência de compatibilidade
cache_controlMarcador ephemeral, ttl opcional 5m ou 1hApenas referência do protocolo; comportamento de TTL explícito do GLM não verificado

O orçamento compatível de raciocínio enabled é de pelo menos 1024 e menor que max_tokens. Blocos de texto exigem text; o histórico de raciocínio exige thinking e signature; raciocínio ocultado exige data. Blocos de uso de ferramenta exigem id, name e input; blocos de resultado exigem tool_use_id. Nenhum bloco de imagem, áudio ou vídeo é aceito. Marcadores explícitos de cache não comprovam um acerto, um prazo ou uma tarifa separada. O cache de contexto documentado do modelo é automático.

Saída, streaming e uso

Chat retorna id, created, model, choices e usage, com request_id e web_search opcionais. Leia choices[].message.content, reasoning_content e tool_calls. Uma resposta com chamada de ferramenta pode não ter texto de resposta. SSE envia incrementos de raciocínio, texto e argumentos de ferramentas, seguidos de [DONE]. Una os fragmentos de argumentos pelo índice da chamada. Nenhum campo stream_options faz parte da requisição GLM Chat oficial.

Responses retorna a união nativa output: mensagens, raciocínio e chamadas de ferramentas. SSE inclui response.created, response.in_progress, eventos de itens de saída e partes de conteúdo, incrementos de texto/raciocínio/argumentos de função, progresso de busca e os eventos finais response.completed, response.incomplete ou response.failed. Não exige um marcador [DONE]. Preserve índices e números de sequência.

Messages retorna um envelope de mensagem nativo com blocos de conteúdo, stop_reason e usage. Os nomes dos eventos incluem message_start, content_block_start/delta/stop, message_delta e message_stop. Preserve assinaturas de raciocínio e IDs de ferramentas como histórico opaco.

FormatoEntrada totalEntrada em cacheSaída
Chatprompt_tokensprompt_tokens_details.cached_tokenscompletion_tokens
Responsesinput_tokensinput_tokens_details.cached_tokensoutput_tokens
Messagesinput_tokens mais cache_read_input_tokens e quaisquer cache_creation_input_tokenscache_read_input_tokensoutput_tokens

O raciocínio é uma parcela da saída, não uma cobrança adicional. A entrada em cache de Chat/Responses é uma parcela da entrada total. Subtraia as parcelas em cache informadas separadamente antes de aplicar a tarifa de entrada comum. Respostas públicas expõem o uso de tokens, não valores monetários. Os preços atuais vêm das configurações de cobrança em tempo real; requisições que falham não são cobradas.

Validação e erros

Tipos inválidos, raciocínio desativado, níveis não aceitos, orçamentos de saída excessivos e entrada de mídia falham na validação. tool_stream de Chat exige stream. Campos de nível superior não aceitos são omitidos, não encaminhados. Credenciais são obrigatórias; saldo insuficiente impede uma requisição paga. Os erros usam o envelope público de erro (Messages usa seu formato nativo). Nunca trate um streaming interrompido como resposta completa nem reenvie automaticamente uma requisição com resultado incerto.

O Playground expõe os mesmos campos admitidos para o formato selecionado. Valores opcionais vazios são omitidos; false e zero explícitos são preservados. Mudar de formato inicia uma nova conversa. A estimativa de uso precisa tanto do uso informado quanto das tarifas atuais.