Claude Opus 5.5 ist auf SeedRouter verfügbar

Text

GLM-5.3 API-Referenz

View Markdown

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.

FeldTypErforderlichStandard und Einschränkungen
modelstringJaglm-5.3 (Default)
messagesarrayJaMindestens eine Nachricht; muss eine user- oder tool-Nachricht enthalten
do_samplebooleanNeintrue; false macht temperature und top_p wirkungslos
streambooleanNeinfalse
thinkingobjectNeintype: enabled; clear_thinking: true
reasoning_effortstringNeinlow, high, max; Standard max
temperaturenumberNein0–1 einschließlich; Standard 1
top_pnumberNein0.01–1 einschließlich; Standard 0.95
max_tokensintegerNein1–131072; kein veröffentlichter Chat-Standard
tool_streambooleanNeinfalse; true erfordert stream: true
toolsarrayNeinFunction, retrieval oder web_search; bis zu 128 Einträge
tool_choicestringNeinNur auto
stopstring arrayNeinBis zu vier Zeichenfolgen im offiziellen Schema; vier wurden in einer Live-Anfrage akzeptiert, ein Stopptreffer wurde jedoch nicht geprüft
response_formatobjectNeinErforderlicher type: text oder json_object; Standard text
request_idstringNein6–64 Zeichen; eindeutige Anfragekennung des Aufrufers
user_idstringNein6–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}'
FeldTypErforderlichStandard und Einschränkungen
modelstringJaglm-5.3
inputstring or arrayJaUnten aufgeführte native Eingabeelemente
instructionsstringNeinSystemanweisungen
streambooleanNeinfalse
temperaturenumberNein0–1, höchstens zwei Dezimalstellen; Standard 1
top_pnumberNein0.01–1, höchstens zwei Dezimalstellen; Standard 0.95
max_output_tokensintegerNein1–131072; Standard 65536, einschließlich Reasoning
stopstring arrayNeinIn diesem Protokoll keine Anzahlgrenze angegeben
toolsarrayNeinFunction, namespace, custom oder web_search
tool_choicestringNeinnone oder auto
reasoningobjectNeineffort: low, high, max; Standard max
textobjectNeinformat.type: text oder json_object
prompt_cache_keystringNeinSchlüssel für die Cache-Zuordnung; keine dokumentierte Längengrenze
previous_response_idstringNeinVerweist auf eine zuvor gespeicherte Antwort
storebooleanNeinfalse; 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_items listet Eingabeelemente auf. Optionale Abfragefelder: order (asc oder desc, Standard desc), limit (Ganzzahl 1–100, Standard 20) und after (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}'
FeldStruktur und ValidierungBeleg
modelErforderliche Zeichenfolge glm-5.3GLM-Beispiel
messagesErforderliches nichtleeres user/assistant-Array; Zeichenfolge oder native Text-/Tool-BlöckeGLM-Textbeispiel; Blockstrukturen nach Kompatibilitätsreferenz
max_tokensErforderliche Ganzzahl 1–131072GLM-Beispiel und Modellausgabelimit
streamBoolean; Standard falseGLM-Beispiel
systemZeichenfolge oder Textblock-ArrayKompatibilitätsreferenz
temperatureZahl 0–1Kompatibilitätsreferenz; Zuordnung ungeprüft
top_pZahl 0.01–1Kompatibilitätsreferenz; Zuordnung ungeprüft
top_kNichtnegative GanzzahlKompatibilitätsreferenz; Zuordnung ungeprüft
stop_sequencesZeichenfolgen-ArrayKompatibilitätsreferenz
toolsClient-Tools: name, input_schema, optional descriptionKompatibilitätsreferenz
tool_choiceObjekt mit type auto, none, any oder tool; benanntes Tool erfordert nameKompatibilitätsreferenz
thinkingenabled mit budget_tokens oder adaptive; Denken nicht deaktivierbarKompatibilitätsreferenz plus GLM-Regel für stets aktives Denken
output_configObjekt mit effort low, high oder maxKompatible Feldschreibweise; Zuordnung ungeprüft
metadataObjekt mit optionalem user_idKompatibilitätsreferenz
cache_controlEphemeral-Marker, optional ttl 5m oder 1hNur 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.

FormatGesamte EingabeGecachte EingabeAusgabe
Chatprompt_tokensprompt_tokens_details.cached_tokenscompletion_tokens
Responsesinput_tokensinput_tokens_details.cached_tokensoutput_tokens
Messagesinput_tokens plus cache_read_input_tokens und etwaige cache_creation_input_tokenscache_read_input_tokensoutput_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.