docs
Помощь

Ошибки и лимиты

Markdown

Коды ответов, их смысл и что делать. Все ошибки — в JSON и с Request ID.

Полное руководство

Формат ошибки

Ошибка приходит в формате того API, который вы вызвали: объект error для OpenAI, {"type": "error", "error": {...}} для Anthropic и error с полями status и details для Gemini. Поэтому SDK распознают их как обычные ошибки API.

  • error.code и error.reason — класс ошибки из таблицы ниже, они совпадают. error.type — стандартное значение формата (например, invalid_request_error или server_error).
  • error.request_id (в Anthropic — request_id на верхнем уровне), заголовок X-Request-ID и конец текста сообщения — идентификатор запроса.
  • В Gemini класс лежит в error.details: ErrorInfo.reason — тот же код верхним регистром (например, MODEL_OVERLOADED), domain — ailoot.ai; идентификатор запроса — в RequestInfo.requestId.
  • В формате Gemini ошибка 5xx, которую нельзя повторять автоматически, и result_pending_check приходят со статусом 409 и status ABORTED: так Gemini SDK и CLI не повторяют их сами. Класс ошибки — в ErrorInfo.reason (например, MODEL_TIMEOUT или RESULT_PENDING_CHECK).
  • В ответе OpenAI-формата есть ещё поля верхнего уровня code и message — для старых клиентов.
{
  "code": "API_KEY_REQUIRED",
  "error": {
    "code": "invalid_api_key",
    "message": "No API key was sent with the request. Nothing was charged. Please check that the full key is sent in the Authorization header as \"Bearer <key>\". Request ID: 3b28d3de-5b02-4d07-9f3c-4b9a7d0e68d6.",
    "param": null,
    "reason": "invalid_api_key",
    "request_id": "3b28d3de-5b02-4d07-9f3c-4b9a7d0e68d6",
    "type": "invalid_request_error"
  },
  "message": "No API key was sent with the request. Nothing was charged. …"
}

Коды ошибок

