Gidsen

Rate Limits

Requestlimieten, headers en 429-backoff

Limieten per plan

PlanRequestlimietConcurrencyGeschikt voor
Free10 requests/min2 gelijktijdigTesten & prototyping
Pro100 requests/min10 gelijktijdigProductie-apps
Enterprise1000 requests/min50 gelijktijdigGrootschalige operaties

Response-headers

Elke response bevat de rate-limit-Headers:

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

X-RateLimit-Reset is een Unix-epoch-timestamp.

429 afhandelen

Wanneer je 429 RATE_LIMIT_EXCEEDED raakt, wacht dan tot de X-RateLimit-Reset-epoch — probeer niet blind opnieuw. Combineer met exponentiële backoff voor tijdelijke fouten:

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

Geef voor batchjobs de voorkeur aan minder, grotere batches boven veel kleine — een batch van 50 URL's is één request tegen je rate-limit, niet vijftig.