Chaque clé a un quota de requêtes, un délai par requête et une taille de corps maximale. Ce guide dit quoi respecter et quoi faire en cas de refus.

Le quota de ta clé

Chaque clé peut envoyer :

  • 120 requêtes par minute ;
  • 3 000 requêtes par heure.

Au-delà, l’API répond 429 avec le code RATE_LIMITED. Elle ajoute l’en-tête Retry-After, le nombre de secondes à attendre.

Le quota est par clé. Deux clés ont deux quotas.

Que faire d’un 429

  1. Attends au moins Retry-After secondes.
  2. Renvoie la requête.
  3. Si le 429 revient, double l’attente à chaque essai et ajoute un délai au hasard.
async function appeler(url, options, essais = 5) {
  for (let essai = 0; essai < essais; essai += 1) {
    const reponse = await fetch(url, options);
    if (reponse.status !== 429) return reponse;
    const attente = Number(reponse.headers.get('Retry-After') ?? 1) * 2 ** essai;
    await new Promise((fin) => setTimeout(fin, (attente + Math.random()) * 1000));
  }
  throw new Error('Quota toujours dépassé');
}

Pour ne pas y arriver, demande des pages de limit 100. Suis aussi les événements par webhook plutôt que d’interroger l’API en boucle.

Le délai de 10 secondes

Une requête qui dure plus de 10 secondes est coupée. L’API répond 503 avec LEAGUES_UNAVAILABLE et Retry-After: 30.

Une écriture coupée a peut-être réussi. Relis l’élément ou les événements (GET /events) avant de la renvoyer.

Si rien n’a été écrit, renvoie-la avec une clé neuve. La même clé peut répondre 409 sans rien exécuter : lis le guide « Idempotence ».

La taille du corps

Un corps de requête ne dépasse pas 16 Kio. Au-delà, l’API répond 413 avec BODY_TOO_LARGE.

L’API ne transporte aucun fichier : réduis le corps, ne le découpe pas.

Les changements de limites

Ces valeurs peuvent changer. Tout changement est annoncé avec préavis. La page « Versions et règles d’utilisation » explique comment, et le journal des changements le date.

Et ensuite

  • Relis le guide « Erreurs » pour la liste complète des codes.