POST /v1/chat/completions
OpenAI-совместимые Chat Completions с потоковым режимом, инструментами, анализом изображений и алиасами моделей.
Запрос
curl https://api.model-gate.com/v1/chat/completions \
-H "Authorization: Bearer mg_live_..." \
-H "Content-Type: application/json" \
-d '{
"model": "ch-47",
"messages": [
{"role": "user", "content": "Explain this API in one sentence."}
],
"stream": false
}'
model может быть каноническим идентификатором или включённым алиасом. Model Gate разрешает алиас до расчёта цены и передаёт поставщику канонический идентификатор.
Ответ
{
"id": "chatcmpl_example",
"object": "chat.completion",
"model": "claude-opus-4.7",
"choices": [
{
"index": 0,
"message": {"role": "assistant", "content": "Model Gate provides one compatible API for multiple AI models."},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 14,
"completion_tokens": 17,
"total_tokens": 31
}
}
Потоковый запрос
Укажите "stream": true. События Server-Sent Events поставщика передаются без изменения содержимого успешных событий.
Асинхронный запрос
Для поддерживаемых эндпоинтов добавьте "async": true и "stream": false. Немедленный ответ имеет HTTP 202 и содержит request_id и URL результата Partner API.
Ошибки
Подробности ошибок поставщика проходят правила раскрытия: исходное тело может заменяться безопасным сообщением в формате протокола. Локальные ошибки валидации используют структуру ошибок Model Gate.
| Статус | Значение | Действие |
|---|---|---|
400 | Неверный запрос | Проверьте тело запроса и идентификатор модели. |
401 | Недействительный или замороженный ключ | Проверьте или перевыпустите API-ключ. |
429 | Превышен лимит частоты или одновременных запросов | Учитывайте Retry-After и делайте паузу перед повтором. |
5xx | Временная ошибка поставщика или шлюза | Повторяйте идемпотентные запросы с экспоненциальным увеличением паузы. |
Session ID
Передавайте стабильный JSON session_id или заголовок X-Session-ID в каждом обращении этого диалога. Приоритет: session_id → X-Session-ID → распознанная сессия в metadata.user_id → prompt_cache_key → начальное содержимое диалога. Уровень идентификации не зависит от типа поставщика. Один и тот же ID не гарантирует попадание в кеш и не отключает допустимое резервное переключение. Автоматическое поведение, область действия, ограничения и отличия от идемпотентности и хранения контекста описаны в разделе идентификатор диалога и привязка маршрута.
Выбранный идентификатор сохраняется для потока и асинхронной отправки, когда эндпоинт её поддерживает. После тайм-аута не отправляйте новый платный POST только для проверки сессии: сначала проверьте существующий запрос.
Уже заданная распознанная сессия в метаданных используется без ошибки несовпадения; обычный metadata.user_id сохраняется и не считается диалогом. Более приоритетные явные поля побеждают. Форматы и ограничения передачи поставщику приведены в указанном справочнике идентификации.
Распознанная metadata-сессия имеет приоритет перед подсказкой кеширования. Автоматическая идентичность не учитывает известные маркеры cache_control и эквивалентные одиночные текстовые обёртки, не меняя запрос к модели. Отдельно настроенный совместимый транспорт сессионного заголовка не занимает обычный metadata.user_id; эту возможность настраивает оператор, а не клиент.