Rate-Limits
Die Developer-API begrenzt, wie viele Aufrufe ein Token pro Minute senden darf. Das schützt die Plattform vor Schleifen, die außer Kontrolle geraten.
Limits
Ein Zugriffstoken darf 60 Aufrufe pro Minute senden, ein Bot 150. Dazu kommen höchstens 10 schreibende Aufrufe pro Minute je Token und Server. Maßgeblich ist Retry-After.
| Limit | Gezählt je | Zugriffstoken | Bot-Token |
|---|---|---|---|
| Alle Aufrufe | Token | 60 pro Minute | 150 pro Minute |
| Schreibende Aufrufe | Token und Server | 10 pro Minute | 10 pro Minute |
Antwort 429 RATE_LIMITED
Wer ein Limit überschreitet, bekommt 429 mit dem Code RATE_LIMITED und dem Header Retry-After. Der Header nennt in ganzen Sekunden, wie lange du warten sollst. Maßgeblich ist Retry-After, nicht eine feste Zahl.
Beispielantwort 429 RATE_LIMITED
HTTP/1.1 429 Too Many Requests
Retry-After: 30
{
"code": "RATE_LIMITED",
"message": "Zu viele Anfragen. Warte kurz und versuche es erneut.",
"requestId": "e4a8d3b61c0f4d79a2b5c8e1f3d60a97"
}Aufrufe wiederholen
Warte bei 429 die Zeit aus Retry-After ab und sende den Aufruf dann erneut. Bei POST nimmst du denselben Idempotency-Key: Die API speichert 429-Antworten nicht, der Aufruf läuft also beim nächsten Versuch normal.
Python: bei 429 warten und wiederholen
import os
import time
import requests
def get_with_retry(url, attempts=3):
for _ in range(attempts):
response = requests.get(
url,
headers={"Authorization": "Bearer " + os.environ["ZENIT_TOKEN"]},
timeout=10,
)
if response.status_code != 429:
return response
# Retry-After nennt die Wartezeit in Sekunden.
time.sleep(int(response.headers.get("Retry-After", "1")))
return response