Fiabilité
Objectifs concrets, règles de nouvelles tentatives, et ce qu’il advient de votre requête quand l’amont a un raté.
Les objectifs que nous suivons
| Périmètre | Objectif | Mesuré sur 30 jours |
|---|---|---|
| Disponibilité de la passerelle API | 99.9% | Voir le dashboard |
| Latence p50 de /v1/messages (premier octet, en streaming) | < 300 ms | Voir le dashboard |
| Crédit d’une recharge sur la clé | Dès la confirmation du paiement | Traitement immédiat après validation |
Règles de nouvelles tentatives
La passerelle est sûre en cas de nouvelle tentative sur une 5xx. Concrètement :
- 2xx — l’amont a traité la requête. Les tokens sont facturés. Ne réessayez pas.
- 4xx — votre requête est mal formée ou la clé pose problème (401 authentification / solde nul, 400 schéma, 429 limite de débit). Corrigez la requête ou la clé ; ne réessayez pas à l’aveugle.
- 5xx — l’amont ou la passerelle a échoué avant toute facturation. Vous pouvez réessayer avec un délai croissant ; aucun risque de double facturation.
Délai recommandé entre tentatives
# Minimal exponential backoff with jitter — 3 attempts, max ~5s total.
import random, time
delays = [0.5, 1.0, 2.0]
for d in delays:
try:
return call()
except RateLimitError:
time.sleep(d + random.uniform(0, 0.25))
except APIStatusError as e:
if 500 <= e.status_code < 600:
time.sleep(d + random.uniform(0, 0.25))
else:
raiseFiabilité du streaming
Utilisez stream: true pour tout appel dont la génération peut dépasser 60 secondes (long contexte, max_tokens élevé, boucles d’agent). Les délais d’attente des en-têtes de la plupart des bibliothèques HTTP se déclenchent entre 60 et 120 s — le streaming les évite, car le premier événement message_start arrive en ~100 ms. Notre passerelle relaie chaque fragment dès que l’amont l’émet, sans mise en tampon.
Ce que signifie une 503
503 « no available accounts » signale une saturation réelle et temporaire de la capacité amont. Traitez-la avec un délai exponentiel (500 ms / 1 s / 2 s), 3 tentatives au maximum. Une 503 qui dure plus d’une minute est un incident amont, pas un problème de votre requête. À noter : sur la surface native Anthropic, un identifiant de modèle inconnu ne renvoie pas de 503 — la passerelle renvoie immédiatement 400 invalid_request_error, avec la liste des identifiants pris en charge. La liste officielle se trouve sur Modèles.