Menükarten API
Die Menükarten-API liefert die öffentliche Menüstruktur für White-Label-Apps, Selbstbedienungskiosks und QR-Ordering-Flows. Das Lesen erfordert keine Authentifizierung; jede schreibende Aktion schon.
- Host:
my.apro.at - Content type:
application/json
Menü abrufen
GET https://my.apro.at/api/v1/locations/{locationId}/menus- Auth: nein
- Beispiel: my.apro.at/api/v1/locations/7236/menus
Die Antwort ist ein Baum. Ebenen von außen nach innen:
- Menu — oberste Gruppierung (z. B. Speisen, Getränke, Angebote).
- Category — Abschnitt innerhalb eines Menüs (z. B. Hauptspeisen).
- MenuEntry — konkreter verkaufbarer Artikel.
- MenuEntryFeature — Beilagen-/Modifier-Gruppe zu einem Artikel.
- MenuEntryFeatureValue — einzelne Option innerhalb einer Gruppe.
- Hours — Gültigkeitsfenster, die an Menüs und Kategorien hängen.
Beispielantwort (gekürzt)
[ { "name": "Speisen", "badge": 7, "imageUrl": "https://cdn.smorder.at/locations/7236/menus/speisen.jpg", "description": "Klassiker aus der österreichischen Küche.", "priceName": "Hauspreis", "orderableHours": [ { "days": 254, "startTime": "11:00", "endTime": "22:00" } ], "categories": [ { "name": "Hauptspeisen", "menuEntries": [ { "menuEntryID": 4001, "name": "Wiener Schnitzel", "badge": 7, "price": 22.9, "features": [ { "name": "Beilage", "groupName": "Beilage", "minValuesRequired": 1, "maxValuesAllowed": 1, "valuesForFree": 1, "values": [ { "name": "Erdäpfelsalat", "priceAdjustment": 0 }, { "name": "Pommes frites", "priceAdjustment": 0 }, { "name": "Reis", "priceAdjustment": 0 } ] }, { "name": "Ohne", "isDeselectFeature": true, "values": [ { "name": "Preiselbeeren", "priceAdjustment": 0 } ] } ] } ] } ] }]Vollständiges, ungekürztes Beispiel herunterladen:
menu-response.json
1. Menu
Oberste Gruppierung im Menübaum; enthält Kategorien. Beispiele: Speisen, Getränke, Angebote.
| Feld | Typ | Beschreibung |
|---|---|---|
name | string | Anzeigename. |
badge | enum | Optischer Badge — siehe Badges. |
imageUrl | string | URL zum Titelbild. |
description | string | Beschreibungstext. |
categories | Category[] | Kategorien in diesem Menü. |
orderableHours | Hours[] | Zeiten, in denen Bestellungen möglich sind. |
preOrderableHours | Hours[] | Zeiten, für die Vorbestellungen möglich sind. |
deliverableHours | Hours[] | Zeiten, in denen Zustellung möglich ist. |
priceName | string | Zu verwendende Preisebene (z. B. Hauspreis, Happy Hour). |
Mutationen (Auth erforderlich):
| Aktion | Methode | Pfad |
|---|---|---|
| Anlegen | POST | /api/v1/customer/locations/{locationId}/menu |
| Aktualisieren | PUT | /api/v1/customer/menus/{menuId} |
| Löschen | DELETE | /api/v1/customer/menus/{menuId} |
2. Category
Unterpunkt eines Menüs. Beispiele: Alkoholfreie Getränke, Bier, Hauptspeisen, Nachspeisen.
| Feld | Typ | Beschreibung |
|---|---|---|
name | string | Anzeigename. |
badge | enum | Siehe Badges. |
imageUrl | string | URL zum Titelbild. |
description | string | Beschreibungstext. |
menuEntries | MenuEntry[] | Einträge in dieser Kategorie. |
orderableHours | Hours[] | Bestellzeiten. |
preOrderableHours | Hours[] | Vorbestellzeiten. |
deliverableHours | Hours[] | Lieferzeiten. |
Mutationen (Auth erforderlich):
| Aktion | Methode | Pfad |
|---|---|---|
| Anlegen | POST | /api/v1/customer/menus/{menuId}/category |
| Aktualisieren | PUT | /api/v1/customer/menus/{menuId}/category/{id} |
| Löschen | DELETE | /api/v1/customer/menus/{menuId}/category/{id} |
3. MenuEntry
Konkret verkaufbarer Artikel. Beispiele: Wiener Schnitzel, Kaiser Bier.
| Feld | Typ | Beschreibung |
|---|---|---|
menuEntryID | integer | Eindeutige ID; wird mit der Bestellung zurückgeschickt. |
name | string | Artikelname. |
badge | enum | Siehe Badges. |
imageUrl | string | URL zum Artikelbild. |
subtitle | string | Kurzbeschreibung. |
description | string | Beschreibungstext. |
features | MenuEntryFeature[] | Beilagen-Gruppen (Größen, Beilagen …). |
price | money | Verkaufspreis. |
Mutationen (Auth erforderlich):
| Aktion | Methode | Pfad |
|---|---|---|
| Anlegen | POST | /api/v1/customer/categories/{categoryId}/menuEntry |
| Aktualisieren | PUT | /api/v1/customer/menuEntries/{id} |
| Löschen | DELETE | /api/v1/customer/menuEntries/{id} |
4. MenuEntryFeature
Beilagen-/Modifier-Gruppe eines MenuEntry. Beispiele: Gebindegröße, Beilage zur Hauptspeise.
| Feld | Typ | Beschreibung |
|---|---|---|
name | string | Bezeichnung der Beilage. |
description | string | Beschreibungstext. |
groupName | string | Gruppierungsschlüssel für seitenweise Anzeige. |
isDeselectFeature | boolean | true markiert eine Abwahl-Option (z. B. Ohne Zwiebeln). |
maxValuesAllowed | number | Maximalanzahl auswählbarer Optionen. |
minValuesRequired | number | Mindestanzahl auswählbarer Optionen. |
valuesForFree | number | Anzahl der Optionen ohne Aufpreis. |
values | MenuEntryFeatureValue[] | Verfügbare Optionen. |
Mutationen (Auth erforderlich):
| Aktion | Methode | Pfad |
|---|---|---|
| Anlegen | POST | /api/v1/menuentryfeature |
| Aktualisieren | PUT | /api/v1/menuentryfeature/{featureId} |
| Löschen | DELETE | /api/v1/menuentryfeature/{featureId} |
5. MenuEntryFeatureValue
Einzelne Ausprägung einer Beilage. Beispiele: Bier 0,3 l, Bier 0,5 l, Pommes, Kartoffeln.
| Feld | Typ | Beschreibung |
|---|---|---|
name | string | Bezeichnung. |
description | string | Beschreibungstext. |
imageUrl | string | URL zum Optionsbild. |
minAmount | number | Mindeststückzahl bei Auswahl. |
maxAmount | number | Maximale Stückzahl. |
freeAmount | number | Stückzahl ohne Aufpreis. |
priceAdjustment | number | Preisanpassung pro Stück. |
Mutationen (Auth erforderlich):
| Aktion | Methode | Pfad |
|---|---|---|
| Anlegen | POST | /api/v1/menuentryfeaturevalue |
| Aktualisieren | PUT | /api/v1/menuentryfeaturevalue/{featureValueId} |
| Löschen | DELETE | /api/v1/menuentryfeaturevalue/{featureValueId} |
6. Hours
Gültigkeitsfenster an Menüs oder Kategorien. Sie steuern, wann bestellt, vorbestellt oder geliefert werden darf.
| Feld | Typ | Beschreibung |
|---|---|---|
days | enum bitmask | Bitmaske der Wochentage — siehe unten. |
startDate | date | Absolutes Startdatum. |
endDate | date | Absolutes Enddatum. |
startTime | daytime | Startzeit an gültigen Tagen. |
endTime | daytime | Endzeit an gültigen Tagen. |
exclude | boolean | Fenster ausschließen statt einschließen. |
Wochentags-Bitmaske:
| Tag | Bit | Wert |
|---|---|---|
| Montag | 1 << 1 | 2 |
| Dienstag | 1 << 2 | 4 |
| Mittwoch | 1 << 3 | 8 |
| Donnerstag | 1 << 4 | 16 |
| Freitag | 1 << 5 | 32 |
| Samstag | 1 << 6 | 64 |
| Sonntag | 1 << 7 | 128 |
Beispiel: Mo–Fr ergibt 2 + 4 + 8 + 16 + 32 = 62.
Badges
Optische Hervorhebungen für Menüs, Kategorien und Einträge:
| Bezeichnung | Wert |
|---|---|
NEU | 1 |
Empfehlung | 2 |
Reduziert | 3 |
Coming Soon | 4 |
Unser Tip | 5 |
Special | 6 |
Bestseller | 7 |
HOT | 8 |
SALE | 9 |