Saltar al contenido principal

Error 400 de Claude en AWS Bedrock: qué significa cada mensaje

El 400 solo indica que Bedrock rechazó la solicitud; la corrección depende del mensaje exacto y de si llamas desde Claude Code o desde tu propio código.

LaoZhang AI TeamPublicadoActualizado 15 min de lectura
En esta página
Portada «Claude en AWS Bedrock: un 400, varias causas» con un cartel HTTP 400, tres fichas (solicitud, modelo y región, cuenta y cuota) y una lupa sobre el código y el mensaje de error

El 400 no es el diagnóstico: el mensaje sí

Un HTTP 400 de Claude en Amazon Bedrock solo dice que la solicitud no se aceptó. Lo que decide qué tocar es el código de excepción (ValidationException, ServiceQuotaExceededException, IncompleteSignature…) y, sobre todo, el texto que viene detrás. Extra inputs are not permitted, Input is too long for requested model. y data retention mode 'default' is not available for this model son tres 400 sin nada en común: el primero se arregla en el gateway, el segundo compactando la conversación y el tercero solo lo puede resolver quien administra la cuenta de AWS.

Antes de buscar la causa, sitúate en una de estas dos ramas:

  • Usas Claude Code con CLAUDE_CODE_USE_BEDROCK=1, con Mantle (CLAUDE_CODE_USE_MANTLE=1), detrás de un proxy o gateway corporativo o a través de un servicio de terceros que ofrece «Claude en AWS». Claude Code habla con Bedrock únicamente mediante la API Invoke (InvokeModel / InvokeModelWithResponseStream) y no admite la API Converse (documentación de Claude Code). Los consejos sobre el formato de Converse no te sirven.
  • Llamas a Bedrock desde tu propio código con InvokeModel, Converse o la API Messages de Anthropic en Bedrock. Aquí el formato del cuerpo sí es sospechoso, y cada API tiene el suyo.

Dentro de Claude Code, /status muestra el proveedor y la región que se están usando de verdad (Amazon Bedrock, Amazon Bedrock (Mantle) o ambos). Si lo que ves es un 403, un 429 o un 529, no estás ante un problema de 400; al final encontrarás a dónde ir en cada caso.

Tabla rápida: mensaje, causa y corrección

Busca en tu log el fragmento que coincida. Las versiones mínimas y los identificadores son los de la documentación oficial a 24 de septiembre de 2026 y cambian a menudo.

Fragmento del mensajeDónde apareceCausaQué hacer
Extra inputs are not permitted ... context_management o effort; Unexpected value(s) for the anthropic-beta headerClaude Code tras un gateway o proxyEl intermediario reenvía campos beta del cuerpo pero elimina la cabecera anthropic-betaQue el gateway reenvíe anthropic-beta; como alternativa, CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1
"thinking.type.enabled" is not supported for this model. Use "thinking.type.adaptive"...Claude Code o Agent SDKTu versión es anterior a la mínima del modelo elegidoclaude update y reiniciar; si no puedes, /model → Opus 4.6 o Sonnet 4.6
max_tokens must be greater than thinking.budget_tokensClaude Code en BedrockMAX_THINKING_TOKENS supera el límite de salidaBajar MAX_THINKING_TOKENS o subir CLAUDE_CODE_MAX_OUTPUT_TOKENS
Input is too long for requested model.Claude Code y código propioEntrada más salida solicitada superan el límite del modelo/compact, /clear, revisar /context; en código, recortar entrada o max_tokens
tool use concurrency issues, orphaned tool_result, duplicate tool_use ID, thinking blocks ... cannot be modifiedClaude Code, cualquier proveedorEl historial de herramientas y razonamiento quedó incoherente/rewind o Esc dos veces; con Opus 4.7/4.8, actualizar antes a v2.1.156 o superior
on-demand throughput isn't supportedBedrockSe usó un ID de modelo base donde hace falta un perfil de inferenciaUsar el ID del perfil de inferencia
400 que nombra el ID del modelo, con Mantle activoClaude Code con MantleEse modelo no se sirve en Mantle o el ID tiene formato InvokeID tipo anthropic.claude-sonnet-5 o activar ambos endpoints
data retention mode 'default' is not available for this modelClaude Fable 5 / 5.1El modo de retención efectivo de la cuenta en esa región es inferior a aws_reviewDecisión del administrador de AWS (ver más abajo)
The provided model identifier is invalidCódigo propio y clientes de tercerosID incorrecto, modelo no disponible en la región o cuenta de revendedor no inscrita con AnthropicCorregir ID y región; si es revendedor, lo resuelve el revendedor
Access to Anthropic models is not allowed from unsupported countries, regions, or territoriesCualquier APIDirección fiscal o de facturación de la cuenta, o ubicación del equipo que llamaNo se arregla cambiando de región de AWS
Malformed input request: extraneous key [...] is not permittedCódigo propioEl cuerpo lleva un campo que esa API o ese modelo no admiteAjustar el cuerpo al formato de la operación
ServiceQuotaExceededExceptionInvokeModelSe superó una cuota de servicio de la cuentaReenviar más tarde o pedir aumento de cuota

