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- Auth: none
- Example: my.apro.at/api/v1/locations/7236/menus
The response is a tree. Levels, from outermost to innermost:
- Menu — top-level grouping (e.g. Food, Drinks, Deals).
- Category — section inside a menu (e.g. Mains).
- MenuEntry — a concrete sellable item.
- MenuEntryFeature — add-on / modifier group on an item.
- MenuEntryFeatureValue — one option inside a feature.
- Hours — availability windows that can attach to menus and categories.
Example response (abridged)
[ { "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.
| Field | Type | Description |
|---|---|---|
name | string | Display name. |
badge | enum | Visual badge — see Badges. |
imageUrl | string | Header image URL. |
description | string | Descriptive text. |
categories | Category[] | Categories inside this menu. |
orderableHours | Hours[] | When ordering is allowed. |
preOrderableHours | Hours[] | When pre-ordering is allowed. |
deliverableHours | Hours[] | When delivery is allowed. |
priceName | string | Price level to use (e.g. House, Happy Hour). |
Mutations (auth required):
| Action | Method | Path |
|---|---|---|
| Create | POST | /api/v1/customer/locations/{locationId}/menu |
| Update | PUT | /api/v1/customer/menus/{menuId} |
| Delete | DELETE | /api/v1/customer/menus/{menuId} |
2. Category
Sub-section of a menu. Examples: Non-alcoholic drinks, Beer, Mains, Desserts.
| Field | Type | Description |
|---|---|---|
name | string | Display name. |
badge | enum | See Badges. |
imageUrl | string | Header image URL. |
description | string | Descriptive text. |
menuEntries | MenuEntry[] | Entries inside this category. |
orderableHours | Hours[] | When ordering is allowed. |
preOrderableHours | Hours[] | When pre-ordering is allowed. |
deliverableHours | Hours[] | When delivery is allowed. |
Mutations (auth required):
| Action | Method | Path |
|---|---|---|
| Create | POST | /api/v1/customer/menus/{menuId}/category |
| Update | PUT | /api/v1/customer/menus/{menuId}/category/{id} |
| Delete | DELETE | /api/v1/customer/menus/{menuId}/category/{id} |
3. MenuEntry
A concrete sellable item. Examples: Wiener Schnitzel, Kaiser Bier.
| Field | Type | Description |
|---|---|---|
menuEntryID | integer | Unique entry ID; sent back with orders. |
name | string | Item name. |
badge | enum | See Badges. |
imageUrl | string | Item image URL. |
subtitle | string | Short tagline. |
description | string | Descriptive text. |
features | MenuEntryFeature[] | Modifier groups (sides, sizes…). |
price | money | Selling price. |
Mutations (auth required):
| Action | Method | Path |
|---|---|---|
| Create | POST | /api/v1/customer/categories/{categoryId}/menuEntry |
| Update | PUT | /api/v1/customer/menuEntries/{id} |
| Delete | DELETE | /api/v1/customer/menuEntries/{id} |
4. MenuEntryFeature
A modifier group for a menu entry. Examples: Size, Side for main.
| Field | Type | Description |
|---|---|---|
name | string | Feature label. |
description | string | Descriptive text. |
groupName | string | Grouping key for paginated rendering. |
isDeselectFeature | boolean | true marks a “leave out” toggle (e.g. no onions). |
maxValuesAllowed | number | Max options selectable. |
minValuesRequired | number | Min options required. |
valuesForFree | number | Options included at no extra charge. |
values | MenuEntryFeatureValue[] | Available options. |
Mutations (auth required):
| Action | Method | Path |
|---|---|---|
| Create | POST | /api/v1/menuentryfeature |
| Update | PUT | /api/v1/menuentryfeature/{featureId} |
| Delete | DELETE | /api/v1/menuentryfeature/{featureId} |
5. MenuEntryFeatureValue
One concrete option inside a feature. Examples: Beer 0.3 l, Beer 0.5 l, Fries, Potatoes.
| Field | Type | Description |
|---|---|---|
name | string | Option label. |
description | string | Descriptive text. |
imageUrl | string | Option image URL. |
minAmount | number | Minimum quantity required when selected. |
maxAmount | number | Maximum quantity allowed. |
freeAmount | number | Quantity included at no extra charge. |
priceAdjustment | number | Price change per selected unit. |
Mutations (auth required):
| Action | Method | Path |
|---|---|---|
| Create | POST | /api/v1/menuentryfeaturevalue |
| Update | PUT | /api/v1/menuentryfeaturevalue/{featureValueId} |
| Delete | DELETE | /api/v1/menuentryfeaturevalue/{featureValueId} |
6. Hours
Availability windows attached to menus or categories. They gate ordering, pre-ordering and delivery.
| Field | Type | Description |
|---|---|---|
days | enum bitmask | Bitmask of weekdays — see below. |
startDate | date | Absolute start. |
endDate | date | Absolute end. |
startTime | daytime | Start time on matching days. |
endTime | daytime | End time on matching days. |
exclude | boolean | Invert the window — exclude instead of include. |
Weekday bitmask:
| Day | Bit | Value |
|---|---|---|
| Monday | 1 << 1 | 2 |
| Tuesday | 1 << 2 | 4 |
| Wednesday | 1 << 3 | 8 |
| Thursday | 1 << 4 | 16 |
| Friday | 1 << 5 | 32 |
| Saturday | 1 << 6 | 64 |
| Sunday | 1 << 7 | 128 |
Example: Mon–Fri is 2 + 4 + 8 + 16 + 32 = 62.
Badges
Visual flags for menus, categories and entries. Values:
| Label | Value |
|---|---|
NEW | 1 |
Recommended | 2 |
Reduced | 3 |
Coming Soon | 4 |
Our Tip | 5 |
Special | 6 |
Bestseller | 7 |
HOT | 8 |
SALE | 9 |