Claude Opus 5.5 ya está disponible en SeedRouter

Text

Referencia de la API de GLM-5.3

View Markdown

Campos de GLM-5.3, razonamiento, herramientas, streaming, uso y ejemplos completos de Chat, Responses y Messages.

GLM-5.3 acepta texto y devuelve texto o llamadas a herramientas. Siempre razona, admite los niveles de esfuerzo low, high y max, y permite hasta 131.072 tokens de salida. Usa glm-5.3 para el nivel Default. Su grupo predeterminado es glm; glm-5.3:glm sigue seleccionando explícitamente ese mismo grupo. Los grupos adicionales utilizan su propio sufijo de modelo.

URL base: https://api.seedrouter.ai. Autentícate con Authorization: Bearer $SEEDROUTER_API_KEY. Guarda las credenciales en tu servidor. Messages también acepta la cabecera compatible x-api-key.

Esta referencia sigue el contrato Chat de Z.ai, el esquema Responses del fabricante y su guía de compatibilidad Messages. Los límites específicos proceden de la guía de GLM-5.3. La correspondencia con la documentación no demuestra todos los comportamientos en funcionamiento real. Las comprobaciones del 29 de octubre de 2026 completaron solicitudes de texto y streaming en los tres formatos, llamadas a funciones Chat, salida de objeto JSON y continuación de respuestas guardadas. No se confirmaron los aciertos de caché, sus duraciones explícitas ni todos los controles de compatibilidad. Los campos de referencia de Messages se distinguen abajo de los campos GLM documentados por el fabricante.

Especificación OpenAPI · Referencia Markdown · Modelo y Playground · Guía de precios

Inicio rápido

Cada ejemplo envía una solicitud Chat Completions. max_tokens: 2048 es un presupuesto de ejemplo, no el valor predeterminado. El razonamiento y la respuesta visible comparten ese presupuesto; revisa finish_reason antes de considerar completa la respuesta.

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 acepta 16 campos de nivel superior. Los campos no admiten null salvo indicación expresa. Puedes omitir los opcionales; no envíes null en lugar de omitirlos.

CampoTipoObligatorioValor predeterminado y restricciones
modelstringSíglm-5.3 (Default)
messagesarraySíAl menos un mensaje; debe contener un mensaje de usuario o herramienta
do_samplebooleanNotrue; false hace que temperature y top_p no tengan efecto
streambooleanNofalse
thinkingobjectNotype: enabled; clear_thinking: true
reasoning_effortstringNolow, high, max; predeterminado max
temperaturenumberNo0–1 inclusive; predeterminado 1
top_pnumberNo0.01–1 inclusive; predeterminado 0.95
max_tokensintegerNo1–131072; sin valor predeterminado publicado para Chat
tool_streambooleanNofalse; true requiere stream: true
toolsarrayNoFunction, retrieval o web_search; hasta 128 elementos
tool_choicestringNoSolo auto
stopstring arrayNoHasta cuatro cadenas en el esquema oficial; se aceptaron cuatro en una solicitud real, pero no se probó la coincidencia de parada
response_formatobjectNotype obligatorio: text o json_object; predeterminado text
request_idstringNo6–64 caracteres; identificador único de solicitud del emisor
user_idstringNo6–128 caracteres; evita información personal

Los mensajes system y user requieren content de tipo cadena. Un mensaje assistant puede incluir content de tipo cadena, reasoning_content y tool_calls. Un mensaje tool requiere content y tool_call_id. Conserva el razonamiento histórico exacto al usar thinking.clear_thinking: false, incluido el orden de las llamadas del asistente y los resultados de herramientas. No se puede desactivar el razonamiento.

Una herramienta de función utiliza {type:"function", function:{name, description, parameters}}. El nombre contiene entre 1 y 64 letras ASCII, dígitos, guiones bajos o guiones. El esquema legible por máquinas exige description y parameters; el texto menciona su omisión para funciones sin parámetros. Usa la estructura completa hasta que se resuelva esta contradicción. parameters es el JSON Schema de tu función; no se interpreta como contenido de mensaje.

Una herramienta de recuperación utiliza {type:"retrieval", retrieval:{knowledge_id, prompt_template?}}. El ID de conocimiento pertenece a la cuenta que atiende la solicitud; declarar esta herramienta no crea una base de conocimiento.

Una herramienta de búsqueda web utiliza {type:"web_search", web_search:{search_engine:"search_pro_jina"}}. Los campos opcionales incluyen 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 y search_prompt. Consulta OpenAPI para conocer los tipos exactos. La disponibilidad de búsqueda y recuperación por cuenta requiere verificación real.

