Guías
Límites de tasa
Límites de solicitud, headers y backoff ante 429
Límites por plan
| Plan | Límite de solicitudes | Concurrencia | Mejor para |
|---|---|---|---|
| Free | 10 solicitudes/min | 2 concurrentes | Pruebas y prototipos |
| Pro | 100 solicitudes/min | 10 concurrentes | Apps en producción |
| Enterprise | 1000 solicitudes/min | 50 concurrentes | Operaciones a gran escala |
Headers de respuesta
Cada respuesta incluye los headers de límite de tasa:
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 87
X-RateLimit-Reset: 1714137600X-RateLimit-Reset es un timestamp Unix epoch.
Manejar el 429
Cuando recibas 429 RATE_LIMIT_EXCEEDED, espera hasta el epoch X-RateLimit-Reset — no reintentes a ciegas. Combínalo con backoff exponencial para errores transitorios:
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 en lote, prefiere menos batches grandes en lugar de muchos pequeños — un batch de 50 URLs es una sola solicitud contra tu límite de tasa, no cincuenta.