x-api-key ou, si aucune clé API n’est transmise, l’adresse IP de votre client. Chaque portée conserve un compteur indépendant avec une fenêtre glissante de 60 secondes.
Identifiant et exemptions
Le middleware sélectionne un identifiant de limite de débit dans cet ordre :- En-tête
x-api-key→ compteur associé à la clé. - Premier saut de
X-Forwarded-For→ compteur associé à l’IP. REMOTE_ADDR→ compteur associé à l’IP.
- La clé interne
DIDIT_WEBAPP_API_KEY(utilisée uniquement par la console Didit). - Les endpoints protégés par l’autorisation
IsValidSession(le trafic de session intégré/SDK). GET /system/healthcheck(traité parHealthMiddlewareen amont de cette pile).- Les webhooks des fournisseurs : Stripe, filtrage AML, rappels de vérification faciale, modification de listes KYC.
Limites globales
Chaque requête authentifiée est également répartie par méthode HTTP dans une portée générique, de sorte que toute nouvelle route hérite d’une valeur par défaut appropriée :
Les créations de transactions et l’ingestion d’événements sont décomptées dans
ingest-write au lieu de generic-write : une intégration d’ingestion à volume élevé bénéficie de 600 requêtes par minute et par clé API sans consommer le quota de ses autres écritures.
Les limites spécifiques aux endpoints (section suivante) s’appliquent en plus de la limite globale. La première portée dont le compteur est dépassé est celle qui renvoie une erreur 429.
Limites spécifiques aux endpoints
Le middleware définit des portées plus strictes pour les routes à plus fort impact :GET /v3/session/<id>/decision/ est traité par SessionV3RetrieveView et ne fait pas partie de la portée session-decision. Il est uniquement régi par le plafond de 600/min de generic-get. La restriction de 100/min sur les décisions s’applique aux chemins de décision v1 et v2.Format de la réponse 429
Lorsque vous dépassez une portée quelconque, vous recevez une réponse HTTP429 avec ce corps et ces en-têtes :
Les en-têtes
X-RateLimit-* ne sont émis que sur la réponse 429 — les réponses réussies ne les incluent pas actuellement. Utilisez la valeur Retry-After (ou X-RateLimit-Reset - now) comme délai avant la tentative suivante.
Conseils pour les clients
- Respectez
Retry-Aftercomme plancher pour votre délai d’attente. Par-dessus, ajoutez une temporisation exponentielle avec gigue (5s → 10s → 20s → 40s ± random) afin que deux clients recevant une réponse429au même moment ne se synchronisent pas. - Arrêtez les tentatives après un nombre limité de tentatives (par ex. 5 tentatives). Renvoyez l’erreur à votre appelant et alertez votre équipe — des erreurs 429 continues indiquent généralement une boucle incontrôlée et non un pic passager.
- Utilisez un identifiant par charge de travail. Partager une
x-api-keyentre plusieurs backends les rassemble sous le même compteur, ce qui peut amener un voisin bruyant à priver les autres de ressources. Créez une application distincte (et donc uneapi_keydistincte) par environnement, marque ou client — voir Enregistrement programmatique. - Mettez en cache les lectures de décisions. Les endpoints
/decision/ne sont pas conçus pour des boucles d’interrogation intensives ; si vous avez besoin de mises à jour en temps réel, utilisez les Webhooks et n’appelezGET /v3/session/<id>/decision/que pour du rattrapage ou de l’audit. - Générez les PDF hors ligne. Le rendu de PDF consomme beaucoup de CPU (limite de 50/min). Déclenchez-le depuis une file d’attente une fois que la session a atteint un statut terminal, et non à chaque consultation de page.
Exemple de client prenant en compte les erreurs 429
Besoin d’une marge supérieure ?
Si 600 sessions par minute ne suffisent pas — par exemple, lors d’un lancement marketing ou d’un rattrapage de données —, envoyez un e-mail à support@didit.me avec l’UUID de votreapplication ainsi que les débits continus et de pointe prévus. Les dérogations sont configurées par application.