Claude в AWS Bedrock отвечает 400: причина по тексту ошибки
Статус 400 причину не называет — её называет текст ошибки. Claude Code ходит в Bedrock только через Invoke API, и его 400 разбирается иначе, чем в своём коде.
Содержание

Смотрите на текст ошибки, а не на код 400
HTTP 400 от Claude в AWS значит одно: запрос дошёл до сервиса и был отклонён. Что исправлять, подсказывает не статус, а код ошибки (чаще всего ValidationException) и дословный текст после него. Под одной и той же «ошибкой 400» скрываются несовместимые поля запроса, устаревшая версия Claude Code, переполненный контекст, неверный ID модели, режим хранения данных аккаунта и даже исчерпанная квота. У каждой причины своё исправление, и переключатель, спасающий в одном случае, в другом ничего не меняет.
Второе, что определяет путь диагностики, — кто отправляет запрос. Claude Code с CLAUDE_CODE_USE_BEDROCK=1 работает с Bedrock только через Invoke API (InvokeModel / InvokeModelWithResponseStream) и Converse API не поддерживает. Советы про форму тела Converse пользователю Claude Code не помогут, а переменные окружения Claude Code бесполезны тому, кто вызывает Bedrock из собственного кода.
Найдите в таблице фрагмент своего сообщения и переходите к нужному разделу:
| Фрагмент сообщения | Что это обычно значит | Первое действие |
|---|---|---|
Extra inputs are not permitted, Unexpected value(s) for the anthropic-beta header | beta-поля дошли до API без заголовка anthropic-beta или модель их не принимает | настроить шлюз на пересылку anthropic-beta; запасной вариант — CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1 |
"thinking.type.enabled" is not supported for this model | Claude Code старше минимальной версии для выбранной модели | claude update и перезапуск |
max_tokens must be greater than thinking.budget_tokens | бюджет мышления не помещается в лимит вывода | снизить MAX_THINKING_TOKENS или поднять CLAUDE_CODE_MAX_OUTPUT_TOKENS |
Input is too long for requested model. | вход вместе с запрошенным выводом не влезает в окно модели | /compact или /clear; на версиях до v2.1.217 сначала обновиться |
orphaned tool_result, duplicate tool_use ID, thinking blocks ... cannot be modified | испорчена последовательность вызовов инструментов в истории | /rewind или двойное нажатие Esc |
The provided model identifier is invalid, on-demand throughput isn't supported | ID модели, префикс профиля, регион или статус аккаунта | сверить ID с aws bedrock list-inference-profiles |
data retention mode 'default' | модель требует режим хранения aws_review | решение администратора AWS |
ServiceQuotaExceededException | превышена квота аккаунта | повторить позже |
Access to Anthropic models is not allowed from unsupported countries, regions, or territories | адрес аккаунта или место вызова вне стран, где работает Anthropic | смена региона AWS не поможет |
Если в ответе не 400, а 403, 404, 429 или 529, это другие проблемы; коротко о них — в разделе «Что повторять, что нет и когда это вовсе не 400».
Claude Code, Mantle, шлюз или свой код
Внутри Claude Code команда /status показывает, какой провайдер и регион реально используются. Дальше возможны четыре ситуации:
- Прямой Bedrock (
CLAUDE_CODE_USE_BEDROCK=1): Claude Code вызывает Invoke API, а модели указываются как ID профилей вывода (inference profile) вродеus.anthropic.claude-opus-5-5. - Mantle (
CLAUDE_CODE_USE_MANTLE):/statusпоказываетAmazon Bedrock (Mantle), у моделей свои ID без суффикса версии. - Шлюз, корпоративный прокси или сторонний маршрут «AWS Claude»: между Claude Code и Bedrock стоит посредник, и большая часть ошибок
Extra inputs are not permittedрождается именно здесь. - Собственный код на boto3, AWS SDK или Anthropic SDK: вам нужен раздел про форму запроса ниже.
Как понять, какой из маршрутов включён и откуда Claude Code берёт настройки, подробно разобрано в материале «Настройка Claude Code API: ключи, settings.json, модели и шлюзы».
Команды и фрагменты кода ниже составлены по документации Anthropic и AWS по состоянию на 24 сентября 2026 года и в живом аккаунте AWS не запускались. Подставьте свои регион и ID модели. Номера версий Claude Code меняются часто, поэтому сверяйте их с текущей документацией.
Claude Code: сообщения и исправления
Extra inputs are not permitted: потерялся заголовок anthropic-beta
Типичный вид ошибки:
API Error: 400 ... Extra inputs are not permitted ... context_management
API Error: 400 ... Unexpected value(s) for the `anthropic-beta` headerClaude Code отправляет поля, доступные только в beta, например context_management и effort, вместе с заголовком anthropic-beta, который их включает. Если шлюз пересылает тело запроса, но отбрасывает заголовок, API видит незнакомые поля и отклоняет запрос.
Правильное исправление — настроить шлюз так, чтобы он пересылал anthropic-beta. Если шлюз не ваш и настроить его нельзя, отключите экспериментальные возможности до запуска Claude Code:
export CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1
claudeИли постоянно, через блок env в ~/.claude/settings.json; если там уже заданы ANTHROPIC_BASE_URL и ключ шлюза, добавьте переменную рядом с ними:
{
"env": {
"CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS": "1"
}
}Переменная убирает заголовки anthropic-beta и beta-поля в схемах инструментов (defer_loading, eager_input_streaming), а стандартные name, description, input_schema и cache_control оставляет; кэширование промптов она не выключает. У неё есть цена: отключается поиск MCP-инструментов, и все MCP-инструменты загружаются сразу, даже если задан ENABLE_TOOL_SEARCH. При большом числе MCP-серверов это заметно съедает окно контекста и может привести к Input is too long for requested model. — как с этим справляться, объясняет статья «Claude Code и перегрузка контекста MCP». Начиная с v2.1.227 поиск инструментов можно оставить включённым через управляемые настройки (managed settings).
Этот переключатель лечит только несовместимость полей. Ошибки ID модели, прав IAM, квоты и режима хранения данных он не исправит.
Если шлюза нет, а Bedrock всё равно отвечает output_config.effort: Extra inputs are not permitted, дело может быть в сочетании модели и клиента. В открытом с 4 марта 2026 года обсуждении claude-code-action #1005 так падали запросы к Sonnet 4.5 через профиль вывода приложения; участники пишут, что помог переход на Sonnet или Opus 4.6. Это пользовательские отчёты, а не официальное описание, но вывод из них практичный: сначала проверьте через /status и /model, какую модель на самом деле использует сессия.
Похожие ошибки beta-заголовков в OpenClaw разобраны отдельно: «Исправление OpenClaw Invalid Beta Flag».
Для тех, кто подключается через маршрут AWS Claude от LaoZhang API, есть отдельная страница FAQ об этой ошибке на английском. Она относится только к этому маршруту. Модели Claude в LaoZhang API были временно отключены 24 сентября 2026 года и снова доступны с 18 октября 2026 года.
Примечание: laozhang.ai — наш собственный сервис; его цены — наши тарифы, а не независимое сравнение.
Мышление: версия клиента и бюджет токенов
Сообщение
API Error: 400 ... "thinking.type.enabled" is not supported for this model. Use "thinking.type.adaptive" and "output_config.effort" to control thinking behavior.означает, что версия Claude Code старше минимальной для выбранной модели: клиент отправляет настройку мышления, которую модель уже не принимает. Запустите claude update и перезапустите Claude Code. Минимальные версии по состоянию на 24 сентября 2026 года:
| Модель | Минимальная версия Claude Code |
|---|---|
| Opus 4.7 | v2.1.111 |
| Opus 4.8 | v2.1.154 |
| Sonnet 5 | v2.1.197 |
| Opus 5 | v2.1.219 |
| Opus 5.5 | v2.1.280 |
Если обновиться нельзя, выберите через /model Opus 4.6 или Sonnet 4.6. У Agent SDK свои пороги: например, Opus 5.5 требует TypeScript SDK v0.3.280 или новее.
Тот же запрет действует и на стороне AWS для собственного кода. По документации Bedrock, Claude Fable 5.1, Mythos 5.1, Mythos 5 и Fable 5 не поддерживают расширенное мышление (extended thinking): запрос с thinking.type: "enabled" или "disabled" получает 400. Замените его на {"type": "adaptive"} вместе с output_config.effort или уберите thinking из запроса.
Второе сообщение про мышление касается бюджета:
API Error: 400 ... max_tokens must be greater than thinking.budget_tokensНа API Anthropic Claude Code подгоняет эти значения сам, а на Amazon Bedrock и Google Cloud ошибка обычно появляется, когда MAX_THINKING_TOKENS выше лимита вывода у провайдера или когда режим планирования поднимает бюджет. Снизьте MAX_THINKING_TOKENS или поднимите CLAUDE_CODE_MAX_OUTPUT_TOKENS выше бюджета. Учтите, что рост CLAUDE_CODE_MAX_OUTPUT_TOKENS уменьшает часть окна, доступную до автоматического сжатия.
У сторонних провайдеров, включая Bedrock, MAX_THINKING_TOKENS=0 просто убирает параметр thinking из запроса. У Opus 5.5 и моделей Fable мышление отключить нельзя, так что для них остаётся только согласовать бюджет с лимитом вывода. В собственном коде для моделей со стандартным расширенным мышлением правило то же: budget_tokens должен быть меньше max_tokens и не меньше 1 024; исключение — чередующееся мышление (interleaved thinking, beta) с инструментами.
Input is too long for requested model.
Так Bedrock называет переполнение контекста. Ограничение считается по сумме входных токенов и запрошенного вывода, поэтому ошибка возможна и тогда, когда сам диалог вроде бы помещается в окно.
Claude Code воспринимает эту формулировку как обычное Prompt is too long начиная с v2.1.217. В более ранних версиях автоматическое сжатие на неё не срабатывало, а /compact падал с той же ошибкой, поэтому на старом клиенте начните с обновления. Дальше:
/compactсжимает историю,/clearначинает сессию с чистого листа;/contextпоказывает, что занимает окно;/mcp disable <name>отключает MCP-серверы, которые сейчас не нужны;- слишком большой
CLAUDE.mdстоит сократить.
Если вы недавно включили CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1, помните, что с ней все MCP-инструменты грузятся сразу и занимают место в окне.
Испорченная история: tool_use, tool_result и thinking
Все эти сообщения значат одно и то же — последовательность блоков tool_use, tool_result и thinking в истории больше не соответствует ожиданиям API:
API Error: 400 due to tool use concurrency issues. Run /rewind to recover the conversation.
API Error: 400 orphaned tool_result in conversation history. Run /rewind to recover the conversation.
API Error: 400 duplicate tool_use ID in conversation history. Run /rewind to recover the conversation.
API Error: 400 ... unexpected `tool_use_id` found in `tool_result` blocks
API Error: 400 ... thinking blocks ... cannot be modifiedОбычно так бывает после прерванного вызова инструмента или правки хода посреди потока. Выполните /rewind или дважды нажмите Esc и вернитесь к контрольной точке до испорченного хода. На Opus 4.7 и 4.8 сначала обновитесь, если версия Claude Code ниже v2.1.156: такие версии могут вызывать эту ошибку при обычной работе с инструментами, и /rewind её не снимает. К Bedrock эта группа ошибок не привязана и встречается у любого провайдера.
ID модели, префикс профиля и Mantle
Без закреплённых моделей Claude Code на Bedrock по умолчанию использует Opus 5.5 как основную модель (в регионах us-* это us.anthropic.claude-opus-5-5) и Sonnet 4.5 как быструю (us.anthropic.claude-sonnet-4-5-20250929-v1:0). До v2.1.280 основной моделью по умолчанию была Opus 5.
Префикс профиля Claude Code выводит из региона: us-gov-* → us-gov., us-* → us., eu-* → eu., ap-* → apac., остальные → global.. Переменная ANTHROPIC_BEDROCK_REGION_PREFIX (v2.1.224+, значения us, eu, apac, jp, au, global) задаёт предпочтение, но не гарантию. Главная ловушка: если у роли нет права перечислять профили вывода в аккаунте, Claude Code подставляет префикс без проверки, и когда профили с таким префиксом в аккаунте не включены, запросы падают с 400. Поэтому не добавляйте us. или global. наугад. Что помогает:
- выдать роли
bedrock:ListInferenceProfilesиbedrock:GetInferenceProfile— второе право нужно, чтобы Claude Code определил модель за ARN профиля вывода приложения; - выставить префикс, профили с которым в аккаунте действительно включены;
- закрепить модели явно — ID и ARN, которые вы задали сами, Claude Code не переписывает.
Сообщение on-demand throughput isn't supported значит, что модель нужно указывать как ID профиля вывода, а не как ID базовой модели. Список доступных профилей:
aws bedrock list-inference-profiles --region "$AWS_REGION"Псевдонимы вроде opus могут указывать на модель, ещё не включённую в аккаунте. Если модель не закреплена и недоступна, Claude Code при старте заменит её более ранней версией, но только на текущую сессию; чтобы выбор был постоянным, закрепите версии:
export CLAUDE_CODE_USE_BEDROCK=1
export AWS_REGION=us-east-1
export ANTHROPIC_DEFAULT_OPUS_MODEL='us.anthropic.claude-opus-4-8'
export ANTHROPIC_DEFAULT_SONNET_MODEL='us.anthropic.claude-sonnet-4-6'
export ANTHROPIC_DEFAULT_HAIKU_MODEL='us.anthropic.claude-haiku-4-5-20251001-v1:0'Это примеры из документации Claude Code, а не список, гарантированно доступный в любом аккаунте и регионе: сверяйте их с выводом list-inference-profiles.
У Mantle свои правила. ID моделей там начинаются с anthropic. и не содержат версии, например anthropic.claude-sonnet-5. Ответ 400 с ID модели в тексте значит, что эта модель в Mantle не обслуживается; ID профилей Invoke API вроде us.anthropic.claude-sonnet-4-6 там не работают. Если /status не показывает Amazon Bedrock (Mantle), переменная CLAUDE_CODE_USE_MANTLE не доходит до процесса. Ответ 403 от Mantle при рабочих учётных данных означает, что у аккаунта нет доступа к модели, — это вопрос к команде вашего аккаунта AWS.
Если Claude Code жалуется на top_p, это отдельная история с собственным разбором: «Claude Code показывает top_p deprecated?».
data retention mode 'default': решает администратор AWS
После перехода на модели Fable каждое сообщение может завершаться так:
API Error: 400 data retention mode 'default' is not available for this modelТакой отчёт с моделью global.anthropic.claude-fable-5 и Claude Code 2.1.170 опубликован 9 июня 2026 года в issue #66594. Механизм описан в документации AWS о хранении данных (data retention): режимы упорядочены как none < default < aws_review < provider_data_share, а inherit означает «взять значение уровнем выше». Claude Fable 5 и Fable 5.1 требуют aws_review. Если действующий режим none или default, эндпоинт bedrock-runtime возвращает ValidationException, а в Mantle модель помечена как недоступная с причиной This model is not available under data retention mode 'default'.
Это не баг, который можно обойти настройкой клиента. Режим aws_review разрешает AWS хранить входы и выходы внутри AWS до 30 дней и проверять их вручную; модельному провайдеру данные не передаются. Режим provider_data_share устаревший и сейчас ведёт себя так же, для новых настроек AWS советует aws_review. Для моделей, выпущенных до Claude Fable 5, ничего не изменилось. Модели вроде Opus 4.8 допускают none, поэтому более разрешительная настройка аккаунта не заставляет их хранить данные.
Для bedrock-runtime режим задаётся на уровне аккаунта отдельно в каждом регионе, уровня проекта там нет. Настройки в консоли на момент запуска не было — только API плоскости управления и SDK; нужные действия IAM — bedrock:GetAccountDataRetention и bedrock:PutAccountDataRetention. Проверить текущий режим в регионе:
curl https://bedrock.us-east-1.amazonaws.com/data-retention \
-H "Authorization: Bearer $AWS_BEARER_TOKEN_BEDROCK"Изменение выглядит как PUT на тот же адрес с телом {"mode": "aws_review"}, но это решение для всего аккаунта в регионе и вопрос комплаенса. Его принимает администратор AWS или владелец политики данных, а политика SCP в организации может вообще запрещать режимы, отличные от none. Если менять режим нельзя, выберите модель, которой он не нужен, например через /model или закрепление версии. Нулевое хранение (ZDR) для моделей Claude согласуется с представителем Anthropic по каждому аккаунту и модели.
Собственный код: форма запроса под свой API
Если Bedrock вызывает ваш код, первым делом сверьте, какой API вы используете и совпадает ли с ним тело запроса. У Claude на Bedrock три разные формы запроса, и поля одной схемы в другой приводят к 400.

