Gidsen
Rate Limits
Requestlimieten, headers en 429-backoff
Limieten per plan
| Plan | Requestlimiet | Concurrency | Geschikt voor |
|---|---|---|---|
| Free | 10 requests/min | 2 gelijktijdig | Testen & prototyping |
| Pro | 100 requests/min | 10 gelijktijdig | Productie-apps |
| Enterprise | 1000 requests/min | 50 gelijktijdig | Grootschalige operaties |
Response-headers
Elke response bevat de rate-limit-Headers:
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 87
X-RateLimit-Reset: 1714137600X-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.