El modo de objeto JSON produce JSON, pero no impone un JSON Schema proporcionado. Incluye los campos deseados en el prompt y valida el resultado en tu aplicación.

Responses

POST /v1/responses acepta 15 campos de creación de nivel superior. Sigue el esquema Responses del fabricante, adaptado a GLM-5.3; el comportamiento exacto entre servicios sigue sujeto a verificación.

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}'
CampoTipoObligatorioValor predeterminado y restricciones
modelstringSíglm-5.3
inputstring or arraySíElementos de entrada nativos enumerados abajo
instructionsstringNoInstrucciones del sistema
streambooleanNofalse
temperaturenumberNo0–1, como máximo dos decimales; predeterminado 1
top_pnumberNo0.01–1, como máximo dos decimales; predeterminado 0.95
max_output_tokensintegerNo1–131072; predeterminado 65536, incluido el razonamiento
stopstring arrayNoEste protocolo no declara límite de cantidad
toolsarrayNoFunction, namespace, custom o web_search
tool_choicestringNonone o auto
reasoningobjectNoeffort: low, high, max; predeterminado max
textobjectNoformat.type: text o json_object
prompt_cache_keystringNoClave de selección de caché; sin límite de longitud documentado
previous_response_idstringNoHace referencia a una respuesta guardada anteriormente
storebooleanNofalse; indica si se guarda esta respuesta

Los elementos de entrada de mensaje requieren type: "message", un rol (user, system, assistant, developer) y contenido. El contenido puede ser una cadena, un bloque de texto o un array de bloques de texto. Usa input_text o output_text del asistente con un text de tipo cadena. Los esquemas genéricos de imagen/archivo no otorgan visión a este modelo que solo admite texto.

Los elementos de entrada de llamada a función requieren type: "function_call", name, call_id y arguments como cadena JSON; namespace es opcional. Los resultados requieren type: "function_call_output", call_id y output de tipo cadena. Los elementos de razonamiento usan type: "reasoning" y un único objeto content: {type:"reasoning_text", text:"..."}. Consérvalo sin convertirlo en array.

Las herramientas de función requieren type: "function" y name, con description y parameters opcionales. Las herramientas namespace requieren type: "namespace" y name, y pueden contener tools de función. Las herramientas personalizadas requieren type: "custom" y name. Las de búsqueda web requieren type: "web_search". No copies en este formato los campos obligatorios de función de Chat.

La respuesta anterior referenciada debe haberse guardado. Guardar la respuesta actual es una decisión independiente; previous_response_id no obliga a usar store: true en la actual. El periodo de conservación del fabricante es de siete días. Una prueba real guardó correctamente una respuesta y continuó desde su ID con store: false en la actual; esto no demuestra todas las operaciones con respuestas guardadas.

Operaciones con respuestas guardadas

Cuando store: true tenga éxito, conserva el ID devuelto sin cambios. Estas operaciones autenticadas utilizan la misma cuenta que lo creó:

  • GET /v1/responses/{response_id} recupera la respuesta guardada.
  • GET /v1/responses/{response_id}/input_items enumera los elementos de entrada. Campos de consulta opcionales: order (asc o desc, predeterminado desc), limit (entero 1–100, predeterminado 20) y after (last_id de la página anterior).
  • DELETE /v1/responses/{response_id} elimina la respuesta guardada.

Una solicitud de creación posterior puede usar el ID guardado como previous_response_id. El acceso requiere que el usuario original conserve acceso al modelo. La conservación es de un máximo de siete días; no se puede continuar desde respuestas caducadas o eliminadas. La recuperación, eliminación y continuación mantienen el vínculo con la cuenta original. No hay ningún endpoint de cancelación documentado. Estas operaciones cuentan con pruebas locales de contrato. La prueba real del 29 de octubre confirmó el guardado y la continuación; la recuperación y la enumeración de elementos de entrada devolvieron 404, y no se probó la eliminación. No dependas de la recuperación, enumeración ni eliminación hasta confirmar su disponibilidad.

Compatibilidad con Messages