- InvokeModel: ID модели передаётся в
modelIdоперации, а в теле обязательны"anthropic_version": "bedrock-2023-05-31",max_tokensиmessagesс ролями user/assistant. Системная инструкция — отдельное полеsystem, а не сообщение. - Converse:
modelIdв пути, содержимое сообщений вида[{"text": "..."}],system— массив верхнего уровня, лимит вывода —inferenceConfig.maxTokens, поля конкретной модели — вadditionalModelRequestFields. С ARN из управления промптами (Prompt management) поляadditionalModelRequestFields,inferenceConfig,systemиtoolConfigпередавать нельзя. - Anthropic Messages API на Bedrock: базовый адрес
https://bedrock-runtime.{region}.amazonaws.com/anthropic(AWS рекомендует его для новых приложений) илиhttps://bedrock-mantle.{region}.api.aws/anthropic/v1/messages. Версия передаётся заголовкомanthropic-version: 2023-06-01, аmodel— в теле.
Самые частые смешения: 2023-06-01 в поле anthropic_version тела InvokeModel (это значение заголовка Messages API), inferenceConfig в теле InvokeModel и max_tokens на верхнем уровне Converse вместо inferenceConfig.maxTokens.
Каталог сообщений ValidationException в базе знаний AWS (обновлён 21 сентября 2026 года) сводится к такой таблице:
| Сообщение | Причина | Что делать |
|---|---|---|
Malformed input request: extraneous key [...] is not permitted | в теле поле из другой схемы или другой модели | убрать поле или перенести в нужное место |
The provided model identifier is invalid | неверный ID или модель недоступна в регионе | сверить ID и доступность модели в регионе |
| то же сообщение при доступе через партнёра AWS Marketplace или реселлера | реселлер не участвует в партнёрской программе Anthropic или Amazon Bedrock Authorized Reseller Program | кодом, IAM и запросом доступа не решается — участие должен оформить реселлер |
Your AWS account is not authorized to invoke this API operation | у роли или пользователя IAM нет права вызывать модели | добавить разрешение в политику IAM |
Input is too long for requested model. | вход плюс запрошенный вывод больше лимита модели | сократить вход или max_tokens |
"claude-..." is not supported on this API. Please use the Messages API instead. | старый формат запроса без messages | перейти на формат Messages |
Guardrail was enabled but input is in incorrect format | неверно заданы параметры ограничителя (guardrail) | один действующий ID и только номер версии в guardrailVersion |
Access to Anthropic models is not allowed from unsupported countries, regions, or territories | налоговый или платёжный адрес аккаунта либо место вызова вне списка поддерживаемых стран Anthropic | смена региона AWS не помогает; сверьтесь со списком на anthropic.com/supported-countries |
Точная формулировка может немного отличаться в зависимости от SDK.
Не каждый 400 от Bedrock связан с телом запроса. Тем же статусом AWS возвращает IncompleteSignature (подпись, SDK или учётные данные), InvalidAction, NotAuthorized (IAM или SCP), RequestExpired (расхождение часов) и ValidationError. А ServiceQuotaExceededException у InvokeModel тоже приходит с кодом 400: запрос превысил квоту аккаунта, и AWS прямо пишет, что его можно отправить позже.
Две ошибки 400 из собственного кода, не специфичные для AWS, разобраны отдельно: «Ошибка 400 prefill в Claude: на каких моделях и чем заменить» и отклонённая роль system в «Как исправить API 400 с неподдерживаемой ролью».
Как найти виновника и проверить исправление
Когда текст ошибки не указывает на поле прямо, сократите запрос до минимума и возвращайте параметры по одному.

