Text
Référence API GLM-5.3
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.
| Champ | Type | Obligatoire | Valeur par défaut et contraintes |
|---|---|---|---|
model | string | Oui | glm-5.3 (Default) |
messages | array | Oui | Au moins un message ; doit contenir un message user ou tool |
do_sample | boolean | Non | true ; false rend temperature et top_p sans effet |
stream | boolean | Non | false |
thinking | object | Non | type: enabled ; clear_thinking: true |
reasoning_effort | string | Non | low, high, max ; défaut max |
temperature | number | Non | 0–1 inclus ; défaut 1 |
top_p | number | Non | 0.01–1 inclus ; défaut 0.95 |
max_tokens | integer | Non | 1–131072 ; aucun défaut Chat publié |
tool_stream | boolean | Non | false ; true exige stream: true |
tools | array | Non | Function, retrieval ou web_search ; jusqu’à 128 entrées |
tool_choice | string | Non | auto uniquement |
stop | string array | Non | Jusqu’à 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_format | object | Non | type requis : text ou json_object ; défaut text |
request_id | string | Non | 6–64 caractères ; identifiant unique de requête de l’appelant |
user_id | string | Non | 6–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}'| Champ | Type | Obligatoire | Valeur par défaut et contraintes |
|---|---|---|---|
model | string | Oui | glm-5.3 |
input | string or array | Oui | Éléments d’entrée natifs détaillés ci-dessous |
instructions | string | Non | Consignes système |
stream | boolean | Non | false |
temperature | number | Non | 0–1, deux décimales au maximum ; défaut 1 |
top_p | number | Non | 0.01–1, deux décimales au maximum ; défaut 0.95 |
max_output_tokens | integer | Non | 1–131072 ; défaut 65536, raisonnement compris |
stop | string array | Non | Aucune limite de nombre déclarée dans ce protocole |
tools | array | Non | Function, namespace, custom ou web_search |
tool_choice | string | Non | none ou auto |
reasoning | object | Non | effort : low, high, max ; défaut max |
text | object | Non | format.type : text ou json_object |
prompt_cache_key | string | Non | Clé d’orientation du cache ; aucune longueur limite documentée |
previous_response_id | string | Non | Référence une réponse précédemment enregistrée |
store | boolean | Non | false ; 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_itemsliste les éléments d’entrée. Champs de requête facultatifs :order(ascoudesc, défautdesc),limit(entier 1–100, défaut 20) etafter(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}'| Champ | Structure et validation | Preuve |
|---|---|---|
model | Chaîne obligatoire glm-5.3 | Exemple GLM |
messages | Tableau user/assistant obligatoire non vide ; chaîne ou blocs texte/outils natifs | Exemple textuel GLM ; structures des blocs selon la référence de compatibilité |
max_tokens | Entier obligatoire 1–131072 | Exemple GLM et limite de sortie du modèle |
stream | Booléen ; défaut false | Exemple GLM |
system | Chaîne ou tableau de blocs de texte | Référence de compatibilité |
temperature | Nombre 0–1 | Référence de compatibilité ; correspondance non vérifiée |
top_p | Nombre 0.01–1 | Référence de compatibilité ; correspondance non vérifiée |
top_k | Entier positif ou nul | Référence de compatibilité ; correspondance non vérifiée |
stop_sequences | Tableau de chaînes | Référence de compatibilité |
tools | Outils clients : name, input_schema, description facultative | Référence de compatibilité |
tool_choice | Objet de type auto, none, any ou tool ; un outil nommé exige name | Référence de compatibilité |
thinking | enabled avec budget_tokens, ou adaptive ; impossible de désactiver le raisonnement | Référence de compatibilité et règle GLM du raisonnement toujours actif |
output_config | Objet avec effort low, high ou max | Nom de champ compatible ; correspondance non vérifiée |
metadata | Objet avec user_id facultatif | Référence de compatibilité |
cache_control | Marqueur ephemeral, ttl facultatif 5m ou 1h | Ré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.
| Format | Entrée totale | Entrée en cache | Sortie |
|---|---|---|---|
| Chat | prompt_tokens | prompt_tokens_details.cached_tokens | completion_tokens |
| Responses | input_tokens | input_tokens_details.cached_tokens | output_tokens |
| Messages | input_tokens plus cache_read_input_tokens et tout cache_creation_input_tokens | cache_read_input_tokens | output_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.
