Speisekarte
Aktive Gerichte, Kategorien, Tags und Optionsgruppen als JSON — gleiche Datenbasis wie das Speisekarten-Embed.
Liest die veröffentlichte Speisekarte des Restaurants, das am API-Schlüssel hängt. Es gibt keine Query-Parameter — die Antwort enthält nur aktive Kategorien und Gerichte im aktuell gültigen Datumsfenster.
Modul-ID im Schlüssel: menu. Restaurant muss veröffentlicht sein.
Methoden: GET, OPTIONS · Endpunkt: GET /api/v1/menu
Endpunkt
curl -s "https://gwada.app/api/v1/menu" \ -H "Authorization: Bearer gwada_sk_live_…" \ -H "Accept: application/json"
Antwort (Auszug)
{
"data": {
"restaurantId": "uuid",
"name": "Restaurant Name",
"slug": "mein-slug",
"accentHex": "#c45c26",
"currencyCode": "EUR",
"mainCategories": [
{ "id": "main-1", "name": "Speisen", "active": true }
],
"categories": [
{
"id": "cat-1",
"name": "Vorspeisen",
"active": true,
"mainCategoryId": "main-1"
}
],
"items": [
{
"id": "uuid",
"name": "Vorspeise",
"description": "Kurztext",
"price": 12.5,
"category": "cat-1",
"imageUrl": "https://…",
"tags": ["tag-id", "allergen-id"],
"active": true,
"listNumber": 1,
"recipe": null,
"optionGroupIds": ["group-id"],
"availableFrom": "2026-01-01",
"availableTo": null
}
],
"tagDefinitions": [
{
"id": "tag-id",
"name": "Vegan",
"active": true,
"backgroundColor": "#64748b"
}
],
"optionGroups": [
{
"id": "group-id",
"name": "Beilagen",
"active": true,
"minSelect": 0,
"maxSelect": 2,
"choices": [
{
"id": "choice-id",
"name": "Pommes",
"priceDelta": 2.5,
"active": true
}
]
}
],
"guestOrderingEnabled": false
}
}Wichtige Felder
| Feld | Bedeutung |
|---|---|
| mainCategories / categories | Hierarchie der Speisekarte |
| items[].category | ID der Kategorie |
| items[].tags | Tag- und Allergen-IDs (gemergt) |
| items[].optionGroupIds | Verknüpfte Optionsgruppen |
| items[].availableFrom / availableTo | Optionales Sichtbarkeitsfenster (Datum) |
| optionGroups[].choices[].priceDelta | Aufpreis zur Basis |
| currencyCode | Währung für Preise |
| guestOrderingEnabled | Derzeit immer false (kein Gast-Bestellen über API) |
Hinweise
- Nur aktive Einträge im gültigen Zeitraum — Entwürfe und abgelaufene Gerichte fehlen
- Keine Pagination und keine Filter-Query auf /api/v1/menu
- Gleiche Struktur wie das öffentliche Speisekarten-Embed
Gut zu wissen
Fehler
Auth- und Limit-Fehler sind einheitlich — siehe Rate Limits & Fehler. Typisch: 401 invalid_api_key, 403 module_not_enabled, 403 restaurant_not_published, 404 not_found, 429 rate_limit_exceeded.