# Menu API Resources v1.1
Each resource used in the Menu API version 1.1 is listed below.
# Allergen
Describes allergens that may be associated to menus, menu items and option set items.
Name | Required | Type | Description |
---|---|---|---|
key | false | int | The unique key for the allergen. |
name | false | string | The name of the allergen. |
# Sample
{
"key": 1,
"name": "Gluten"
}
# Availability
A container for different availability types for menu items and sections.
Name | Required | Type | Description |
---|---|---|---|
filterRequired | true | boolean | Indicates if the availability definition contains any values and therefore would require filtering. |
periods | true | AvailabilityPeriod[] | The list of availability periods in the availability definition. |
regions | true | Region[] | The list of regions in the availability definition. |
orderingChannels | true | Channel[] | The list of ordering channels in the availability definition. |
fulfilmentChannels | true | Channel[] | The array of fulfilment channels in the availability definition. |
# Sample
{
"filterRequired": false,
"periods": [],
"regions": [],
"orderingChannels": [],
"fulfilmentChannels": []
}
# AvailabilityPeriod
Describes availability date and time periods as well as days that a menu items or sections are available on.
Name | Required | Type | Description |
---|---|---|---|
key | true | int | The unique key for the period. |
name | true | string | The name of the period. |
effectiveFrom | true | date | The date the period is effective from. |
effectiveTo | true | date | The date the period is effective to. |
days | true | TradingDay[] | The days the period applies to. |
# Sample
{
"key": 3,
"name": "Mondays",
"effectiveFrom": "2020-10-01",
"effectiveTo": "2021-01-31",
"days": [
{
"dayOfWeek": "Friday",
"active": false,
"times": []
},
{
"dayOfWeek": "Monday",
"active": true,
"times": [
{
"name": "Whole Day",
"availableFrom": "00:00:00",
"availableTo": "23:59:59"
}
]
},
{
"dayOfWeek": "Saturday",
"active": false,
"times": []
},
{
"dayOfWeek": "Sunday",
"active": false,
"times": []
},
{
"dayOfWeek": "Thursday",
"active": false,
"times": []
},
{
"dayOfWeek": "Tuesday",
"active": false,
"times": []
},
{
"dayOfWeek": "Wednesday",
"active": false,
"times": []
}
]
}
# Brand
The brand that the menu is associated with.
Name | Required | Type | Description |
---|---|---|---|
key | false | string | The unique key for the brand. |
name | false | string | The full, official name of the brand. |
displayName | false | string | The shortened display name for the brand. |
enabled | false | boolean | Indicates if the brand is enabled or not. |
createdOn | false | date-time | The date and time the brand was created. |
modifiedOn | false | date-time | The date and time the brand was modified. |
# Sample
{
"key": "SPUR",
"name": "Spur",
"displayName": "Spur Steak Ranches",
"enabled": true,
"createdOn": "2013-09-25T13:37:28.8966667",
"modifiedOn": "2020-11-19T12:15:05.04"
}
# Category
Used for menu categories and item categories that apply to menu items.
Name | Required | Type | Description |
---|---|---|---|
key | true | int | The unique key for the category. |
name | true | string | The name of the category. |
# Sample
{
"key": 3,
"name": "Burgers"
}
# Channel
Describes the ordering and fulfilment channels that a menu, section or menu item is intended for.
Name | Required | Type | Description |
---|---|---|---|
key | true | int | The unique key for the channel. |
name | true | string | The name of the channel. |
# Sample
{
"key": 13,
"name": "Delivery"
}
# DayPart
Splits the trading day into logical chunks such as breakfast, lunch and dinner.
Name | Required | Type | Description |
---|---|---|---|
key | true | int | The unique key for the day part. |
name | true | string | The name of the day part. |
# Sample
{
"key": 18,
"name": "Breakfast"
}
# FeaturedPeriod
Specifies date ranges, days and time periods when the list of specified menu items should be featured on the menu.
Name | Required | Type | Description |
---|---|---|---|
key | true | int | The unique key for the period. |
name | true | string | The name of the period. |
effectiveFrom | false | date | The date the period is effective from. |
effectiveTo | false | date | The date the period is effective to. |
days | true | TradingDay[] | The days the period applies to. |
item | true | MenuItemSummary[] | The menu items the period applies to. |
# Sample
{
"key": 6,
"name": "October Friday Lunch",
"effectiveFrom": "2020-10-01",
"effectiveTo": "2020-10-30",
"days": [
{
"dayOfWeek": "Friday",
"active": true,
"times": [
{
"name": "Lunch Time",
"availableFrom": "12:00:00",
"availableTo": "15:59:59"
}
]
},
{
"dayOfWeek": "Monday",
"active": false,
"times": []
},
{
"dayOfWeek": "Saturday",
"active": false,
"times": []
},
{
"dayOfWeek": "Sunday",
"active": false,
"times": []
},
{
"dayOfWeek": "Thursday",
"active": false,
"times": []
},
{
"dayOfWeek": "Tuesday",
"active": false,
"times": []
},
{
"dayOfWeek": "Wednesday",
"active": false,
"times": []
}
],
"items": [
{
"key": 811001262,
"menuKey": "SPUR-ZA-45",
"menuVersion": 202010,
"name": "Cheese Garlic Roll",
"displayName": "Crispy Cheesy Garlic Roll",
"currency": "ZAR",
"price": 36.90,
"tags": [
"Hot or Not?"
]
}
]
}
# Image
Provides image information for sections and menu items.
Name | Required | Type | Description |
---|---|---|---|
key | true | string | The unique key for the image. Can be used with the Image API to retrieve additional information about the image. |
partnerKey | false | string | Allows images to be optionally assigned to a specific partner to meet specific image requirements. |
imageType | true | string | Indicates the type of image. Should be used to display the correct image intended for the specific use case. |
url | true | string | The URL to download the image from the CDN. The CDN supports image resizing and supports both HTTP as well as HTTPS for serving the image. See the Image API for more details. |
# Sample
{
"key": "F4270787-591D-4943-AB21-8C841C7E1B9F",
"partnerKey": null,
"imageType": "LandscapeImage",
"url": "images.spurcorp.com/F4270787-591D-4943-AB21-8C841C7E1B9F"
}
# Menu
Describes a full menu of items a customer may order from, grouped into sections and subsection and categorised by various other data points.
Name | Required | Type | Description |
---|---|---|---|
key | true | string | The unique key for the menu. |
version | true | int | The menu version. The same menu will have multiple versions over time. Each version will contain different items, pricing and so on. |
revision | true | string | The menu revision. A menu version will go through multiple revisions. This number will increment with each revision. |
name | true | string | The name of the menu. |
displayName | true | string | A display name for the menu for use within apps and websites. |
description | false | string | A description for the menu. |
status | true | string | The current status of the menu. |
statusChangedOn | false | date-time | The date and time the menu status was last changed on. |
publishStatus | true | string | The current published status of the menu. |
publishedOn | false | date-time | The date and time the menu was published on. |
brand | true | Brand | The brand the menu is for. |
defaultForBrand | true | boolean | Indicates if the menu is the default menu for the brand. The sit down menu in each brand would typically be marked as default. |
countryCode | true | string | The ISO 3166-1 Alpha-2 code for the country that the menu is intended to be used in. |
currency | true | string | The currency applicable for the pricing on the menu. |
foodTypes | true | string[] | The specific food types that the menu is intended for. May be empty if the menu does not support a specific type. |
orderingChannels | true | Channel[] | The ordering methods that the menu supports. |
fulfilmentChannels | true | Channel[] | The fulfilment methods that the menu supports. |
availableFrom | false | time | The time of day the menu is available from. No value implies the menu is available for the duration of the individual restaurant's trading hours. |
availableTo | false | time | The time of day the menu is available to. No value implies the menu is available for the duration of the individual restaurant's trading hours. |
enabled | true | boolean | Indicates if the menu is enabled. |
hasAvailabilityRestrictions | true | boolean | Indicates if the menu has availability restrictions that should be applied. |
effectiveFrom | true | date | The date the menu version is effective from. |
effectiveTo | true | date | The date the menu version is effective to. |
allergens | true | Allergen[] | The list of allergens that are associated to menu items on the menu. |
dayParts | true | DayPart[] | The list of day parts that are associated to menu items on the menu. |
itemCategories | true | Category[] | The list of item categories that are associated to menu items on the menu. |
menuCategories | true | Category[] | The list of menu categories that are associated to menu items on the menu. |
sections | true | Section[] | The list of sections on the menu. |
items | true | MenuItem[] | The list of menu items on the menu. |
featuredPeriods | true | FeaturedPeriod[] | The list of featured periods for the menu. |
restaurants | true | Restaurant[] | The list of restaurants linked to the menu version. |
createdOn | true | date-time | The date and time the menu was created. |
modifiedOn | true | date-time | The date and time the menu was modified. |
# Sample
{
"key": "SPUR-ZA-45",
"version": 202010,
"revision": "4417846432",
"name": "DEMO MENU",
"displayName": "DEMO",
"description": "This menu is to demo new features and functionality.",
"status": "QA",
"statusChangedOn": "2020-12-15T11:08:37.1433333",
"publishStatus": "Draft",
"publishedOn": null,
"brand": null,
"defaultForBrand": false,
"countryCode": "ZA",
"currency": "ZAR",
"foodTypes": [],
"orderingChannels": [
{
"key": 5,
"name": "Branded App"
}
],
"fulfilmentChannels": [
{
"key": 1,
"name": "Collection"
},
{
"key": 2,
"name": "Delivery"
}
],
"availableFrom": null,
"availableTo": null,
"enabled": true,
"hasAvailabilityRestrictions": false,
"effectiveFrom": "2020-11-01",
"effectiveTo": "2021-12-31",
"allergens": [
{
"key": 1,
"name": "Gluten"
}
],
"dayParts": [
{
"key": 18,
"name": "Breakfast"
}
],
"itemCategories": [
{
"key": 3,
"name": "Burgers"
}
],
"menuCategories": [
{
"key": 1,
"name": "Main Meal"
}
],
"sections": [],
"items": [],
"featuredPeriods": [],
"restaurants": [],
"createdOn": "2020-10-20T09:05:37",
"modifiedOn": "2020-11-01T00:00:00"
}
# MenuItem
The units that a customer may order off the menu.
Name | Required | Type | Description |
---|---|---|---|
key | true | int64 | The unique key for the menu item. |
menuKey | true | string | The unique key for the menu for the menu item. |
menuVersion | true | int | The menu version for the menu item. |
itemType | true | string | The type of item. |
name | true | string | The name of the item. |
displayName | true | string | The display name of the item that should be used in apps on on the web. |
description | true | string | A description for the item. |
currency | true | string | The currency for the price of the item. |
price | true | double | The price of the item. |
enabled | true | boolean | Indicates if the item is enabled or not. |
availability | true | Availability[] | The availability definition for the menu item. If populated it will most likely mean a menu item needs to be filtered based on a data point. |
tags | true | string[] | A set of tags for the menu item. |
allergens | true | Allergen[] | The allergens that apply to the menu item. |
dayParts | true | DayPart[] | The day parts that the menu item is associated with. |
itemCategories | true | Category[] | The item categories that the menu item is associated with. |
menuCategories | true | Category[] | The menu categories that the menu item is associated with. |
sections | true | MenuItemSection[] | The menu sections that the menu item is a member of. |
optionSets | true | OptionSet[] | The option sets for the menu item which allow the customer to modify the item. |
images | false | Image[] | The list of images for the item. |
companionItems | false | MenuItemSummary[] | A list of companion menu items that should be offered to the customer when they select the menu item. |
createdOn | true | date-time | The date and time the menu item was created. |
modifiedOn | true | date-time | The date and time the menu item was modified. |
# Sample
{
"key": 811001143,
"menuKey": "SPUR-ZA-45",
"menuVersion": 202010,
"itemType": "Item",
"name": "Spur Burger",
"displayName": "Original Spur Burger",
"description": null,
"currency": "ZAR",
"price": 79.90,
"enabled": true,
"availability": {
"filterRequired": true,
"periods": [],
"regions": [],
"orderingChannels": [],
"fulfilmentChannels": []
},
"tags": [],
"allergens": [
{
"key": 1,
"name": "Gluten"
}
],
"dayParts": [],
"itemCategories": [],
"menuCategories": [],
"sections": [
{
"key": 450,
"name": "Burgers",
"defaultSection": true,
"sortOrder": 1,
"subsections": []
}
],
"optionSets": [
{
"key": 861000099,
"menuKey": "SPUR-ZA-45",
"menuVersion": 202010,
"optionSetType": "Options",
"name": "Single Burger Option",
"displayName": "Which patty would you like?",
"description": "Single Burger Option",
"enabled": true,
"sortOrder": 1,
"required": true,
"setMinSelect": 1,
"setMaxSelect": 1,
"doubleLinePricing": false,
"optionSetItems": [
{
"key": 811001217,
"menuKey": "SPUR-ZA-45",
"menuVersion": 202010,
"optionSetKey": 861000099,
"itemType": "Option",
"name": "Beef 160 (Burger Option)",
"displayName": "Beef Burger Patty",
"description": "Beef Burger Patty",
"currency": "ZAR",
"price": 0.00,
"sortOrder": 1,
"tags": [],
"allergens": [],
"enabled": true
}
]
}
],
"companionItems": [
{
"key": 811000581,
"menuKey": "SPUR-ZA-45",
"menuVersion": 202010,
"name": "Lipton Ice Tea Lemon",
"displayName": "Lipton Ice Tea Lemon",
"currency": "ZAR",
"price": 24.90,
"tags": []
}
],
"images": [],
"createdOn": "2020-04-14T21:20:29",
"modifiedOn": "2020-11-01T00:00:00"
}
# MenuItemSection
Describes the sections a menu item is a member of.
Name | Required | Type | Description |
---|---|---|---|
key | true | int64 | The unique key for the section. |
name | true | string | The name of the section. |
defaultSection | false | boolean | Indicates if the section is the default section for the item or not. Will be null if the item has subsections assigned. |
sortOrder | false | int | The sort order for the item in the section. Will be null if the item has subsections assigned. |
subsections | true | MenuItemSubsection[] | The array of subsections for the section. May be empty if the item does not have any subsections assigned. |
# Sample
{
"key": 447,
"name": "Drinks",
"defaultSection": null,
"sortOrder": null,
"subsections": [
{
"key": 366,
"name": "Summer Coolers",
"sortOrder": 3,
"defaultSection": true
}
]
}
# MenuItemSubsection
Describes the subsections a menu item is a member of.
Name | Required | Type | Description |
---|---|---|---|
key | true | int64 | The unique key for the section. |
name | true | string | The name of the section. |
defaultSection | true | boolean | Indicates if the subsection is the default section for the item or not. |
sortOrder | true | int | The sort order for the item in the subsection. |
# Sample
{
"key": 366,
"name": "Summer Coolers",
"sortOrder": 3,
"defaultSection": true
}
# MenuItemSummary
A summary of the menu item resource.
Name | Required | Type | Description |
---|---|---|---|
key | true | int64 | The unique key for the menu item. |
menuKey | true | string | The unique key for the menu for the menu item. |
menuVersion | true | int | The menu version for the menu item. |
name | true | string | The name of the item. |
displayName | true | string | The display name of the item that should be used in apps on on the web. |
currency | true | string | The currency for the price of the item. |
price | true | double | The price of the item. |
tags | true | string[] | A set of tags for the menu item. |
# Sample
{
"key": 811000581,
"menuKey": "SPUR-ZA-45",
"menuVersion": 202010,
"name": "Lipton Ice Tea Lemon",
"displayName": "Lipton Ice Tea Lemon",
"currency": "ZAR",
"price": 24.90,
"tags": []
}
# OptionSet
Groups option set items for customers to choose how they would like a menu item modified.
Name | Required | Type | Description |
---|---|---|---|
key | true | int64 | The unique key for the option set. |
menuKey | true | string | The unique key for the menu for the option set. |
menuVersion | true | int | The menu version for the option set. |
optionSetType | false | string | The type of option set. |
name | true | string | The name of the option set. |
displayName | true | string | The display name of the option set. |
description | true | string | A description for the option set. |
enabled | true | boolean | Indicates if the option set is enabled or not. |
sortOrder | false | int | The sort order of the option set to display. |
required | true | boolean | Indicates if a selection from the option set is required or not. |
setMinSelect | true | int | The minimum number of option set items within the set that must be selected. |
setMaxSelect | true | int | The maximum number of option set items within the set that can be selected. |
doubleLinePricing | true | boolean | Indicates if the option set should be used to display double line pricing or not. |
optionSetItems | true | OptionSetItem[] | The array of option set items for the option set. |
# Sample
{
"key": 861000099,
"menuKey": "SPUR-ZA-45",
"menuVersion": 202010,
"optionSetType": "Options",
"name": "Single Burger Option",
"displayName": "Which patty would you like?",
"description": "Single Burger Option",
"enabled": true,
"sortOrder": 1,
"required": true,
"setMinSelect": 1,
"setMaxSelect": 1,
"doubleLinePricing": false,
"optionSetItems": [
{
"key": 811001217,
"menuKey": "SPUR-ZA-45",
"menuVersion": 202010,
"optionSetKey": 861000099,
"itemType": "Option",
"name": "Beef 160 (Burger Option)",
"displayName": "Beef Burger Patty",
"description": "Beef Burger Patty",
"currency": "ZAR",
"price": 0.00,
"sortOrder": 1,
"tags": [],
"allergens": [],
"enabled": true
}
]
}
# OptionSetItem
The individual modifiers for a menu item.
Name | Required | Type | Description |
---|---|---|---|
key | true | int64 | The unique key for the option set item. |
menuKey | true | string | The unique key for the menu for the item. |
menuVersion | true | int | The menu version for the item. |
optionSetKey | true | int64 | The unique key for the option set the option set item is a member of. |
itemType | true | string | The type of item. |
name | true | string | The name of the option set item. |
displayName | false | string | The display name of the option set item. |
description | true | string | A description for the option set item. |
currency | true | string | The currency for the price of the option set item. |
price | true | double | The price of the option set item. |
sortOrder | true | int | The sort or for the option set item within the option set. |
tags | true | string[] | A set of tags for the option set item. |
allergens | true | Allergen[] | The allergens that apply to the option set item. |
enabled | true | boolean | Indicates if the option set item is enabled or not. |
# Sample
{
"key": 811001217,
"menuKey": "SPUR-ZA-45",
"menuVersion": 202010,
"optionSetKey": 861000099,
"itemType": "Option",
"name": "Beef 160 (Burger Option)",
"displayName": "Beef Burger Patty",
"description": "Beef Burger Patty",
"currency": "ZAR",
"price": 0.00,
"sortOrder": 1,
"tags": [],
"allergens": [],
"enabled": true
}
# Section
Sections are the primary grouping for menu items.
Name | Required | Type | Description |
---|---|---|---|
key | true | int64 | The unique key for the section. |
name | true | string | The name of the section. |
strapline | false | string | The strapline for the section. |
sortOrder | true | int | The sort order for the section in the menu. |
tags | false | string[] | A set of tags for the section. |
availability | true | Availability[] | The availability definition for the section. |
subsections | false | Subsection[] | The array of subsections for the section. |
images | false | Image[] | The array of images for the section. |
# Sample
{
"key": 557,
"name": "Ribs",
"strapline": null,
"sortOrder": 4,
"tags": [],
"availability": {
"filterRequired": false,
"periods": [],
"regions": [],
"orderingChannels": [],
"fulfilmentChannels": []
},
"subsections": [],
"images": []
}
# Subsection
Subsections further break a section into smaller components.
Name | Required | Type | Description |
---|---|---|---|
key | true | int64 | The unique key for the section. |
name | true | string | The name of the section. |
strapline | false | string | The strapline for the section. |
sortOrder | true | int | The sort order for the section in the menu. |
tags | false | string[] | A set of tags for the section. |
availability | true | Availability[] | The availability definition for the subsection. |
sectionKey | true | int | The key of the section that the subsection belongs to. |
sectionName | true | string | The name of the section that the subsection belongs to. |
images | false | Image[] | The array of images for the section. |
# Sample
{
"key": 472,
"name": "Full Waffles",
"strapline": null,
"sortOrder": 1,
"tags": [],
"availability": {
"filterRequired": false,
"periods": [],
"regions": [],
"orderingChannels": [],
"fulfilmentChannels": []
},
"sectionKey": 555,
"sectionName": "Desserts",
"images": []
}
# Region
Describes regions that sections and menu items may be available in.
Name | Required | Type | Description |
---|---|---|---|
key | true | int | The unique key for the region. |
name | true | string | The name of the region. |
# Sample
{
"key": 87,
"name": "Western Cape"
}
# Restaurant
Provides information about the restaurants that a menu could be linked to.
Name | Required | Type | Description |
---|---|---|---|
key | true | int | The unique key for the restaurant. |
name | true | string | The name of the restaurant. |
displayName | true | string | The display name of the restaurant. Suitable for displaying to customers. |
brandKey | true | string | The brand key for the restaurant. |
outletType | true | string | The type of outlet the restaurant is classified as. Values are either Restaurant or Virtual Kitchen |
tradingStatus | true | string | Describes the current trading status of the restaurant. This is not a real-time check. |
countryCode | true | string | The ISO 3166-1 Alpha-2 code of the country that the restaurant trades in. |
createdOn | false | date-time | The date and time the restaurant was created. |
modifiedOn | false | date-time | The date and time the restaurant was modified. |
# Sample
{
"key": 1232,
"name": "RM Greenpoint",
"displayName": "RocoMamas Greenpoint",
"brandKey": "ROCO",
"outletType": "Restaurant",
"tradingStatus": "Open",
"countryCode": "ZA",
"createdOn": "2015-08-21T09:11:11.6466667",
"modifiedOn": "2020-12-18T00:00:00"
}
# TradingDay
A day used in availability and other resources.
Name | Required | Type | Description |
---|---|---|---|
dayOfWeek | true | string | The unique key for the day part. |
active | true | boolean | The name of the day part. |
times | true | TimePeriod[] | The name of the day part. |
# Sample
{
"dayOfWeek": "Monday",
"active": true,
"times": [
{
"name": "Whole Day",
"availableFrom": "00:00:00",
"availableTo": "23:59:59"
}
]
}
# TimePeriod
A time period on a given day used in availability and other resources.
Name | Required | Type | Description |
---|---|---|---|
name | true | string | The name of the time period. |
availableFrom | true | string | The time of day the section or menu item is available from. |
availableTo | true | string | The time of day the section or menu item is available to. |
# Sample
{
"name": "Whole Day",
"availableFrom": "00:00:00",
"availableTo": "23:59:59"
}