Ошибки

Стандартная оболочка ошибки, текущие коды шлюза и безопасные правила повторов.

Основы

Ошибочные ответы используют стандартную оболочку, поэтому клиент может проверить HTTP-статус, error.type и nullable-поле error.code. Исходные тела ошибок upstream клиенту не передаются. Таблицы ниже описывают текущее поведение публичных маршрутов /v1/*, но не обещают, что в будущем не появятся дополнительные коды.

Формат оболочки

{
  "error": {
    "message": "Upstream rate-limited",
    "type": "api_error",
    "code": "upstream_rate_limited"
  }
}

Поля:

  • message — безопасное для клиента описание.
  • type — общая категория, например invalid_request_error, authentication_error, insufficient_quota или api_error.
  • code — более точный идентификатор, если конкретный путь его задаёт; значение может быть null.

Основные коды клиента и шлюза

КодHTTPЗначениеДействие
payload_too_large413Тело запроса превысило лимит маршрутаУменьшите payload
invalid_body400JSON или схема запроса некорректныИсправьте тело запроса
model_not_found404Слаг модели неизвестен или отключёнПроверьте слаг и состояние каталога
model_does_not_support_images400image_url передан модели без visionВыберите vision-модель или удалите изображение
multimodal_not_supported400Передан неподдерживаемый тип content part, отличный от поддерживаемого текста или изображенияУдалите неподдерживаемую часть
tool_choice_not_supported400Запрошен принудительный выбор инструментаИспользуйте автоматический выбор или уберите tool_choice
response_format_not_supported400Запрошено поле response_format / structured outputУберите response_format; generateObject не поддерживается
concurrency_limit429Для ключа одновременно выполняется слишком много запросовПовторите после указанной короткой задержки
idempotency_conflict422Idempotency-Key повторно использован с другим теломВозьмите новый ключ или отправьте исходное тело
endpoint_not_supported404Запрошенный маршрут /v1/* не реализованИспользуйте документированный endpoint
internal_error500В шлюзе возникло неожиданное исключениеПередайте оператору время, endpoint и видимые клиенту сведения

Ошибки аутентификации сейчас возвращают HTTP 401 с type: "authentication_error" и code: null. Ограничение частоты запросов ключа возвращает HTTP 429 с type: "rate_limit_exceeded" и code: null. Исчерпание баланса AI-кредитов возвращает HTTP 429 с type: "insufficient_quota" и code: null.

Коды upstream

КодHTTPЗначениеДействие
upstream_unavailable502 / 503Нет доступного маршрута, открыт breaker или транспорт завершился до ответаПовторите с backoff; учитывайте Retry-After, если он есть
upstream_bad_request400Upstream отклонил запросИсправьте или сократите запрос
upstream_unauthorized401 / 403Upstream отклонил учётные данные шлюзаТребуется действие оператора
upstream_model_unavailable404Настроенный внутренний id модели недоступенТребуется действие оператора
upstream_timeout408 / 504Upstream вернул timeout-статусПовторите с backoff
upstream_rate_limited429Upstream ограничил шлюзПовторите с экспоненциальной задержкой и jitter
upstream_invalid_response502Непотоковый ответ upstream не прошёл разбор или проверкуПовторите; сообщите о постоянной ошибке
upstream_error5xxUpstream вернул другую ошибку или неожиданный непотоковый ответПовторите; сообщите о постоянной ошибке

Ошибка после начала SSE уже не может стать JSON-ответом с другим HTTP-статусом. См. «Потоковые ответы»: клиент получает finish_reason: "error" и [DONE], а во внутреннем журнале шлюза остаётся статус 502.

Безопасные повторы

Повторяйте временные upstream-ошибки upstream_unavailable, upstream_rate_limited, upstream_timeout и upstream_error, используя ограниченный экспоненциальный backoff с jitter. Не повторяйте автоматически некорректные payloads, неподдерживаемые функции, неизвестные модели, конфликты idempotency и исчерпанный баланс AI-кредитов: сначала должен измениться запрос, маршрут или состояние аккаунта.

Публичный OpenAI-compatible ответ не обещает заголовок Trace-Id. При обращении укажите timestamp, endpoint, слаг модели, HTTP-статус и полученную оболочку ошибки; оператор сможет сопоставить их с серверными request и trace-записями.