Claude Code "Request timed out": API_TIMEOUT_MS y soluciones para el proxy

Wokey Team · 2026-09-24

Respuesta corta: Request timed out significa que Claude Code no recibió respuesta de la API antes de su plazo, que por defecto es de 10 minutos (API_TIMEOUT_MS=600000). Detrás de un gateway, la causa habitual no es un modelo lento. Con más frecuencia, algo intermedio retiene la respuesta en streaming o corta las conexiones que pasan demasiado tiempo en silencio. Puede ser un proxy local, una red corporativa o el propio gateway. Primero comprueba con curl que el stream llega por partes y luego decide si aumentar el timeout.

Cuál estás viendo

Mensaje Significado
Waiting for API response · will retry in … · check your network debajo del indicador de carga Sin datos durante 20 segundos. Claude Code sigue esperando; todavía no es un error
Retrying in Ns · attempt x/y Se están ejecutando los reintentos automáticos, hasta 10 por defecto
Request timed out No hubo respuesta dentro de API_TIMEOUT_MS
API Error: No response from API (waited …, then … on the retry) Pasaron dos intentos sin el primer byte de una respuesta
HTTP 504 con un cuerpo JSON de Wokey Wokey agotó el tiempo esperando al upstream
HTTP 408 El cuerpo de la solicitud se subió demasiado lento, así que el gateway dejó de esperarlo

Los cuatro primeros vienen del propio Claude Code; los dos últimos vienen del servidor.

Los errores de timeout de Wokey

Todos los errores de timeout de Wokey son 504 con el formato de error estándar. El code te dice dónde se detuvo la solicitud:

code Significado
upstream_gateway_timeout El gateway del propio upstream agotó el tiempo antes de producir cualquier salida
official_exit_first_byte_timeout El upstream nunca empezó a responder, incluido el tiempo dedicado a reintentar por otras rutas
provider_timeout La conexión con el upstream se cortó o agotó el tiempo sin resultado

Por ejemplo:

{"error":{"code":"upstream_gateway_timeout","message":"Upstream gateway timed out before producing a response.","type":"invalid_request_error"}}

Si el timeout ocurre después de que la respuesta empezó a transmitirse, llega como un evento error dentro del stream en lugar de un HTTP 504.

Cuando no hay salida durante mucho tiempo, por ejemplo mientras el modelo piensa largamente, Wokey escribe periódicamente un comentario SSE en el stream para mantener viva la conexión:

: wokey-transport-keepalive-v1

Los clientes ignoran las líneas de comentario. Si ves una al probar con curl, la conexión sigue viva y el modelo sigue trabajando.

Pasos para solucionar el problema

1. Comprueba con curl que el stream llega por partes.

curl -N https://api.wokey.ai/v1/messages \
  -H "Authorization: Bearer $ANTHROPIC_AUTH_TOKEN" \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{"model":"claude-sonnet-5","max_tokens":300,"stream":true,"messages":[{"role":"user","content":"Count from 1 to 60"}]}'

-N desactiva el búfer propio de curl.

  • Las líneas event: y data: van apareciendo a medida que llegan: toda la ruta está bien.
  • Todo aparece de golpe después de una larga espera: algo intermedio está almacenando la respuesta en búfer, y Claude Code tiende a agotar el tiempo en esa ruta.

2. Revisa tu proxy local. Claude Code respeta HTTPS_PROXY y la configuración de proxy del sistema. El modo TUN, los proxies basados en reglas y los gateways corporativos pueden almacenar en búfer las respuestas en streaming o cortar las conexiones inactivas. Si tu red puede llegar directamente a api.wokey.ai, excluye ese dominio del proxy y vuelve a intentarlo. Si tienes que usar un proxy, compara con otro nodo.

3. Aumenta el timeout. Cuando la ruta esté verificada y las solicitudes realmente sean largas, sube el límite en el bloque env de ~/.claude/settings.json:

{
  "env": {
    "API_TIMEOUT_MS": "1200000"
  }
}
  • API_TIMEOUT_MS es el timeout por solicitud en milisegundos. El valor predeterminado es 600000 (10 minutos).
  • Si un proxy de tu red retiene las respuestas hasta que terminan, el mensaje de error de Claude Code sugiere aumentar también CLAUDE_STREAM_FIRST_BYTE_TIMEOUT_MS.
  • La detección de un stream que se detiene a mitad de camino la controla CLAUDE_STREAM_IDLE_TIMEOUT_MS. Los valores menores de 5 minutos se elevan a 5 minutos, y el máximo es 30 minutos.

4. Reduce el contexto. Un contexto más grande se sube más lento y retrasa el primer token. Ejecuta /compact para condensar la sesión, o empieza una nueva.

5. Si recibes un 408. Un 408 significa que el cuerpo de la solicitud dejó de llegar durante la subida y el gateway dejó de esperar. Aparece casi solo con contextos muy grandes en redes inestables. Normalmente basta con reintentar. Si sigue ocurriendo, revisa tu proxy como en el paso 2 y luego reduce la solicitud con /compact.

Timeouts en Codex

El timeout de inactividad del stream de Codex es de 300000 ms (5 minutos) por defecto. Cuando se activa ves idle timeout waiting for SSE o stream disconnected before completion, y los reintentos automáticos muestran Reconnecting... n/max. Estos ajustes van en la tabla del proveedor:

[model_providers.wokey]
name = "Wokey"
base_url = "https://api.wokey.ai"
env_key = "WOKEY_API_KEY"
wire_api = "responses"
stream_idle_timeout_ms = 600000
stream_max_retries = 10

stream_max_retries vale 5 por defecto y request_max_retries, 4; ambos tienen un máximo de 100. Para la configuración completa, consulta la guía de config.toml de Codex.

Preguntas frecuentes

¿Cuál es el timeout predeterminado de Claude Code?

Diez minutos por solicitud, definido por API_TIMEOUT_MS (predeterminado 600000). Auméntalo en el bloque env de ~/.claude/settings.json, por ejemplo "API_TIMEOUT_MS": "1200000".

¿Cómo sé si es la red o el modelo?

Envía una solicitud "stream":true con curl -N. Si las líneas data: llegan una por una, la ruta está bien. Si todo aparece de golpe después de una larga espera, algo intermedio está almacenando la respuesta en búfer, y esa ruta es propensa a timeouts.

¿Qué significa un 504 de Wokey?

Todos los timeouts de Wokey son 504, y code indica dónde se detuvo: upstream_gateway_timeout significa que el gateway del upstream agotó el tiempo, official_exit_first_byte_timeout significa que el upstream nunca empezó a responder, y provider_timeout significa que la conexión con el upstream se cortó o agotó el tiempo.

¿Qué es wokey-transport-keepalive-v1 en el stream?

Es un comentario SSE que Wokey escribe cuando lleva un rato sin salida, para evitar que los intermediarios corten la conexión. Los clientes lo ignoran; verlo significa que la conexión sigue viva y el modelo sigue trabajando.

¿Cómo cambio los timeouts en Codex?

Configura stream_idle_timeout_ms (predeterminado 300000) y stream_max_retries (predeterminado 5) en la tabla del proveedor de config.toml.