Text
Riferimento API GLM-5.3
Campi delle richieste GLM-5.3, ragionamento, strumenti, streaming, utilizzo ed esempi completi Chat, Responses e Messages.
GLM-5.3 accetta testo e restituisce testo o chiamate agli strumenti. Ragiona sempre, supporta gli sforzi low, high e max e consente fino a 131.072 token di output. Usa glm-5.3 per il livello Default. Il gruppo predefinito è glm; glm-5.3:glm resta una selezione esplicita dello stesso gruppo. I gruppi aggiuntivi usano il proprio suffisso del modello.
URL di base: https://api.seedrouter.ai. Autenticati con Authorization: Bearer $SEEDROUTER_API_KEY. Conserva le credenziali sul server. Messages accetta anche l’header compatibile x-api-key.
Questo riferimento segue il contratto Chat di Z.ai, lo schema Responses del produttore e la sua guida alla compatibilità Messages. I limiti specifici provengono dalla guida GLM-5.3. L’allineamento della documentazione non dimostra ogni comportamento effettivo. Le verifiche del 29 ottobre 2026 hanno completato richieste testuali e streaming nei tre formati, chiamate di funzione Chat, output come oggetto JSON e continuazione di risposte salvate. Non sono stati accertati riscontri nella cache, durate esplicite della cache e tutti i controlli di compatibilità. I campi di riferimento Messages riportati sotto sono distinti dai campi GLM documentati dal produttore.
Specifica OpenAPI · Riferimento Markdown · Modello e Playground · Guida ai prezzi
Avvio rapido
Ogni esempio invia una richiesta Chat Completions. max_tokens: 2048 è un budget di esempio, non il valore predefinito. Ragionamento e risposta visibile condividono quel budget; esamina finish_reason prima di considerare completa la risposta.
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 accetta 16 campi di primo livello. I campi non ammettono null se non indicato esplicitamente. I campi facoltativi possono essere omessi; non inviare null al posto dell’omissione.
| Campo | Tipo | Obbligatorio | Valore predefinito e vincoli |
|---|---|---|---|
model | stringa | Sì | glm-5.3 (Default) |
messages | array | Sì | Almeno un messaggio; deve contenere un messaggio utente o strumento |
do_sample | booleano | No | true; false rende inefficaci temperature e top_p |
stream | booleano | No | false |
thinking | oggetto | No | type: enabled; clear_thinking: true |
reasoning_effort | stringa | No | low, high, max; predefinito max |
temperature | numero | No | 0–1 inclusi; predefinito 1 |
top_p | numero | No | 0.01–1 inclusi; predefinito 0.95 |
max_tokens | intero | No | 1–131072; nessun valore predefinito Chat pubblicato |
tool_stream | booleano | No | false; true richiede stream: true |
tools | array | No | Function, retrieval o web_search; fino a 128 elementi |
tool_choice | stringa | No | Solo auto |
stop | array di stringhe | No | Fino a quattro stringhe nello schema ufficiale; quattro sono state accettate in una richiesta reale, ma la corrispondenza di arresto non è stata verificata |
response_format | oggetto | No | type obbligatorio: text o json_object; predefinito text |
request_id | stringa | No | 6–64 caratteri; identificatore univoco della richiesta del chiamante |
user_id | stringa | No | 6–128 caratteri; evita informazioni personali |
I messaggi system e user richiedono content come stringa. Un messaggio assistant può contenere content come stringa, reasoning_content e tool_calls. Un messaggio tool richiede content e tool_call_id. Conserva esattamente il ragionamento storico usando thinking.clear_thinking: false, incluso l’ordine delle chiamate dell’assistente e dei risultati degli strumenti. Il ragionamento non può essere disattivato.
Uno strumento funzione usa {type:"function", function:{name, description, parameters}}. Il nome contiene 1–64 lettere ASCII, cifre, trattini bassi o trattini. Lo schema macchina richiede description e parameters; il testo menziona l’omissione per funzioni senza parametri. Usa la forma completa finché il conflitto non sarà risolto. parameters è il JSON Schema della tua funzione; non viene interpretato come contenuto del messaggio.
Uno strumento di recupero usa {type:"retrieval", retrieval:{knowledge_id, prompt_template?}}. Un ID di conoscenza appartiene all’account che serve la richiesta; dichiarare questo strumento non crea una base di conoscenza.
Uno strumento di ricerca web usa {type:"web_search", web_search:{search_engine:"search_pro_jina"}}. I campi facoltativi includono 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 e search_prompt. Consulta OpenAPI per i tipi esatti. La disponibilità di ricerca e recupero specifica dell’account richiede verifica reale.
La modalità oggetto JSON produce JSON, senza imporre un JSON Schema fornito. Includi i campi desiderati nel prompt e convalida il risultato nella tua applicazione.
Responses
POST /v1/responses accetta 15 campi di primo livello per la creazione. Segue lo schema Responses del produttore, specializzato per GLM-5.3; il comportamento esatto nei diversi servizi resta da verificare.
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}'| Campo | Tipo | Obbligatorio | Valore predefinito e vincoli |
|---|---|---|---|
model | stringa | Sì | glm-5.3 |
input | stringa o array | Sì | Elementi di input nativi elencati sotto |
instructions | stringa | No | Istruzioni di sistema |
stream | booleano | No | false |
temperature | numero | No | 0–1, massimo due cifre decimali; predefinito 1 |
top_p | numero | No | 0.01–1, massimo due cifre decimali; predefinito 0.95 |
max_output_tokens | intero | No | 1–131072; predefinito 65536, ragionamento incluso |
stop | array di stringhe | No | Nessun limite di quantità dichiarato in questo protocollo |
tools | array | No | Function, namespace, custom o web_search |
tool_choice | stringa | No | none o auto |
reasoning | oggetto | No | effort: low, high, max; predefinito max |
text | oggetto | No | format.type: text o json_object |
prompt_cache_key | stringa | No | Chiave di instradamento della cache; nessun limite di lunghezza documentato |
previous_response_id | stringa | No | Riferimento a una risposta precedentemente salvata |
store | booleano | No | false; indica se salvare questa risposta |
Gli elementi messaggio di input richiedono type: "message", un ruolo (user, system, assistant, developer) e contenuto. Il contenuto può essere una stringa, un blocco di testo o un array di blocchi di testo. Usa input_text o output_text dell’assistente con una stringa text. Gli schemi generici per immagini/file non conferiscono capacità visive a questo modello solo testuale.
Gli elementi di input delle chiamate di funzione richiedono type: "function_call", name, call_id e arguments come stringa JSON; namespace è facoltativo. I risultati richiedono type: "function_call_output", call_id e output come stringa. Gli elementi di ragionamento usano type: "reasoning" e un singolo oggetto content: {type:"reasoning_text", text:"..."}. Conservalo senza convertirlo in array.
Gli strumenti funzione richiedono type: "function" e name, con description e parameters facoltativi. Gli strumenti namespace richiedono type: "namespace" e name e possono contenere tools di funzione. Gli strumenti personalizzati richiedono type: "custom" e name. Gli strumenti di ricerca web richiedono type: "web_search". Non copiare in questo formato i campi obbligatori delle funzioni Chat.
La risposta precedente referenziata deve essere stata salvata. Salvare la risposta attuale è una scelta separata; previous_response_id non impone store: true per quella attuale. Il periodo di conservazione del produttore è di sette giorni. Una verifica reale ha salvato una risposta e proseguito dal suo ID con store: false attuale; questo non dimostra ogni operazione sulle risposte salvate.
Operazioni sulle risposte salvate
Quando store: true riesce, conserva invariato l’ID restituito. Queste operazioni autenticate usano lo stesso account che l’ha creato:
GET /v1/responses/{response_id}recupera la risposta salvata.GET /v1/responses/{response_id}/input_itemselenca gli elementi di input. Campi di query facoltativi:order(ascodesc, predefinitodesc),limit(intero 1–100, predefinito 20) eafter(last_id dell’ultima pagina).DELETE /v1/responses/{response_id}elimina la risposta salvata.
Una richiesta di creazione successiva può usare l’ID salvato come previous_response_id. L’accesso richiede l’accesso attuale al modello dell’utente originale. La conservazione è di massimo sette giorni; le risposte scadute o eliminate non possono essere continuate. Recupero, eliminazione e continuazione mantengono il vincolo all’account originale. Non è documentato un endpoint di annullamento. Queste operazioni sono coperte da test di contratto locali. La verifica reale del 29 ottobre ha confermato salvataggio e continuazione; recupero ed elenco degli elementi di input hanno restituito 404 e l’eliminazione non è stata testata. Non fare affidamento su recupero, elenco o eliminazione finché la disponibilità non sarà confermata.
Compatibilità Messages
POST /v1/messages usa un involucro compatibile con Anthropic. Includi anthropic-version: 2023-06-01. Il produttore dimostra direttamente model, messages, max_tokens e stream. Non pubblica uno schema GLM Messages completo e segnala differenze rispetto a Claude. Gli altri controlli sono campi del riferimento di compatibilità, non capacità GLM verificate singolarmente.
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}'| Campo | Struttura e convalida | Evidenza |
|---|---|---|
model | Stringa obbligatoria glm-5.3 | Esempio GLM |
messages | Array user/assistant obbligatorio non vuoto; stringa o blocchi nativi di testo/strumenti | Esempio testuale GLM; le strutture dei blocchi seguono il riferimento di compatibilità |
max_tokens | Intero obbligatorio 1–131072 | Esempio GLM e limite di output del modello |
stream | Booleano; predefinito false | Esempio GLM |
system | Stringa o array di blocchi di testo | Riferimento di compatibilità |
temperature | Numero 0–1 | Riferimento di compatibilità; mappatura non verificata |
top_p | Numero 0.01–1 | Riferimento di compatibilità; mappatura non verificata |
top_k | Intero non negativo | Riferimento di compatibilità; mappatura non verificata |
stop_sequences | Array di stringhe | Riferimento di compatibilità |
tools | Strumenti client: name, input_schema, description facoltativa | Riferimento di compatibilità |
tool_choice | Oggetto type auto, none, any o tool; lo strumento nominato richiede name | Riferimento di compatibilità |
thinking | enabled con budget_tokens, oppure adaptive; non può disattivare il ragionamento | Riferimento di compatibilità e regola GLM del ragionamento sempre attivo |
output_config | Oggetto con effort low, high o max | Nome del campo compatibile; mappatura non verificata |
metadata | Oggetto con user_id facoltativo | Riferimento di compatibilità |
cache_control | Marcatore ephemeral, ttl facoltativo 5m o 1h | Solo riferimento di protocollo; comportamento TTL esplicito GLM non verificato |
Il budget compatibile del ragionamento enabled è almeno 1024 e inferiore a max_tokens. I blocchi di testo richiedono text; la cronologia di ragionamento richiede thinking e signature; il ragionamento oscurato richiede data. I blocchi di uso degli strumenti richiedono id, name e input; quelli dei risultati richiedono tool_use_id. Nessun blocco di immagini, audio o video è accettato. I marcatori espliciti della cache non dimostrano un riscontro, una durata o una tariffa separata. La cache del contesto documentata del modello è automatica.
Output, streaming e utilizzo
Chat restituisce id, created, model, choices e usage, con request_id e web_search facoltativi. Leggi choices[].message.content, reasoning_content e tool_calls. Una risposta con chiamata a strumenti può non contenere testo di risposta. SSE invia incrementi di ragionamento, testo e argomenti degli strumenti, poi [DONE]. Unisci i frammenti di argomenti per indice di chiamata. Nessun campo stream_options fa parte della richiesta ufficiale GLM Chat.
Responses restituisce l’unione nativa output: messaggi, ragionamento e chiamate agli strumenti. SSE include response.created, response.in_progress, eventi degli elementi di output e delle parti di contenuto, incrementi di testo/ragionamento/argomenti delle funzioni, avanzamento della ricerca e gli eventi finali response.completed, response.incomplete o response.failed. Non richiede un marcatore [DONE]. Conserva indici e numeri di sequenza.
Messages restituisce un involucro messaggio nativo con blocchi di contenuto, stop_reason e usage. I nomi degli eventi includono message_start, content_block_start/delta/stop, message_delta e message_stop. Conserva le firme di ragionamento e gli ID degli strumenti come cronologia opaca.
| Formato | Input totale | Input in cache | Output |
|---|---|---|---|
| Chat | prompt_tokens | prompt_tokens_details.cached_tokens | completion_tokens |
| Responses | input_tokens | input_tokens_details.cached_tokens | output_tokens |
| Messages | input_tokens più cache_read_input_tokens ed eventuali cache_creation_input_tokens | cache_read_input_tokens | output_tokens |
Il ragionamento è un sottoinsieme dell’output, non un addebito aggiuntivo. L’input in cache Chat/Responses è un sottoinsieme dell’input totale. Sottrai le porzioni in cache segnalate separatamente prima di applicare la tariffa dell’input ordinario. Le risposte pubbliche espongono l’utilizzo dei token, non gli importi monetari. I prezzi attuali provengono dalle impostazioni di fatturazione aggiornate; le richieste non riuscite non vengono addebitate.
Convalida ed errori
Tipi non validi, ragionamento disattivato, sforzo non supportato, budget di output eccessivi e input multimediali non superano la convalida. tool_stream di Chat richiede stream. I campi di primo livello non supportati vengono omessi anziché inoltrati. Le credenziali sono obbligatorie; un saldo insufficiente impedisce una richiesta a pagamento. Gli errori usano l’involucro pubblico degli errori (Messages usa la propria struttura nativa). Non considerare mai completo uno stream interrotto e non reinviare automaticamente una richiesta dal risultato incerto.
Il Playground espone gli stessi campi ammessi per il formato selezionato. I valori facoltativi vuoti vengono omessi; false e zero espliciti vengono conservati. Cambiare formato avvia una nuova conversazione. La stima di utilizzo richiede sia l’utilizzo segnalato sia le tariffe attuali.
