Коды ошибок LLM API: от 400 до 529 у 5 провайдеров
Что значит каждый статус у OpenAI, Anthropic, Google, DeepSeek и OpenRouter, какие безопасно повторять и почему пустой баланс — 402 у троих.
Кратко: код статуса говорит меньше, чем кажется. Кончились деньги — это 402 у Anthropic, DeepSeek и OpenRouter и 429 у OpenAI. Перегрузка сервера почти везде 503, а у Anthropic — 529, который не является стандартным кодом HTTP и проскакивает мимо большинства обработчиков. Эта страница — сводный справочник: все документированные коды у пяти провайдеров, какие безопасно повторять, и ссылки на конкретные сбои, которые мы воспроизвели и починили.
Last updated 2026-08-31. Каждый код ниже прочитан в тот же день из собственной документации соответствующего провайдера.
Какие коды документирует каждый провайдер?
Пустая ячейка означает, что провайдер не документирует этот код, а не то, что он его никогда не возвращает.
| Код | OpenAI | Anthropic | Google Gemini | DeepSeek | OpenRouter |
|---|---|---|---|---|---|
| 400 | неверный service_tier | invalid_request_error | invalid_request, failed_precondition, parameter_unknown | Invalid Format | Bad Request, отсутствующие параметры, CORS |
| 401 | неверная аутентификация, чужой ключ, нет организации, IP не в списке | authentication_error | authentication | Authentication Fails | недействительные учётные данные, истёкшая сессия OAuth |
| 402 | billing_error | Insufficient Balance | недостаточно кредитов | ||
| 403 | страна или регион не поддерживаются | permission_error | permission_denied | права, блокировка guardrail, модерация | |
| 404 | not_found_error | not_found, model_not_found | |||
| 408 | истекло время ожидания запроса | ||||
| 409 | conflict_error | already_exists, aborted | |||
| 413 | request_too_large | ||||
| 416 | out_of_range | ||||
| 422 | Invalid Parameters | ||||
| 429 | 5 разных причин, см. ниже | rate_limit_error | rate_limit_exceeded, quota_exceeded, too_many_requests | Rate Limit Reached | сработало ограничение частоты |
| 499 | cancelled | ||||
| 500 | ошибка сервера | api_error | api_error | Server Error | |
| 501 | unimplemented | ||||
| 502 | выбранная модель недоступна или вернула некорректный ответ | ||||
| 503 | движок перегружен, Slow Down | service_unavailable | Server Overloaded | нет provider, удовлетворяющего требованиям маршрутизации | |
| 504 | timeout_error | deadline_exceeded | |||
| 529 | overloaded_error |
Четыре строки этой таблицы и есть источник реальных production-инцидентов.
Почему 429 означает пять разных вещей?
429 — самый перегруженный код в отрасли. У OpenAI он покрывает пять отдельных состояний с пятью разными решениями: превышение частоты запросов, исчерпание баланса, лимит расходов организации, лимит расходов проекта и лимит использования организации. Ограничением частоты является только первое; остальные четыре — про деньги, и бэкофф их не разрешит.
Google хотя бы разделяет смыслы на разные коды внутри одного статуса: rate_limit_exceeded для поминутных лимитов, quota_exceeded для суточной квоты, too_many_requests для всплесков.
Самый точный признак даёт Anthropic. В документации сказано, что 429 из-за лимита расходов на уровне тарифа приходит без заголовка retry-after и продолжает падать, пока доступ не восстановится. То есть наличие заголовка само по себе является диагностикой: есть — ждите, нет — чините аккаунт. Кроме того, при достижении лимита расходов, который вы задали сами, Anthropic возвращает 400, а не 429 — исключение составляет рабочее пространство Claude Code, где может прийти 429.
Процедуру принятия решения мы разобрали отдельно: 429 Too Many Requests: что это значит и когда повторять. Для Claude Code, где 429 по частоте и 429 по квоте выглядят одинаково, их разделяет Rate Limit Reached в Claude Code. Если нужны сами лимиты, а не ошибки, сравнение — в пяти провайдерах с пятью сводами правил, а случай агрегатора, где переключение быстрее ожидания, — в 429 на Kimi K3 в OpenRouter.
Почему 529 ломает обработчики ошибок?
529 не является зарегистрированным кодом состояния HTTP. Собственный справочник Anthropic отводит ему одну строку:
529 -
overloaded_error: The API is temporarily overloaded.
Все остальные выражают то же состояние через 503. При этом в справочнике ошибок Anthropic 503 не упоминается вовсе.
Это важно, потому что огромная часть кода повторов написана как if 500 <= status <= 504. В этот диапазон 529 не попадает, поэтому ошибки перегрузки Anthropic минуют путь повтора и доходят до пользователя как жёсткий сбой. Собственные SDK Anthropic повторяют временные сбои дважды по умолчанию и соблюдают retry-after, когда он есть, так что баг проявляется в основном в самописных HTTP-клиентах.
В документации Anthropic есть ещё одно предупреждение, которое стоит перечитать: если резко наращивает трафик ваша организация, вы можете получить 429 вместо 529 из-за ограничений на ускорение. Тот же симптом, противоположная причина, другое решение.
Полное воспроизведение и восемь решений — в ошибке 529 overloaded_error в Claude API, это наша самая читаемая страница по устранению неполадок. Если нужен архитектурный ответ, а не ответ уровня повторов, fallbackModel в Claude Code настраивает трёхуровневое переключение, а сбои Opus и 529 разбирают миграцию, когда одна модель перегружена постоянно.
Почему одна и та же модель даёт 404 у одного провайдера и 400 у другого?
Имя модели, которое не разрешается, даёт 404 not_found у Google (там есть отдельный model_not_found), 404 у OpenAI и 400 у некоторых шлюзов, которые проверяют поле model до маршрутизации. Пользователь обычно видит вариацию фразы «модель не существует или у вас нет к ней доступа», и рабочей половиной является именно доступ: у OpenAI та же строка появляется для модели, которая существует, но не включена для вашей организации.
Оба случая разобраны в ошибке OpenAI 404 «модель не существует». Вариант с новыми моделями, когда модель реальна и уже выпущена, но ваш аккаунт её ещё не видит, — в GPT-5.6 model not available.
Почему 402 есть у трёх провайдеров и нет у OpenAI?
Anthropic, DeepSeek и OpenRouter возвращают 402, когда на аккаунте кончились деньги. OpenAI относит то же событие к 429.
Практическое следствие: наивный обработчик, считающий 4xx фатальными, а 429 — повторяемым, ведёт себя правильно у Anthropic и неправильно у OpenAI: он будет крутиться в бэкоффе против пустого баланса. Ветвитесь по телу ответа, а не по коду.
У 402 Insufficient Balance в DeepSeek с августа 2026 года, после перехода на тарификацию по пиковым и непиковым часам, появилась вторая особенность: одна и та же нагрузка расходует баланс с разной скоростью в зависимости от часа. Окна и множители — в повышении цен DeepSeek API.
Какие коды стоит повторять?
| Повторять | Не повторять |
|---|---|
| 408 таймаут | 400 некорректный запрос |
| 409 конфликт или прерывание | 401 аутентификация |
| 429 с заголовком Retry-After | 402 оплата |
| 500, 502, 503, 504 | 403 права, регион, модерация |
| 529 перегрузка Anthropic | 404 модель или ресурс не найдены |
| 413 слишком большой запрос | |
| 422 неверные параметры | |
| 429 без заголовка Retry-After |
К этой таблице — три эксплуатационные заметки.
Retry-After не универсален. OpenRouter документирует его для 429 и 503. SDK Anthropic соблюдают его при наличии, повторяя временные сбои «twice by default, honoring the retry-after header when present». Рекомендация OpenAI при 429 по частоте — регулировать темп запросов и соблюдать заголовки Retry-After. Наличие заголовка никем не гарантировано, поэтому вашему бэкоффу нужно значение по умолчанию.
Google в своём разделе по устранению неполадок называет 408 временной ошибкой, которую стоит повторить, но в справочнике кодов ошибок строки 408 нет — поэтому в таблице выше эта ячейка пустая.
413 — это проблема размера, а не контекста. Anthropic публикует жёсткие лимиты размера запроса: 32 MB для Messages и Token Counting, 256 MB для Batch API, 500 MB для Files API. В прямом API они применяются Cloudflare до того, как запрос дойдёт до Anthropic, поэтому тело ошибки может вообще не выглядеть как ошибка Anthropic.
Какие сбои вообще не доходят до кода статуса?
Некоторые сбои возвращают 200 и всё равно ломают всё.
Ошибки посреди стрима. При приёме server-sent events ошибка может прийти уже после того, как API вернул 200. Anthropic пишет об этом прямо: стандартная обработка ошибок здесь не применяется, событие error нужно обрабатывать внутри стрима.
Сбои TLS. До API они не доходят вовсе. Ошибки SSL-сертификата в Claude Code разбирают перехват корпоративным CA, который выглядит как авария, но ею не является.
Ошибки импорта и SDK. Переименование в SDK всплывает как трассировка Python, а не как код HTTP. Соответствия — в ошибках импорта claude-code-sdk после переименования в июне 2026.
Таймауты при генерации изображений. Долгие вызовы генерации ломаются иначе, чем чат. Пять первопричин — в медленных ответах и 504 у GPT-Image-2.
Что читать дальше?
Если вы ходите через агрегатор, стоит знать ещё один слой: OpenRouter помечает ошибки провайдеров каноничной строкой error_type и советует опираться на неё, а не на статус, потому что она «stable across all three API skins even when the native protocol code is lossy». Это ровно тот же урок, что и вся эта страница, только закреплённый на уровне шлюза.
Если нужны шаблоны кода, а не значения кодов, в обработке ошибок AI API есть экспоненциальный бэкофф с джиттером, переключение между моделями и готовый circuit breaker. Если нужна поверхность ошибок конкретного инструмента, а не провайдера, указатель ошибок Codex сопоставляет 15 симптомов с решениями.
Источники
Часто задаваемые вопросы
- 529 — это то же самое, что 503?
- Функционально да, но 529 возвращает только Anthropic. Это нестандартный статус со значением
overloaded_error, и при этом в документации Anthropic строки про 503 нет вовсе. OpenAI, Google, DeepSeek и OpenRouter выражают то же состояние через 503. Если ваш обработчик ловит только 500–504, ошибки перегрузки Anthropic пролетают мимо него. - Почему OpenAI возвращает 429, когда баланс пуст?
- Потому что OpenAI относит исчерпание средств к ограничению частоты. В его справочнике по ошибкам credit balance exhausted, organization spend limit reached, project spend limit reached и organization usage limit reached — всё это 429. Anthropic, DeepSeek и OpenRouter возвращают на то же состояние 402. Повтор с бэкоффом на платёжном 429 не сработает никогда, поэтому нужно читать тело ответа, а не ветвиться только по статусу.
- Какие коды безопасно повторять автоматически?
- 408, 409 при конфликте, 429 с заголовком Retry-After и семейство 5xx, включая 502, 503, 504 и 529 у Anthropic. Не повторяйте 400, 401, 402, 403, 404, 413 и 422 — там нужно менять запрос, ключ или состояние аккаунта. Опасный промежуточный случай — 429 без Retry-After: у Anthropic это лимит расходов, а не частоты, и он будет падать до конца окна.
- Что означает 402 billing_error у Anthropic?
- Проблему с оплатой или платёжными данными, а не с лимитом частоты и не с ключом. Anthropic документирует 402 как
billing_errorи отправляет проверить платёжные данные в Console, а при работе через Claude Platform на AWS — в AWS Marketplace. Это не то же самое, что 400, который Anthropic возвращает при достижении лимита расходов, заданного вами самими. - Все ли провайдеры присылают заголовок Retry-After?
- Нет, и исключения важны. OpenRouter документирует Retry-After и для 429, и для 503. SDK Anthropic соблюдают его, когда он есть, повторяя запрос дважды по умолчанию. Но 429 из-за лимита расходов на уровне тарифа приходит вообще без Retry-After. Отсутствие заголовка само по себе сигнал: это состояние не про ожидание.