HTTPКласс (reason)Что случилосьЧто делать
400invalid_requestЗапрос некорректен: неверное тело или параметр; модель не поддерживает поле, вложение или инструмент из запроса; ключ передан в адресе Исправьте запрос по тексту ошибки: уберите неподдерживаемое поле, вложение или инструмент; ключ передавайте в заголовке. Отказ из-за неподдерживаемого поля, вложения или инструмента приходит до резерва — ничего не списано
400context_length_exceededЗапрос длиннее контекста моделиСократите историю или возьмите модель с большим контекстом
400content_policy_violationЗапрос отклонён правилами моделиПереформулируйте запрос
401invalid_api_keyКлюча нет или он неверныйПроверьте, что ключ передан целиком
401api_key_disabledКлюч отключёнВключите или создайте новый ключ
402insufficient_balance, insufficient_quotaНе хватает свободного баланса даже на минимальный резерв (insufficient_quota — тот же случай в виде, привычном для OpenAI SDK)Пополните баланс или уменьшите max_tokens
402api_key_quota_exhaustedИсчерпан общий лимит трат ключаУвеличьте лимит ключа в кабинете
402payment_disputedНа аккаунте долг по оспоренному платежуНовые запросы приостановлены до погашения — напишите в поддержку
403api_key_expiredСрок действия ключа истёкСоздайте новый ключ
403account_inactiveВаш аккаунт отключёнНапишите в поддержку
403permission_deniedКлючу запрещён этот запрос (например, по IP)Проверьте ограничения ключа
404model_not_foundНет такой моделиСверьте ID с /v1/models
404unsupported_endpointМодель не работает в этом форматеВыберите другой формат или модель
404not_foundНет такого пути или объекта (например, задачи)Проверьте адрес и идентификатор
409duplicate_requestОперация с тем же ключом идемпотентности уже принята и, возможно, завершенаПроверьте результат первой операции, новую не отправляйте
409not_ready, video_not_readyВидео или другая задача ещё не готоваЗапросите статус позже
409, 503result_pending_checkУточняем результат запроса. У видеозадачи это флаг result_pending_check: true в ответе статуса, сама задача остаётся in_progressНе отправляйте запрос повторно — статус появится в истории (GET https://ailoot.ai/api/v1/usage). Видеозадачу не создавайте заново: проверьте её позже через GET /v1/videos/{id}
410model_retiredМодель снята с обслуживанияВыберите новую версию в GET /v1/models
413request_too_largeТело запроса слишком большоеУменьшите файлы или историю
429rate_limit_exceeded, gateway_concurrency_limit, gateway_queue_fullСлишком много запросов или одновременных запросов с вашего аккаунтаПодождите (заголовок Retry-After, обычно 10 с) и повторите
429usage_limit_reachedИсчерпано окно трат ключа (5 часов, 1 день или 7 дней)Подождите, пока окно обновится, или поднимите лимит ключа
500internal_errorОшибка AilootНапишите в поддержку с Request ID
502invalid_model_response, empty_response, incomplete_responseМодель вернула некорректный, пустой или неполный ответНайдите Request ID в истории кабинета. Если там есть результат или списание, повтор создаст второй платный запрос. Отсутствие записи не подтверждает, что запрос не отправлен или не выполнен: не повторяйте неизвестную отправку; обратитесь в поддержку с Request ID.
502result_not_deliveredРезультат не доставлен по вине Ailoot, резерв или списание возвращеныЗапрос можно отправить заново
503model_overloadedМодель временно перегруженаЕсли X-Should-Retry: true — повторите через Retry-After секунд; если false — сначала проверьте Request ID в истории
503model_unavailableМодель временно недоступнаВыберите другую модель. Если X-Should-Retry: true — повторите через Retry-After секунд; если false — сначала проверьте Request ID в истории
503service_unavailableВременный сбой на стороне AilootЕсли X-Should-Retry: true — повторите через Retry-After секунд; если false — сначала проверьте Request ID в истории
503charge_not_confirmedОтвет не выдан: не удалось подтвердить списание; резерв возвращён, деньги не списаныЕсли X-Should-Retry: true — повторите через Retry-After секунд; если false — сначала проверьте Request ID в истории
504model_timeoutМодель не ответила вовремя, результат ещё может появитьсяНе отправляйте запрос заново, пока не проверите Request ID в истории

Коды для ответов модели и проверки результата (502, 503 и 504) теперь называют модель или запрос: model_unavailable, model_timeout, invalid_model_response, incomplete_response, charge_not_confirmed и result_pending_check. Если ваш код сравнивает error.code с прежними значениями, замените их на коды из таблицы; соответствие прежних кодов новым подскажет поддержка.

Когда повторять запрос

  • Сначала посмотрите на X-Should-Retry: при false, result_pending_check или model_timeout не повторяйте автоматически. Найдите Request ID в истории кабинета: там видно результат и списание.
  • Повтор безопасен, когда пришёл X-Should-Retry: true: подождите Retry-After секунд. Для 5xx одного кода мало: результат мог уже появиться. Сначала проверьте историю в кабинете или напишите в поддержку с Request ID. Это особенно важно для картинок, видео, музыки и длинных агентных шагов.
  • Не поможет повтор: 400, 401, 402, 403, 404 — сначала исправьте запрос, ключ или баланс.

Лимиты

Частота и число одновременных запросов ограничены для вашего аккаунта в целом, а не для отдельного ключа. При превышении придёт 429 rate_limit_exceeded с заголовком Retry-After: 10. Если перегружена сама модель — 503 model_overloaded с Retry-After: 30. Если нужна большая нагрузка, напишите в поддержку.

Лимиты трат задаются у ключа: общий лимит — 402 api_key_quota_exhausted, окна 5 часов, 1 день и 7 дней — 429 usage_limit_reached. Подробнее — Ключи и адрес API.

Модели NVIDIA: очередь

Список моделей можно запрашивать и при нулевом балансе; для генерации нужен баланс на резерв. Модели NVIDIA (Nemotron и другие) работают через общую очередь: при высокой нагрузке ответ может прийти позже или вернётся ошибка «модель временно перегружена» с заголовком Retry-After — повторите после указанного времени. Цены — в каталоге, списание как у остальных моделей.

Лимиты размера задаёт модель: контекст (сколько токенов можно отправить) и максимальная длина ответа. Они указаны в каталоге.

История и расходы

История и расходы · GET https://ailoot.ai/api/v1/usage · JWT · Authorization: Bearer $TOKEN

JWT ≠ sk-… · Вход и сеансы

Остались вопросы? Пришлите Request ID и описание — поможем разобраться.Написать в поддержку