
Streaming Claude API — les fonctionnalités clés expliquées
Comment fonctionne le streaming de l'API Claude — événements SSE, proxy backend, TTFT et contrôle des coûts, reprise des flux interrompus et fiabilité.
Si vous voulez que Claude paraisse rapide, activez le streaming. Au lieu d'attendre 15 à 25 secondes une réponse complète, les utilisateurs voient souvent le premier token en environ 300 à 800 ms.
Voici la version courte :
- J'utiliserais le streaming SSE quand je veux que les réponses apparaissent au fur et à mesure de leur génération
- Je garderais les appels à Claude derrière un proxy backend pour protéger les clés d'API
- Je surveillerais le TTFT (temps jusqu'au premier token),
max_tokenset les déconnexions pour maîtriser l'UX et les dépenses - J'analyserais les événements diffusés dans l'ordre :
message_start, les événements de bloc de contenu,message_delta, puismessage_stop - Je mettrais en mémoire tampon les fragments JSON d'outils jusqu'à la fin du bloc de contenu
- Je prévoirais les connexions interrompues, car Claude ne reprend pas les flux nativement
Quelques chiffres se démarquent :
- Haiku 4.5 : environ 410 ms de TTFT
- Sonnet 4.6 : environ 720 ms de TTFT
- Opus 4.7 : environ 980 ms de TTFT
- Les timeouts de proxy par défaut de 30 à 60 secondes peuvent couper les sorties longues
- Des timeouts de lecture plus longs de 120 à 300 secondes sont souvent nécessaires
- Les traitements par lot peuvent coûter 50 % moins cher que les tarifs standard au token
En clair : le streaming change la livraison, pas le modèle. Claude API envoie le texte par petits fragments d'événements sur une connexion active, et mon application reconstruit la réponse finale à l'écran. Pour les chats, les copilotes et les assistants, cela signifie généralement une meilleure sensation pour l'utilisateur, moins de problèmes de timeout d'inactivité et davantage de travail côté client et backend.
Voici ce qui compte le plus :
| Domaine | Ce sur quoi je me concentrerais |
|---|---|
| Vitesse | Temps du premier token, taille du prompt, choix du modèle |
| Configuration | stream: true, gestion SSE, mise en tampon du proxy désactivée |
| UX | Spinner d'abord, puis texte token par token, plus un bouton Stop |
| Coût | Suivi des tokens d'entrée/sortie, définir max_tokens, annuler les sessions mortes |
| Fiabilité | Réessayer uniquement les erreurs réessayables, conserver le texte partiel, redémarrer avec un prompt de continuation |
Donc si je mettais cela en place, je penserais au streaming comme un choix d'UX et d'infrastructure, pas seulement un simple drapeau d'API.

Développer avec Claude API - Partie 4 - Streaming des réponses

Comment fonctionne le streaming de l'API Claude au niveau du protocole
Activer le streaming ne change pas le modèle lui-même. Cela change la façon dont la sortie est livrée. Au lieu d'attendre une réponse complète, Claude envoie de petits fragments dès qu'ils sont prêts.
Quel endpoint et quels paramètres de requête activent le streaming
Le streaming utilise le même endpoint de l'API Messages de Claude, /v1/messages, qu'une requête normale. La seule différence est d'ajouter "stream": true au corps de la requête [1][3]. Ce drapeau fait passer la connexion d'un flux requête-réponse standard à des Server-Sent Events (SSE), où le serveur pousse les fragments à mesure qu'ils sont générés.
Les SDK officiels Python et TypeScript incluent des helpers de streaming qui gèrent pour vous l'analyse des événements et l'assemblage du message. Lorsque le flux se termine, l'appel de .get_final_message() en Python ou .finalMessage() en TypeScript renvoie la réponse complète, ainsi que le nombre de tokens et la raison d'arrêt [1][4].
Ces paramètres démarrent le flux. L'élément suivant est le flux d'événements qui revient sur la connexion.
Quels événements arrivent pendant un flux
Un flux suit une séquence définie d'événements nommés. Chaque événement porte les données dont votre client a besoin pour reconstruire correctement la réponse complète.
| Type d'événement | Objectif | Données clés |
|---|---|---|
message_start | Ouvre le flux | ID du message, rôle, modèle et input_tokens |
content_block_start | Commence un nouveau segment de contenu | Index du bloc et type de bloc (text, tool_use ou thinking) |
content_block_delta | Envoie du contenu partiel | Index du bloc et text_delta, input_json_delta ou thinking_delta |
content_block_stop | Ferme un segment de contenu | Index du bloc terminé |
message_delta | Met à jour l'état au niveau du message | output_tokens cumulés et stop_reason |
message_stop | Termine le flux | Signal final pour fermer la connexion |
ping | Battement de cœur | Envoyé pendant le traitement du modèle |
error | Signale une erreur de flux | Type et message d'erreur |
Ce sont les données que votre client met en mémoire tampon et affiche en temps réel. Pour une sortie en texte brut, ajoutez chaque text_delta à un tampon local à mesure que les événements arrivent. C'est ainsi que la chaîne de réponse complète se construit morceau par morceau. Les entrées d'appels d'outils fonctionnent un peu différemment : elles arrivent sous forme de fragments input_json_delta, vous devez donc les mettre en tampon d'abord et ne les analyser qu'après content_block_stop [1][6].
Quand APIMart est pertinent pour le streaming Claude

Si le streaming Claude s'insère dans une application multi-modèles, APIMart peut vous offrir un point unique pour router l'accès à Claude et le streaming via une API LLM unifiée. Cela compte surtout lorsque vous voulez le même flux de streaming sur les clients web et mobiles.
Comment ajouter le streaming Claude aux applications web et mobiles
SSE, streaming HTTP ou wrappers WebSocket : lequel utiliser
Une fois que vous comprenez comment Claude envoie les événements diffusés, l'étape suivante consiste à faire parvenir ces événements aux clients web et mobiles. La question principale est simple : quel transport convient le mieux à votre application ?
| Transport | Complexité de configuration | Adéquation navigateur | Comportement de connexion |
|---|---|---|---|
| Server-Sent Events (SSE) | Faible | Natif (EventSource/Fetch) | Unidirectionnel ; reconnexion automatique |
| Streaming HTTP simple | Moyenne | Nécessite ReadableStream | Aucune structure d'événements ni reconnexion intégrée |
| Wrapper WebSocket | Élevée | Nécessite une bibliothèque/un wrapper | Bidirectionnel ; avec état ; peut être bloqué par certains pare-feu d'entreprise |
Pour la plupart des applications basées sur navigateur, SSE est le choix par défaut. Il fonctionne bien avec la plupart des proxys et CDN, et la prise en charge des navigateurs est simple.
Les WebSockets peuvent tout de même avoir du sens. Si votre application dépend déjà d'une communication bidirectionnelle en direct, ils peuvent parfaitement convenir. Mais pour une application de chat standard, ils ajoutent souvent plus de complexité qu'ils n'en valent la peine.
Pourquoi un proxy backend est généralement l'architecture la plus sûre
Après avoir choisi le transport, placez la gestion du flux derrière votre serveur. Gardez les requêtes Claude derrière un proxy backend pour protéger vos clés d'API pour divers modèles [9][5].
Cette couche de proxy est aussi le bon endroit pour :
- injecter des prompts système
- appliquer des limites de débit par utilisateur
- journaliser le timing du premier et du dernier token
Définissez X-Accel-Buffering: no pour stopper la mise en tampon du proxy [2][8]. Connectez aussi le signal d'abandon du client au flux. Ainsi, si un utilisateur arrête la génération, la requête est annulée immédiatement au lieu de consommer des tokens pour une réponse que personne ne lira.
Encore un piège : les timeouts par défaut de 30 à 60 secondes peuvent couper les réponses longues [9][2]. En production, utilisez des timeouts de lecture d'environ 120 à 300 secondes pour les générations plus longues.
À quoi ressemble une bonne UX côté client pendant une réponse en direct
Une fois le flux protégé et relayé, le travail se déplace vers l'interface. C'est là que le streaming paraît fluide ou saccadé.
Affichez un indicateur « Réflexion... » ou un spinner dès que l'utilisateur soumet un prompt. Cela couvre le délai du premier token. Dès que le premier content_block_delta arrive, retirez l'indicateur et commencez à afficher le texte.
Ajoutez ensuite chaque text_delta au fur et à mesure de son arrivée pour que la réponse apparaisse avec un effet de machine à écrire. Pour éviter que l'interface ne saccade, regroupez les mises à jour avec requestAnimationFrame afin de ne pas déclencher trop de re-rendus. Le défilement automatique doit suivre la réponse pendant sa génération, mais doit s'arrêter si l'utilisateur remonte pour lire un contenu plus ancien.
Incluez toujours un bouton « Stop » relié à AbortController afin de pouvoir annuler la requête Fetch. Cela doit terminer le flux proprement sans effacer le texte déjà affiché à l'écran.
Si la connexion tombe, gardez la sortie partielle visible. Pour la reprise, conservez ce texte partiel et redémarrez avec un prompt de continuation, car Claude ne reprend pas nativement un flux interrompu [3][1].
Comment gérer la latence, le coût et la fiabilité en production
Une fois le flux en direct, le travail de production se résume à trois contrôles : la latence, les dépenses et la reprise.
Comment le streaming change la latence perçue
La principale métrique d'UX ici est le Time to First Token (TTFT) : le temps jusqu'à l'apparition du premier mot. Dans une application de streaming, ce premier token visible façonne toute la perception du produit. S'il apparaît vite, l'application semble réactive. S'il traîne, les utilisateurs le remarquent.
Les benchmarks montrent des écarts nets entre les modèles Claude : Haiku 4.5 atteint environ 410 ms de TTFT, Sonnet 4.6 se situe autour de 720 ms, et Opus 4.7 arrive à environ 980 ms [3]. La règle simple est d'utiliser le modèle le plus rapide qui atteint encore votre niveau de qualité.
La taille du prompt compte aussi. Des fenêtres de contexte plus grandes peuvent pousser le TTFT vers 1 à 3 secondes [5]. Donc si votre prompt système contient des instructions superflues, d'anciennes règles ou des exemples surchargés, les élaguer peut rendre l'application beaucoup plus réactive.
Comment suivre l'usage des tokens et maîtriser les coûts en USD
Le streaming et le traitement par lot coûtent le même prix par token. La seule chose qui change, c'est le moment où la sortie arrive. Le nombre de tokens est inclus dans le flux lui-même : l'événement message_start inclut usage.input_tokens, et l'événement message_delta vers la fin inclut le usage.output_tokens cumulé final [1][4]. Votre backend doit stocker ces données d'usage finales après la fin du flux pour que la facturation reste exacte.
Définissez max_tokens sur chaque requête. Cela vous donne un arrêt ferme et empêche les générations longues de faire grimper les coûts [1][11]. Vous devez aussi surveiller les déconnexions client côté serveur. Si l'utilisateur est parti et que la génération continue, vous consommez toujours des tokens sans raison [5][7].
Pour les traitements qui n'ont pas besoin de sortie en direct, le calcul change. La synthèse par lot, le traitement hors ligne et la génération de rapports nocturnes en sont de bons exemples. Dans ces cas, la Batch API offre une remise de 50 % sur les tarifs normaux au token [5][10].
Claude 3.5 Sonnet coûte environ 3,00 $ par million de tokens d'entrée et 15,00 $ par million de tokens de sortie en streaming standard [8]. Avec la Batch API, les charges de travail asynchrones coûtent deux fois moins cher.
Ces chiffres d'usage aident aussi à la facturation et au suivi des limites de débit. Pour d'autres stratégies de gestion des requêtes à fort volume, consultez nos conseils sur les coûts d'API IA.
Comment prévenir les flux interrompus et récupérer en toute sécurité
Claude ne dispose pas de fonctionnalité de reprise côté serveur [1][3]. Si un flux tombe, envoyez la sortie partielle dans une nouvelle requête et demandez à Claude de continuer à partir du point d'interruption.
Ne réessayez que les échecs susceptibles de se résoudre d'eux-mêmes.
| Code d'erreur | Type | Action |
|---|---|---|
| 429 | Limite de débit | Réessayer avec backoff : 5s → 10s → 20s |
| 529 | Serveur surchargé | Réessayer après 30 à 60 secondes |
| 408 | Timeout de connexion | Se reconnecter immédiatement |
| 4xx | Erreur client | Ne pas réessayer ; corriger la requête |
Ensuite, l'étape finale consiste à choisir quelles fonctionnalités de streaming comptent le plus.
Conclusion — quelles fonctionnalités de streaming Claude comptent le plus
Une fois que vous avez examiné la latence, le coût et la fiabilité, le streaming Claude se résume à trois choses : la réactivité perçue, des signaux d'événements clairs et une gestion solide des erreurs.
Le streaming compte parce que la livraison du premier token rend Claude rapide et réactif.
Le flux d'événements SSE vous fournit les deltas de texte, le nombre de tokens utilisés et les signaux d'erreur en temps réel [1][3].
Utilisez un proxy backend pour protéger les clés, désactiver la mise en tampon et gérer les déconnexions [2][8]. Pour les applications multi-modèles, APIMart peut centraliser le streaming, la journalisation et la facturation de Claude.
En production, un TTFT rapide, le suivi de l'usage et la résilience du proxy comptent le plus.
FAQ
Quand dois-je utiliser le streaming plutôt qu'une réponse d'API Claude normale ?
Utilisez le streaming lorsque votre application est destinée aux utilisateurs. Elle envoie les tokens à mesure de leur génération, ce qui rend les réponses quasi instantanées. Ce petit changement peut rendre l'ensemble du produit plus rapide et plus fluide.
Le streaming est idéal pour le chat en temps réel, les réponses longues et les workflows d'agents avec appels d'outils. Il aide aussi à éviter les timeouts lorsque les sorties s'allongent ou que les limites de tokens sont élevées.
Évitez-le pour les requêtes courtes et simples ou les traitements par lot où le débit compte plus que la latence.
Que dois-je faire si un flux Claude se déconnecte en pleine réponse ?
Si un flux Claude se déconnecte, les Server-Sent Events ne reprendront pas d'eux-mêmes là où ils s'étaient arrêtés. Votre application doit gérer cette partie.
Lorsque la connexion tombe, vous pouvez soit réessayer la requête complète, soit afficher la sortie partielle déjà enregistrée. Utilisez un bloc try/except pour capturer APIConnectionError ou APIStatusError, et gardez une référence au contenu accumulé jusque-là.
Si vous voulez que le flux continue avec moins de friction, suivez l'ID du dernier événement et rejouez manuellement le flux à partir de ce point.
Comment réduire les coûts de streaming sans nuire à l'UX ?
Concentrez-vous sur l'optimisation des prompts et une gestion efficace des sessions. Fixez des limites strictes de max_tokens, gardez les prompts courts et ajoutez une option d'annulation anticipée pour que les utilisateurs puissent arrêter la génération une fois qu'ils ont ce dont ils ont besoin.
Pour les charges de travail par lot qui n'ont pas besoin d'échanges immédiats, utilisez le mode non-streaming. Pour un suivi précis des coûts, attendez l'événement final message_stop au lieu d'estimer à partir des fragments en milieu de flux.
Choisissez le modèle qui vous convient dans le marketplace
Essayez les modèles de chat, image et vidéo sur le marketplace APIMart, puis découvrez rapidement leurs capacités avec une API unifiée.