Rate Limits & Fehler
Limits und HTTP-Antworten.
Public API (Secret-Key, /api/v1/…)
60 Anfragen pro Minute pro API-Schlüssel — gilt für GET und POST (z. B. Reservierung buchen). Für typische Websites (ein Seitenaufruf, gelegentlicher Refresh) ist das mehr als ausreichend.
Bei Überschreitung: 429 rate_limit_exceeded mit Header Retry-After.
Öffentliche Slug-Endpunkte (/api/public/…)
Die unauthentifizierten Embed- und Profil-Routen (Slug in der URL) sind für eingebettete Widgets gedacht, nicht für Massen-Scraping. Es gelten zusätzliche Limits pro Client-IP:
- Lesen (GET): 30/min pro IP, 20/min pro IP und Restaurant (Slug bzw. Restaurant-ID)
- Schreiben (POST): 10/min pro IP, 5/min pro IP und Restaurant
Für Headless-Integrationen und höhere Limits: Public API v1 mit Secret-Key unter Einstellungen → API.
Betroffene Routen u. a.: /api/public/profile/{slug}/{module}, /api/public/embed/{slug}, Reservierung/Kontakt-POST.
Häufige Fehler (v1)
| Status | error | Bedeutung |
|---|---|---|
| 401 | invalid_api_key | Key fehlt, falsch oder widerrufen |
| 403 | module_not_enabled | Modul nicht für diesen Key aktiv |
| 403 | origin_forbidden | Browser-Origin nicht in Allowlist |
| 403 | restaurant_not_published | Restaurant nicht veröffentlicht |
| 404 | not_found | Unbekannter Endpunkt oder keine Daten |
| 405 | method_not_allowed | z. B. POST auf reinem Lese-Modul |
| 429 | rate_limit_exceeded | Limit überschritten (Key oder IP) |
| 503 | server_misconfigured | Serverseitige Konfiguration fehlt |
Reservierungs-Schreiben kennt zusätzliche Codes (z. B. terms_required, outside_opening_hours, invalid_credentials) — siehe Reservierung.
Antwortformat
{
"data": { … }
}Fehler:
{
"error": "invalid_api_key"
}Bei 429 zusätzlich Header Retry-After und oft X-RateLimit-Limit.
Caching (GET)
- Die meisten Lese-Endpunkte:
public, s-maxage=60, stale-while-revalidate=300 - News und Reservierungs-Schreiben:
private, no-cache, no-store, must-revalidate