Guides

Limites de débit

Limites de requêtes, headers et backoff sur 429

Limites par plan

PlanLimite de requêtesConcurrenceIdéal pour
Free10 requêtes/min2 simultanéesTests et prototypage
Pro100 requêtes/min10 simultanéesApps en production
Enterprise1000 requêtes/min50 simultanéesOpérations à grande échelle

Headers de réponse

Chaque réponse inclut les Header de rate-limit :

X-RateLimit-Limit:     100
X-RateLimit-Remaining: 87
X-RateLimit-Reset:     1714137600

X-RateLimit-Reset est un timestamp epoch Unix.

Gérer les 429

Quand tu prends un 429 RATE_LIMIT_EXCEEDED, fais du backoff jusqu'à l'epoch X-RateLimit-Reset — ne réessaie pas à l'aveugle. Couple-le avec un backoff exponentiel pour les erreurs transitoires :

import httpx, time

def call(url: str, headers: dict, body: dict, max_attempts: int = 5):
    for attempt in range(max_attempts):
        r = httpx.post(url, headers=headers, json=body, timeout=60.0)
        if r.status_code != 429:
            r.raise_for_status()
            return r.json()
        reset = int(r.headers.get("X-RateLimit-Reset", "0"))
        wait = max(reset - int(time.time()), 2 ** attempt)
        time.sleep(wait)
    raise RuntimeError("rate-limited after retries")

Pour les tâches batch, préfère moins de batches plus gros plutôt que beaucoup de petits — un batch de 50 URLs compte pour une seule requête sur ta limite, pas cinquante.