# 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"
}

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

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

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

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
}

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