Text
Справочник API GLM-5.3
Поля запросов 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.
Справочник следует контракту Chat Z.ai, схеме Responses производителя и его руководству совместимости Messages. Ограничения модели взяты из руководства GLM-5.3. Соответствие документации не подтверждает все варианты поведения в реальной работе. Проверки 29 октября 2026 года завершили текстовые и потоковые запросы во всех трёх форматах, вызов функций Chat, вывод JSON-объекта и продолжение сохранённого ответа. Попадания в кэш, явные сроки хранения кэша и каждый элемент управления совместимостью не подтверждены. Ниже поля справочника Messages отделены от полей GLM, документированных производителем.
Спецификация OpenAPI · Справочник Markdown · Модель и Playground · Руководство по ценам
Быстрый старт
Каждый пример отправляет один запрос Chat Completions. 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 | массив | Да | Хотя бы одно сообщение; должно содержать сообщение 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 | массив строк | Нет | До четырёх строк в официальной схеме; реальный запрос принял четыре, но совпадение со строкой остановки не проверялось |
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 точно сохраняйте прежние рассуждения, включая порядок вызовов ассистента и результатов инструментов. Отключить рассуждения нельзя.
Инструмент функции использует {type:"function", function:{name, description, parameters}}. Имя содержит 1–64 буквы ASCII, цифры, подчёркивания или дефисы. Машинная схема требует 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. Доступность поиска и retrieval для конкретного аккаунта требует реальной проверки.
Режим 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, до двух знаков после запятой; по умолчанию 1 |
top_p | число | Нет | 0.01–1, до двух знаков после запятой; по умолчанию 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) и содержимое. Содержимое — строка, один текстовый блок или массив текстовых блоков. Используйте input_text или 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. Срок хранения у производителя — семь дней. Реальная проверка успешно сохранила ответ и продолжила его по ID при текущем store: false; это не подтверждает все операции с сохранёнными ответами.
Операции с сохранёнными ответами
После успешного store: true сохраняйте возвращённый ID ответа без изменений. Эти операции с авторизацией используют тот же аккаунт, который его создал:
GET /v1/responses/{response_id}получает сохранённый ответ.GET /v1/responses/{response_id}/input_itemsперечисляет элементы ввода. Необязательные параметры:order(ascилиdesc, по умолчаниюdesc),limit(целое число 1–100, по умолчанию 20) иafter(last_id предыдущей страницы).DELETE /v1/responses/{response_id}удаляет сохранённый ответ.
Следующий запрос создания может использовать сохранённый ID как previous_response_id. Исходный пользователь должен по-прежнему иметь доступ к модели. Хранение — не более семи дней; продолжать просроченные или удалённые ответы нельзя. Получение, удаление и продолжение сохраняют привязку к исходному аккаунту. Конечная точка отмены не документирована. Операции покрыты локальными тестами контракта. Реальная проверка 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 | Неотрицательное целое число | Справочник совместимости; сопоставление не проверено |
stop_sequences | Массив строк | Справочник совместимости |
tools | Клиентские инструменты: name, input_schema, необязательный description | Справочник совместимости |
tool_choice | Объект с type auto, none, any или tool; именованный инструмент требует name | Справочник совместимости |
thinking | enabled с budget_tokens или adaptive; отключить рассуждения нельзя | Справочник совместимости и правило постоянных рассуждений GLM |
output_config | Объект с effort low, high или max | Совместимое написание поля; сопоставление не проверено |
metadata | Объект с необязательным user_id | Справочник совместимости |
cache_control | Маркер ephemeral, необязательный ttl 5m или 1h | Только справочник протокола; явное поведение TTL GLM не проверено |
Совместимый бюджет enabled thinking — не менее 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]. Объединяйте фрагменты аргументов по индексу вызова. Поле stream_options не входит в официальный запрос GLM Chat.
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 входит в общий вход. Вычитайте отдельно указанные кэшированные части перед применением обычного входного тарифа. Публичные ответы показывают использование токенов, а не денежные суммы. Текущие цены поступают из действующих настроек тарификации; ошибочные запросы не тарифицируются.
Проверка и ошибки
Неверные типы, отключённые рассуждения, неподдерживаемый уровень, чрезмерный бюджет вывода и медиа на входе не проходят проверку. tool_stream в Chat требует stream. Неподдерживаемые поля верхнего уровня пропускаются, а не передаются дальше. Нужны учётные данные; недостаточный баланс не позволяет выполнить платный запрос. Ошибки используют публичную оболочку ошибок (Messages — собственную форму). Не считайте прерванный поток полным ответом и не отправляйте автоматически повторно запрос с неопределённым результатом.
Playground показывает те же разрешённые поля выбранного формата. Пустые необязательные значения пропускаются; явные false и ноль сохраняются. Смена формата начинает новый диалог. Оценка использования требует и возвращённых данных использования, и текущих тарифов.
