Claude Opus 5.5 est disponible sur SeedRouter

Text

Référence API GLM-5.3

View Markdown

Champs GLM-5.3, raisonnement, outils, streaming, usage et exemples complets pour Chat, Responses et Messages.

GLM-5.3 accepte du texte et renvoie du texte ou des appels d’outils. Il raisonne toujours, propose les efforts low, high et max et autorise jusqu’à 131 072 tokens de sortie. Utilisez glm-5.3 pour le niveau Default. Son groupe par défaut est glm ; glm-5.3:glm sélectionne explicitement ce même groupe. Les groupes supplémentaires utilisent leur propre suffixe de modèle.

URL de base : https://api.seedrouter.ai. Authentifiez-vous avec Authorization: Bearer $SEEDROUTER_API_KEY. Gardez les identifiants sur votre serveur. Messages accepte aussi l’en-tête compatible x-api-key.

Cette référence suit le contrat Chat de Z.ai, le schéma Responses du fabricant et son guide de compatibilité Messages. Les limites propres au modèle viennent du guide GLM-5.3. L’alignement documentaire ne prouve pas chaque comportement réel. Les vérifications du 29 octobre 2026 ont abouti pour le texte et le streaming dans les trois formats, les appels de fonctions Chat, la sortie objet JSON et la continuation d’une réponse enregistrée. Les accès au cache, les durées explicites du cache et tous les réglages de compatibilité n’ont pas été établis. Les champs de référence Messages ci-dessous sont distingués des champs GLM documentés par le fabricant.

Spécification OpenAPI · Référence Markdown · Modèle et Playground · Guide des tarifs

Démarrage rapide

Chaque exemple envoie une requête Chat Completions. max_tokens: 2048 est un budget d’exemple, pas la valeur par défaut. Raisonnement et réponse visible partagent ce budget ; examinez finish_reason avant de considérer la réponse comme complète.

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 accepte 16 champs de premier niveau. Les champs n’acceptent pas null sauf indication explicite. Vous pouvez omettre les champs facultatifs ; n’envoyez pas null à la place.

ChampTypeObligatoireValeur par défaut et contraintes
modelstringOuiglm-5.3 (Default)
messagesarrayOuiAu moins un message ; doit contenir un message user ou tool
do_samplebooleanNontrue ; false rend temperature et top_p sans effet
streambooleanNonfalse
thinkingobjectNontype: enabled ; clear_thinking: true
reasoning_effortstringNonlow, high, max ; défaut max
temperaturenumberNon0–1 inclus ; défaut 1
top_pnumberNon0.01–1 inclus ; défaut 0.95
max_tokensintegerNon1–131072 ; aucun défaut Chat publié
tool_streambooleanNonfalse ; true exige stream: true
toolsarrayNonFunction, retrieval ou web_search ; jusqu’à 128 entrées
tool_choicestringNonauto uniquement
stopstring arrayNonJusqu’à quatre chaînes dans le schéma officiel ; quatre ont été acceptées en conditions réelles, mais leur déclenchement n’a pas été testé
response_formatobjectNontype requis : text ou json_object ; défaut text
request_idstringNon6–64 caractères ; identifiant unique de requête de l’appelant
user_idstringNon6–128 caractères ; évitez les données personnelles

Les messages system et user exigent un content de type chaîne. Un message assistant peut contenir content de type chaîne, reasoning_content et tool_calls. Un message tool exige content et tool_call_id. Préservez exactement le raisonnement historique avec thinking.clear_thinking: false, y compris l’ordre des appels de l’assistant et des résultats d’outils. Le raisonnement ne peut pas être désactivé.

Un outil fonction utilise {type:"function", function:{name, description, parameters}}. Son nom contient 1–64 lettres ASCII, chiffres, traits de soulignement ou traits d’union. Le schéma machine exige description et parameters ; le texte mentionne leur omission pour les fonctions sans paramètres. Utilisez la forme complète tant que ce conflit n’est pas résolu. parameters est le JSON Schema de votre fonction ; il n’est pas interprété comme contenu du message.

Un outil de récupération utilise {type:"retrieval", retrieval:{knowledge_id, prompt_template?}}. L’identifiant de connaissances appartient au compte servant la requête ; déclarer cet outil ne crée pas de base de connaissances.

Un outil de recherche web utilise {type:"web_search", web_search:{search_engine:"search_pro_jina"}}. Les champs facultatifs incluent 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 et search_prompt. Consultez OpenAPI pour les types exacts. La disponibilité de la recherche et de la récupération selon le compte doit être vérifiée en conditions réelles.

