Claude Opus 5.5 уже доступна в SeedRouter

Text

Справочник API GLM-5.3

View Markdown

Поля запросов 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Справочник совместимости
thinkingenabled с 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 инструментов как непрозрачную историю.

ФорматОбщий входКэшированный входВыход
Chatprompt_tokensprompt_tokens_details.cached_tokenscompletion_tokens
Responsesinput_tokensinput_tokens_details.cached_tokensoutput_tokens
Messagesinput_tokens плюс cache_read_input_tokens и любые cache_creation_input_tokenscache_read_input_tokensoutput_tokens

Рассуждения входят в выход и не оплачиваются дополнительно. Кэшированный вход Chat/Responses входит в общий вход. Вычитайте отдельно указанные кэшированные части перед применением обычного входного тарифа. Публичные ответы показывают использование токенов, а не денежные суммы. Текущие цены поступают из действующих настроек тарификации; ошибочные запросы не тарифицируются.

Проверка и ошибки

Неверные типы, отключённые рассуждения, неподдерживаемый уровень, чрезмерный бюджет вывода и медиа на входе не проходят проверку. tool_stream в Chat требует stream. Неподдерживаемые поля верхнего уровня пропускаются, а не передаются дальше. Нужны учётные данные; недостаточный баланс не позволяет выполнить платный запрос. Ошибки используют публичную оболочку ошибок (Messages — собственную форму). Не считайте прерванный поток полным ответом и не отправляйте автоматически повторно запрос с неопределённым результатом.

Playground показывает те же разрешённые поля выбранного формата. Пустые необязательные значения пропускаются; явные false и ноль сохраняются. Смена формата начинает новый диалог. Оценка использования требует и возвращённых данных использования, и текущих тарифов.