Guides
Limites de débit
Limites de requêtes, headers et backoff sur 429
Limites par plan
| Plan | Limite de requêtes | Concurrence | Idéal pour |
|---|---|---|---|
| Free | 10 requêtes/min | 2 simultanées | Tests et prototypage |
| Pro | 100 requêtes/min | 10 simultanées | Apps en production |
| Enterprise | 1000 requêtes/min | 50 simultanées | Opé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: 1714137600X-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.