Text
GLM-5.3 API-Referenz
GLM-5.3 Anfragefelder, Reasoning, Tools, Streaming, Verbrauch und vollständige Beispiele für Chat, Responses und Messages.
GLM-5.3 akzeptiert Text und liefert Text oder Tool-Aufrufe. Es nutzt immer Reasoning, unterstützt die Aufwandstufen low, high und max und erlaubt bis zu 131.072 Ausgabe-Token. Verwenden Sie glm-5.3 für die Stufe Default. Die Standardgruppe ist glm; glm-5.3:glm wählt dieselbe Gruppe ausdrücklich aus. Weitere Gruppen nutzen eigene Modellsuffixe.
Basis-URL: https://api.seedrouter.ai. Authentifizieren Sie sich mit Authorization: Bearer $SEEDROUTER_API_KEY. Bewahren Sie Zugangsdaten auf Ihrem Server auf. Messages akzeptiert auch den kompatiblen Header x-api-key.
Diese Referenz folgt dem Z.ai Chat-Vertrag, dem Responses-Schema des Herstellers und seinem Messages-Kompatibilitätsleitfaden. Modellspezifische Grenzen stammen aus dem GLM-5.3 Leitfaden. Übereinstimmung mit der Dokumentation belegt nicht jedes Live-Verhalten. Prüfungen am 29. Oktober 2026 schlossen Text- und Streaming-Anfragen in allen drei Formaten, Chat-Funktionsaufrufe, JSON-Objektausgabe und das Fortsetzen gespeicherter Antworten ab. Cache-Treffer, explizite Cache-Lebensdauern und sämtliche Kompatibilitätseinstellungen wurden nicht nachgewiesen. Die nachfolgenden Messages-Referenzfelder werden von den durch den Hersteller dokumentierten GLM-Feldern unterschieden.
OpenAPI-Spezifikation · Markdown-Referenz · Modell und Playground · Preisleitfaden
Schnellstart
Jedes Beispiel sendet eine Chat-Completions-Anfrage. max_tokens: 2048 ist ein Beispielbudget, kein Standard. Reasoning und sichtbare Antwort teilen dieses Budget; prüfen Sie finish_reason, bevor Sie die Antwort als vollständig behandeln.
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 akzeptiert 16 Felder auf oberster Ebene. Felder erlauben kein null, sofern nicht ausdrücklich angegeben. Optionale Felder können entfallen; senden Sie nicht null anstelle des Weglassens.
| Feld | Typ | Erforderlich | Standard und Einschränkungen |
|---|---|---|---|
model | string | Ja | glm-5.3 (Default) |
messages | array | Ja | Mindestens eine Nachricht; muss eine user- oder tool-Nachricht enthalten |
do_sample | boolean | Nein | true; false macht temperature und top_p wirkungslos |
stream | boolean | Nein | false |
thinking | object | Nein | type: enabled; clear_thinking: true |
reasoning_effort | string | Nein | low, high, max; Standard max |
temperature | number | Nein | 0–1 einschließlich; Standard 1 |
top_p | number | Nein | 0.01–1 einschließlich; Standard 0.95 |
max_tokens | integer | Nein | 1–131072; kein veröffentlichter Chat-Standard |
tool_stream | boolean | Nein | false; true erfordert stream: true |
tools | array | Nein | Function, retrieval oder web_search; bis zu 128 Einträge |
tool_choice | string | Nein | Nur auto |
stop | string array | Nein | Bis zu vier Zeichenfolgen im offiziellen Schema; vier wurden in einer Live-Anfrage akzeptiert, ein Stopptreffer wurde jedoch nicht geprüft |
response_format | object | Nein | Erforderlicher type: text oder json_object; Standard text |
request_id | string | Nein | 6–64 Zeichen; eindeutige Anfragekennung des Aufrufers |
user_id | string | Nein | 6–128 Zeichen; personenbezogene Informationen vermeiden |
system- und user-Nachrichten erfordern content als Zeichenfolge. Eine assistant-Nachricht kann content als Zeichenfolge sowie reasoning_content und tool_calls enthalten. Eine tool-Nachricht erfordert content und tool_call_id. Bewahren Sie bei thinking.clear_thinking: false das bisherige Reasoning exakt auf, einschließlich der Reihenfolge von Assistentenaufrufen und Tool-Ergebnissen. Denken lässt sich nicht deaktivieren.
Ein Function-Tool nutzt {type:"function", function:{name, description, parameters}}. Der Name enthält 1–64 ASCII-Buchstaben, Ziffern, Unterstriche oder Bindestriche. Das maschinenlesbare Schema verlangt description und parameters; der Fließtext erwähnt das Weglassen bei parameterlosen Funktionen. Nutzen Sie die vollständige Form, bis dieser Widerspruch geklärt ist. parameters ist das JSON Schema Ihrer Funktion und wird nicht als Nachrichteninhalt interpretiert.
Ein Retrieval-Tool nutzt {type:"retrieval", retrieval:{knowledge_id, prompt_template?}}. Eine Wissens-ID gehört zum Konto, das die Anfrage bedient; die Deklaration dieses Tools erstellt keine Wissensdatenbank.
Ein Websuch-Tool nutzt {type:"web_search", web_search:{search_engine:"search_pro_jina"}}. Optionale Felder sind 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 und search_prompt. Die genauen Typen stehen in OpenAPI. Kontospezifische Such- und Retrieval-Verfügbarkeit muss live geprüft werden.
Der JSON-Objektmodus erzeugt JSON, erzwingt aber kein vorgegebenes JSON Schema. Nennen Sie die gewünschten Felder im Prompt und validieren Sie das Ergebnis in Ihrer Anwendung.
Responses
POST /v1/responses akzeptiert 15 Erstellungsfelder auf oberster Ebene. Grundlage ist das auf GLM-5.3 spezialisierte Responses-Schema des Herstellers; das genaue Verhalten verschiedener Dienste bleibt zu prüfen.
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}'| Feld | Typ | Erforderlich | Standard und Einschränkungen |
|---|---|---|---|
model | string | Ja | glm-5.3 |
input | string or array | Ja | Unten aufgeführte native Eingabeelemente |
instructions | string | Nein | Systemanweisungen |
stream | boolean | Nein | false |
temperature | number | Nein | 0–1, höchstens zwei Dezimalstellen; Standard 1 |
top_p | number | Nein | 0.01–1, höchstens zwei Dezimalstellen; Standard 0.95 |
max_output_tokens | integer | Nein | 1–131072; Standard 65536, einschließlich Reasoning |
stop | string array | Nein | In diesem Protokoll keine Anzahlgrenze angegeben |
tools | array | Nein | Function, namespace, custom oder web_search |
tool_choice | string | Nein | none oder auto |
reasoning | object | Nein | effort: low, high, max; Standard max |
text | object | Nein | format.type: text oder json_object |
prompt_cache_key | string | Nein | Schlüssel für die Cache-Zuordnung; keine dokumentierte Längengrenze |
previous_response_id | string | Nein | Verweist auf eine zuvor gespeicherte Antwort |
store | boolean | Nein | false; ob diese Antwort gespeichert wird |
Nachrichten-Eingabeelemente erfordern type: "message", eine Rolle (user, system, assistant, developer) und Inhalt. Der Inhalt kann eine Zeichenfolge, ein Textblock oder ein Array aus Textblöcken sein. Verwenden Sie input_text oder beim Assistenten output_text mit text als Zeichenfolge. Allgemeine Bild-/Dateischemata verleihen diesem reinen Textmodell keine Bildverarbeitung.
Funktionsaufruf-Eingabeelemente erfordern type: "function_call", name, call_id und arguments als JSON-Zeichenfolge; namespace ist optional. Ergebnisse erfordern type: "function_call_output", call_id und output als Zeichenfolge. Reasoning-Elemente nutzen type: "reasoning" und ein einzelnes Objekt content: {type:"reasoning_text", text:"..."}. Bewahren Sie es auf, ohne es in ein Array umzuwandeln.
Function-Tools erfordern type: "function" und name; description und parameters sind optional. Namespace-Tools erfordern type: "namespace" und name und können Function-tools enthalten. Custom-Tools erfordern type: "custom" und name. Websuch-Tools erfordern type: "web_search". Übernehmen Sie die Pflichtfelder von Chat-Funktionen nicht in dieses Format.
Die referenzierte vorherige Antwort muss gespeichert worden sein. Ob die aktuelle Antwort gespeichert wird, ist eine separate Entscheidung; previous_response_id erzwingt kein aktuelles store: true. Der Hersteller nennt eine Aufbewahrungsfrist von sieben Tagen. Eine Live-Prüfung speicherte erfolgreich eine Antwort und setzte sie mit ihrer ID bei aktuellem store: false fort; dies belegt nicht sämtliche Vorgänge für gespeicherte Antworten.
Vorgänge für gespeicherte Antworten
Wenn store: true erfolgreich ist, bewahren Sie die zurückgegebene Antwort-ID unverändert auf. Diese authentifizierten Vorgänge nutzen dasselbe Konto wie bei der Erstellung:
GET /v1/responses/{response_id}ruft die gespeicherte Antwort ab.GET /v1/responses/{response_id}/input_itemslistet Eingabeelemente auf. Optionale Abfragefelder:order(ascoderdesc, Standarddesc),limit(Ganzzahl 1–100, Standard 20) undafter(last_id der vorherigen Seite).DELETE /v1/responses/{response_id}löscht die gespeicherte Antwort.
Eine spätere Erstellungsanfrage kann die gespeicherte ID als previous_response_id nutzen. Der ursprüngliche Benutzer muss aktuell Zugriff auf das Modell haben. Die Aufbewahrung beträgt höchstens sieben Tage; abgelaufene oder gelöschte Antworten lassen sich nicht fortsetzen. Abruf, Löschung und Fortsetzung erhalten die ursprüngliche Kontobindung. Ein Abbruch-Endpunkt ist nicht dokumentiert. Lokale Vertragstests decken diese Vorgänge ab. Die Live-Prüfung vom 29. Oktober bestätigte Speichern und Fortsetzen; Abruf und Auflistung der Eingabeelemente lieferten 404, Löschen wurde nicht getestet. Verlassen Sie sich erst auf Abruf, Auflistung oder Löschung, wenn deren Verfügbarkeit bestätigt ist.
Messages-Kompatibilität
POST /v1/messages nutzt eine Anthropic-kompatible Hülle. Fügen Sie anthropic-version: 2023-06-01 hinzu. Der Hersteller zeigt model, messages, max_tokens und stream direkt. Er veröffentlicht kein vollständiges GLM-Messages-Schema und weist auf Unterschiede zu Claude hin. Die übrigen Einstellungen sind Felder der Kompatibilitätsreferenz, keine einzeln verifizierten GLM-Fähigkeiten.
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}'| Feld | Struktur und Validierung | Beleg |
|---|---|---|
model | Erforderliche Zeichenfolge glm-5.3 | GLM-Beispiel |
messages | Erforderliches nichtleeres user/assistant-Array; Zeichenfolge oder native Text-/Tool-Blöcke | GLM-Textbeispiel; Blockstrukturen nach Kompatibilitätsreferenz |
max_tokens | Erforderliche Ganzzahl 1–131072 | GLM-Beispiel und Modellausgabelimit |
stream | Boolean; Standard false | GLM-Beispiel |
system | Zeichenfolge oder Textblock-Array | Kompatibilitätsreferenz |
temperature | Zahl 0–1 | Kompatibilitätsreferenz; Zuordnung ungeprüft |
top_p | Zahl 0.01–1 | Kompatibilitätsreferenz; Zuordnung ungeprüft |
top_k | Nichtnegative Ganzzahl | Kompatibilitätsreferenz; Zuordnung ungeprüft |
stop_sequences | Zeichenfolgen-Array | Kompatibilitätsreferenz |
tools | Client-Tools: name, input_schema, optional description | Kompatibilitätsreferenz |
tool_choice | Objekt mit type auto, none, any oder tool; benanntes Tool erfordert name | Kompatibilitätsreferenz |
thinking | enabled mit budget_tokens oder adaptive; Denken nicht deaktivierbar | Kompatibilitätsreferenz plus GLM-Regel für stets aktives Denken |
output_config | Objekt mit effort low, high oder max | Kompatible Feldschreibweise; Zuordnung ungeprüft |
metadata | Objekt mit optionalem user_id | Kompatibilitätsreferenz |
cache_control | Ephemeral-Marker, optional ttl 5m oder 1h | Nur Protokollreferenz; explizites GLM-TTL-Verhalten ungeprüft |
Das kompatible Budget für aktiviertes Denken beträgt mindestens 1024 und weniger als max_tokens. Textblöcke erfordern text; der Denkverlauf erfordert thinking und signature; redigiertes Denken erfordert data. Tool-use-Blöcke erfordern id, name und input; Tool-result-Blöcke erfordern tool_use_id. Bild-, Audio- und Videoblöcke werden nicht akzeptiert. Explizite Cache-Marker belegen weder einen Cache-Treffer noch eine Lebensdauer oder einen separaten Tarif. Der dokumentierte Kontext-Cache des Modells arbeitet automatisch.
Ausgabe, Streaming und Verbrauch
Chat liefert id, created, model, choices und usage, optional request_id und web_search. Lesen Sie choices[].message.content, reasoning_content und tool_calls. Eine Tool-Aufrufantwort kann ohne Antworttext sein. SSE sendet Reasoning-, Text- und Tool-Argument-Deltas, dann [DONE]. Verbinden Sie Argumentfragmente nach Aufrufindex. Die offizielle GLM-Chat-Anfrage enthält kein Feld stream_options.
Responses liefert die native output-Union: Nachrichten, Reasoning und Tool-Aufrufe. SSE enthält response.created, response.in_progress, Ereignisse für Ausgabeelemente und Inhaltsteile, Text-/Reasoning-/Funktionsargument-Deltas, Suchfortschritt sowie die Endereignisse response.completed, response.incomplete oder response.failed. Ein [DONE]-Marker ist nicht erforderlich. Erhalten Sie Indizes und Sequenznummern.
Messages liefert eine native Nachrichtenhülle mit Inhaltsblöcken, stop_reason und usage. Ereignisnamen umfassen message_start, content_block_start/delta/stop, message_delta und message_stop. Bewahren Sie Denksignaturen und Tool-IDs als unveränderten, opaken Verlauf auf.
| Format | Gesamte Eingabe | Gecachte Eingabe | Ausgabe |
|---|---|---|---|
| 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 und etwaige cache_creation_input_tokens | cache_read_input_tokens | output_tokens |
Reasoning ist Teil der Ausgabe, keine Zusatzgebühr. Gecachte Chat-/Responses-Eingabe ist Teil der gesamten Eingabe. Ziehen Sie separat gemeldete Cache-Anteile ab, bevor Sie den gewöhnlichen Eingabetarif anwenden. Öffentliche Antworten zeigen Tokenverbrauch, keine Geldbeträge. Aktuelle Preise stammen aus den laufenden Abrechnungseinstellungen; fehlgeschlagene Anfragen werden nicht berechnet.
Validierung und Fehler
Ungültige Typen, deaktiviertes Denken, nicht unterstützter Aufwand, zu große Ausgabebudgets und Medieneingaben scheitern an der Validierung. tool_stream von Chat erfordert stream. Nicht unterstützte Felder auf oberster Ebene werden weggelassen statt weitergegeben. Zugangsdaten sind erforderlich; unzureichendes Guthaben verhindert eine kostenpflichtige Anfrage. Fehler nutzen die öffentliche Fehlerhülle (Messages nutzt seine native Fehlerstruktur). Behandeln Sie einen unterbrochenen Stream niemals als vollständige Antwort und senden Sie eine Anfrage mit ungewissem Ergebnis nicht automatisch erneut.
Der Playground zeigt dieselben zugelassenen Felder für das gewählte Format. Leere optionale Werte entfallen; explizites false und die Zahl Null bleiben erhalten. Ein Formatwechsel startet ein neues Gespräch. Die Verbrauchsschätzung benötigt sowohl gemeldeten Verbrauch als auch aktuelle Tarife.