Claude Code en Bedrock: los 400 que más se repiten

Extra inputs are not permitted y la cabecera anthropic-beta

Claude Code envía campos que solo existen en beta, como context_management o effort, junto con una cabecera anthropic-beta que los activa. Si entre Claude Code y la API hay un proxy o un gateway que reenvía el cuerpo pero descarta esa cabecera, el servidor recibe campos que no reconoce y responde con API Error: 400 ... Extra inputs are not permitted o con Unexpected value(s) for the anthropic-beta header (referencia de errores de Claude Code).

La corrección de fondo es configurar el gateway para que reenvíe anthropic-beta. Si no controlas el gateway, la alternativa documentada es arrancar Claude Code con la variable ya definida, en el shell o en el bloque env de ~/.claude/settings.json:

json
{
  "env": {
    "CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS": "1"
  }
}

Tiene que estar presente antes de que arranque el proceso; exportarla en otra terminal con la sesión abierta no sirve. Conviene saber lo que cuesta (variables de entorno):

  • Quita las cabeceras anthropic-beta propias de Anthropic y los campos beta de los esquemas de herramientas (por ejemplo defer_loading o eager_input_streaming), pero conserva name, description, input_schema y cache_control, así que el almacenamiento en caché de prompts sigue funcionando.
  • Desactiva la búsqueda de herramientas MCP: todas las herramientas MCP se cargan al inicio y se ignora lo que tengas en ENABLE_TOOL_SEARCH (desde v2.1.227, la configuración gestionada puede mantener la búsqueda activa). Con muchos servidores MCP eso consume más contexto y te acerca al error de entrada demasiado larga; si es tu caso, revisa Claude Code y la sobrecarga de contexto por MCP: cómo elegir servidores y comprimir resultados.
  • No arregla errores de ID de modelo, permisos, cuota ni retención de datos. Si después de ponerla el mensaje cambia a otro, ese otro es el problema real.

