Guias
Rate Limits
Limites de requisição, headers e backoff de 429
Limites por plano
| Plano | Limite de Requisições | Concorrência | Melhor Para |
|---|---|---|---|
| Free | 10 requisições/min | 2 concorrentes | Testes e prototipagem |
| Pro | 100 requisições/min | 10 concorrentes | Apps em produção |
| Enterprise | 1000 requisições/min | 50 concorrentes | Operaçõ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: 1714137600X-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.