
Streaming en Claude API — Funciones clave explicadas
Cómo funciona el streaming de Claude API — eventos SSE, proxy backend, TTFT y control de costes, recuperación de streams caídos y consejos de fiabilidad.
Si quieres que Claude se sienta rápido, activa el streaming. En lugar de esperar 15–25 segundos por una respuesta completa, los usuarios suelen ver el primer token en unos 300–800 ms.
Aquí tienes la versión corta:
- Yo usaría streaming SSE cuando quiero que las respuestas aparezcan a medida que se generan
- Mantendría las llamadas a Claude detrás de un proxy backend para proteger las claves de API
- Vigilaría el TTFT (tiempo hasta el primer token),
max_tokensy las desconexiones para controlar la UX y el gasto - Analizaría los eventos transmitidos en orden:
message_start, eventos de bloque de contenido,message_deltay luegomessage_stop - Almacenaría en búfer los fragmentos JSON de herramientas hasta que termine el bloque de contenido
- Planificaría para las conexiones caídas, porque Claude no reanuda los streams de forma nativa
Destacan algunas cifras:
- Haiku 4.5: unos 410 ms de TTFT
- Sonnet 4.6: unos 720 ms de TTFT
- Opus 4.7: unos 980 ms de TTFT
- Los tiempos de espera de proxy por defecto de 30–60 segundos pueden cortar salidas largas
- A menudo se necesitan tiempos de lectura más largos de 120–300 segundos
- Los trabajos por lotes pueden costar un 50% menos que las tarifas estándar por token
En pocas palabras: el streaming cambia la entrega, no el modelo. Claude API envía texto en pequeños fragmentos de eventos a través de una conexión en vivo, y mi aplicación reconstruye la respuesta final en pantalla. Para chats, copilotos y asistentes, eso suele significar una mejor sensación para el usuario, menos problemas de timeout por inactividad y más trabajo en los lados del cliente y del backend.
Esto es lo que más importa:
| Área | En qué me centraría |
|---|---|
| Velocidad | Tiempo hasta el primer token, tamaño del prompt, elección del modelo |
| Configuración | stream: true, gestión de SSE, búfer del proxy desactivado |
| UX | Primero un spinner, luego texto token a token, más un botón de parada |
| Coste | Rastrear tokens de entrada/salida, fijar max_tokens, cancelar sesiones muertas |
| Fiabilidad | Reintentar solo errores reintentables, conservar el texto parcial, reiniciar con un prompt de continuación |
Así que, si yo estuviera configurando esto, pensaría en el streaming como una decisión de UX e infraestructura, no solo como un indicador de API.

Construir con Claude API - Parte 4 - Streaming de respuestas

Cómo funciona el streaming de Claude API a nivel de protocolo
Activar el streaming no cambia el modelo en sí. Cambia cómo se entrega la salida. En lugar de esperar una respuesta completa, Claude envía pequeños fragmentos a medida que están listos.
Qué endpoint y ajustes de solicitud habilitan el streaming
El streaming usa el mismo endpoint de la Claude Messages API, /v1/messages, que una solicitud normal. La única diferencia es añadir "stream": true al cuerpo de la solicitud [1][3]. Ese indicador cambia la conexión de un flujo estándar de solicitud-respuesta a Server-Sent Events (SSE), donde el servidor envía los fragmentos a medida que se generan.
Los SDK oficiales de Python y TypeScript incluyen ayudantes de stream que gestionan el análisis de eventos y el ensamblaje del mensaje por ti. Cuando el stream termina, llamar a .get_final_message() en Python o a .finalMessage() en TypeScript devuelve la respuesta completa, junto con los recuentos de tokens y el motivo de parada [1][4].
Esos ajustes inician el stream. La siguiente pieza es el flujo de eventos que llega de vuelta por la conexión.
Qué eventos llegan durante un stream
Un stream sigue una secuencia fija de eventos con nombre. Cada evento lleva los datos que tu cliente necesita para reconstruir la respuesta completa de la forma correcta.
| Tipo de evento | Propósito | Datos clave |
|---|---|---|
message_start | Abre el stream | ID del mensaje, rol, modelo e input_tokens |
content_block_start | Inicia un nuevo segmento de contenido | Índice del bloque y tipo de bloque (text, tool_use o thinking) |
content_block_delta | Envía contenido parcial | Índice del bloque y text_delta, input_json_delta o thinking_delta |
content_block_stop | Cierra un segmento de contenido | Índice del bloque completado |
message_delta | Actualiza el estado a nivel de mensaje | output_tokens acumulados y stop_reason |
message_stop | Finaliza el stream | Señal final para cerrar la conexión |
ping | Latido | Enviado durante el procesamiento del modelo |
error | Informa de un error de stream | Tipo de error y mensaje |
Estos son los datos que tu cliente almacena en búfer y muestra en tiempo real. Para salida de texto plano, añade cada text_delta a un búfer local a medida que llegan los eventos. Así es como la cadena de respuesta completa se va uniendo pieza a pieza. Las entradas de llamadas a herramientas funcionan un poco diferente: llegan como fragmentos input_json_delta, así que deberías almacenarlos en búfer primero y analizarlos solo después de content_block_stop [1][6].
Cuándo APIMart es relevante para el streaming de Claude

