Limites de débit
Certivant applique une limite de débit de l'API par minute, selon le forfait — apprenez à lire les en-têtes de limite de débit, à traiter les réponses 429, à réessayer correctement et à concevoir votre intégration pour rester sous la limite.
Certivant applique une limite de débit de l'API par minute pour protéger la plateforme contre les clients incontrôlés et les voisins bruyants. Restez sous la limite et vous ne verrez jamais de limitation ; si vous la dépassez, vous recevez un 429 accompagné d'en-têtes qui indiquent exactement quand réessayer.
La limite
Votre plafond par minute est défini par votre forfait. L'opérateur de la plateforme peut aussi accorder une
exception par client, toujours plafonnée au maximum du forfait. Le nombre effectif est celui que signale l'en-tête
X-RateLimit-Limit sur chaque réponse : lisez-le plutôt que de coder une valeur en dur.
| Débit | Selon le forfait (voir les valeurs par défaut ci-dessous). Indiqué dans X-RateLimit-Limit |
| Fenêtre | Fenêtre fixe de 60 secondes |
| Backend | Redis (INCR + EXPIRE) |
| Comptage | Par clé d'API. Chaque clé est comptée indépendamment par rapport au plafond de votre forfait |
| Points de terminaison publics | Soumis à une limite par adresse IP plus basse (60/min) pour prévenir les abus |
Plafonds par défaut selon le forfait
| Niveau de forfait | Plafond par défaut |
|---|---|
| Free / Launch / Starter | 60 requêtes / minute |
| Pro / Scale / Growth | 300 requêtes / minute |
| Enterprise | 600 requêtes / minute |
Il s'agit de valeurs par défaut : l'opérateur de la plateforme peut ajuster le plafond de chaque forfait et accorder à votre organisation une limite plus élevée par client (jusqu'au plafond du forfait). Vous pouvez consulter la limite effective de votre organisation, en lecture seule, dans le tableau de bord, à KYC → Développeur.
Si vous avez besoin d'un plafond plus élevé pour le trafic de production, demandez à votre interlocuteur de compte (ou, sur les déploiements auto-hébergés, à l'opérateur de votre plateforme) de relever le plafond de votre forfait ou votre limite par client.
En-têtes de réponse (sur chaque réponse authentifiée)
Chaque réponse réussie contient l'état actuel de la limite de débit :
| En-tête | Type | Signification |
|---|---|---|
X-RateLimit-Limit | entier | Nombre maximal de requêtes par fenêtre — le plafond effectif de votre forfait |
X-RateLimit-Remaining | entier | Requêtes restantes dans la fenêtre en cours |
X-RateLimit-Reset | entier | Secondes avant que la fenêtre ne se réinitialise complètement |
HTTP/1.1 200 OK
X-RateLimit-Limit: 120
X-RateLimit-Remaining: 117
X-RateLimit-Reset: 42
Content-Type: application/json
{ "data": [...], "pagination": {...} }
Lisez ces valeurs dans votre client pour ralentir de façon proactive : n'attendez pas un 429 si vous voyez
X-RateLimit-Remaining: 3.
La réponse 429
Lorsque vous dépassez la limite, la requête suivante renvoie :
HTTP/1.1 429 Too Many Requests
X-RateLimit-Limit: 120
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 18
Content-Type: application/json
{
"success": false,
"error": {
"code": "RATE_LIMITED",
"message": "Rate limit exceeded. Max 120 requests per 60s. Retry in 18s."
}
}
X-RateLimit-Reset indique exactement combien de temps attendre. Utilisez-le plutôt que de deviner.
Stratégie de nouvelle tentative
Le gestionnaire le plus simple et correct :
async function withRateLimit<T>(fn: () => Promise<Response>): Promise<T> {
while (true) {
const res = await fn();
if (res.status !== 429) {
if (!res.ok) throw await readError(res);
return res.json() as Promise<T>;
}
const retryAfterSec = Number(res.headers.get("X-RateLimit-Reset") ?? 60);
await sleep(retryAfterSec * 1000 + 100); // pad by 100ms for clock skew
}
}
Trois principes à respecter :
- Respectez
X-RateLimit-Reset. Attendre moins ne fait que vous heurter de nouveau à la limite. - Ajoutez environ 100 ms de marge pour tenir compte du décalage d'horloge entre votre machine et la périphérie de Certivant.
- Limitez vos tentatives si la requête n'est pas critique. Insister pendant 5 minutes sur un appel de liste non urgent gaspille les ressources des deux côtés.
Concevoir en tenant compte de la limite
| Schéma | Effet sur la limite de débit |
|---|---|
Utiliser les webhooks au lieu d'interroger GET /requests/:id | Réduit le volume de requêtes d'environ 99 % dans les intégrations typiques |
Regrouper les appels de liste avec limit=100 au lieu de limit=20 | 5 fois moins d'appels pour les mêmes données |
Mettre en cache les réponses GET pendant de courtes fenêtres (5-30 s) | Réduit les lectures en double |
| Utiliser des clés distinctes pour les charges de lecture et d'écriture | Chaque clé est comptée indépendamment par rapport au plafond de votre forfait |
| Sortir les traitements longs de votre gestionnaire de webhooks | Évite les rafales d'appels lorsqu'une série d'événements arrive |
L'économie la plus importante vient de l'utilisation des webhooks. La première cause de tickets de support « j'atteins la limite de débit » est constituée par des intégrations qui interrogent en boucle les changements d'état : ne le faites pas, configurez plutôt des webhooks.
Comportement en cas de rafale
La limite est appliquée selon une fenêtre fixe : la première requête démarre un compteur de 60 secondes, et chaque requête est décomptée de votre plafond jusqu'à la réinitialisation de la fenêtre. Répartissez le trafic soutenu de façon homogène au lieu d'épuiser le budget de la minute dans les toutes premières secondes.
Si vous avez un schéma de rafale connu (par exemple une tâche de traitement par lot quotidienne qui traite 500 enregistrements), espacez les appels :
for (const record of records) {
await processOne(record);
await sleep(500); // 2 req/s — comfortably under typical ceilings
}
Que se passe-t-il lorsque Redis est injoignable
Si l'instance Redis de la limite de débit est temporairement injoignable, Certivant bascule en mode permissif : il ne
bloque pas votre trafic. Vous recevez des réponses 2xx normales, sans les en-têtes X-RateLimit-*. Une fois Redis rétabli,
l'application de la limite reprend normalement. Une panne de Redis de notre côté n'interrompt donc pas votre intégration.
La livraison des webhooks est distincte
La limite de débit s'applique à vos appels sortants vers Certivant. Les livraisons de webhooks entrants, de Certivant vers votre point de terminaison, ne consomment aucun quota. Il n'existe pas de « limite de débit des webhooks » dont vous devriez vous soucier.
Points de terminaison publics
Les points de terminaison qui ne nécessitent pas de clé d'API (GET /api/status, GET /api/kyc/public/status, les
points de terminaison de soumission de formulaires) disposent d'une limite distincte par adresse IP de 60 requêtes par
minute. Elle s'applique à l'adresse IP de l'appelant, et non à une clé d'API. Elle est volontairement restrictive, car ces
points de terminaison sont accessibles sans authentification ; si votre interface destinée aux demandeurs l'atteint, faites
plutôt passer les appels par votre propre backend afin qu'ils partagent une adresse IP que vous contrôlez.
Erreurs
Chaque code d'erreur de l'API Certivant expliqué — forme de la réponse, correspondance avec les statuts HTTP, consignes de traitement par code, et un wrapper de nouvelle tentative robuste que vous pouvez intégrer à votre implémentation.
Schémas et énumérations
Types TypeScript canoniques pour chaque schéma partagé de Certivant — statuts de demande, types de documents, types de contrôles, structure du score de risque, champs du demandeur et de l'entité KYB, enveloppe des webhooks, et pagination.