Ошибки API моделей

Два формата конверта ошибок: OpenAI — на большинстве маршрутов; Anthropic — только на `POST /messages`.


Конверт OpenAI

При ошибке до или вместо успешного ответа API моделей возвращает JSON в формате OpenAI:

{
  "error": {
    "message": "…",
    "type": "invalid_request_error",
    "code": "model_not_found"
  }
}

HTTP status совпадает с семантикой ошибки.

Коды HTTP

HTTPerror.typeerror.codeКогда
400invalid_request_error—Невалидные параметры (напр. store, previous_response_id, conversation или background в Responses; неверный provider.only / provider.host или нет подходящей строки — выбор поставщика)
401invalid_request_error—Неверный или отсутствующий API-ключ
402insufficient_quotainsufficient_balanceНедостаточно баланса / budget
403invalid_request_error—Блокировка policy (контент, доступ)
404invalid_request_errormodel_not_foundМодель неизвестна или не поддерживает нужный тип запроса
404invalid_request_errorinvalid_realtime_credentialRealtime: credential недействителен
404invalid_request_error—Маршрут не поддерживается (route not supported), неизвестный идентификатор задачи
409invalid_request_errorrequest_in_progressГонка внутреннего id запроса (двойной сабмит соединения). Клиентский ключ идемпотентности не поддерживается
413invalid_request_errorrequest_too_largeТело или multipart-часть слишком велики
429rate_limit_errorrate_limit_exceededRPM/TPM или Realtime concurrent cap
502server_errorupstream_unavailableМодель временно недоступна у поставщика
503server_errorupstream_unavailableСервис моделей временно недоступен

Неподдерживаемые маршруты

Запрос к Assistants, Threads, Moderations, management API и др. по OpenAI-совместимым маршрутам:

{
  "error": {
    "message": "route not supported",
    "type": "invalid_request_error"
  }
}

HTTP 404. Полный список — Исключённые маршруты.


Конверт Anthropic

На POST /messages ошибки возвращаются в формате Anthropic. На GET /models тот же конверт используется, если в запросе есть заголовок anthropic-version (неверные параметры списка и отсутствующая модель). Неверный ключ на GET /models остаётся в конверте OpenAI.

{"type":"error","error":{"type":"authentication_error","message":"…"}}
HTTPerror.typeКогда
400invalid_request_errorНевалидные параметры (напр. отсутствует max_tokens)
401authentication_errorНеверный или отсутствующий API-ключ
402invalid_request_errorНедостаточно баланса (сообщение про баланс)
403permission_errorБлокировка policy
404not_found_errorМодель не найдена
429rate_limit_errorПревышен лимит запросов
≥500api_errorВнутренняя или апстрим-ошибка

На остальных маршрутах API моделей — конверт OpenAI, даже при использовании x-api-key. GET /models без anthropic-version тоже отвечает конвертом OpenAI.

Два ответа 400 про объект provider на POST /messages тоже приходят в конверте OpenAI. Тексты — в выборе поставщика и площадки.


Отладка

  1. Проверьте Authorization: Bearer sk-… или x-api-key: sk-… (не токен кабинета).
  2. Убедитесь, что модель включена для ключа и вызывается тем методом, который она обслуживает. Иначе будет 404 model_not_found.
  3. Для POST /messages помните, что thinking и prompt cache доступны только у native-поставщиков anthropic и ru-openrouter.
  4. Для Realtime — свежий client_secret в query и API-ключ в заголовке.
  5. При повторяющихся 503 — напишите в службу поддержки LLM Mart.

Пример обработки (Node.js)

const res = await fetch(`${baseURL}/chat/completions`, { method: "POST", headers, body });
if (!res.ok) {
  const { error } = await res.json();
  console.error(res.status, error?.type, error?.code, error?.message);
}

Лимиты тела запроса

Группа маршрутовMax body
Chat, completions, responses, embeddings, messages, decisions4 MiB JSON
Images edits/variations32 MiB (part 25 MiB)
Audio transcribe/translate25 MiB multipart
Videos4 MiB JSON / 100 MiB multipart
Realtime: создание credential1 MiB JSON

Что дальше