Anleitungen

Rate Limits

Anfragelimits, Header und 429-Backoff

Limits nach Plan

PlanAnfragelimitConcurrencyAm besten für
Free10 Anfragen/min2 gleichzeitigTesten & Prototyping
Pro100 Anfragen/min10 gleichzeitigProduktions-Apps
Enterprise1000 Anfragen/min50 gleichzeitigGroßflächiger Betrieb

Antwort-Header

Jede Antwort enthält die Rate-Limit-Header:

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

X-RateLimit-Reset ist ein Unix-Epoch-Timestamp.

Umgang mit 429

Wenn du 429 RATE_LIMIT_EXCEEDED bekommst, warte bis zur X-RateLimit-Reset-Epoch — wiederhol nicht blind. Kombiniere mit exponentiellem Backoff für transiente Fehler:

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

Bei Batch-Jobs sind weniger größere Batches besser als viele kleine — ein 50-URL-Batch ist eine Anfrage gegen dein Rate-Limit, nicht fünfzig.