Справочник

Коды ошибок API — Claude, KIMI, OpenAI-совместимый и Gemini

Разбор всех ошибок API: Anthropic 401 invalid x-api-key, 402 billing_error, 429 rate_limit_error и 529 Overloaded; KIMI kimi/* 400 documented_limitation (mcp_servers, provider tools) и count_tokens unsupported_parameter; OpenAI 401 invalid_api_key, 402 insufficient_quota; Gemini 400 API_KEY_INVALID и 402 FAILED_PRECONDITION. Точный текст ответа, причина и решение для каждой.

Каждый протокол сохраняет свой официальный конверт. Маршруты Anthropic возвращают JSON Anthropic, поэтому ветвиться можно по error.type. Ограничения шлюза добавляют error.details.error_code (documented_limitation или unsupported_parameter) и error.details.param — официальные SDK игнорируют неизвестные поля:

{"type":"error","error":{"type":"authentication_error","message":"invalid x-api-key"}}

Сопоставляйте HTTP-статус и поле ветвления (Anthropic error.type, OpenAI error.code, Gemini error.status / ErrorInfo reason), но никогда не текст сообщения: сообщение — это проза, его могут переформулировать, а эти поля — контракт. В официальных SDK это означает ловить типизированные классы исключений, а не искать подстроки. Эта страница построена наоборот только потому, что в момент поломки перед глазами у вас именно сообщение. HTTP 402 на каждом маршруте — предоплаченный баланс; не ретрайте его как 429.

Официальный Anthropic для каждого клиентского 400 ставит один error.type: invalid_request_error. Разные 400 отличаются сообщением, а для ограничений шлюза ещё error.details.error_code. Строки сгруппированы по HTTP-статусу, затем по типу.

Маршрут Anthropic — все коды

Откройте строку — внутри точное тело ответа и что делать. Листать все ошибки подряд не нужно.

400invalid_request_errorпрефилл ответа ассистента не поддерживаетсяНет
HTTP 400
{"type":"error","error":{"type":"invalid_request_error","message":"This model does not support assistant message prefill. The conversation must end with a user message."}}

Почему возникает

  • Диалог заканчивается сообщением ассистента, которым задают начало ответа. Это отклоняется на Claude Opus 4.6 и новее, на Sonnet 4.6 и новее и на Fable 5.
  • Сообщения ассистента в других местах истории — например, few-shot примеры — по-прежнему допустимы. Отклоняется только последнее.
  • Многие фреймворки делают префилл внутри себя, так что в вашем коде его может не быть явно.

Что делать

  • Чтобы задать форму JSON, используйте структурированный вывод через output_config.format вместо префилла открывающей скобки.
  • Чтобы получить метку классификации, опишите инструмент с перечислением допустимых значений.
  • Чтобы убрать вступление, скажите об этом в системном промпте: отвечать сразу, без вводных фраз.
  • Чтобы продолжить оборванный ответ, перенесите продолжение в пользовательский ход и процитируйте, на чём он остановился.

Другие формы той же ошибки

  • This model does not support assistant message prefill
  • claude prefill trailing whitespace error

Короткая ссылка: https://apitoken.sale/e/prefill-not-supported · Идентично на api.anthropic.com и на этом шлюзе.

400invalid_request_errorне удалось разобрать тело запросаНет
HTTP 400
{"type":"error","error":{"type":"invalid_request_error","message":"Could not parse request body."}}

Почему возникает

  • Тело не является валидным JSON: висящая запятая, строка в одинарных кавычках или переменная оболочки, развернувшаяся в неэкранированную кавычку.
  • Отсутствующий или не-JSON заголовок Content-Type.

Что делать

  • Проверяйте тело валидатором перед отправкой. Большинство таких запросов вообще не доходят до API в рабочем виде.
  • В шелл-скриптах собирайте тело через heredoc или jq, а не конкатенацией строк.

Другие формы той же ошибки

  • claude api could not parse request body

Короткая ссылка: https://apitoken.sale/e/invalid-request-body · Такой ответ есть только у этого шлюза — в Anthropic API аналога нет.

400invalid_request_errorзакончились кредиты AnthropicНет
HTTP 400
{"type":"error","error":{"type":"invalid_request_error","message":"Your credit balance is too low to access the Anthropic API. Please go to Plans & Billing to upgrade or purchase credits."}}

Почему возникает

  • У организации Anthropic, которой принадлежит ключ, закончились кредиты API на api.anthropic.com.
  • Инструмент говорит с собственным API Anthropic, а не с этим шлюзом. На этом шлюзе аналогичная ситуация — HTTP 402 billing_error.
  • Отключено автопополнение или не прошла оплата привязанной картой.

Что делать

  • Проверьте, куда именно ходит падающий инструмент. Эта ошибка всегда про кредиты API Anthropic.
  • Пополните кредиты организации или включите автопополнение, чтобы длинные задачи не обрывались на середине.
  • На этом шлюзе аналогичная ситуация возвращает 402 billing_error — см. запись про недостаточный баланс.

Другие формы той же ошибки

  • claude credit balance is too low but I have credits
  • claude pro credit balance too low
  • your credit balance is too low to access the anthropic api

Короткая ссылка: https://apitoken.sale/e/credit-balance-too-low · Идентично на api.anthropic.com и на этом шлюзе.

400invalid_request_errorнекорректный заголовок anthropic-betaНет
HTTP 400
{"type":"error","error":{"type":"invalid_request_error","message":"invalid anthropic-beta header"}}

Почему возникает

  • В заголовке anthropic-beta указан флаг, который этот шлюз не принимает, либо значение сформировано неверно.
  • Несколько флагов соединены чем-то кроме запятой.
  • Флаг скопирован из документации к возможности, которая с тех пор вышла из беты и больше не требует заголовка.

Что делать

  • Несколько флагов отправляйте одним значением через запятую.
  • Уберите флаги для возможностей, которые уже стали общедоступными — в их числе effort, потоковая передача аргументов инструментов и заголовок для 128K вывода.
  • Если заголовок ставит сам SDK, не задавайте его ещё и вручную.

Другие формы той же ошибки

  • anthropic-beta header error

Короткая ссылка: https://apitoken.sale/e/invalid-beta-header · Такой ответ есть только у этого шлюза — в Anthropic API аналога нет.

400invalid_request_errormax_tokens выше потолка вывода моделиНет
HTTP 400
{"type":"error","error":{"type":"invalid_request_error","message":"max_tokens: 128001 > 128000, which is the maximum allowed number of output tokens for claude-opus-4-6"}}

Почему возникает

  • max_tokens превышает потолок вывода конкретной модели. Этот потолок свой у каждой модели и не равен размеру контекстного окна.
  • Конфигурация, написанная под одну модель, переиспользована с другой, у которой потолок ниже.

Что делать

  • Смотрите потолок именно той модели, которую вызываете, а не общий.
  • Примерно выше 16K токенов вывода отдавайте ответ потоком: большой непотоковый запрос может упереться в HTTP-таймаут SDK, даже когда сам max_tokens допустим.

Другие формы той же ошибки

  • which is the maximum allowed number of output tokens
  • claude max_tokens too large

Короткая ссылка: https://apitoken.sale/e/max-tokens-too-large · Идентично на api.anthropic.com и на этом шлюзе.

400invalid_request_errormax_tokens должен быть больше thinking.budget_tokensНет
HTTP 400
{"type":"error","error":{"type":"invalid_request_error","message":"`max_tokens` must be greater than `thinking.budget_tokens`"}}

Почему возникает

  • На моделях, которые ещё принимают фиксированный бюджет размышления, этот бюджет должен быть строго меньше max_tokens: размышление и ответ делят одно и то же окно вывода.
  • На Claude Opus 4.7 и новее, а также на Sonnet 5 фиксированный бюджет убран вовсе — это проявляется другой 400 с указанием перейти на адаптивное размышление и параметр effort.

Что делать

  • Поднимите max_tokens выше бюджета либо уменьшите бюджет.
  • На актуальных моделях переходите на адаптивное размышление и управляйте глубиной через output_config.effort (low, medium, high, xhigh, max). Effort кладётся внутрь output_config, а не на верхний уровень.
  • При включённом размышлении max_tokens ограничивает размышление и ответ вместе — бюджет, рассчитанный только на ответ, обрежет его на середине.

Актуальный вид

thinking={"type": "adaptive"},
output_config={"effort": "high"}

Другие формы той же ошибки

  • max_tokens must be greater than thinking.budget_tokens
  • "thinking.type.enabled" is not supported for this model
  • "thinking.type.disabled" is not supported for this model
  • budget_tokens removed claude

Короткая ссылка: https://apitoken.sale/e/thinking-budget-tokens · Идентично на api.anthropic.com и на этом шлюзе.

400invalid_request_errorпромпт слишком длинныйНет
HTTP 400
{"type":"error","error":{"type":"invalid_request_error","message":"prompt is too long: 212164 tokens > 199999 maximum"}}

Почему возникает

  • Запрос превышает контекстное окно модели. Два числа в сообщении — размер вашего промпта и потолок для этой модели.
  • Агентный цикл, который дописывает в историю каждый результат инструмента и никогда её не подрезает.
  • Большие файлы или документы вставлены текстом вместо ссылки.

Что делать

  • Считайте заранее: эндпоинт count_tokens даёт точное число для конкретной модели. Не оценивайте токенизатором другого вендора — он заметно занижает счёт для Claude.
  • Вычищайте старые результаты инструментов из истории или включите серверную компакцию, чтобы ранние ходы сворачивались в сводку, а не пересылались дословно.
  • Большие документы загружайте один раз через Files API и ссылайтесь на file_id.

Другие формы той же ошибки

  • claude prompt is too long tokens > maximum
  • claude 200k context limit error

Короткая ссылка: https://apitoken.sale/e/prompt-too-long · Идентично на api.anthropic.com и на этом шлюзе.

400invalid_request_errorпромпт длиннее, чем эта модель обслуживаетНет
HTTP 400
{"type":"error","error":{"type":"invalid_request_error","message":"prompt is too long: exceeds the 200000 token maximum for claude-sonnet-4-6"}}

Почему возникает

  • claude-sonnet-4-6 обслуживает на этом эндпоинте 200 000 входных токенов. Замер 2026-08-29: 202 098 токенов проходят, 206 146 отклоняются.
  • Сам Anthropic отказывает в такой запрос ошибкой в форме рейт-лимита со ссылкой на кредиты, и это читается как временное ограничение. Оно не временное, повтор его не снимает, поэтому эндпоинт возвращает ту же ошибку превышения окна, что и все остальные модели Claude.
  • Другие модели Claude по тому же ключу берут заметно больше: claude-sonnet-5 и семейство Opus отвечают на документы в 256 000-345 000 токенов.

Что делать

  • Отправьте документ в claude-sonnet-5 или claude-opus-4-6 — тот же ключ и тот же эндпоинт, меняется только идентификатор модели.
  • Учтите рост счёта токенов на новом поколении: один и тот же текст весит примерно на 35% больше на Sonnet 5 и моделях 4.7/4.8, чем на Sonnet 4.6, — у них другой токенизатор.
  • Считайте заранее эндпоинтом count_tokens и именно для той модели, которой будете отправлять.
  • Подрезайте историю инструментов и ссылайтесь на большие документы вместо вставки текстом.

Другие формы той же ошибки

  • usage credits are required for long context requests
  • claude sonnet 4.6 200k context limit
  • claude sonnet 4.6 long context 429

Короткая ссылка: https://apitoken.sale/e/prompt-too-long-model-ceiling · Такой ответ есть только у этого шлюза — в Anthropic API аналога нет.

400invalid_request_errorнельзя задавать temperature и top_p одновременноНет
HTTP 400
{"type":"error","error":{"type":"invalid_request_error","message":"`temperature` and `top_p` cannot both be specified for this model. Please use only one."}}

Почему возникает

  • Оба параметра сэмплирования ушли в модель Claude 4. Фреймворки часто выставляют оба по умолчанию, так что в вашем коде их могло и не быть явно.
  • Начиная с Claude Opus 4.7 — включая Opus 4.8, Opus 5 и Fable 5 — эти параметры убраны совсем, и отправка любого из них даёт 400.
  • На Claude Sonnet 5 отклоняется значение, отличное от умолчания, а само умолчание принимается — поэтому один и тот же код может проходить на одном маршруте и падать на другом.

Что делать

  • На Claude 4.x отправляйте не больше одного из двух.
  • На Opus 4.7 и новее удалите оба, а также top_k. Замены нет: поведение задаётся промптом и параметром effort.
  • Если temperature=0 стоял ради детерминизма — он никогда и ни на одной модели не гарантировал идентичный вывод.

Было и стало

# Before — 400
client.messages.create(model="claude-opus-5", temperature=0.7, top_p=0.9, …)

# After
client.messages.create(model="claude-opus-5", …)

Другие формы той же ошибки

  • temperature and top_p cannot both be specified
  • claude opus temperature removed
  • bedrock claude temperature and topP error

Короткая ссылка: https://apitoken.sale/e/temperature-and-top-p · Идентично на api.anthropic.com и на этом шлюзе.

400invalid_request_errortool_use без парного tool_resultНет
HTTP 400
{"type":"error","error":{"type":"invalid_request_error","message":"`tool_use` ids were found without `tool_result` blocks immediately after: toolu_… Each `tool_use` block must have a corresponding `tool_result` block in the next message."}}

Почему возникает

  • Ход ассистента запросил один или несколько инструментов, а следующее сообщение вернуло результат не для каждого из них.
  • В историю добавили только текст вместо всего содержимого ответа, из-за чего блоки tool_use молча потерялись.
  • Инструменты запрашивались параллельно, а результаты разложили по нескольким сообщениям вместо одного.
  • Инструмент упал, и код не отправил результат вместо того, чтобы отправить результат с ошибкой.

Что делать

  • Добавляйте в историю всё содержимое ответа целиком, а не только текст.
  • Возвращайте все tool_result одного хода внутри одного пользовательского сообщения. Разбивка вдобавок отучает модель делать параллельные вызовы.
  • При падении инструмента всё равно верните tool_result с признаком ошибки — не пропускайте его.

Другие формы той же ошибки

  • tool_use ids were found without tool_result blocks
  • claude code tool_result error

Короткая ссылка: https://apitoken.sale/e/tool-result-missing · Идентично на api.anthropic.com и на этом шлюзе.

400invalid_request_errorДля длинных операций требуется потоковая передачаНет
HTTP 400
{"type":"error","error":{"type":"invalid_request_error","message":"Streaming is strongly recommended for operations that may take longer than 10 minutes"}}

Почему возникает

  • Непотоковый запрос сделан с таким max_tokens, при котором ответ может не уложиться в таймаут запроса.
  • Чаще всего встречается в no-code и workflow-инструментах, где узел выставляет большой max_tokens, но не даёт переключателя потоковой передачи.

Что делать

  • Отдавайте запрос потоком и забирайте итоговое сообщение через хелпер стрима.
  • Если в вашем инструменте потока нет, уменьшите max_tokens до значения, которое укладывается в таймаут — примерно 16K токенов вывода это безопасный непотоковый потолок.

Поток и итоговое сообщение

with client.messages.stream(model="claude-opus-5", max_tokens=64000, …) as stream:
    message = stream.get_final_message()

Другие формы той же ошибки

  • Streaming is required for operations that may take longer than 10 minutes

Короткая ссылка: https://apitoken.sale/e/streaming-required · Идентично на api.anthropic.com и на этом шлюзе.

401authentication_errorinvalid x-api-keyНет
HTTP 401
{"type":"error","error":{"type":"authentication_error","message":"invalid x-api-key"}}

Почему возникает

  • Заголовок x-api-key отсутствует или пуст — чаще всего переменная окружения не задана в том процессе, который реально делает запрос.
  • Ключ уходит не в том заголовке. ANTHROPIC_API_KEY отправляется как x-api-key, а ANTHROPIC_AUTH_TOKEN — как Authorization: Bearer. Верный ключ в неверном заголовке даёт ту же ошибку.
  • Заданы обе переменные сразу, поэтому уходят оба заголовка и запрос отклоняется. Пустая строка тоже считается заданным значением.
  • Ключ отозван или истёк, если он выпускался с датой окончания.
  • С ключом всё в порядке, но base URL ведёт туда, где про этот ключ никогда не слышали.

Что делать

  • Выведите первые несколько символов переменной внутри того же процесса, который падает. Большинство 401 — это проблема окружения или кавычек, а не ключа.
  • Оставьте одну переменную, вторую снимите. Это самая частая причина, когда используется свой base URL.
  • Проверьте, что ключ активен в панели, а base URL соответствует его издателю.

Проверьте, что уходит на самом деле

# Is the variable set in THIS shell?
echo "${ANTHROPIC_API_KEY:0:12}…"
# Is a competing variable also set?
env | grep -E 'ANTHROPIC_(API_KEY|AUTH_TOKEN|BASE_URL)'

curl https://router.apitoken.sale/v1/models \
  -H "x-api-key: $ANTHROPIC_API_KEY" \
  -H "anthropic-version: 2023-06-01"

Другие формы той же ошибки

  • 401 - {'type': 'error', 'error': {'type': 'authentication_error', 'message': 'invalid x-api-key'}}
  • litellm.AuthenticationError: AnthropicException - invalid x-api-key
  • anthropic.AuthenticationError
  • claude code 401 custom ANTHROPIC_BASE_URL
  • cursor bad user api key unauthorized anthropic

Короткая ссылка: https://apitoken.sale/e/invalid-api-key · Идентично на api.anthropic.com и на этом шлюзе.

402billing_errorнедостаточно баланса или достигнут лимит трат ключаНет
HTTP 402
{"type":"error","error":{"type":"billing_error","message":"insufficient balance or key spending limit reached for this request"}}

Почему возникает

  • Предоплаченного баланса не хватает на только что отправленный запрос.
  • У ключа задан собственный лимит трат, и он достигнут, хотя на аккаунте баланс ещё есть.
  • error.type — billing_error, как в Anthropic Platform. Это не invalid_request_error и не 429: SDK ретраят 429.

Что делать

  • Пополните баланс или поднимите лимит трат у этого ключа.
  • Проверьте живой баланс после зачисления. Незавершённое пополнение ещё нельзя тратить.
  • Смотрите актуальный баланс тем же ключом, которым делаете запросы. Ветвитесь по HTTP 402 и error.type billing_error, а не по тексту сообщения.

Проверить баланс по ключу

curl https://api.apitoken.sale/balance \
  -H "x-api-key: $ANTHROPIC_API_KEY"

Другие формы той же ошибки

  • claude api 402
  • api key spending limit reached
  • {"type":"error","error":{"type":"billing_error","message":"insufficient balance or key spending limit reached for this request"}}

Короткая ссылка: https://apitoken.sale/e/insufficient-balance · Такой ответ есть только у этого шлюза — в Anthropic API аналога нет.

403permission_errorдоступ запрещёнНет
HTTP 403
{"type":"error","error":{"type":"permission_error","message":"Your API key does not have permission to use the specified resource."}}

Почему возникает

  • Ключ действителен, но не имеет права на запрошенную модель или возможность.
  • Региональное ограничение. Этот вариант часто приходит с более коротким телом вроде «Request not allowed» и касается того, откуда идёт запрос, а не самого ключа.
  • В официальном Anthropic API проблема с оплатой тоже может прийти как 403 — различать их нужно по типу ошибки, а не по статусу. На этом шлюзе предоплаченные деньги — HTTP 402 с error.type billing_error.

Что делать

  • Ветвитесь по error.type, а не по одному статусу: billing_error — это деньги, permission_error — это права.
  • Попробуйте модель, доступ к которой точно есть, чтобы понять, здоров ли сам ключ.
  • При региональной блокировке лечится точка выхода запроса, а не ключ. Этот шлюз принимает запросы из регионов, откуда апстрим напрямую недоступен.

Другие формы той же ошибки

  • anthropic 403 Request not allowed
  • claude api 403 forbidden country

Короткая ссылка: https://apitoken.sale/e/permission-denied · Идентично на api.anthropic.com и на этом шлюзе.

404not_found_errorмодель или эндпоинт не найденыНет
HTTP 404
{"type":"error","error":{"type":"not_found_error","message":"model: claude-opus-4-5-20251101"}}

Почему возникает

  • Несуществующий идентификатор модели: опечатка, дописанный к алиасу суффикс с датой или идентификатор, выведенный из обращения.
  • Идентификаторы моделей пишутся через дефисы: claude-sonnet-4-6, но не claude-sonnet-4.6.
  • Base URL, который уже заканчивается на /v1, из-за чего SDK собрал /v1/v1/messages.

Что делать

  • Указывайте в base URL только origin и дайте SDK самому дописать /v1.
  • Запросите список моделей, доступных ключу, вместо угадывания идентификатора.
  • Замените выведенные модели: Claude 3.7 Sonnet и Claude 3.5 Sonnet — на claude-sonnet-5, Claude 3.5 Haiku — на claude-haiku-4-5, Claude 3 Opus — на claude-opus-5.

Список моделей, доступных ключу

curl https://router.apitoken.sale/v1/models \
  -H "x-api-key: $ANTHROPIC_API_KEY" \
  -H "anthropic-version: 2023-06-01"

Другие формы той же ошибки

  • claude api 404 not_found_error model
  • cursor model not found anthropic api key
  • claude-3-5-sonnet 404

Короткая ссылка: https://apitoken.sale/e/not-found · Идентично на api.anthropic.com и на этом шлюзе.

404not_found_errorэта поверхность Anthropic здесь не обслуживаетсяНет
HTTP 404
{"type":"error","error":{"type":"not_found_error","message":"The Message Batches API is not available on this endpoint. This endpoint serves POST /v1/messages, POST /v1/messages/count_tokens, GET /v1/models and GET /v1/models/{model_id}."}}

Почему возникает

  • Эндпоинт обслуживает Messages API, подсчёт токенов и список моделей. Message Batches, Files API, устаревший Text Completions, Admin API, Managed Agents и Skills не обслуживаются — в тексте ошибки названо, во что именно вы попали.
  • Хелпер SDK сам полез на такую поверхность — например, загрузил документ через Files API, прежде чем сослаться на него в сообщении.

Что делать

  • Передавайте документы и изображения прямо в сообщении, без предварительной загрузки.
  • Замените устаревший вызов /v1/complete на POST /v1/messages.
  • Расход и остаток смотрите в личном кабинете, а не через организационный Admin API.

Другие формы той же ошибки

  • anthropic files api 404
  • message batches not available
  • v1/complete 404 claude

Короткая ссылка: https://apitoken.sale/e/endpoint-not-available · Такой ответ есть только у этого шлюза — в Anthropic API аналога нет.

413request_too_largeзапрос слишком большойНет
HTTP 413
{"type":"error","error":{"type":"request_too_large","message":"Request exceeds the maximum size"}}

Почему возникает

  • Сериализованное тело превышает потолок размера. Обычная причина — картинки и PDF в base64.
  • Base64 раздувает бинарные данные примерно на треть, поэтому файл, который на диске выглядит безопасным, на проводе выходит за лимит.
  • Запрос может упереться в промежуточный потолок ниже задокументированного максимума, если приложено сразу много файлов.

Что делать

  • Уменьшайте или пережимайте изображения до кодирования — большинству задач исходное разрешение не нужно.
  • Большие документы загружайте один раз через Files API и ссылайтесь на file_id вместо пересылки байтов на каждом ходу.
  • Подрезайте историю сообщений вместо дословного повтора всех ходов.

Другие формы той же ошибки

  • claude api 413 request_too_large
  • claude request exceeds the maximum size
  • Request exceeds the maximum allowed number of bytes.

Короткая ссылка: https://apitoken.sale/e/request-too-large · Идентично на api.anthropic.com и на этом шлюзе.

429rate_limit_errorпревышен лимит запросовДа, с задержкой
HTTP 429
{"type":"error","error":{"type":"rate_limit_error","message":"This request would exceed your organization's rate limit of 80,000 input tokens per minute. Please reduce the prompt length or the maximum tokens requested, or try again later."}}

Почему возникает

  • Превышен поминутный потолок по токенам или запросам. Число в сообщении — ваш собственный лимит, поэтому у разных аккаунтов оно разное.
  • Всплеск без ограничения параллелизма — обычно это параллельный проход по большому списку.
  • Ретраи, наложенные поверх запросов, которые и вызвали первый 429: всплеск от этого растёт, а не рассасывается.
  • Один очень большой промпт может исчерпать поминутный бюджет сам по себе — поэтому в сообщении предлагается ещё и сократить промпт, а не только подождать.

Что делать

  • Читайте заголовок Retry-After вместо того, чтобы угадывать паузу.
  • Официальные SDK уже ретраят 429 и 5xx с экспоненциальной задержкой (по умолчанию дважды) — поднимите max_retries вместо своего цикла.
  • Ограничьте параллелизм на стороне клиента. Семафор вокруг вызова лечит больше 429, чем любая политика ретраев.
  • Не путайте это с HTTP 402 billing_error — то пустой предоплаченный баланс. 429 — повторяемая пропускная способность. Для 402 пополните баланс; для 429 читайте Retry-After.

Пусть SDK сам отступает

import anthropic

client = anthropic.Anthropic(max_retries=5)  # retries 429 and 5xx with backoff

Другие формы той же ошибки

  • Number of request tokens has exceeded your per-minute rate limit
  • Number of requests has exceeded your rate limit. Please try again later.
  • anthropic.RateLimitError
  • claude api 429 too many requests

Короткая ссылка: https://apitoken.sale/e/rate-limit · Идентично на api.anthropic.com и на этом шлюзе.

500api_errorвнутренняя ошибка сервераДа, с задержкой
HTTP 500
{"type":"error","error":{"type":"api_error","message":"Internal server error"}}

Почему возникает

  • Непредвиденный сбой при обработке запроса. Ваши данные его не вызывали.

Что делать

  • Ретрайте с экспоненциальной задержкой — SDK делают это для 5xx автоматически.
  • Если ошибка держится для одного запроса, пока другие проходят, зафиксируйте идентификатор запроса и передайте в поддержку.

Другие формы той же ошибки

  • anthropic api_error internal server error

Короткая ссылка: https://apitoken.sale/e/api-error · Идентично на api.anthropic.com и на этом шлюзе.

529overloaded_errorOverloadedДа, с задержкой
HTTP 529
{"type":"error","error":{"type":"overloaded_error","message":"Overloaded"}}

Почему возникает

  • Мощности апстрима временно перегружены. 529 говорит о состоянии сервиса, а не о вашем запросе.
  • Ошибка кучкуется во время инцидентов: тот же самый запрос обычно проходит через несколько минут без единого изменения.

Что делать

  • Ретрайте с экспоненциальной задержкой и джиттером. Никогда в плотном цикле — именно это и создаёт затор.
  • Обратите внимание: статус 529, а не 503. Некоторые HTTP-клиенты и прокси считают ретраибельными только фиксированный набор кодов, и 529 в него часто не входит — тогда ретрай, на который вы рассчитываете, просто не срабатывает.
  • Для чувствительных к задержке сценариев предусмотрите переход на модель поменьше — она обычно менее загружена.

Другие формы той же ошибки

  • API Error: 529 {"type":"error","error":{"type":"overloaded_error","message":"Overloaded"}}
  • anthropic api overloaded error repeated 529
  • claude 529 vs 429

Короткая ссылка: https://apitoken.sale/e/overloaded · Идентично на api.anthropic.com и на этом шлюзе.

Маршрут KIMI — все коды

kimi/* использует тот же JSON Anthropic, поэтому 401, 402 billing_error, 429 и 529 — строки Anthropic выше. Эти дополнительные 400 — ограничения только KIMI: поля официального Kimi API, которые этот endpoint выполнить не может, плюс count_tokens, которого у kimi/* здесь нет:

Откройте строку — внутри точное тело ответа и что делать. Листать все ошибки подряд не нужно.

400invalid_request_error / documented_limitationдокументированное ограничение (mcp_servers)Нет
HTTP 400
{"type":"error","error":{"type":"invalid_request_error","message":"mcp_servers cannot be honoured on this endpoint. The official Kimi API accepts it; omit 'mcp_servers' or declare client-side tools in tools[].","details":{"error_code":"documented_limitation","param":"mcp_servers"}}}

Почему возникает

  • Официальный Kimi API принимает mcp_servers. Этот endpoint поле на kimi/* выполнить не может и отказывает до отправки.
  • error.type остаётся invalid_request_error, чтобы SDK Anthropic продолжали разбор. Класс лежит в error.details.error_code.

Что делать

  • Уберите mcp_servers. Объявите ту же возможность как клиентский инструмент в tools[] и обрабатывайте tool_use / tool_result сами.
  • Не повторяйте то же тело — отказ не является лимитом частоты.

Другие формы той же ошибки

  • documented_limitation mcp_servers
  • cannot be honoured on this endpoint

Короткая ссылка: https://apitoken.sale/e/documented-limitation-kimi-mcp · Возвращается на kimi/*. Протокол — Anthropic. Авторизация, деньги, лимит частоты и overload — строки Anthropic выше.

400invalid_request_error / documented_limitationдокументированное ограничение (провайдерские tools)Нет
HTTP 400
{"type":"error","error":{"type":"invalid_request_error","message":"tools cannot be honoured on this endpoint. The official Kimi API accepts it; omit this tool or declare it as a client-side tool.","details":{"error_code":"documented_limitation","param":"tools"}}}

Почему возникает

  • Официальный Kimi API принимает провайдерские search, computer и code_execution. Этот endpoint их на kimi/* не исполняет.
  • Клиентские tools[] с tool_use / tool_result принимаются. Отказ только для tool, который исполнял бы провайдер.
  • error.type остаётся invalid_request_error. Класс лежит в error.details.error_code.

Что делать

  • Уберите этот tool или объявите его как клиентский в tools[] и обрабатывайте tool_use / tool_result сами.
  • Не повторяйте то же тело.

Другие формы той же ошибки

  • documented_limitation tools
  • omit this tool or declare it as a client-side tool

Короткая ссылка: https://apitoken.sale/e/documented-limitation-kimi-tools · Возвращается на kimi/*. Протокол — Anthropic. Авторизация, деньги, лимит частоты и overload — строки Anthropic выше.

400invalid_request_error / unsupported_parameterнеподдерживаемый параметр (count_tokens на kimi/*)Нет
HTTP 400
{"type":"error","error":{"type":"invalid_request_error","message":"Unsupported parameter: '/v1/messages/count_tokens' is not supported with this endpoint. The official Anthropic API accepts it; Use POST /v1/messages; token counting is not available for kimi/* on this endpoint.","details":{"error_code":"unsupported_parameter","param":"/v1/messages/count_tokens"}}}

Почему возникает

  • POST /v1/messages/count_tokens есть на маршруте Anthropic для моделей Claude. У kimi/* на этом endpoint нет sibling count_tokens.
  • error.type остаётся invalid_request_error. Класс лежит в error.details.error_code.

Что делать

  • Отправьте то же тело на POST /v1/messages. Usage в ответе — учтённое число токенов.
  • Не повторяйте count_tokens против model id kimi/*.

Другие формы той же ошибки

  • token counting is not available for kimi/*
  • count_tokens kimi

Короткая ссылка: https://apitoken.sale/e/unsupported-parameter-kimi-count-tokens · Возвращается на kimi/*. Протокол — Anthropic. Авторизация, деньги, лимит частоты и overload — строки Anthropic выше.

Маршруты OpenAI — все коды

Маршруты OpenAI возвращают конверт ошибок OpenAI — ветвитесь по error.code и HTTP-статусу. Поле, которое этот endpoint не может выполнить, даёт 400 с code documented_limitation или unsupported_parameter, именованным param и обходным путём в сообщении. Это точные ответы router.apitoken.sale/v1:

{"error":{"message":"Incorrect API key provided.","type":"invalid_request_error","param":null,"code":"invalid_api_key"}}

Откройте строку — внутри точное тело ответа и что делать. Листать все ошибки подряд не нужно.

400invalid_request_error / documented_limitationдокументированное ограничение (hosted tool)Нет
HTTP 400
{"error":{"message":"tools.0.type cannot be honoured on this endpoint. The official OpenAI API accepts it; omit this 'hosted_shell' tool or use a client-side custom tool.","type":"invalid_request_error","param":"tools.0.type","code":"documented_limitation"}}

Почему возникает

  • Официальный OpenAI API принимает это поле или тип инструмента. Этот endpoint выполнить его не может, поэтому отказывает до отправки — никогда не тихий 200 с отброшенным полем.
  • Тот же класс покрывает hosted_shell, code_interpreter, apply_patch, skills, file_search, computer, mcp, prompt_cache_retention, reasoning.mode, нативные max_output_tokens на проводе Codex и store / previous_response_id / item_reference на модели не openai/*.
  • error.type остаётся invalid_request_error. Ветвитесь по error.code documented_limitation и error.param.

Что делать

  • Уберите названное поле или следуйте обходу в сообщении (клиентский custom tool, PNG data URL, модель openai/* для сохранённых ответов).
  • Не повторяйте то же тело. Переходите на нативный маршрут модели только если этот маршрут поле действительно выполняет.

Другие формы той же ошибки

  • store cannot be honoured on this endpoint. The official OpenAI API accepts it; omit 'store' or use an openai/* model.
  • prompt_cache_retention cannot be honoured on this endpoint. The official OpenAI API accepts it; omit 'prompt_cache_retention'.
  • reasoning.mode cannot be honoured on this endpoint. The official OpenAI API accepts it; omit 'reasoning.mode'.
  • documented_limitation OpenAI

Короткая ссылка: https://apitoken.sale/e/openai-documented-limitation · Возвращается OpenAI-маршрутами единого endpoint (router.apitoken.sale/v1).

400invalid_request_error / unsupported_parameterнеподдерживаемый параметрНет
HTTP 400
{"error":{"message":"Unsupported parameter: 'n' is not supported with this endpoint. The official OpenAI API accepts it; omit 'n' or send n=1.","type":"invalid_request_error","param":"n","code":"unsupported_parameter"}}

Почему возникает

  • Этот HTTP-путь никогда не принимает названное поле. Обычный случай — Chat n отличный от 1 на адаптере Anthropic Messages.
  • Это не documented_limitation: unsupported_parameter — неверная форма для этого endpoint; documented_limitation — разрыв относительно официального API ёмкости.
  • Значение по умолчанию, опущенное поле или JSON null отказом не являются. 400 приходит только на присутствующее ненулевое значение, которое нельзя выполнить.

Что делать

  • Уберите названный параметр или отправьте значение из сообщения (n=1).
  • Если нужно официальное поведение, вызывайте нативный маршрут, который поле принимает.

Другие формы той же ошибки

  • Unsupported parameter: 'n' is not supported with this endpoint.
  • 400 unsupported_parameter

Короткая ссылка: https://apitoken.sale/e/openai-unsupported-parameter · Возвращается OpenAI-маршрутами единого endpoint (router.apitoken.sale/v1).

401invalid_request_error / invalid_api_keyIncorrect API key providedНет
HTTP 401
{"error":{"message":"Incorrect API key provided.","type":"invalid_request_error","param":null,"code":"invalid_api_key"}}

Почему возникает

  • Ключ отправлен в заголовке x-api-key. Маршруты OpenAI авторизуются через Authorization: Bearer — x-api-key предназначен только маршруту Anthropic.
  • В заголовке Authorization нет префикса Bearer, или переменная окружения, из которой он собран, пуста в том шелле, который запускает процесс.
  • Ключ отозван или истёк, если он выпускался с датой окончания.
  • Ключ верен, но base URL ведёт на адрес маршрута Anthropic (router.apitoken.sale без /v1 или legacy api.apitoken.sale) вместо router.apitoken.sale/v1.

Что делать

  • Отправляйте тот же ключ sk-pool как Authorization: Bearer sk-pool-… на https://router.apitoken.sale/v1.
  • В официальном SDK OpenAI задайте api_key (или OPENAI_API_KEY) и base_url — заголовок Bearer SDK добавит сам.
  • Проверьте, что ключ активен в панели, а хост — маршрут OpenAI единого endpoint.

Воспроизведите вне инструмента

curl https://router.apitoken.sale/v1/models \
  -H "Authorization: Bearer $APITOKEN_API_KEY"

Другие формы той же ошибки

  • {"error":{"message":"Incorrect API key provided.","type":"invalid_request_error","param":null,"code":"invalid_api_key"}}
  • openai.AuthenticationError
  • codex stream error: unexpected status 401

Короткая ссылка: https://apitoken.sale/e/openai-invalid-api-key · Возвращается OpenAI-маршрутами единого endpoint (router.apitoken.sale/v1).

402insufficient_quota / insufficient_quotaнедостаточно средств на балансеНет
HTTP 402
{"error":{"message":"Your account balance is insufficient for this request.","type":"insufficient_quota","param":null,"code":"insufficient_quota"}}

Почему возникает

  • Общего предоплаченного баланса всех маршрутов единого endpoint не хватает на запрос.
  • Расход на одном маршруте опустошает тот же баланс для остальных.
  • HTTP-статус — 402, не 429. Официальная OpenAI Platform кладёт деньги на 429 insufficient_quota; этот продукт так не делает, потому что SDK OpenAI ретраят 429. type и code остаются insufficient_quota, чтобы ветвиться по полю.

Что делать

  • Пополните баланс на любую целую сумму и повторите после зачисления. Ожидание само по себе 402 не устраняет.
  • Проверьте живой баланс тем же ключом перед повтором.
  • 429 — это повторяемая ёмкость. 402 insufficient_quota — пустой предоплаченный баланс.

Другие формы той же ошибки

  • openai insufficient_quota
  • codex 402 insufficient balance

Короткая ссылка: https://apitoken.sale/e/openai-insufficient-quota · Возвращается OpenAI-маршрутами единого endpoint (router.apitoken.sale/v1).

404invalid_request_error / model_not_foundмодель не существуетНет
HTTP 404
{"error":{"message":"The model \"gpt-9.9\" does not exist or you do not have access to it.","type":"invalid_request_error","param":null,"code":"model_not_found"}}

Почему возникает

  • ID модели написан с опечаткой или требует namespaced-формы: на общих маршрутах каталог публикует anthropic/claude-*, openai/gpt-* и google/gemini-*, а обычный нативный ID перестаёт работать, когда становится неоднозначным.
  • Модель не входит в текущий включённый каталог — обслуживаемый набор меняется по мере допуска моделей.

Что делать

  • Посмотрите, какие модели реально доступны вашему ключу: GET https://router.apitoken.sale/v1/models с Authorization: Bearer.
  • Сверьте ID посимвольно — gpt-5.6-sol, а не gpt5.6 и не gpt-5.6.sol. gpt-5.6 — допустимый псевдоним gpt-5.6-sol.

Узнайте включённые модели

curl https://router.apitoken.sale/v1/models \
  -H "Authorization: Bearer $APITOKEN_API_KEY"

Другие формы той же ошибки

  • openai model_not_found
  • codex stream error: unexpected status 404
  • The model does not exist or you do not have access to it

Короткая ссылка: https://apitoken.sale/e/openai-model-not-found · Возвращается OpenAI-маршрутами единого endpoint (router.apitoken.sale/v1).

429rate_limit_error / rate_limit_exceededдостигнут лимит запросовДа, с задержкой
HTTP 429
{"error":{"message":"Rate limit reached. Please retry shortly.","type":"rate_limit_error","param":null,"code":"rate_limit_exceeded"}}

Почему возникает

  • Превышен потолок параллелизма или частоты запросов аккаунта — обычно это параллельная волна без ограничителя.
  • Ретраи, наложенные поверх запросов, вызвавших первый 429, раздувают всплеск вместо того, чтобы его рассосать.

Что делать

  • Учитывайте заголовок Retry-After — ответ его содержит.
  • Ретрайте с ограниченной экспоненциальной задержкой и джиттером и ограничьте параллелизм на стороне клиента.

Другие формы той же ошибки

  • openai rate_limit_error
  • codex stream error: unexpected status 429

Короткая ссылка: https://apitoken.sale/e/openai-rate-limit · Возвращается OpenAI-маршрутами единого endpoint (router.apitoken.sale/v1).

503server_error / service_unavailableмодель временно недоступнаДа, с задержкой
HTTP 503
{"error":{"message":"The requested model is temporarily unavailable. Please retry.","type":"server_error","param":null,"code":"service_unavailable"}}

Почему возникает

  • Мощности апстрима для запрошенной модели временно исчерпаны. 503 говорит о состоянии сервиса, а не о вашем запросе.
  • Ошибка кучкуется во время инцидентов: тот же самый запрос обычно проходит через несколько минут без единого изменения.

Что делать

  • Ретрайте с экспоненциальной задержкой и джиттером — ответ содержит подсказку Retry-After.
  • Для чувствительных к задержке сценариев предусмотрите переход на другой включённый уровень модели — он обычно менее загружен.

Другие формы той же ошибки

  • openai service_unavailable server_error

Короткая ссылка: https://apitoken.sale/e/openai-service-unavailable · Возвращается OpenAI-маршрутами единого endpoint (router.apitoken.sale/v1).

Маршрут Gemini — все коды

Нативный маршрут Gemini возвращает конверт ошибок Google — ветвитесь по error.status и причине ErrorInfo. Неверный клиентский ключ — 400 INVALID_ARGUMENT / API_KEY_INVALID. Предоплаченные деньги — 402 FAILED_PRECONDITION. Поле, которое официальный Gemini API принимает, а этот endpoint выполнить не может, — 400 INVALID_ARGUMENT со стабильной причиной *_UNSUPPORTED:

{"error":{"code":400,"message":"API key not valid. Please pass a valid API key.","status":"INVALID_ARGUMENT","details":[{"@type":"type.googleapis.com/google.rpc.ErrorInfo","reason":"API_KEY_INVALID","domain":"googleapis.com"}]}}

Откройте строку — внутри точное тело ответа и что делать. Листать все ошибки подряд не нужно.

400INVALID_ARGUMENT / API_KEY_INVALIDAPI_KEY_INVALIDНет
HTTP 400
{"error":{"code":400,"message":"API key not valid. Please pass a valid API key.","status":"INVALID_ARGUMENT","details":[{"@type":"type.googleapis.com/google.rpc.ErrorInfo","reason":"API_KEY_INVALID","domain":"googleapis.com","metadata":{"service":"generativelanguage.googleapis.com"}}]}}

Почему возникает

  • Нативный маршрут Gemini отвечает 400 INVALID_ARGUMENT с причиной ErrorInfo API_KEY_INVALID — официальный Google API делает то же. Другие маршруты отвечают 401.
  • Заголовок x-goog-api-key отсутствует, пуст, с опечаткой или несёт отозванный ключ.
  • Вместо него отправлены x-api-key или Authorization: Bearer. Эти заголовки относятся к маршрутам Anthropic и OpenAI.

Что делать

  • Передайте активный ключ sk-pool в x-goog-api-key. Обрабатывайте этот 400 как 401: не повторяйте запрос с тем же ключом.
  • Если ключ отозван, создайте замену в панели.

Другие формы той же ошибки

  • API_KEY_INVALID
  • API key not valid. Please pass a valid API key.

Короткая ссылка: https://apitoken.sale/e/gemini-invalid-api-key · Возвращается нативным маршрутом Gemini (router.apitoken.sale/v1beta и gemini.api.apitoken.sale).

400INVALID_ARGUMENT / FILE_URI_UNSUPPORTEDFILE_URI_UNSUPPORTEDНет
HTTP 400
{"error":{"code":400,"message":"fileData cannot be honoured on this endpoint. The official Gemini API accepts it; send the file as inlineData with mimeType and base64 data.","status":"INVALID_ARGUMENT","details":[{"@type":"type.googleapis.com/google.rpc.ErrorInfo","reason":"FILE_URI_UNSUPPORTED","domain":"googleapis.com","metadata":{"service":"generativelanguage.googleapis.com","param":"fileData"}}]}}

Почему возникает

  • Официальный Gemini API принимает fileData / file_uri. Этот endpoint не может выполнить ссылку Files API чужого Google-проекта в синхронном generateContent, поэтому отказывает со стабильной причиной ErrorInfo.
  • Тот же класс покрывает cachedContent (CACHED_CONTENT_UNSUPPORTED), явный serviceTier, явные store-контроли логирования и аудио на модели, для которой этот шлюз аудио не обслуживает.

Что делать

  • Отправьте файл inline как inlineData с mimeType и данными в base64.
  • Для большого Gemini Batch input загрузите account-scoped JSONL в этот шлюз и передайте возвращённое имя как inputConfig.fileName.
  • Не повторяйте то же тело.

Другие формы той же ошибки

  • cachedContent cannot be honoured on this endpoint. The official Gemini API accepts it; omit 'cachedContent' or send the content inline.
  • CACHED_CONTENT_UNSUPPORTED
  • FILE_URI_UNSUPPORTED

Короткая ссылка: https://apitoken.sale/e/gemini-file-uri-unsupported · Возвращается нативным маршрутом Gemini (router.apitoken.sale/v1beta и gemini.api.apitoken.sale).

402FAILED_PRECONDITIONFAILED_PRECONDITION (предоплаченный баланс)Нет
HTTP 402
{"error":{"code":402,"message":"The account balance is insufficient for this request.","status":"FAILED_PRECONDITION"}}

Почему возникает

  • Общего предоплаченного баланса не хватает на запрос. У официального Gemini API нет денежного 402; этот шлюз всё равно шлёт HTTP 402, чтобы клиенты не ретраили его как ёмкость.
  • error.status — FAILED_PRECONDITION. Это не RESOURCE_EXHAUSTED и не 429.

Что делать

  • Пополните баланс на любую целую сумму в долларах и повторите после зачисления.
  • Не считайте 402 лимитом частоты. Ожидание пустой баланс не восстанавливает.

Другие формы той же ошибки

  • The account balance is insufficient for this request.
  • gemini 402 FAILED_PRECONDITION

Короткая ссылка: https://apitoken.sale/e/gemini-insufficient-balance · Возвращается нативным маршрутом Gemini (router.apitoken.sale/v1beta и gemini.api.apitoken.sale).

Не помогло?

Если запрос падает так, как здесь не описано, пришлите нам эндпоинт, маскированный идентификатор ключа, HTTP-статус и тело ответа. Полный ключ присылать не нужно никогда.

apiToken.sale отдаёт нативные Anthropic Messages (включая маршрут KIMI на kimi/*), OpenAI Responses и Gemini API плюс OpenAI-совместимый маршрут через единый router endpoint, поэтому не-шлюзовые ошибки здесь ведут себя ровно так же, как против официальных эндпоинтов. Смотрите также гайд про лимиты и как направить SDK на свой base URL.