Si el streaming de Claude vive dentro de una aplicación multimodelo, APIMart puede darte un único lugar para enrutar el acceso a Claude y el streaming a través de una API LLM unificada. Eso suele importar más cuando quieres el mismo flujo de streaming en clientes web y móviles.
Cómo añadir streaming de Claude a aplicaciones web y móviles
SSE, HTTP streaming o envoltorios WebSocket: cuál usar
Una vez que entiendes cómo Claude envía los eventos transmitidos, el siguiente paso es hacer llegar esos eventos a los clientes web y móviles. La pregunta principal es sencilla: ¿qué transporte se adapta mejor a tu aplicación?
| Transporte | Complejidad de configuración | Ajuste al navegador | Comportamiento de la conexión |
|---|---|---|---|
| Server-Sent Events (SSE) | Baja | Nativo (EventSource/Fetch) | Unidireccional; reconexión automática |
| HTTP Streaming simple | Media | Requiere ReadableStream | Sin estructura de eventos ni reconexión integradas |
| Envoltorio WebSocket | Alta | Requiere biblioteca/envoltorio | Bidireccional; con estado; puede ser bloqueado por algunos firewalls corporativos |
Para la mayoría de las aplicaciones basadas en navegador, SSE es la opción por defecto. Funciona bien con la mayoría de proxies y CDN, y la historia del soporte del navegador es sencilla.
Los WebSockets aún pueden tener sentido. Si tu aplicación ya depende de comunicación bidireccional y en vivo, puede que encajen a la perfección. Pero para una aplicación de chat estándar, a menudo añaden más piezas móviles de las que valen.
Por qué un proxy backend suele ser la arquitectura más segura
Después de elegir el transporte, coloca la gestión del stream detrás de tu servidor. Mantén las solicitudes de Claude detrás de un proxy backend para proteger tus claves de API de varios modelos [9][5].
Esa capa de proxy es también el lugar adecuado para:
- inyectar prompts de sistema
- aplicar límites de tasa por usuario
- registrar la temporización del primer y del último token
Establece X-Accel-Buffering: no para detener el búfer del proxy [2][8]. Conecta también la señal de aborto del cliente al stream. De ese modo, si un usuario detiene la generación, la solicitud se cancela de inmediato en lugar de gastar tokens en una respuesta que nadie leerá.
Una trampa más: los tiempos de espera por defecto de 30–60 segundos pueden cortar respuestas largas [9][2]. En producción, usa tiempos de lectura de unos 120–300 segundos para generaciones más largas.
Cómo se ve una buena UX en el cliente durante una respuesta en vivo
Una vez que el stream está protegido y retransmitido, el trabajo se traslada a la interfaz. Aquí es donde el streaming se siente fluido o torpe.
Muestra un indicador de "Pensando..." o un spinner en cuanto el usuario envía un prompt. Eso cubre el retardo del primer token. En cuanto llega el primer content_block_delta, elimina el indicador y empieza a renderizar el texto.
Luego añade cada text_delta a medida que llega para que la respuesta aparezca con un efecto de máquina de escribir. Para evitar que la interfaz se entrecorte, agrupa las actualizaciones con requestAnimationFrame de modo que no dispares demasiados re-renderizados. El auto-desplazamiento debería seguir la respuesta mientras se genera, pero debería retirarse si el usuario se desplaza hacia arriba para leer contenido anterior.
Incluye siempre un botón de "Parar" conectado a AbortController para que pueda cancelar la solicitud Fetch. Eso debería finalizar el stream de forma limpia sin borrar el texto que ya está en pantalla.
Si la conexión se cae, mantén visible la salida parcial. Para la recuperación, conserva ese texto parcial y reinicia con un prompt de continuación, ya que Claude no reanuda de forma nativa un stream caído [3][1].
Cómo gestionar latencia, coste y fiabilidad en producción
Una vez que el stream está en vivo, el trabajo de producción se reduce a tres controles: latencia, gasto y recuperación.
Cómo el streaming cambia la latencia percibida
La principal métrica de UX aquí es el Tiempo hasta el Primer Token (TTFT): el tiempo hasta que aparece la primera palabra. En una aplicación con streaming, ese primer token visible da forma a toda la sensación del producto. Si aparece rápido, la aplicación se siente ágil. Si se demora, los usuarios lo notan.
Los benchmarks muestran diferencias claras entre los modelos de Claude: Haiku 4.5 alcanza unos 410 ms de TTFT, Sonnet 4.6 ronda los 720 ms y Opus 4.7 llega a unos 980 ms [3]. La regla sencilla es usar el modelo más rápido que aún supere tu listón de calidad.
El tamaño del prompt también importa. Ventanas de contexto más grandes pueden empujar el TTFT hacia 1–3 segundos [5]. Así que si tu prompt de sistema tiene instrucciones adicionales, reglas antiguas o ejemplos inflados, recortarlos puede hacer que la aplicación se sienta mucho más ágil.
Cómo rastrear el uso de tokens y controlar los costes en USD
El streaming y el procesamiento por lotes cuestan lo mismo por token. Lo único que cambia es cuándo llega la salida. Los recuentos de tokens se incluyen en el propio stream: el evento message_start incluye usage.input_tokens, y el evento message_delta cerca del final incluye el usage.output_tokens acumulado final [1][4]. Tu backend debería almacenar esos datos de uso finales después de que el stream termine para que la facturación siga siendo precisa.
Fija max_tokens en cada solicitud. Te da un tope firme y evita que las generaciones largas disparen los costes [1][11]. También deberías vigilar las desconexiones del cliente en el lado del servidor. Si el usuario se ha ido y la generación sigue en marcha, sigues gastando tokens sin motivo [5][7].
Para trabajos que no necesitan salida en vivo, las cuentas cambian. La resumización por lotes, el procesamiento sin conexión y la generación nocturna de informes son buenos ejemplos. En esos casos, la Batch API ofrece un 50% de descuento sobre las tarifas normales por token [5][10].
Claude 3.5 Sonnet cuesta unos 3,00 $ por 1 millón de tokens de entrada y 15,00 $ por 1 millón de tokens de salida en streaming estándar [8]. Con la Batch API, las cargas de trabajo asíncronas cuestan la mitad.
Esas cifras de uso también ayudan con la facturación y la monitorización de límites de tasa. Para más estrategias sobre la gestión de solicitudes de alto volumen, consulta nuestros consejos de costes de API de IA.
Cómo prevenir streams caídos y recuperarse de forma segura
Claude no tiene una función de reanudación en el lado del servidor [1][3]. Si un stream se cae, envía la salida parcial en una nueva solicitud y pide a Claude que continúe desde el punto de interrupción.
Reintenta solo los fallos que probablemente se resuelvan por sí solos.
| Código de error | Tipo | Acción |
|---|---|---|
| 429 | Límite de tasa | Reintentar con backoff: 5s → 10s → 20s |
| 529 | Servidor sobrecargado | Reintentar tras 30–60 segundos |
| 408 | Timeout de conexión | Reconectar de inmediato |
| 4xx | Error del cliente | No reintentar; corregir la solicitud |
Después de eso, el paso final es elegir qué funciones de streaming importan más.
Conclusión: qué funciones de streaming de Claude importan más
Una vez que has revisado la latencia, el coste y la fiabilidad, el streaming de Claude se reduce a tres cosas: capacidad de respuesta percibida, señales de eventos claras y manejo sólido de errores.
El streaming importa porque la entrega del primer token hace que Claude se sienta rápido y receptivo.
El flujo de eventos SSE te da deltas de texto, recuentos de uso y señales de error en tiempo real [1][3].
Usa un proxy backend para proteger las claves, desactivar el búfer y gestionar las desconexiones [2][8]. Para aplicaciones multimodelo, APIMart puede centralizar el streaming, el registro y la facturación de Claude.
En producción, un TTFT rápido, el seguimiento del uso y la resiliencia del proxy son lo que más importa.
Preguntas frecuentes
¿Cuándo debería usar streaming en lugar de una respuesta normal de Claude API?
Usa streaming cuando tu aplicación está de cara al usuario. Envía los tokens a medida que se generan, así que las respuestas se sienten casi instantáneas. Ese pequeño cambio puede hacer que todo el producto se sienta más rápido y fluido.
El streaming funciona mejor para chat en tiempo real, respuestas largas y flujos de trabajo de agentes con llamadas a herramientas. También te ayuda a evitar timeouts cuando las salidas se alargan o los límites de tokens son altos.
Omítelo para solicitudes cortas y simples o trabajos por lotes donde el rendimiento importa más que la latencia.
¿Qué debería hacer si un stream de Claude se desconecta a mitad de respuesta?
Si un stream de Claude se desconecta, los Server-Sent Events no retomarán por sí solos donde se quedaron. Tu aplicación necesita gestionar esa parte.
Cuando la conexión se cae, puedes reintentar la solicitud completa o mostrar la salida parcial que ya has guardado. Usa un bloque try/except para capturar APIConnectionError o APIStatusError, y conserva una referencia al contenido que has acumulado hasta ese momento.
Si quieres que el stream continúe con menos fricción, rastrea el último ID de evento y reproduce manualmente el stream desde ese punto.
¿Cómo puedo reducir los costes de streaming sin perjudicar la UX?
Céntrate en el ajuste del prompt y en una gestión eficiente de la sesión. Fija límites firmes de max_tokens, mantén los prompts cortos y añade una opción de cancelación temprana para que los usuarios puedan detener la generación una vez que tengan lo que necesitan.
Para cargas de trabajo por lotes que no necesitan un ida y vuelta inmediato, usa el modo sin streaming. Para un seguimiento preciso de costes, espera al evento final message_stop en lugar de estimar a partir de fragmentos a mitad de stream.
Elige el modelo que quieres en el marketplace
Prueba modelos de chat, imagen y video en el marketplace de APIMart y experimenta rápidamente sus capacidades con una API unificada.