Skip to content

Online Menu API

The Online Menu API serves the public menu structure for white-label apps, self-order kiosks and QR-ordering flows. Reading is unauthenticated; every mutating call requires authentication.

  • Host: my.apro.at
  • Content type: application/json

Fetching a menu

GET https://my.apro.at/api/v1/locations/{locationId}/menus

The response is a tree. Levels, from outermost to innermost:

  1. Menu — top-level grouping (e.g. Food, Drinks, Deals).
  2. Category — section inside a menu (e.g. Mains).
  3. MenuEntry — a concrete sellable item.
  4. MenuEntryFeature — add-on / modifier group on an item.
  5. MenuEntryFeatureValue — one option inside a feature.
  6. Hours — availability windows that can attach to menus and categories.

Example response (abridged)

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 }
]
}
]
}
]
}
]
}
]

Download the full, unabridged sample: menu-response.json

1. Menu

Outermost grouping in the menu tree; contains categories. Examples: Food, Drinks, Deals.

FieldTypeDescription
namestringDisplay name.
badgeenumVisual badge — see Badges.
imageUrlstringHeader image URL.
descriptionstringDescriptive text.
categoriesCategory[]Categories inside this menu.
orderableHoursHours[]When ordering is allowed.
preOrderableHoursHours[]When pre-ordering is allowed.
deliverableHoursHours[]When delivery is allowed.
priceNamestringPrice level to use (e.g. House, Happy Hour).

Mutations (auth required):

ActionMethodPath
CreatePOST/api/v1/customer/locations/{locationId}/menu
UpdatePUT/api/v1/customer/menus/{menuId}
DeleteDELETE/api/v1/customer/menus/{menuId}

2. Category

Sub-section of a menu. Examples: Non-alcoholic drinks, Beer, Mains, Desserts.

FieldTypeDescription
namestringDisplay name.
badgeenumSee Badges.
imageUrlstringHeader image URL.
descriptionstringDescriptive text.
menuEntriesMenuEntry[]Entries inside this category.
orderableHoursHours[]When ordering is allowed.
preOrderableHoursHours[]When pre-ordering is allowed.
deliverableHoursHours[]When delivery is allowed.

Mutations (auth required):

ActionMethodPath
CreatePOST/api/v1/customer/menus/{menuId}/category
UpdatePUT/api/v1/customer/menus/{menuId}/category/{id}
DeleteDELETE/api/v1/customer/menus/{menuId}/category/{id}

3. MenuEntry

A concrete sellable item. Examples: Wiener Schnitzel, Kaiser Bier.

FieldTypeDescription
menuEntryIDintegerUnique entry ID; sent back with orders.
namestringItem name.
badgeenumSee Badges.
imageUrlstringItem image URL.
subtitlestringShort tagline.
descriptionstringDescriptive text.
featuresMenuEntryFeature[]Modifier groups (sides, sizes…).
pricemoneySelling price.

Mutations (auth required):

ActionMethodPath
CreatePOST/api/v1/customer/categories/{categoryId}/menuEntry
UpdatePUT/api/v1/customer/menuEntries/{id}
DeleteDELETE/api/v1/customer/menuEntries/{id}

4. MenuEntryFeature

A modifier group for a menu entry. Examples: Size, Side for main.

FieldTypeDescription
namestringFeature label.
descriptionstringDescriptive text.
groupNamestringGrouping key for paginated rendering.
isDeselectFeaturebooleantrue marks a “leave out” toggle (e.g. no onions).
maxValuesAllowednumberMax options selectable.
minValuesRequirednumberMin options required.
valuesForFreenumberOptions included at no extra charge.
valuesMenuEntryFeatureValue[]Available options.

Mutations (auth required):

ActionMethodPath
CreatePOST/api/v1/menuentryfeature
UpdatePUT/api/v1/menuentryfeature/{featureId}
DeleteDELETE/api/v1/menuentryfeature/{featureId}

5. MenuEntryFeatureValue

One concrete option inside a feature. Examples: Beer 0.3 l, Beer 0.5 l, Fries, Potatoes.

FieldTypeDescription
namestringOption label.
descriptionstringDescriptive text.
imageUrlstringOption image URL.
minAmountnumberMinimum quantity required when selected.
maxAmountnumberMaximum quantity allowed.
freeAmountnumberQuantity included at no extra charge.
priceAdjustmentnumberPrice change per selected unit.

Mutations (auth required):

ActionMethodPath
CreatePOST/api/v1/menuentryfeaturevalue
UpdatePUT/api/v1/menuentryfeaturevalue/{featureValueId}
DeleteDELETE/api/v1/menuentryfeaturevalue/{featureValueId}

6. Hours

Availability windows attached to menus or categories. They gate ordering, pre-ordering and delivery.

FieldTypeDescription
daysenum bitmaskBitmask of weekdays — see below.
startDatedateAbsolute start.
endDatedateAbsolute end.
startTimedaytimeStart time on matching days.
endTimedaytimeEnd time on matching days.
excludebooleanInvert the window — exclude instead of include.

Weekday bitmask:

DayBitValue
Monday1 << 12
Tuesday1 << 24
Wednesday1 << 38
Thursday1 << 416
Friday1 << 532
Saturday1 << 664
Sunday1 << 7128

Example: Mon–Fri is 2 + 4 + 8 + 16 + 32 = 62.

Badges

Visual flags for menus, categories and entries. Values:

LabelValue
NEW1
Recommended2
Reduced3
Coming Soon4
Our Tip5
Special6
Bestseller7
HOT8
SALE9