Sin gateway de por medio también puede aparecer. En un issue abierto desde el 4 de marzo de 2026, varios usuarios de claude-code-action con Bedrock y un perfil de inferencia de aplicación para Sonnet 4.5 reciben API Error: 400 output_config.effort: Extra inputs are not permitted; según sus comentarios, cambiar a Sonnet u Opus 4.6 lo resolvió (issue #1005). Son informes de usuarios, no una indicación oficial, pero muestran que el mismo campo puede rechazarse porque el modelo no lo acepta. Antes de tocar variables, comprueba con /status qué modelo se está resolviendo.

Si usas la ruta «AWS Claude» de LaoZhang API, su propia FAQ sobre el 400 en Claude Code recomienda la misma variable. Solo aplica a esa ruta. LaoZhang retiró sus modelos Claude el 24 de septiembre de 2026 y los volvió a ofrecer el 18 de octubre de 2026.

Aviso: laozhang.ai es un servicio propio. Sus precios son nuestra tarifa, no una comparación independiente.

thinking.type.enabled is not supported for this model

El mensaje completo es API Error: 400 ... "thinking.type.enabled" is not supported for this model. Use "thinking.type.adaptive" and "output_config.effort" to control thinking behavior. Significa que tu Claude Code es más antiguo que el mínimo del modelo seleccionado y todavía envía el razonamiento en el formato viejo (referencia).

ModeloVersión mínima de Claude Code
Opus 4.7v2.1.111
Opus 4.8v2.1.154
Sonnet 5v2.1.197
Opus 5v2.1.219
Opus 5.5v2.1.280

Ejecuta claude update y reinicia. Si no puedes actualizar (por ejemplo, porque la versión está fijada en tu empresa), usa /model y elige Opus 4.6 o Sonnet 4.6. En el Agent SDK el mínimo es el del paquete del SDK: Opus 5.5 necesita el SDK de TypeScript v0.3.280 o superior.

Ten en cuenta que, sin fijar modelo, el modelo principal por defecto de Claude Code en Bedrock es Opus 5.5 desde v2.1.280 (antes era Opus 5), y que un alias puede apuntar a un modelo que tu cuenta aún no tiene habilitado. La documentación recomienda fijarlo con ANTHROPIC_MODEL o con ANTHROPIC_DEFAULT_OPUS_MODEL, ANTHROPIC_DEFAULT_SONNET_MODEL y ANTHROPIC_DEFAULT_HAIKU_MODEL (fijar versiones de modelo). Para ver en conjunto dónde van estas variables, consulta Configuración de Claude Code API: claves, settings.json, modelos y gateways.

max_tokens must be greater than thinking.budget_tokens

En la API de Anthropic, Claude Code ajusta estos valores solo. En Bedrock y en Google Cloud el error aparece cuando MAX_THINKING_TOKENS supera el límite de salida del proveedor o cuando el modo plan eleva el presupuesto de razonamiento (referencia). Baja MAX_THINKING_TOKENS o sube CLAUDE_CODE_MAX_OUTPUT_TOKENS por encima del presupuesto.

MAX_THINKING_TOKENS=0 omite el parámetro thinking en proveedores de terceros, pero no es una salida universal: Opus 5.5 y los modelos Fable no permiten desactivar el razonamiento. En el lado de AWS, Claude Fable 5.1, Mythos 5.1, Mythos 5 y Fable 5 devuelven 400 si reciben thinking.type con "enabled" o "disabled"; aceptan {"type": "adaptive"} con output_config.effort o que no se envíe thinking (razonamiento extendido en Bedrock).

Input is too long for requested model.

Es la forma en que Bedrock dice lo que la API de Anthropic llama Prompt is too long. Llega como ValidationException, y el límite cuenta los tokens de entrada más la salida que pides (AWS re:Post).

Desde v2.1.217, Claude Code reconoce esta redacción y compacta automáticamente como con Prompt is too long. En versiones anteriores la compactación automática no se activaba y hasta /compact fallaba con el mismo error. Por eso, lo primero es actualizar. Después:

  1. /context para ver qué ocupa la ventana.
  2. /compact si quieres conservar el hilo, o /clear si puedes empezar de nuevo.
  3. /mcp disable <nombre> para los servidores MCP que no uses y recortar un CLAUDE.md demasiado grande.

Si activaste CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1, recuerda que carga todas las herramientas MCP al inicio: puede ser justo lo que llena la ventana.

Historial roto: tool_use, tool_result y bloques de razonamiento

Estos mensajes significan lo mismo, aunque no lo parezca:

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

La secuencia de bloques tool_use, tool_result y thinking guardada en el historial ya no cuadra, normalmente porque se interrumpió una llamada a herramienta o se editó un turno a mitad de respuesta (referencia). No depende de Bedrock y reintentar tal cual repite el error, porque el historial defectuoso se reenvía entero.

Ejecuta /rewind o pulsa Esc dos veces para volver a un punto de control anterior al turno dañado. Con Opus 4.7 u Opus 4.8, actualiza primero si tu versión es anterior a v2.1.156: esas versiones pueden provocar el error durante el uso normal de herramientas y /rewind no lo elimina.

ID de modelo, prefijo de región y Mantle

Con la API Invoke, Claude Code convierte los modelos por defecto en IDs de perfil de inferencia entre regiones y elige el prefijo según tu región: us-gov-* → us-gov., us-* → us., eu-* → eu., ap-* → apac., y global. en el resto. Desde v2.1.224 puedes indicar tu preferencia con ANTHROPIC_BEDROCK_REGION_PREFIX (us, eu, apac, jp, au o global), pero es una preferencia, no una garantía (prefijos de perfiles de inferencia).

El detalle que provoca 400 difíciles de entender: cuando Claude Code no puede consultar qué perfiles de inferencia tiene tu cuenta, aplica el prefijo sin comprobarlo. Si esa familia de perfiles no está habilitada, todas las solicitudes fallan con 400. Por eso no basta con añadir us. o global. al azar: mira qué perfiles existen en tu región y fija el ID exacto.

bash
aws bedrock list-inference-profiles --region eu-west-1

Claude Code nunca reescribe los IDs de perfil ni los ARN que configures tú. Si usas perfiles de inferencia de aplicación, el permiso bedrock:GetInferenceProfile le permite resolver el ARN al modelo base y elegir el formato de solicitud correcto.

Si el mensaje dice on-demand throughput isn't supported, estás pasando el ID del modelo base donde hace falta un perfil de inferencia: usa el ID del perfil que devuelve el comando anterior.

Con Mantle las reglas cambian. Los IDs llevan el prefijo anthropic. y no tienen sufijo de versión, por ejemplo anthropic.claude-sonnet-5. Un 400 que nombra el ID del modelo significa que ese modelo no se sirve en Mantle; los IDs de perfil de Invoke como us.anthropic.claude-sonnet-4-6 no funcionan ahí. Usa un ID con formato Mantle o activa a la vez CLAUDE_CODE_USE_BEDROCK y CLAUDE_CODE_USE_MANTLE para que Claude Code envíe cada modelo al endpoint donde existe (errores del endpoint Mantle). Si /status no muestra Amazon Bedrock (Mantle), la variable no está llegando al proceso.

data retention mode 'default' is not available con Claude Fable

En Claude Code aparece como API Error: 400 data retention mode 'default' is not available for this model, por ejemplo con global.anthropic.claude-fable-5 (issue #66594, abierto desde junio de 2026). No es un fallo de Claude Code ni se arregla con variables de entorno.

Bedrock ordena los modos de retención de datos así: none < default < aws_review < provider_data_share, e inherit delega en el nivel superior. Claude Fable 5 y Fable 5.1 exigen como mínimo aws_review. Si el modo efectivo es none o default, las solicitudes a bedrock-runtime devuelven ValidationException, y en bedrock-mantle el modelo figura como no disponible con el motivo This model is not available under data retention mode 'default'. (retención de datos en Bedrock).

Lo que implica cambiarlo, según AWS:

  • Con aws_review, las entradas y salidas de los modelos que exigen revisión humana se conservan dentro de AWS hasta 30 días y AWS puede revisarlas. No se comparten con el proveedor del modelo.
  • provider_data_share es un modo heredado que hoy se comporta igual (no se comparte nada); para configuraciones nuevas AWS indica aws_review.
  • En bedrock-runtime el ajuste es de cuenta y por región: no existe ámbito de proyecto, afecta a todas las solicitudes de esa región y no se propaga a otras.
  • Los modelos que permiten none, como Opus 4.8, no empiezan a conservar datos por tener un ajuste de cuenta más permisivo.
  • En el lanzamiento no había interfaz en la consola: se configura por API o SDK, y una SCP de la organización puede impedir fijar cualquier modo distinto de none.

Como es una decisión de cumplimiento que afecta a toda la cuenta en esa región, llévala a quien administra AWS en tu organización. Para comprobar el modo actual en una región, o para que el administrador lo cambie, la documentación de AWS usa el plano de control de Bedrock (acciones IAM bedrock:GetAccountDataRetention y bedrock:PutAccountDataRetention):

bash
# Consultar el modo actual (ejemplo de la documentación de AWS, no probado)
curl https://bedrock.us-east-1.amazonaws.com/data-retention \
  -H "Authorization: Bearer $AWS_BEARER_TOKEN_BEDROCK"

# Cambiarlo: solo tras la aprobación del responsable de la cuenta
curl -X PUT https://bedrock.us-east-1.amazonaws.com/data-retention \
  -H "Authorization: Bearer $AWS_BEARER_TOKEN_BEDROCK" \
  -H "Content-Type: application/json" \
  -d '{ "mode": "aws_review" }'

Si la política de tu organización no permite aws_review, Fable no está disponible para esa cuenta y región; cambia a un modelo que admita tu modo actual. Si estabas pensando en migrar a Fable, el precio es otra parte de la decisión: Claude Fable 5.1 vs Opus 5: precio y coste real por tarea.

Si llamas a Bedrock desde tu propio código

Cada API espera un cuerpo distinto

Muchos 400 en código propio vienen de copiar un JSON de una API y enviarlo a otra.

Esquema de las tres formas de llamar a Claude en Bedrock: Converse lleva modelId fuera del cuerpo y messages e inferenceConfig.maxTokens dentro; InvokeModel lleva modelId fuera y anthropic_version, max_tokens y messages dentro; /anthropic/v1/messages lleva la cabecera anthropic-version y model, max_tokens y messages en el cuerpo

  • InvokeModel con el formato Messages de Claude: el modelo va en el modelId de la operación. El cuerpo necesita "anthropic_version": "bedrock-2023-05-31", max_tokens y messages con turnos user/assistant; las instrucciones de sistema van en un campo system aparte (parámetros de Claude en Bedrock).
  • Converse: modelId en la ruta, contenido como [{"text": "..."}], system como lista en el nivel superior y el límite de salida en inferenceConfig.maxTokens. Los campos propios del modelo van en additionalModelRequestFields. Si usas el ARN de un prompt de Prompt Management, no puedes enviar additionalModelRequestFields, inferenceConfig, system ni toolConfig (Converse).
  • API Messages de Anthropic en Bedrock: en bedrock-runtime la base es https://bedrock-runtime.{region}.amazonaws.com/anthropic (la que AWS recomienda para aplicaciones nuevas); en bedrock-mantle, https://bedrock-mantle.{region}.api.aws/anthropic/v1/messages, que exige la cabecera anthropic-version: 2023-06-01. Aquí model va dentro del cuerpo: us.anthropic.claude-sonnet-5 en el ejemplo de runtime, anthropic.claude-sonnet-5 en el de Mantle (API Messages en Bedrock).

La confusión más frecuente: 2023-06-01 es el valor de la cabecera de la API Messages, no el anthropic_version del cuerpo de InvokeModel, que es bedrock-2023-05-31. Y un campo que la operación no conoce, como inferenceConfig dentro de un cuerpo de InvokeModel, suele terminar en Malformed input request: extraneous key [...] is not permitted. Si el cuerpo tiene que llevar instrucciones de sistema y recibes un rechazo sobre messages[n].role, mira Corrige API 400 por rol no admitido sin romper las instrucciones del sistema.

Un ejemplo mínimo que muestra el código y el mensaje

Este fragmento en Python sigue la documentación de AWS; no se ha probado contra una cuenta real. Lee la región y el ID del modelo de variables de entorno y, si falla, imprime el estado, el código de excepción y el mensaje, que es lo que necesitas para la tabla de arriba.

python
# Ejemplo derivado de la documentación de AWS, no probado en una cuenta real.
import json
import os

import boto3
from botocore.exceptions import ClientError

client = boto3.client("bedrock-runtime", region_name=os.environ["AWS_REGION"])

body = {
    "anthropic_version": "bedrock-2023-05-31",
    "max_tokens": 256,
    "messages": [{"role": "user", "content": "Responde solo: ok"}],
}

try:
    resp = client.invoke_model(
        modelId=os.environ["BEDROCK_MODEL_ID"],  # p. ej., el ID de un perfil de inferencia
        body=json.dumps(body),
    )
    print(json.loads(resp["body"].read())["content"][0]["text"])
except ClientError as e:
    err = e.response["Error"]
    status = e.response["ResponseMetadata"]["HTTPStatusCode"]
    print(status, err["Code"], err["Message"])

Si esta solicitud mínima funciona y la tuya no, la diferencia está en lo que añades encima: historial, herramientas u opciones.

Mensajes de ValidationException que no son de formato

AWS agrupa bajo ValidationException problemas que no tienen nada que ver con el JSON (AWS re:Post):

  • The provided model identifier is invalid: ID mal escrito o modelo no disponible en esa región. Hay un caso que no se arregla desde tu lado: si tu cuenta de AWS se gestiona a través de un socio de AWS Marketplace o un revendedor que no está inscrito en el programa de socios de Anthropic o en el Amazon Bedrock Authorized Reseller Program, recibirás este mismo mensaje. No lo corrigen cambios de código, de IAM ni solicitudes de acceso al modelo; tiene que inscribirse el revendedor.
  • Your AWS account is not authorized to invoke this API operation: al usuario o rol de IAM le falta permiso para invocar modelos, aunque llegue como ValidationException.
  • Access to Anthropic models is not allowed from unsupported countries, regions, or territories: cuenta la dirección fiscal y de facturación de la cuenta, además de la ubicación del equipo que hace la llamada. Cambiar de región de AWS no lo resuelve.
  • "claude-..." is not supported on this API. Please use the Messages API instead.: el modelo solo acepta el formato Messages y estás enviando otro.
  • Guardrail was enabled but input is in incorrect format: la solicitud usa una barrera de protección (guardrail) y la entrada no tiene el formato que esta espera.

Además de ValidationException, Bedrock usa el 400 para IncompleteSignature (firma incompleta, normalmente por credenciales o SDK), InvalidAction, NotAuthorized (IAM o SCP) y RequestExpired (el reloj del equipo va desfasado) (códigos de error de la API de Bedrock). También ServiceQuotaExceededException, que es el único de esta lista que AWS dice que puedes reenviar más tarde (InvokeModel).

Cuándo reintentar, cuándo parar y cuándo llamar al administrador

Un 400 de validación no se arregla reenviando la misma solicitud: el cuerpo, el historial o la cuenta siguen igual y el resultado también. Solo tiene sentido esperar y reenviar con ServiceQuotaExceededException. Para decidir entre reintentar, cambiar de modelo o detenerte en otros errores, tienes ¿Reintentar la API LLM o cambiar de modelo? Cinco comprobaciones.

SituaciónQué hacer
Campos beta, versión de Claude Code, presupuesto de razonamiento, contexto, historial roto, formato del cuerpoLo corriges tú; reenviar sin cambios no sirve
Prefijo o perfil de inferencia no habilitado, modelo no habilitado en la regiónTú, si tienes permisos para habilitarlo; si no, el administrador de AWS
Retención de datos, SCP, permisos de IAM, cuota, dirección fiscalAdministrador de AWS o responsable de cumplimiento
Cuenta a través de un revendedor no inscritoEl revendedor
ServiceQuotaExceededExceptionReenviar más tarde o solicitar más cuota

Cuando el mensaje no encaja en ninguna fila, aísla el cambio que provoca el rechazo.

Diagrama para aislar el rechazo: se parte de una solicitud mínima; si falla, se leen el código y el mensaje y se revisan API, modelo, región y cuenta; si funciona, se añaden historial, herramientas y opciones de uno en uno, probando después de cada cambio

Parte de la solicitud mínima del ejemplo anterior con el mismo modelo y la misma región. Si falla, el problema está en la API, el ID, la región o la cuenta, no en tu aplicación. Si funciona, añade el historial, luego las herramientas y después las opciones, de una en una. El primer cambio que devuelve 400 es el que tienes que corregir.

Errores que no son un 400

  • 403 en Claude Code sobre Bedrock aparece como «AWS authentication failed»: credenciales caducadas o AccessDeniedException por falta de permisos de IAM. Si dice que no tienes acceso al ID del modelo, hay que habilitar el modelo para esa cuenta y región (referencia). En Mantle, un 403 con credenciales válidas significa que la cuenta no tiene acceso a ese modelo.
  • 429 es ThrottlingException, un límite de uso. Consulta Claude Rate Exceeded: qué límite has alcanzado y cómo resolverlo.
  • 529 es overloaded_error: sobrecarga temporal del servicio, no un problema de tu solicitud.
  • 404 con FTUFormNotFilled indica que no se envió el formulario de caso de uso de Anthropic en la cuenta.

Cómo comprobar que de verdad quedó resuelto

  • En Claude Code, /status debe mostrar el proveedor, la región y el modelo que esperabas. Después, repite la acción que fallaba, no un «hola» en una sesión nueva: un historial roto o un contexto lleno solo se comprueban en la conversación original.
  • Si activaste CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1, verifica que la variable llega al proceso y vigila /context: sin búsqueda de herramientas MCP, la ventana se llena antes.
  • En código propio, registra siempre el estado, el código de excepción y el mensaje juntos. Si el 400 desaparece pero surge otro código, estás ante un problema distinto: empieza de nuevo por su mensaje.
  • Tras un cambio de retención, comprueba con la consulta GET que el modo es el esperado en la región donde invocas el modelo; el ajuste no se aplica a otras regiones.

Preguntas frecuentes

¿Qué significa el error 400 en Claude Code?

Que el servidor rechazó la solicitud por algo que contiene o por el estado de la cuenta. En Claude Code sobre Bedrock las causas más habituales son un gateway que elimina la cabecera anthropic-beta, una versión anterior a la mínima del modelo, un presupuesto de razonamiento mayor que la salida permitida, un contexto demasiado largo, un historial de herramientas incoherente, un ID o prefijo de modelo no habilitado o el modo de retención de datos con Fable. El texto después de API Error: 400 te dice cuál.

¿Sigue pasando lo de invalid beta flag?

Los informes de API Error: 400 invalid beta flag son antiguos: uno de enero de 2026 corresponde a una regresión de Claude Code 2.1.23, en un issue ya cerrado (#21676). No hace falta bajar de versión. Si hoy te aparece algo parecido, actualiza Claude Code y trátalo como el caso de la cabecera anthropic-beta descrito arriba.

¿Puedo usar provider_data_share para que funcione Fable?

AWS indica que provider_data_share es un modo heredado y que, si ya lo tienes configurado, satisface el requisito de Fable. Para configuraciones nuevas recomienda aws_review, que describe lo que ocurre en realidad: los datos se conservan en AWS y no se comparten con el proveedor del modelo. En ambos casos es una decisión de la cuenta que debe aprobar su responsable.

Mi cuenta tiene acceso al modelo, pero recibo The provided model identifier is invalid. ¿Por qué?

Revisa tres cosas por orden: que el ID exista en la región a la que llamas (y si hace falta un perfil de inferencia con su prefijo), que no estés usando un ID con formato Invoke en Mantle o al revés, y si tu cuenta de AWS se gestiona a través de un revendedor. En este último caso, si el revendedor no está inscrito con Anthropic, ningún cambio de tu lado lo arregla.

Fuentes14

Páginas externas que cita esta guía, en el orden en que aparecen. Última actualización: 25 sept 2026.

  1. 1.documentación de Claude Codecode.claude.com/docs/en/amazon-bedrock
  2. 2.referencia de errores de Claude Codecode.claude.com/docs/en/errors
  3. 3.variables de entornocode.claude.com/docs/en/env-vars
  4. 4.issue #1005github.com/anthropics/claude-code-action/issues/1005
  5. 5.razonamiento extendido en Bedrockdocs.aws.amazon.com/bedrock/latest/userguide/claude-messages-extended-thinking.html
  6. 6.AWS re:Postrepost.aws/knowledge-center/bedrock-validation-exception-errors
  7. 7.issue #66594github.com/anthropics/claude-code/issues/66594
  8. 8.retención de datos en Bedrockdocs.aws.amazon.com/bedrock/latest/userguide/data-retention.html
  9. 9.parámetros de Claude en Bedrockdocs.aws.amazon.com/bedrock/latest/userguide/model-parameters-anthropic-claude-messages-request-response.html
  10. 10.Conversedocs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_Converse.html
  11. 11.API Messages en Bedrockdocs.aws.amazon.com/bedrock/latest/userguide/inference-messages-api.html
  12. 12.códigos de error de la API de Bedrockdocs.aws.amazon.com/bedrock/latest/userguide/troubleshooting-api-error-codes.html
  13. 13.InvokeModeldocs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModel.html
  14. 14.#21676github.com/anthropics/claude-code/issues/21676