Error 400 de la API de Claude con temperature, top_p, top_k: cómo solucionarlo
¿Tu solicitud de Claude empezó a devolver 400 en la versión de API 2026-10-21? Elimina temperature, top_p y top_k, o fija la versión anterior. Pasos dentro.

En esta página
Tu solicitud de Claude funcionaba ayer, la moviste a la versión de API 2026-10-21 (la cabecera anthropic-, o una versión del SDK creada para ella), y ahora devuelve un 400. Mira el cuerpo de la solicitud: si tiene temperature, top_p o top_k, esa es la causa. Elimina esos tres campos y la solicitud pasa.
Según la guía de migración de Anthropic para la versión 2026-10-21 (https://platform.claude.com/docs/en/api/migration-2026-10-21, consultada el 24 de octubre de 2026), una solicitud de Messages o Message Batches que envíe cualquiera de los tres devuelve un error 400. Ocurre incluso si el valor es el predeterminado del parámetro. Busca el estado 400 y esos nombres de campo en tu solicitud.
Cómo se ve la solicitud que falla#
Supongamos que tienes un script pequeño que le pide a Claude que resuma un ticket y mantiene la respuesta estable con una temperatura baja:
import anthropic
client = anthropic.Anthropic()
reply = client.messages.create(
model="<your Claude model>",
max_tokens=500,
temperature=0.2, # <- this line now causes the 400
messages=[{"role": "user", "content": "Summarise this ticket in two lines: ..."}],
)Lo mismo ocurre con HTTP simple. Si estableces la cabecera de versión tú mismo, esta es la línea que te mueve al nuevo comportamiento:
curl https://api.anthropic.com/v1/messages \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2026-10-21" \
-H "content-type: application/json" \
-d '{"model": "<your Claude model>", "max_tokens": 500, "top_p": 0.9,
"messages": [{"role": "user", "content": "Hello"}]}'La solución: eliminar los tres parámetros#
Elimina temperature, top_p y top_k de todas las solicitudes de Messages y Message Batches. Sin ellos, el modelo muestrea con sus valores predeterminados (temperatura 1.0), exactamente como lo hacía una solicitud 2023-06-01 que los omite.
reply = client.messages.create(
model="<your Claude model>",
max_tokens=500,
messages=[{"role": "user", "content": "Summarise this ticket in two lines: ..."}],
)
Las últimas versiones principales del SDK y la CLI ant (2.0.0) ya no tienen estos parámetros en absoluto, así que después de actualizar tienes que eliminarlos de tu código. Un 400 proviene de solicitudes que salen con anthropic- y aún llevan uno de los tres campos. Los adaptadores .NET IChatClient toman una ruta más suave: ahora ignoran ChatOptions., TopK y TopP. Los números exactos de versión del SDK por lenguaje están en las pestañas de pasos de actualización de la guía.
Si llamas a la API sin un SDK, la versión es la cabecera anthropic-, y 2026-10-21 es el valor que activa la nueva regla.
¿Cambiarán las respuestas después de eliminarlos?#
Depende del modelo, y la guía es específica aquí.
- Claude 4.7 y posteriores ya aceptan solo valores de muestreo predeterminados. Nada cambia para ti: muestreaban con los valores predeterminados antes y siguen haciéndolo.
- Modelos que aceptan otros valores, como Claude Sonnet 4.6: si bajaste
temperaturepara obtener una salida más consistente, ese efecto desaparece, y ninguna otra configuración lo reemplaza.
Si una solicitud en particular realmente depende de un valor no predeterminado, tienes dos opciones de la guía: dejar de enviar el parámetro y aceptar el muestreo predeterminado, o mantener esa solicitud en anthropic-.
Si tus respuestas deben ser estrictamente consistentes, pon la consistencia en el prompt: un formato de salida fijo, un ejemplo corto de la respuesta que quieres, y una verificación en tu código que rechace cualquier cosa fuera de formato. Es más trabajo que un solo número, pero no depende de una perilla de muestreo.
Lista de verificación rápida cuando ves el 400#
- Busca en el proyecto
temperature,top_p,top_k, incluidos los wrappers y los archivos de configuración compartidos. - Revisa los trabajos por lotes: la regla se aplica a cada solicitud dentro de un Message Batch creado con 2026-10-21, así que mira los params de cada solicitud del lote.
- Revisa qué cambió: versión principal del SDK, versión de la CLI, o la cabecera
anthropic-.version - Elimina los campos, o fija esa solicitud en
2023-06-01si necesita un valor no predeterminado. - Ejecuta una solicitud antes de relanzar un lote grande.
Una sola ruta de código para Claude y las API estilo OpenAI#
Una configuración común: un único helper que construye la solicitud y la envía ya sea a Anthropic Messages o a un endpoint Chat Completions estilo OpenAI. La solución más simple es dividir los parámetros. Mantén temperature solo en la rama estilo OpenAI, y no lo agregues a la rama Messages.
En el formato Chat Completions la configuración es un campo normal de la solicitud. En CheapTokens funciona a través de la dirección compatible con OpenAI https:/. Aquí hay una solicitud a DeepSeek-V4-Flash (contexto de 380K, hasta 32,768 tokens de salida por respuesta), con el id completo del modelo de los documentos de CheapTokens:
curl https://api.cheaptokens.dev/v1/chat/completions \
-H "Authorization: Bearer $CHEAPTOKENS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-ai/DeepSeek-V4-Flash-0731",
"temperature": 0.2,
"max_tokens": 300,
"messages": [{"role": "user", "content": "Summarise this ticket in two lines: ..."}]
}'Una solicitud así, con 1,000 tokens de entrada y 300 tokens de salida, cuesta $0.000045 al precio actual. DeepSeek-V4-Flash tiene un precio a cualquier hora del día, sin horas pico, y un solo saldo cubre todos los modelos. Para la misma ruta de código con una ventana de contexto de 390K también está GLM-5.3-Flash (zai-, hasta 8,192 tokens de salida). Los precios actuales de todos los modelos están en la página de precios.
Para ver cómo se comporta la configuración, lee System prompt y temperature: qué hacen y cómo configurarlos. Para llamar a Messages en formato Claude desde Python, consulta Anthropic Python SDK con CheapTokens. La dirección base y la configuración de la clave están en los documentos de CheapTokens.



