Guias

Rate Limits

Limites de requisição, headers e backoff de 429

Limites por plano

PlanoLimite de RequisiçõesConcorrênciaMelhor Para
Free10 requisições/min2 concorrentesTestes e prototipagem
Pro100 requisições/min10 concorrentesApps em produção
Enterprise1000 requisições/min50 concorrentesOperações em larga escala

Headers de resposta

Toda resposta inclui os headers de rate-limit:

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

X-RateLimit-Reset é um timestamp Unix epoch.

Tratando 429

Quando você bate em 429 RATE_LIMIT_EXCEEDED, faça backoff até o epoch de X-RateLimit-Reset — não tente novamente às cegas. Combine com backoff exponencial para erros transitórios:

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")

Para jobs em batch, prefira menos batches maiores em vez de muitos pequenos — um batch de 50 URLs é uma requisição contra seu rate limit, não cinquenta.