Text
GLM-5.3 API リファレンス
GLM-5.3 のリクエスト項目、推論、ツール、ストリーミング、使用量を解説。Chat、Responses、Messages の完全な例を掲載しています。
GLM-5.3 はテキストを受け取り、テキストまたはツール呼び出しを返します。常に推論を行い、推論強度は low、high、max に対応し、最大出力は 131,072 トークンです。Default には glm-5.3 を使います。デフォルトのグループは glm で、glm-5.3:glm も同じグループの明示的な指定として使えます。追加グループにはそれぞれのモデル接尾辞を使います。
ベース URL は https://api.seedrouter.ai です。Authorization: Bearer $SEEDROUTER_API_KEY で認証します。認証情報はサーバー側に保管してください。Messages では互換の x-api-key ヘッダーも使えます。
本リファレンスは Z.ai の Chat 仕様、メーカーの Responses スキーマ、Messages 互換ガイドに準拠しています。モデル固有の制限は GLM-5.3 ガイドに基づきます。ドキュメントとの一致は、すべての実動作を確認したことを意味しません。 2026 年 10 月 29 日の検証では、3 形式すべてでテキストとストリーミングのリクエストが完了し、Chat の関数呼び出し、JSON オブジェクト出力、保存済みレスポンスからの会話継続も確認しました。キャッシュヒット、明示的なキャッシュ有効期間、互換制御の全項目は確認できていません。以下の Messages の参照項目は、メーカーが GLM 向けに文書化した項目と区別しています。
OpenAPI 仕様 · Markdown リファレンス · モデルと Playground · 料金ガイド
クイックスタート
各例は Chat Completions リクエストを 1 回送信します。max_tokens: 2048 は例として設定した上限で、デフォルト値ではありません。推論と表示される回答はこの上限を共有します。回答を完了済みと判断する前に finish_reason を確認してください。
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 はトップレベルの 16 項目を受け付けます。明記されていない限り null は許可されません。任意項目は省略でき、省略の代わりに null を送らないでください。
| 項目 | 型 | 必須 | デフォルト値と制約 |
|---|---|---|---|
model | 文字列 | はい | glm-5.3 (Default) |
messages | 配列 | はい | 1 件以上。user または tool メッセージが必要 |
do_sample | 真偽値 | いいえ | true。false の場合 temperature と top_p は無効 |
stream | 真偽値 | いいえ | false |
thinking | オブジェクト | いいえ | type: enabled; clear_thinking: true |
reasoning_effort | 文字列 | いいえ | low、high、max。デフォルトは max |
temperature | 数値 | いいえ | 0–1(両端を含む)。デフォルトは 1 |
top_p | 数値 | いいえ | 0.01–1(両端を含む)。デフォルトは 0.95 |
max_tokens | 整数 | いいえ | 1–131072。Chat のデフォルト値は未公表 |
tool_stream | 真偽値 | いいえ | false。true には stream: true が必要 |
tools | 配列 | いいえ | Function、retrieval、web_search。最大 128 件 |
tool_choice | 文字列 | いいえ | auto のみ |
stop | 文字列の配列 | いいえ | 公式スキーマでは最大 4 文字列。実リクエストで 4 件の受け付けを確認しましたが、停止文字列との一致は未検証 |
response_format | オブジェクト | いいえ | type は必須で text または json_object。デフォルトは text |
request_id | 文字列 | いいえ | 6–64 文字。呼び出し元の一意のリクエスト識別子 |
user_id | 文字列 | いいえ | 6–128 文字。個人情報は含めないでください |
system と user メッセージには文字列の content が必要です。assistant メッセージには文字列の content、reasoning_content、tool_calls を含められます。tool メッセージには content と tool_call_id が必要です。thinking.clear_thinking: false を使う場合は、assistant の呼び出しとツール結果の順序を含め、過去の推論をそのまま保持してください。推論は無効にできません。
関数ツールは {type:"function", function:{name, description, parameters}} 形式です。名前には ASCII 英字、数字、アンダースコア、ハイフンを 1–64 文字使えます。機械可読スキーマでは description と parameters が必須ですが、説明文では引数のない関数で省略できるとされています。この不一致が解消されるまでは完全な形式を使ってください。parameters は関数の JSON Schema で、メッセージ内容としては解釈されません。
検索ツールは {type:"retrieval", retrieval:{knowledge_id, prompt_template?}} 形式です。ナレッジ ID はリクエストを処理するアカウントに属します。このツールの宣言によってナレッジベースが作成されるわけではありません。
ウェブ検索ツールは {type:"web_search", web_search:{search_engine:"search_pro_jina"}} 形式です。任意項目は 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、search_prompt です。正確な型は OpenAPI を参照してください。アカウントごとのウェブ検索とナレッジ検索の利用可否は実環境での検証が必要です。
JSON オブジェクトモードは JSON を生成しますが、指定した JSON Schema への準拠を強制するものではありません。必要な項目をプロンプトに含め、アプリケーション側で結果を検証してください。
Responses
POST /v1/responses は作成用のトップレベル 15 項目を受け付けます。メーカーの Responses スキーマを GLM-5.3 向けに適用したものです。各サービスでの正確な動作は検証が必要です。
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}'| 項目 | 型 | 必須 | デフォルト値と制約 |
|---|---|---|---|
model | 文字列 | はい | glm-5.3 |
input | 文字列または配列 | はい | 以下のネイティブ入力項目 |
instructions | 文字列 | いいえ | システム指示 |
stream | 真偽値 | いいえ | false |
temperature | 数値 | いいえ | 0–1、小数点以下 2 桁まで。デフォルトは 1 |
top_p | 数値 | いいえ | 0.01–1、小数点以下 2 桁まで。デフォルトは 0.95 |
max_output_tokens | 整数 | いいえ | 1–131072。デフォルトは 65536(推論を含む) |
stop | 文字列の配列 | いいえ | このプロトコルに件数上限の記載なし |
tools | 配列 | いいえ | Function、namespace、custom、web_search |
tool_choice | 文字列 | いいえ | none または auto |
reasoning | オブジェクト | いいえ | effort: low、high、max。デフォルトは max |
text | オブジェクト | いいえ | format.type: text または json_object |
prompt_cache_key | 文字列 | いいえ | キャッシュを識別するキー。長さ上限の記載なし |
previous_response_id | 文字列 | いいえ | 過去に保存したレスポンスを参照 |
store | 真偽値 | いいえ | false。このレスポンスを保存するかどうか |
メッセージ入力項目には type: "message"、ロール(user、system、assistant、developer)、内容が必要です。内容は文字列、1 つのテキストブロック、またはテキストブロックの配列です。input_text または assistant の output_text に文字列の text を指定します。汎用の画像・ファイル用スキーマがあっても、テキスト専用の本モデルで画像認識ができるわけではありません。
関数呼び出しの入力項目には type: "function_call"、name、call_id、JSON 文字列の arguments が必要で、namespace は任意です。結果には type: "function_call_output"、call_id、文字列の output が必要です。推論項目は type: "reasoning" と、単一の content: {type:"reasoning_text", text:"..."} オブジェクトを使います。配列に変換せず保持してください。
関数ツールには type: "function" と name が必要で、description と parameters は任意です。名前空間ツールには type: "namespace" と name が必要で、関数の tools を含められます。カスタムツールには type: "custom" と name、ウェブ検索ツールには type: "web_search" が必要です。Chat で必須の関数項目を、この形式にもそのまま適用しないでください。
参照する過去のレスポンスは保存済みである必要があります。現在のレスポンスを保存するかどうかは別の指定です。previous_response_id によって現在の store: true が強制されることはありません。メーカーの保持期間は 7 日です。実環境でレスポンスの保存に成功し、現在の store: false のまま、その ID から会話を継続できました。ただし、保存済みレスポンスの全操作を確認したわけではありません。
保存済みレスポンスの操作
store: true が成功したら、返されたレスポンス ID を変更せず保持してください。以下の認証が必要な操作は、作成時と同じアカウントで行います。
GET /v1/responses/{response_id}retrieves the saved response.GET /v1/responses/{response_id}/input_itemsは入力項目の一覧を取得します。任意のクエリ項目はorder(ascまたはdesc、デフォルトはdesc)、limit(整数 1–100、デフォルトは 20)、after(前ページの last_id)です。DELETE /v1/responses/{response_id}deletes the saved response.
後続の作成リクエストでは、保存した ID を previous_response_id として使えます。アクセスには、元のユーザーが現在そのモデルを利用できる権限が必要です。保持期間は最長 7 日で、期限切れまたは削除済みのレスポンスからは継続できません。取得、削除、継続はいずれも元のアカウントに紐づきます。キャンセル用エンドポイントは文書化されていません。これらの操作にはローカルの契約テストがあります。10 月 29 日の実環境検証では保存と継続を確認しましたが、取得と入力項目一覧は 404 を返し、削除は未検証です。利用可能と確認されるまでは、取得、一覧、削除に依存しないでください。
Messages 互換性
POST /v1/messages は Anthropic 互換の形式を使います。anthropic-version: 2023-06-01 を含めてください。メーカーが直接例示しているのは model、messages、max_tokens、stream です。GLM Messages の完全なスキーマは公開されておらず、Claude との違いについて注意が示されています。残りの制御項目は互換仕様を参照したもので、個別に検証済みの GLM の機能ではありません。
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}'| 項目 | 形式と検証 | 根拠 |
|---|---|---|
model | 必須の文字列 glm-5.3 | GLM の例 |
messages | 必須の空でない user/assistant 配列。文字列またはネイティブのテキスト・ツールブロック | GLM のテキスト例。ブロック形式は互換仕様を参照 |
max_tokens | 必須の整数 1–131072 | GLM の例とモデル出力上限 |
stream | 真偽値。デフォルトは false | GLM の例 |
system | 文字列またはテキストブロック配列 | 互換仕様を参照 |
temperature | 数値 0–1 | 互換仕様を参照。対応関係は未検証 |
top_p | 数値 0.01–1 | 互換仕様を参照。対応関係は未検証 |
top_k | 0 以上の整数 | 互換仕様を参照。対応関係は未検証 |
stop_sequences | 文字列の配列 | 互換仕様を参照 |
tools | クライアントツール:name、input_schema、任意の description | 互換仕様を参照 |
tool_choice | オブジェクトの type は auto、none、any、tool。ツール指定には name が必要 | 互換仕様を参照 |
thinking | budget_tokens 付き enabled または adaptive。推論は無効化不可 | 互換仕様と GLM の推論常時有効ルール |
output_config | effort が low、high、max のオブジェクト | 互換項目名。対応関係は未検証 |
metadata | 任意の user_id を持つオブジェクト | 互換仕様を参照 |
cache_control | Ephemeral マーカー。任意の ttl は 5m または 1h | プロトコル仕様の参照のみ。GLM の明示的 TTL 動作は未検証 |
enabled の推論に対する互換の予算は 1024 以上かつ max_tokens 未満です。テキストブロックには text、推論履歴には thinking と signature、非公開の推論には data が必要です。ツール使用ブロックには id、name、input、ツール結果ブロックには tool_use_id が必要です。画像、音声、動画ブロックは受け付けません。明示的なキャッシュマーカーは、ヒット、有効期間、別料金を保証しません。モデルに文書化されているコンテキストキャッシュは自動です。
出力、ストリーミング、使用量
Chat は id、created、model、choices、usage を返し、任意で request_id と web_search を含みます。choices[].message.content、reasoning_content、tool_calls を読み取ってください。ツール呼び出しのレスポンスには回答テキストがない場合があります。SSE は推論、テキスト、ツール引数の差分を送り、最後に [DONE] を送ります。引数の断片は呼び出しインデックスごとに結合してください。公式 GLM Chat リクエストに stream_options 項目はありません。
Responses はメッセージ、推論、ツール呼び出しからなるネイティブの output 共用体を返します。SSE には response.created、response.in_progress、出力項目とコンテンツ部分のイベント、テキスト・推論・関数引数の差分、検索の進行状況、終端の response.completed、response.incomplete、response.failed が含まれます。[DONE] マーカーは必須ではありません。インデックスとシーケンス番号を保持してください。
Messages はコンテンツブロック、stop_reason、usage を含むネイティブのメッセージ形式を返します。イベント名には message_start、content_block_start/delta/stop、message_delta、message_stop があります。推論の署名とツール ID は、内容を解釈せず履歴として保持してください。
| 形式 | 総入力 | キャッシュ入力 | 出力 |
|---|---|---|---|
| Chat | prompt_tokens | prompt_tokens_details.cached_tokens | completion_tokens |
| Responses | input_tokens | input_tokens_details.cached_tokens | output_tokens |
| Messages | input_tokens に cache_read_input_tokens と、存在する場合は cache_creation_input_tokens を加算 | cache_read_input_tokens | output_tokens |
推論は出力の一部で、追加の課金区分ではありません。Chat/Responses のキャッシュ入力は総入力の一部です。通常入力の単価を適用する前に、別途報告されたキャッシュ分を差し引いてください。公開レスポンスには金額ではなくトークン使用量が示されます。現在の料金は最新の課金設定から取得され、失敗したリクエストは課金されません。
検証とエラー
不正な型、推論の無効化、未対応の推論強度、過大な出力上限、メディア入力は検証に失敗します。Chat の tool_stream には stream が必要です。未対応のトップレベル項目は転送されず省略されます。認証情報が必要で、残高不足では有料リクエストを実行できません。エラーは公開エラー形式を使います(Messages はネイティブのエラー形式)。中断したストリームを完了した回答と見なしたり、結果が不明なリクエストを自動再送したりしないでください。
Playground は選択した形式で受け付ける項目を同じように表示します。空欄の任意値は省略され、明示した false と 0 は保持されます。形式を変更すると新しい会話が始まります。使用料金の見積もりには、報告された使用量と現在の単価の両方が必要です。
