Anleitungen
Rate Limits
Anfragelimits, Header und 429-Backoff
Limits nach Plan
| Plan | Anfragelimit | Concurrency | Am besten für |
|---|---|---|---|
| Free | 10 Anfragen/min | 2 gleichzeitig | Testen & Prototyping |
| Pro | 100 Anfragen/min | 10 gleichzeitig | Produktions-Apps |
| Enterprise | 1000 Anfragen/min | 50 gleichzeitig | Großflächiger Betrieb |
Antwort-Header
Jede Antwort enthält die Rate-Limit-Header:
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 87
X-RateLimit-Reset: 1714137600X-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.