Menu Integration
NOTE: Work in progress.
Overview
Menu API endpoint allows you to create, update and retrieve menus. Every location has its own individual configurable menu with availablity hours. Our Menu can be broken down into three entity types:
-
Menu A collection / group(s) together into a single view with specific menu hours (e.g "Breakfest Menu", "Dinner Menu"). A store can have different fulfillment types (delivery, pick-up, table service)
-
Product Represents everything that a user might tangibly select from a store. (a drink, a burger, a desert)
-
Category A collection/group of products together into a logical section (e.g "Drinks", "Main", "Breakfast")
Examples
- Get Menu
Retrives a stores menu via
GET /organizations/{organizationId}/locations/{locationId}/menu
endpoint
Simple Menu Example
{
"menus": [
{
"id": "51dc2ae3-876a-4da4-8858-498eb53c848f",
"title": "Afternoon menu",
"fulfillmentType": "SERVICE",
"categoryIds": ["101", "102", "103"],
"serviceAvailability": [
{
"dayOfTheWeek": "MONDAY",
"start": "10:00",
"end": "23:00"
},
{
"dayOfTheWeek": "WEDNESDAY",
"start": "10:00",
"end": "23:00"
},
{
"dayOfTheWeek": "FRIDAY",
"start": "10:00",
"end": "23:00"
}
]
}
],
"categories": [
{
"id": "101",
"title": "Drinks",
"productIds": ["1", "2", "3"]
}
],
"products": [
{
"id": "1",
"title": "Bourbon",
"description": "Fine whiskey",
"imageUrl": "https://example.com/bourbon.png",
"modifiers": [],
"available": true,
"visibility": [
{
"dayOfTheWeek": "FRIDAY",
"start": "08:00",
"end": "23:00"
}
],
"price": {
"amount": 25000,
"taxIncluded": 2500
},
"tags": ["expensive", "Happy Hour"]
},
{
"id": "2",
"title": "Orange Juice",
"description": "Freshly squeezed, for the light-weights",
"imageUrl": "https://example.com/juice.png",
"modifiers": [
{
"id": "1001",
"title": "Size",
"minSelect": 1,
"maxSelect": 1,
"optionIds": ["11", "12", "13"]
}
],
"available": true,
"visibility": [
{
"dayOfTheWeek": "FRIDAY",
"start": "08:00",
"end": "23:00"
}
],
"price": {
"amount": 430,
"taxIncluded": 43
}
},
{
"id": "3",
"title": "Vanilla coke",
"description": "Trusty ol' coca-cola",
"imageUrl": "https://example.com/coke.png",
"modifiers": [
{
"id": "1001",
"title": "Size",
"minSelect": 1,
"maxSelect": 1,
"optionIds": ["12", "13"]
}
],
"available": true,
"visibility": [
{
"dayOfTheWeek": "FRIDAY",
"start": "08:00",
"end": "23:00"
}
],
"price": {
"amount": 350,
"taxIncluded": 35
}
}
],
"currency": "AUD",
"timeZone": "Australia/Melbourne"
}
Menu and product availability (visibility)
Sometimes you may need to show some menus/products at certain times of the day, or you may need to hide an item for any reason such as out-of-stock.
Menu
- To show a menu at certain times edit the serviceAvailability field.
- Omit serviceAvailability or set it to an empty array to make that item always visible.
- Add values to serviceAvailability to show the menu only on the specified day and time.
{
"menus": [
// Always available
{
"id": "51dc2ae3-876a-4da4-8858-498eb53c848f",
"title": "Afternoon menu",
"fulfillmentType": "SERVICE",
"categoryIds": ["101", "102", "103"],
"serviceAvailability": [
{
"dayOfTheWeek": "MONDAY",
"start": "10:00",
"end": "23:59"
},
]
},
// Only available on Tuesdays from 10:00 to 23:59 and Fridays from 21:30 to 23:00
{
"id": "51dc2ae3-876a-4da4-8858-498eb53c848f",
"title": "Tuesdays and Friday night Service",
"fulfilmentType": "SERVICE",
"categoryIds": ["101", "102", "103"],
"serviceAvailability": [
{
"dayOfTheWeek": "TUESDAY",
"start": "10:00",
"end": "23:59"
},
{
"dayOfTheWeek": "FRIDAY",
"start": "21:30",
"end": "23:00"
},
]
}
],
...
}
Product
- For products its the same as above but the field to edit is visibility
- Products have another field available that can be set to false to override the visibility
{
...
// Always visible
"products": [
{
"id": "1",
"title": "Bourbon",
"description": "Fine whiskey",
"imageUrl": "https://example.com/bourbon.png",
"modifiers": [],
"available": true,
"visibility": [],
"price": {
"amount": 25000,
"taxIncluded": 2500
},
"tags": ["expensive", "Happy Hour"]
},
// Always visible
{
"id": "2",
"title": "Orange Juice",
"description": "Freshly squeezed, for the light-weights",
"imageUrl": "https://example.com/juice.png",
"modifiers": [
{
"id": "1001",
"title": "Size",
"minSelect": 1,
"maxSelect": 1,
"optionIds": ["11", "12", "13"]
}
],
"available": true,
"price": {
"amount": 430,
"taxIncluded": 43
}
},
// Not visible
{
"id": "3",
"title": "Vanilla coke",
"description": "Trusty ol' coca-cola",
"imageUrl": "https://example.com/coke.png",
"modifiers": [
{
"id": "1001",
"title": "Size",
"minSelect": 1,
"maxSelect": 1,
"optionIds": ["12", "13"]
}
],
"available": false,
"visibility": [],
"price": {
"amount": 350,
"taxIncluded": 35
}
},
// Not visible
{
"id": "1",
"title": "Bourbon",
"description": "Fine whiskey",
"imageUrl": "https://example.com/bourbon.png",
"modifiers": [],
"available": false,
"visibility": [
{
"dayOfTheWeek": "MONDAY",
"start": "08:00",
"end": "13:00"
},
{
"dayOfTheWeek": "TUESDAY",
"start": "08:00",
"end": "13:00"
},
{
"dayOfTheWeek": "WEDNESDAY",
"start": "08:00",
"end": "13:00"
},
],
"price": {
"amount": 25000,
"taxIncluded": 2500
},
"tags": ["expensive", "Happy Hour"]
},
// Visible on Mondays from 8:00 to 13:00
{
"id": "2",
"title": "Orange Juice",
"description": "Freshly squeezed, for the light-weights",
"imageUrl": "https://example.com/juice.png",
"modifiers": [
{
"id": "1001",
"title": "Size",
"minSelect": 1,
"maxSelect": 1,
"optionIds": ["11", "12", "13"]
}
],
"available": true,
"visibility": [
{
"dayOfTheWeek": "MONDAY",
"start": "08:00",
"end": "13:00"
},
],
"price": {
"amount": 430,
"taxIncluded": 43
}
},
],
...
}
Happy hour
This is an example of an item that is only visible from 3PM to 5PM Mon-Fri
{
"menus": [
{
"id": "51dc2ae3-876a-4da4-8858-498eb53c848f",
"title": "Afternoon menu",
"fulfillmentType": "SERVICE",
"categoryIds": ["101", "102"],
"serviceAvailability": [
{
"dayOfTheWeek": "MONDAY",
"start": "10:00",
"end": "23:00"
},
{
"dayOfTheWeek": "WEDNESDAY",
"start": "10:00",
"end": "23:00"
},
{
"dayOfTheWeek": "FRIDAY",
"start": "10:00",
"end": "23:00"
}
]
},
{
"id": "51dc2ae3-876a-4da4-8858-498eb53c848f",
"title": "Happy Hour",
"fulfillmentType": "SERVICE",
"categoryIds": ["101"],
"serviceAvailability": [
{
"dayOfTheWeek": "MONDAY",
"start": "15:00",
"end": "17:00"
},
{
"dayOfTheWeek": "TUESDAY",
"start": "15:00",
"end": "17:00"
},
{
"dayOfTheWeek": "WEDNESDAY",
"start": "15:00",
"end": "17:00"
},
{
"dayOfTheWeek": "THURSDAY",
"start": "15:00",
"end": "17:00"
},
{
"dayOfTheWeek": "FRIDAY",
"start": "15:00",
"end": "17:00"
}
]
}
],
"categories": [
{
"id": "101",
"title": "Drinks",
"productIds": ["1"]
}
],
"products": [
{
"id": "1",
"title": "Bourbon",
"description": "Fine whiskey",
"imageUrl": "https://example.com/bourbon.png",
"modifiers": [],
"available": true,
"price": {
"amount": 25000,
"taxIncluded": 2500
},
"tags": ["expensive", "Happy Hour"]
}
],
"currency": "AUD",
"timeZone": "Australia/Melbourne"
}
Price Overrides
This is an example of an item that has a sale price override.
{
"menus": [
{
"id": "51dc2ae3-876a-4da4-8858-498eb53c848f",
"title": "Afternoon menu",
"fulfillmentType": "SERVICE",
"categoryIds": ["101", "102"],
"serviceAvailability": [
{
"dayOfTheWeek": "MONDAY",
"start": "10:00",
"end": "23:00"
},
{
"dayOfTheWeek": "WEDNESDAY",
"start": "10:00",
"end": "23:00"
},
{
"dayOfTheWeek": "FRIDAY",
"start": "10:00",
"end": "23:00"
}
]
}
],
"categories": [
{
"id": "101",
"title": "Drinks",
"productIds": ["1"]
}
],
"products": [
{
"id": "1",
"title": "Bourbon",
"description": "Fine whiskey",
"imageUrl": "https://example.com/bourbon.png",
"modifiers": [],
"priceOverrides": [
{
"contextType": "PRODUCT",
"contextValue": "1",
"price": 15000
}
],
"available": true,
"price": {
"amount": 25000,
"taxIncluded": 2500
},
"tags": ["expensive", "Happy Hour"]
}
],
"currency": "AUD",
"timeZone": "Australia/Melbourne"
}
- Set Menu / Update Menu
Pushing new or updated menus to a store via
PUT /organizations/{organizationId}/locations/{locationId}/menu
. A call to this endpoint overwrites all existing menus.
Menu Setup
To help you with setting up store menus, please view our sample menu payloads that are provided within the Menu API reference section.
FAQ
What requirements do product images need to adhere?
- JPEG or PNG format
- 500px ≤ Width ≤ 500px
- 500px ≤ Height ≤ 500px
Next steps
Once you have successfully set up your menu, see the Order integration guide.