Zum Inhalt springen

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

Die Antwort ist ein Baum. Ebenen von außen nach innen:

  1. Menu — oberste Gruppierung (z. B. Speisen, Getränke, Angebote).
  2. Category — Abschnitt innerhalb eines Menüs (z. B. Hauptspeisen).
  3. MenuEntry — konkreter verkaufbarer Artikel.
  4. MenuEntryFeature — Beilagen-/Modifier-Gruppe zu einem Artikel.
  5. MenuEntryFeatureValue — einzelne Option innerhalb einer Gruppe.
  6. Hours — Gültigkeitsfenster, die an Menüs und Kategorien hängen.

Beispielantwort (gekürzt)

GET /api/v1/locations/{locationId}/menus
[
{
"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.

FeldTypBeschreibung
namestringAnzeigename.
badgeenumOptischer Badge — siehe Badges.
imageUrlstringURL zum Titelbild.
descriptionstringBeschreibungstext.
categoriesCategory[]Kategorien in diesem Menü.
orderableHoursHours[]Zeiten, in denen Bestellungen möglich sind.
preOrderableHoursHours[]Zeiten, für die Vorbestellungen möglich sind.
deliverableHoursHours[]Zeiten, in denen Zustellung möglich ist.
priceNamestringZu verwendende Preisebene (z. B. Hauspreis, Happy Hour).

Mutationen (Auth erforderlich):

AktionMethodePfad
AnlegenPOST/api/v1/customer/locations/{locationId}/menu
AktualisierenPUT/api/v1/customer/menus/{menuId}
LöschenDELETE/api/v1/customer/menus/{menuId}

2. Category

Unterpunkt eines Menüs. Beispiele: Alkoholfreie Getränke, Bier, Hauptspeisen, Nachspeisen.

FeldTypBeschreibung
namestringAnzeigename.
badgeenumSiehe Badges.
imageUrlstringURL zum Titelbild.
descriptionstringBeschreibungstext.
menuEntriesMenuEntry[]Einträge in dieser Kategorie.
orderableHoursHours[]Bestellzeiten.
preOrderableHoursHours[]Vorbestellzeiten.
deliverableHoursHours[]Lieferzeiten.

Mutationen (Auth erforderlich):

AktionMethodePfad
AnlegenPOST/api/v1/customer/menus/{menuId}/category
AktualisierenPUT/api/v1/customer/menus/{menuId}/category/{id}
LöschenDELETE/api/v1/customer/menus/{menuId}/category/{id}

3. MenuEntry

Konkret verkaufbarer Artikel. Beispiele: Wiener Schnitzel, Kaiser Bier.

FeldTypBeschreibung
menuEntryIDintegerEindeutige ID; wird mit der Bestellung zurückgeschickt.
namestringArtikelname.
badgeenumSiehe Badges.
imageUrlstringURL zum Artikelbild.
subtitlestringKurzbeschreibung.
descriptionstringBeschreibungstext.
featuresMenuEntryFeature[]Beilagen-Gruppen (Größen, Beilagen …).
pricemoneyVerkaufspreis.

Mutationen (Auth erforderlich):

AktionMethodePfad
AnlegenPOST/api/v1/customer/categories/{categoryId}/menuEntry
AktualisierenPUT/api/v1/customer/menuEntries/{id}
LöschenDELETE/api/v1/customer/menuEntries/{id}

4. MenuEntryFeature

Beilagen-/Modifier-Gruppe eines MenuEntry. Beispiele: Gebindegröße, Beilage zur Hauptspeise.

FeldTypBeschreibung
namestringBezeichnung der Beilage.
descriptionstringBeschreibungstext.
groupNamestringGruppierungsschlüssel für seitenweise Anzeige.
isDeselectFeaturebooleantrue markiert eine Abwahl-Option (z. B. Ohne Zwiebeln).
maxValuesAllowednumberMaximalanzahl auswählbarer Optionen.
minValuesRequirednumberMindestanzahl auswählbarer Optionen.
valuesForFreenumberAnzahl der Optionen ohne Aufpreis.
valuesMenuEntryFeatureValue[]Verfügbare Optionen.

Mutationen (Auth erforderlich):

AktionMethodePfad
AnlegenPOST/api/v1/menuentryfeature
AktualisierenPUT/api/v1/menuentryfeature/{featureId}
LöschenDELETE/api/v1/menuentryfeature/{featureId}

5. MenuEntryFeatureValue

Einzelne Ausprägung einer Beilage. Beispiele: Bier 0,3 l, Bier 0,5 l, Pommes, Kartoffeln.

FeldTypBeschreibung
namestringBezeichnung.
descriptionstringBeschreibungstext.
imageUrlstringURL zum Optionsbild.
minAmountnumberMindeststückzahl bei Auswahl.
maxAmountnumberMaximale Stückzahl.
freeAmountnumberStückzahl ohne Aufpreis.
priceAdjustmentnumberPreisanpassung pro Stück.

Mutationen (Auth erforderlich):

AktionMethodePfad
AnlegenPOST/api/v1/menuentryfeaturevalue
AktualisierenPUT/api/v1/menuentryfeaturevalue/{featureValueId}
LöschenDELETE/api/v1/menuentryfeaturevalue/{featureValueId}

6. Hours

Gültigkeitsfenster an Menüs oder Kategorien. Sie steuern, wann bestellt, vorbestellt oder geliefert werden darf.

FeldTypBeschreibung
daysenum bitmaskBitmaske der Wochentage — siehe unten.
startDatedateAbsolutes Startdatum.
endDatedateAbsolutes Enddatum.
startTimedaytimeStartzeit an gültigen Tagen.
endTimedaytimeEndzeit an gültigen Tagen.
excludebooleanFenster ausschließen statt einschließen.

Wochentags-Bitmaske:

TagBitWert
Montag1 << 12
Dienstag1 << 24
Mittwoch1 << 38
Donnerstag1 << 416
Freitag1 << 532
Samstag1 << 664
Sonntag1 << 7128

Beispiel: Mo–Fr ergibt 2 + 4 + 8 + 16 + 32 = 62.

Badges

Optische Hervorhebungen für Menüs, Kategorien und Einträge:

BezeichnungWert
NEU1
Empfehlung2
Reduziert3
Coming Soon4
Unser Tip5
Special6
Bestseller7
HOT8
SALE9