Коды ошибок 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 prefillclaude 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 creditsclaude pro credit balance too lowyour 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 tokensclaude 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 modelbudget_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 > maximumclaude 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 requestsclaude sonnet 4.6 200k context limitclaude 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 specifiedclaude opus temperature removedbedrock 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 blocksclaude 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-keyanthropic.AuthenticationErrorclaude code 401 custom ANTHROPIC_BASE_URLcursor 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 402api 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 allowedclaude 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 modelcursor model not found anthropic api keyclaude-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 404message batches not availablev1/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_largeclaude request exceeds the maximum sizeRequest 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 limitNumber of requests has exceeded your rate limit. Please try again later.anthropic.RateLimitErrorclaude 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 529claude 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_serverscannot 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 toolsomit 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.AuthenticationErrorcodex 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_quotacodex 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_foundcodex stream error: unexpected status 404The 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_errorcodex stream error: unexpected status 429
Короткая ссылка: https://apitoken.sale/e/openai-rate-limit · Возвращается 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_INVALIDAPI 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_UNSUPPORTEDFILE_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.