L'API Coffrify applique une limite de débit par espace de travail pour garantir un service stable et équitable. Chaque réponse vous indique précisément où vous en êtes via une série d'en-têtes X-RateLimit-*, et lorsque vous dépassez votre quota, l'API répond avec le statut 429 et un en-tête Retry-After. Ce guide explique comment lire ces signaux, les anticiper côté client, et mettre en place des stratégies robustes : file d'attente, backoff exponentiel avec jitter, et respect strict de Retry-After.
Comment fonctionne la limite
La limite s'applique par espace de travail sur une fenêtre glissante de 60 secondes. Elle est calculée séparément selon la classe de l'endpoint appelé, ce qui vous laisse beaucoup de marge en lecture tout en protégeant les opérations plus coûteuses. Toutes vos clés d'un même espace de travail (live et test) partagent le même compteur. Les requêtes en environnement sandbox ne sont pas concernées par ces quotas : elles relèvent de garde-fous distincts.
| Classe | Endpoints concernés |
|---|---|
| read | Les lectures GET (lister, récupérer un transfert, etc.) |
| write | Les écritures POST, PATCH, PUT, DELETE (créer un transfert, etc.) |
| expensive | Les opérations lourdes : listes paginées volumineuses, export d'audit, synthèses analytiques |
Les en-têtes de limite
Chaque réponse de l'API porte ces quatre en-têtes. Ils sont exposés via CORS, vous pouvez donc les lire aussi bien côté serveur que depuis un navigateur.
| En-tête | Signification |
|---|---|
X-RateLimit-Limit | Le quota maximal pour la classe d'endpoint et votre plan, sur la fenêtre de 60 s. |
X-RateLimit-Remaining | Le nombre de requêtes encore autorisées dans la fenêtre courante. |
X-RateLimit-Reset | L'horodatage Unix (secondes UTC) auquel le quota se réinitialise. |
X-RateLimit-Policy | La politique sous la forme <limite>;w=60 (fenêtre de 60 secondes). |
La réponse 429
Quand vous dépassez le quota, l'API renvoie le statut 429 avec le code d'erreur rate_limited et un en-tête Retry-After qui indique le nombre de secondes à attendre avant de réessayer. Respectez cette valeur : c'est le délai exact au-delà duquel votre prochaine requête sera de nouveau acceptée.
/v1/transfersEn cas de dépassement, répond 429 rate_limited avec Retry-After.Anticiper plutôt que subir
La meilleure stratégie consiste à ne jamais atteindre la limite. Surveillez X-RateLimit-Remaining après chaque appel et ralentissez volontairement quand il approche de zéro. Vous lissez ainsi votre trafic au lieu de l'envoyer par rafales qui déclenchent des 429.
File d'attente côté client
Pour un traitement par lots (par exemple créer de nombreux transferts), n'envoyez pas toutes les requêtes en parallèle. Faites-les transiter par une file d'attente avec une concurrence bornée : vous gardez un débit régulier, sous le quota, et vous évitez les pics qui provoquent des refus en cascade.
Backoff exponentiel avec jitter
Si un 429 survient malgré tout, réessayez en respectant d'abord Retry-After. En l'absence de cet en-tête, appliquez un backoff exponentiel (le délai double à chaque tentative) auquel vous ajoutez un jitter aléatoire. Le jitter évite que plusieurs clients, repartis en même temps, ne se resynchronisent et ne saturent l'API au même instant. Limitez le nombre de tentatives et plafonnez le délai maximal.
À retenir
- La limite est par espace de travail, sur une fenêtre glissante de 60 secondes, et distincte selon la classe d'endpoint (lecture, écriture, opérations lourdes).
- Lisez
X-RateLimit-RemainingetX-RateLimit-Reseten continu pour ralentir avant d'atteindre la limite. - Sur un
429, respectez d'abordRetry-After; à défaut, appliquez un backoff exponentiel avec jitter. - Lissez les lots via une file d'attente à concurrence bornée plutôt que des rafales parallèles.
- Au rejeu d'une écriture, réutilisez la même
Idempotency-Keypour éviter tout doublon.