POST /v1/messages utiliza una estructura compatible con Anthropic. Incluye anthropic-version: 2023-06-01. El fabricante demuestra directamente model, messages, max_tokens y stream. No publica un esquema completo de Messages para GLM y advierte de diferencias con Claude. Los controles restantes son campos de referencia de compatibilidad, no 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}'
CampoEstructura y validaciónEvidencia
modelCadena obligatoria glm-5.3Ejemplo GLM
messagesArray obligatorio no vacío de user/assistant; cadena o bloques nativos de texto/herramientasEjemplo de texto GLM; las estructuras de bloques usan la referencia de compatibilidad
max_tokensEntero obligatorio 1–131072Ejemplo GLM y límite de salida del modelo
streamBooleano; predeterminado falseEjemplo GLM
systemCadena o array de bloques de textoReferencia de compatibilidad
temperatureNúmero 0–1Referencia de compatibilidad; correspondencia sin verificar
top_pNúmero 0.01–1Referencia de compatibilidad; correspondencia sin verificar
top_kEntero no negativoReferencia de compatibilidad; correspondencia sin verificar
stop_sequencesArray de cadenasReferencia de compatibilidad
toolsHerramientas del cliente: name, input_schema, description opcionalReferencia de compatibilidad
tool_choiceObjeto de tipo auto, none, any o tool; una herramienta con nombre requiere nameReferencia de compatibilidad
thinkingenabled con budget_tokens, o adaptive; no permite desactivar el razonamientoReferencia de compatibilidad y regla de razonamiento siempre activo de GLM
output_configObjeto con effort low, high o maxNombre de campo compatible; correspondencia sin verificar
metadataObjeto con user_id opcionalReferencia de compatibilidad
cache_controlMarcador ephemeral, ttl opcional 5m o 1hSolo referencia de protocolo; comportamiento de TTL explícito de GLM sin verificar

El presupuesto compatible de razonamiento enabled es al menos 1024 y menor que max_tokens. Los bloques de texto requieren text; el historial de razonamiento requiere thinking y signature; el razonamiento redactado requiere data. Los bloques de uso de herramientas requieren id, name e input; los de resultado requieren tool_use_id. No se acepta ningún bloque de imagen, audio ni vídeo. Los marcadores explícitos de caché no demuestran un acierto, una duración ni una tarifa independiente. La caché de contexto documentada del modelo es automática.

Salida, streaming y uso

Chat devuelve id, created, model, choices y usage, con request_id y web_search opcionales. Lee choices[].message.content, reasoning_content y tool_calls. Una respuesta de llamada a herramienta puede no contener texto de respuesta. SSE envía fragmentos de razonamiento, texto y argumentos de herramientas, y después [DONE]. Une los fragmentos de argumentos por índice de llamada. Ningún campo stream_options forma parte de la solicitud Chat oficial de GLM.

Responses devuelve la unión nativa output: mensajes, razonamiento y llamadas a herramientas. SSE incluye response.created, response.in_progress, eventos de elementos de salida y partes de contenido, fragmentos de texto/razonamiento/argumentos de función, progreso de búsqueda y los estados terminales response.completed, response.incomplete o response.failed. No requiere un marcador [DONE]. Conserva los índices y los números de secuencia.

Messages devuelve una estructura nativa de mensaje con bloques de contenido, stop_reason y usage. Sus eventos incluyen message_start, content_block_start/delta/stop, message_delta y message_stop. Conserva las firmas de razonamiento y los ID de herramientas como historial opaco.

FormatoEntrada totalEntrada en cachéSalida
Chatprompt_tokensprompt_tokens_details.cached_tokenscompletion_tokens
Responsesinput_tokensinput_tokens_details.cached_tokensoutput_tokens
Messagesinput_tokens más cache_read_input_tokens y cualquier cache_creation_input_tokenscache_read_input_tokensoutput_tokens

El razonamiento es un subconjunto de la salida, no un cargo adicional. La entrada en caché de Chat/Responses es un subconjunto de la entrada total. Resta las partes en caché registradas por separado antes de aplicar la tarifa ordinaria de entrada. Las respuestas públicas muestran el uso de tokens, no cargos monetarios. Los precios actuales proceden de la configuración de facturación vigente; las solicitudes fallidas no se cobran.

Validación y errores

Los tipos no válidos, el razonamiento desactivado, los esfuerzos no admitidos, los presupuestos de salida excesivos y la entrada multimedia fallan la validación. tool_stream de Chat requiere stream. Los campos de nivel superior no admitidos se omiten en lugar de reenviarse. Se requieren credenciales; un saldo insuficiente impide una solicitud de pago. Los errores usan la estructura pública de errores (Messages utiliza su formato nativo). Nunca consideres un stream interrumpido una respuesta completa ni reenvíes automáticamente una solicitud cuyo resultado sea incierto.

El Playground muestra los mismos campos admitidos para el formato seleccionado. Los valores opcionales vacíos se omiten; false y cero explícitos se conservan. Cambiar de formato inicia una conversación nueva. Su estimación de uso necesita tanto el uso registrado como las tarifas actuales.