Guías

Límites de tasa

Límites de solicitud, headers y backoff ante 429

Límites por plan

PlanLímite de solicitudesConcurrenciaMejor para
Free10 solicitudes/min2 concurrentesPruebas y prototipos
Pro100 solicitudes/min10 concurrentesApps en producción
Enterprise1000 solicitudes/min50 concurrentesOperaciones 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:     1714137600

X-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.