Le mode objet JSON produit du JSON sans imposer un JSON Schema fourni. Indiquez les champs souhaités dans le prompt et validez le résultat dans votre application.

Responses

POST /v1/responses accepte 15 champs de création de premier niveau. Ils suivent le schéma Responses du fabricant, adapté à GLM-5.3 ; le comportement exact selon le service reste à vérifier.

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}'
ChampTypeObligatoireValeur par défaut et contraintes
modelstringOuiglm-5.3
inputstring or arrayOuiÉléments d’entrée natifs détaillés ci-dessous
instructionsstringNonConsignes système
streambooleanNonfalse
temperaturenumberNon0–1, deux décimales au maximum ; défaut 1
top_pnumberNon0.01–1, deux décimales au maximum ; défaut 0.95
max_output_tokensintegerNon1–131072 ; défaut 65536, raisonnement compris
stopstring arrayNonAucune limite de nombre déclarée dans ce protocole
toolsarrayNonFunction, namespace, custom ou web_search
tool_choicestringNonnone ou auto
reasoningobjectNoneffort : low, high, max ; défaut max
textobjectNonformat.type : text ou json_object
prompt_cache_keystringNonClé d’orientation du cache ; aucune longueur limite documentée
previous_response_idstringNonRéférence une réponse précédemment enregistrée
storebooleanNonfalse ; indique s’il faut enregistrer cette réponse

Les éléments d’entrée de type message exigent type: "message", un rôle (user, system, assistant, developer) et un contenu. Celui-ci peut être une chaîne, un bloc de texte ou un tableau de blocs de texte. Utilisez input_text ou output_text pour l’assistant avec un text de type chaîne. Les schémas génériques image/fichier ne donnent aucune capacité visuelle à ce modèle textuel.

Les éléments d’entrée d’appel de fonction exigent type: "function_call", name, call_id et arguments sous forme de chaîne JSON ; namespace est facultatif. Les résultats exigent type: "function_call_output", call_id et une chaîne output. Les éléments de raisonnement utilisent type: "reasoning" et un objet content: {type:"reasoning_text", text:"..."} unique. Préservez-le sans le convertir en tableau.

Les outils fonction exigent type: "function" et name, avec description et parameters facultatifs. Les outils namespace exigent type: "namespace" et name et peuvent contenir des tools fonction. Les outils custom exigent type: "custom" et name. Les outils de recherche web exigent type: "web_search". Ne recopiez pas dans ce format les champs obligatoires des fonctions Chat.

La réponse précédente référencée doit avoir été enregistrée. Enregistrer la réponse actuelle est un choix distinct ; previous_response_id n’impose pas store: true pour la réponse actuelle. La durée de conservation du fabricant est de sept jours. Un test réel a enregistré une réponse puis l’a continuée depuis son ID avec store: false pour la réponse actuelle ; cela ne prouve pas toutes les opérations sur les réponses enregistrées.

Opérations sur les réponses enregistrées

Quand store: true réussit, conservez l’ID de réponse renvoyé sans modification. Ces opérations authentifiées utilisent le compte qui l’a créée :

  • GET /v1/responses/{response_id} récupère la réponse enregistrée.
  • GET /v1/responses/{response_id}/input_items liste les éléments d’entrée. Champs de requête facultatifs : order (asc ou desc, défaut desc), limit (entier 1–100, défaut 20) et after (last_id de la page précédente).
  • DELETE /v1/responses/{response_id} supprime la réponse enregistrée.

Une requête de création ultérieure peut utiliser l’ID enregistré comme previous_response_id. L’utilisateur d’origine doit toujours avoir accès au modèle. La conservation dure au maximum sept jours ; une réponse expirée ou supprimée ne peut pas être continuée. Récupération, suppression et continuation préservent le rattachement au compte d’origine. Aucun endpoint d’annulation n’est documenté. Ces opérations sont couvertes par des tests locaux du contrat. Le test réel du 29 octobre a confirmé l’enregistrement et la continuation ; récupération et liste des éléments d’entrée ont renvoyé 404, et la suppression n’a pas été testée. Ne vous appuyez pas sur la récupération, la liste ou la suppression avant confirmation de leur disponibilité.

Compatibilité Messages

