Ratenbegrenzungen
Die API ist pro API-Schlüssel ratenbegrenzt (für eine nicht authentifizierte Anfrage ersatzweise nach Client-IP). Suede legt das Limit und das Fenster fest und kann sie ändern, lesen Sie sie daher aus den Antwort-Headern, statt eine feste Zahl fest zu verdrahten.
Header
Jede /v1-Antwort enthält:
| Header | Bedeutung |
|---|---|
X-RateLimit-Limit |
Höchstzahl erlaubter Anfragen im aktuellen Fenster. |
X-RateLimit-Remaining |
Verbleibende Anfragen im aktuellen Fenster. |
X-RateLimit-Reset |
Unix-Epochensekunde, zu der das Fenster zurückgesetzt wird. |
Wenn Sie das Limit überschreiten, antwortet die API mit HTTP 429 und einem Retry-After-Header (Sekunden, die
zu warten sind):
{ "error": { "type": "rate_limited", "message": "Rate limit exceeded. Slow down and retry after the reset.", "request_id": "…" } }
Umgang mit 429
Warten Sie ab und versuchen Sie es nach Retry-After Sekunden erneut. Ein einfaches, zuverlässiges Muster:
# Prüfen Sie Ihr aktuelles Budget anhand der Header einer beliebigen Antwort. curl -sD - -o /dev/null "https://api.suede.io/v1/search?q=test" \ -H "Authorization: Bearer $SUEDE_API_KEY" | grep -i '^x-ratelimit'
async Task<HttpResponseMessage> GetWithRetryAsync(HttpClient http, string url) { while (true) { var res = await http.GetAsync(url); if (res.StatusCode != System.Net.HttpStatusCode.TooManyRequests) return res; var wait = res.Headers.RetryAfter?.Delta ?? TimeSpan.FromSeconds(1); await Task.Delay(wait); } }
async function getWithRetry(url, init) { for (;;) { const res = await fetch(url, init); if (res.status !== 429) return res; const wait = Number(res.headers.get("retry-after") ?? "1") * 1000; await new Promise((r) => setTimeout(r, wait)); } }
Die Ratenbegrenzung ist von der Abrechnung getrennt. Siehe Fehler zu den 402-Antworten,
die zurückgegeben werden, wenn Ihre Mitgliedschaft inaktiv ist oder Ihr Guthaben leer ist.