Минимальный вызов InvokeModel через AWS CLI с вашими регионом и ID модели в переменных окружения:
aws bedrock-runtime invoke-model \
--region "$AWS_REGION" \
--model-id "$MODEL_ID" \
--body '{"anthropic_version": "bedrock-2023-05-31", "max_tokens": 256, "messages": [{"role": "user", "content": "ping"}]}' \
--cli-binary-format raw-in-base64-out \
output.jsonЕсли падает даже он, тело запроса ни при чём: проверяйте ID модели и регион, права IAM, режим хранения данных и статус аккаунта. Если минимальный вызов проходит, возвращайте по одному system, инструменты, thinking и историю — параметр, после которого вернулась ошибка 400, и есть причина.
В Claude Code аналог минимального запроса — новая короткая сессия. Если после /clear первое сообщение проходит, дело в истории или объёме контекста (/rewind, /compact, /context). Если падает и первое сообщение, ищите причину в конфигурации: версия клиента, модель, префикс, шлюз, аккаунт.
Исправление подтверждено, когда тот же запрос с тем же ID модели и в том же регионе проходит. В Claude Code проверьте через /status, что провайдер и регион те, которые вы ожидали, отправьте сообщение после перезапуска, а для ошибок переполнения посмотрите /context и убедитесь, что запас окна есть.
Что повторять, что нет и когда это вовсе не 400
ValidationException без изменений в запросе повторять бессмысленно: тот же запрос получит тот же отказ. Исключение — ServiceQuotaExceededException, его можно отправить позже. Когда повторять, когда переключать модель, а когда остановиться, подробно разбирает статья «Повторить запрос LLM API или переключить модель: пять проверок».
Без администратора AWS не обойтись, если причина в режиме хранения данных, политиках IAM или SCP, доступе аккаунта к модели, участии реселлера в программе Anthropic или адресе аккаунта в неподдерживаемой стране.
Другие статусы — уже другие проблемы:
- 403: Claude Code показывает её как «AWS authentication failed». Bedrock возвращает 403 и для просроченных токенов, и для
AccessDeniedException(нет права IAM); если сообщение говорит об отсутствии доступа к ID модели, включите модель для аккаунта и региона. - 404:
FTUFormNotFilledзначит, что не отправлена форма с описанием сценария использования моделей Anthropic;ResourceNotFound— ресурс не найден. - 429:
ThrottlingException, то есть ограничение частоты. Кому принадлежит лимит и что с ним делать, объясняет статья «Claude Rate Exceeded: как понять, чей лимит сработал». - 503 и 529:
ServiceUnavailableиoverloaded_error— перегрузка сервиса, а не ошибка в вашем запросе.
Частые вопросы
Я выставил CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1, а 400 осталась. Почему?
Есть две частые причины. Переменная должна попасть в окружение до запуска процесса: экспорт в другом терминале или правка settings.json без перезапуска Claude Code не сработают. И переключатель исправляет только несовместимость beta-полей — если в тексте ошибки ID модели, thinking, Input is too long, режим хранения данных или квота, ищите причину в соответствующем разделе выше.
Поможет ли откат Claude Code на старую версию?
Как правило, нет. Отчёты о старых регрессиях вроде invalid beta flag в версии 2.1.23 относятся к январю 2026 года, и эти обсуждения закрыты. Для новых моделей нужны, наоборот, свежие версии клиента: со слишком старой версией вы получите thinking.type.enabled is not supported for this model.
Мой код через Converse работает, а Claude Code с той же моделью получает 400. Как так?
Claude Code вызывает не Converse, а Invoke API и отправляет свои поля: настройки мышления, effort, beta-поля, схемы инструментов. Успешный вызов Converse подтверждает, что модель доступна аккаунту, но не доказывает, что профиль вывода, префикс и поля Claude Code подходят. Сверьте ID и префикс через /status и list-inference-profiles, затем найдите текст ошибки в таблице в начале страницы.
Источники2
Внешние страницы, на которые ссылается это руководство, в порядке упоминания. Последнее обновление: 25 сент. 2026 г..
Источники2
Внешние страницы, на которые ссылается это руководство, в порядке упоминания. Последнее обновление: 25 сент. 2026 г..