POST /v1/messages utilise une enveloppe compatible Anthropic. Ajoutez anthropic-version: 2023-06-01. Le fabricant montre directement model, messages, max_tokens et stream. Il ne publie pas de schéma GLM Messages complet et avertit des différences avec Claude. Les autres réglages sont des champs de référence de compatibilité, pas des capacités GLM vérifiées individuellement.

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}'
ChampStructure et validationPreuve
modelChaîne obligatoire glm-5.3Exemple GLM
messagesTableau user/assistant obligatoire non vide ; chaîne ou blocs texte/outils natifsExemple textuel GLM ; structures des blocs selon la référence de compatibilité
max_tokensEntier obligatoire 1–131072Exemple GLM et limite de sortie du modèle
streamBooléen ; défaut falseExemple GLM
systemChaîne ou tableau de blocs de texteRéférence de compatibilité
temperatureNombre 0–1Référence de compatibilité ; correspondance non vérifiée
top_pNombre 0.01–1Référence de compatibilité ; correspondance non vérifiée
top_kEntier positif ou nulRéférence de compatibilité ; correspondance non vérifiée
stop_sequencesTableau de chaînesRéférence de compatibilité
toolsOutils clients : name, input_schema, description facultativeRéférence de compatibilité
tool_choiceObjet de type auto, none, any ou tool ; un outil nommé exige nameRéférence de compatibilité
thinkingenabled avec budget_tokens, ou adaptive ; impossible de désactiver le raisonnementRéférence de compatibilité et règle GLM du raisonnement toujours actif
output_configObjet avec effort low, high ou maxNom de champ compatible ; correspondance non vérifiée
metadataObjet avec user_id facultatifRéférence de compatibilité
cache_controlMarqueur ephemeral, ttl facultatif 5m ou 1hRéférence de protocole uniquement ; TTL explicite GLM non vérifié

Le budget compatible du raisonnement activé est d’au moins 1024 et inférieur à max_tokens. Les blocs texte exigent text ; l’historique de raisonnement exige thinking et signature ; le raisonnement masqué exige data. Les blocs tool-use exigent id, name et input ; les blocs tool-result exigent tool_use_id. Aucun bloc image, audio ou vidéo n’est accepté. Les marqueurs de cache explicites ne prouvent ni accès au cache, ni durée de vie, ni tarif distinct. Le cache de contexte documenté du modèle est automatique.

Sortie, streaming et usage

Chat renvoie id, created, model, choices et usage, avec request_id et web_search facultatifs. Lisez choices[].message.content, reasoning_content et tool_calls. Une réponse d’appel d’outil peut ne contenir aucun texte de réponse. SSE envoie les deltas de raisonnement, de texte et d’arguments d’outils, puis [DONE]. Assemblez les fragments d’arguments par indice d’appel. Aucun champ stream_options ne fait partie de la requête GLM Chat officielle.

Responses renvoie l’union native output : messages, raisonnement et appels d’outils. SSE inclut response.created, response.in_progress, les événements d’éléments de sortie et de parties de contenu, les deltas texte/raisonnement/arguments de fonctions, la progression des recherches et les états finaux response.completed, response.incomplete ou response.failed. Aucun marqueur [DONE] n’est requis. Préservez les indices et les numéros de séquence.

Messages renvoie une enveloppe native de message avec blocs de contenu, stop_reason et usage. Ses événements incluent message_start, content_block_start/delta/stop, message_delta et message_stop. Préservez les signatures de raisonnement et les ID d’outils comme historique opaque.

FormatEntrée totaleEntrée en cacheSortie
Chatprompt_tokensprompt_tokens_details.cached_tokenscompletion_tokens
Responsesinput_tokensinput_tokens_details.cached_tokensoutput_tokens
Messagesinput_tokens plus cache_read_input_tokens et tout cache_creation_input_tokenscache_read_input_tokensoutput_tokens

Le raisonnement est une partie de la sortie, pas un supplément. L’entrée en cache Chat/Responses fait partie de l’entrée totale. Soustrayez les portions en cache signalées séparément avant d’appliquer le tarif d’entrée ordinaire. Les réponses publiques exposent les tokens utilisés, pas les montants facturés. Les tarifs actuels proviennent des paramètres de facturation en vigueur ; les requêtes échouées ne sont pas facturées.

Validation et erreurs

Types invalides, raisonnement désactivé, effort non pris en charge, budgets de sortie excessifs et entrées multimédias échouent à la validation. tool_stream de Chat exige stream. Les champs de premier niveau non pris en charge sont omis au lieu d’être transmis. Les identifiants sont obligatoires ; un solde insuffisant empêche une requête payante. Les erreurs utilisent l’enveloppe publique d’erreur (Messages utilise sa structure native). Ne considérez jamais un flux interrompu comme une réponse complète et ne renvoyez pas automatiquement une requête au résultat incertain.

Le Playground expose les mêmes champs admis pour le format sélectionné. Les valeurs facultatives vides sont omises ; false et zéro explicites sont préservés. Changer de format démarre une nouvelle conversation. L’estimation d’usage exige l’usage signalé et les tarifs actuels.