Limites de requêtes
Quotas, en-têtes X-RateLimit et la bonne stratégie d'attente progressive.
Wajub limite le débit sur plusieurs axes à la fois : votre équipe, la clé utilisée, l'IP appelante
et quelques endpoints sensibles. Une requête doit passer toutes ces limites. La première qui se
déclenche décide de votre 429.
Les limites de la plateforme sont ailleurs
Cette page traite de la limitation des requêtes. Pour la taille des fichiers envoyés, le plafond des payloads de webhook et les quotas d'équipe, consultez Plafonds et quotas.
Les limites
| Portée | Plafond par tranche de 60 secondes | Compté par |
|---|---|---|
| Non authentifié | 30 | IP appelante |
| Équipe | Selon le plan, 120 et plus | Votre équipe, toutes clés confondues |
| API key | 100 | La valeur exacte d'Authorization |
| IP | 120 | IP appelante, authentifiée ou non |
| Endpoint | 30 paiements, 20 transferts, 10 remboursements, 50 clients, multipliés par le palier de votre plan | Équipe et endpoint |
| Écritures de payout | 20 | POST /transfers et POST /beneficiaries, par équipe |
Une clé ne dépasse jamais 100 requêtes par minute
Le plafond par clé est fixe et n'évolue pas avec votre plan. Un quota d'équipe au-dessus de 100 n'est atteignable qu'en répartissant le trafic sur plusieurs clés, ce qui est de toute façon une bonne idée : une clé par service, pour pouvoir en révoquer une sans tout arrêter.
Lisez la limite, ne la codez pas en dur
Votre quota d'équipe dépend de votre plan et de tout plafond personnalisé que le support a défini pour vous. Plutôt que de recopier un tableau qui peut changer sans prévenir, relisez-le dans chaque réponse :
X-RateLimit-Limit: 360
X-RateLimit-Remaining: 357
X-RateLimit-Reset: 1748083260X-RateLimit-LimitintegerfacultatifX-RateLimit-RemainingintegerfacultatifX-RateLimit-Resetunix timestampfacultatifCes trois en-têtes ne décrivent que le compteur de l'équipe. Les compteurs par clé, par IP et
par endpoint ne sont pas exposés : un 429 peut donc arriver alors que X-RateLimit-Remaining
semble encore confortable. Le champ type du corps indique lequel s'est déclenché.
Pas d'en-têtes, pas de plafond
Un compte sur un plan illimité ne reçoit aucun en-tête X-RateLimit-*, plutôt qu'un chiffre
fictif. Interprétez leur absence comme « pas de limitation au niveau de l'équipe », jamais comme
zéro.
À quoi ressemble un 429
typestringfacultatifteam, api_key, ip ou endpoint.retry_afterintegerfacultatifRetry-After.retry_after_humanstringfacultatifHH:MM:SS, pour les logs et les tickets de support.Lisez type avant de réagir. Un 429 de type team ou ip signifie qu'il faut ralentir
partout ; un 429 de type endpoint signifie que seule cette ressource est saturée et que le
reste de votre trafic peut continuer ; un 429 de type api_key signifie que c'est cet
identifiant précis qui bloque, pas votre compte.
Les limitations plus strictes sur les écritures de payout répondent avec un corps plus court, sans
type. Traitez tout 429 de la même façon : lisez Retry-After, attendez, réessayez.
Attente progressive
Respectez Retry-After quand il est présent, et rabattez-vous sur une attente exponentielle avec
une part d'aléa (jitter) quand il ne l'est pas. Le jitter compte : sans lui, tous les workers
limités à la même seconde réessaient à la même seconde.
async function withRetry(send, max = 3) {
for (let attempt = 0; ; attempt++) {
const res = await send();
if (res.status !== 429 || attempt >= max) return res;
const header = Number(res.headers.get('retry-after'));
const wait = Number.isFinite(header) && header > 0
? header
: 2 ** attempt * (0.5 + Math.random() * 0.5);
await new Promise((r) => setTimeout(r, wait * 1000));
}
}L'exemple PHP réutilise les mêmes $options, donc la même clé d'idempotence : la nouvelle
tentative ne peut pas créer un second paiement. Consultez Idempotence.
Le SDK réessaie déjà
Les SDKs officiels réessaient deux fois les 429, 500, 502, 503 et 504 avant de lever
une erreur, en respectant Retry-After et sinon avec une attente exponentielle et du jitter.
N'ajoutez votre propre boucle de nouvelles tentatives qu'autour d'une opération métier complète,
jamais autour de chaque appel.
Lissez vos pics
Les jobs de rapprochement, les exports et les payouts en masse doivent régler leur propre cadence
plutôt que d'envoyer mille requêtes et d'encaisser les 429. Lire X-RateLimit-Remaining et
marquer une pause quand il approche de zéro coûte moins cher que de réessayer, et n'affecte pas
votre trafic interactif.