Menu Structure

Understand the menu object returned by the Menu Management public API and how categories, items, modifiers, and category groups relate to each other.

Menu Structure

Use this reference to understand the menu object returned by the Menu Management public API and how its entities relate to each other.

A Menu is the top-level menu object for a restaurant. It contains Categories (groupings of orderable items), Modifiers (reusable option groups), and CategoryGroups (logical groupings of categories for display).

Hierarchy

Menu
├── categories[]
│   └── Category
│       ├── availabilityOverrides[]
│       └── items[]
│           └── Item (CategoryItem)
│               ├── modifierMembers[]  ──references──▶  Modifier (by parentModifierId)
│               ├── pricingProfiles[]
│               ├── charges[]
│               └── availabilityOverrides[]
│
├── modifiers[]
│   └── Modifier
│       └── items[]
│           └── ModifierItem (Item + autoSelectedQuantity)
│               ├── modifierMembers[]  ──references──▶  Modifier (nested modifiers)
│               ├── pricingProfiles[]
│               ├── charges[]
│               └── availabilityOverrides[]
│
└── categoryGroups[]
    └── CategoryGroup  ──references──▶  Categories (by categoryIds[])

Key Concepts

Categories and Items

A Category is a section of the menu (e.g. "Starters", "Mains", "Desserts"). Each category contains an array of Items — the orderable products a customer can add to an order.

Modifiers and ModifierMembers

Modifiers are reusable option groups defined at the menu level (e.g. "Choose your size", "Extra toppings"). They are not nested inside items directly. Instead, items reference modifiers through ModifierMembers.

A ModifierMember is a link from an item to a modifier group. It can override properties such as min, max, and canSameItemBeSelectedMultipleTimes for that item, so the same modifier can behave differently depending on where it is used.

Each Modifier contains ModifierItems — the individual selectable options within that group (e.g. "Small", "Medium", "Large").

ModifierItems can themselves have ModifierMembers, enabling nested modifier chains (e.g. a "Burger" item → "Choose your patty" modifier → "Beef Patty" modifier item → "Choose doneness" modifier).

Pricing Profiles and Price Bands

Each item (CategoryItem or ModifierItem) can have multiple PricingProfiles, one per price band. Each profile defines separate prices for four dispatch types: Collection, Delivery, DineIn, and TakeAway. This allows different pricing based on how the order is fulfilled.

Availability Overrides

AvailabilityOverrides control when and where a category or item is visible. They can restrict availability by:

  • Property - specific store locations
  • Venue code - sales channels (Flipdish, Deliveroo, JustEats, UberEats, etc.)
  • Dispatch type - DineIn, TakeAway, Collection, Delivery
  • Day of week - individual day flags (Monday through Sunday)
  • Time of day - fromTime / toTime window

Category Groups

CategoryGroups provide a way to logically group categories together for display purposes (e.g. grouping "Starters" and "Soups" under "Light Bites"). They reference categories by ID rather than containing them.

Charges

Items can have associated Charges (e.g. deposit return, bag charge). Each charge is linked by chargeId and scoped to a priceBandId.

Entity Reference

Menu

The root entity containing all menu data.

PropertyTypeRequiredDescription
idstring (UUID)YesUnique menu identifier
orgIdstringYesOrg identifier
namestringYesMenu name
descriptionstringNoMenu description
typestringYesMenu type: Store, Primary, Reward, or Kiosk
revisionIdnumberYesRevision number (incremented on each save)
createdAtstring (ISO 8601)YesCreation timestamp
updatedBystringNoEmail of user who last updated the menu
updatedAtstring (ISO 8601)NoLast update timestamp
categoriesCategory[]YesArray of categories
modifiersModifier[]YesArray of modifiers
categoryGroupsCategoryGroup[]YesArray of category groups

Category

A grouping of items within a menu (e.g. "Starters", "Mains").

PropertyTypeRequiredDescription
idstring (UUID)YesUnique category identifier
captionstringYesDisplay name
enabledbooleanYesWhether the category is active
descriptionstringNoCategory description
imageUrlstringNoURL of the category image
backgroundColorstringNoBackground colour (hex)
foregroundColorstringNoForeground/text colour (hex)
selectedBackgroundColorstringNoBackground colour when selected
selectedForegroundColorstringNoForeground colour when selected
itemsItem[]YesArray of items in this category
availabilityOverridesAvailabilityOverride[]YesAvailability rules for this category

Item (CategoryItem)

An orderable product within a category.

PropertyTypeRequiredDescription
idstring (UUID)YesUnique item identifier
externalIdstringNoExternal system identifier
metadatastringNoArbitrary metadata (JSON string)
captionstringYesDisplay name
enabledbooleanYesWhether the item is active
descriptionstringNoItem description
productIdstringNoAssociated product identifier
imageUrlstringNoURL of the item image
backgroundColorstringNoBackground colour (hex)
foregroundColorstringNoForeground/text colour (hex)
selectedBackgroundColorstringNoBackground colour when selected
selectedForegroundColorstringNoForeground colour when selected
cellLayoutTypestringNoDisplay layout: Small, Medium, Large, or HiddenImage
alcoholbooleanYesWhether the item contains alcohol
allergensstring[]YesList of allergens present (see Allergens)
disableVouchersbooleanYesExclude from all discount offers
excludeFromVoucherDiscountingbooleanYesExclude from voucher discounts specifically
modifierMembersModifierMember[]YesReferences to modifier groups
pricingProfilesPricingProfile[]YesPricing per price band
chargesItemCharge[]YesAssociated charges
availabilityOverridesAvailabilityOverride[]YesAvailability rules for this item

Modifier

A reusable group of options defined at the menu level (e.g. "Choose your size").

PropertyTypeRequiredDescription
idstring (UUID)YesUnique modifier identifier
captionstringYesDisplay name
enabledbooleanYesWhether the modifier is active
descriptionstringNoModifier description
backgroundColorstringNoBackground colour (hex)
foregroundColorstringNoForeground/text colour (hex)
selectedBackgroundColorstringNoBackground colour when selected
selectedForegroundColorstringNoForeground colour when selected
minnumberYesMinimum number of selections required
maxnumberYesMaximum number of selections allowed
canSameItemBeSelectedMultipleTimesbooleanYesWhether the same option can be selected more than once
hiddenInOrderFlowbooleanYesWhether the modifier is visible in the ordering flow
itemsModifierItem[]YesArray of selectable options

ModifierItem

An individual option within a modifier group (e.g. "Large", "Extra Cheese"). It includes all Item properties plus one additional property.

PropertyTypeRequiredDescription
(all Item properties)See Item above
autoSelectedQuantitynumberNoDefault quantity to pre-select

ModifierMember

A reference from an item to a modifier group, with optional per-item overrides.

PropertyTypeRequiredDescription
idstring (UUID)YesUnique modifier member identifier
parentModifierIdstring (UUID)YesID of the referenced modifier
captionstringNoOverride display name
minnumberNoOverride minimum selections for this item
maxnumberNoOverride maximum selections for this item
enabledbooleanYesWhether this modifier link is active
canSameItemBeSelectedMultipleTimesbooleanNoOverride repeated selection setting

PricingProfile

Pricing for a single price band, with separate values for each dispatch type.

PropertyTypeRequiredDescription
priceBandIdstring (UUID)YesPrice band identifier
collectionPricenumberYesPrice for collection orders
collectionTaxnumberYesTax amount for collection
collectionTaxablebooleanYesWhether collection price is taxable
collectionTaxablePricenumberNoTaxable portion of collection price
collectionUpsellingPointsnumberNoUpselling points for collection
deliveryPricenumberYesPrice for delivery orders
deliveryTaxnumberYesTax amount for delivery
deliveryTaxablebooleanYesWhether delivery price is taxable
deliveryTaxablePricenumberNoTaxable portion of delivery price
deliveryUpsellingPointsnumberNoUpselling points for delivery
dineInPricenumberYesPrice for dine-in orders
dineInTaxnumberYesTax amount for dine-in
dineInTaxablebooleanYesWhether dine-in price is taxable
dineInTaxablePricenumberNoTaxable portion of dine-in price
dineInUpsellingPointsnumberNoUpselling points for dine-in
takeawayPricenumberYesPrice for takeaway orders
takeawayTaxnumberYesTax amount for takeaway
takeawayTaxablebooleanYesWhether takeaway price is taxable
takeawayTaxablePricenumberNoTaxable portion of takeaway price
takeawayUpsellingPointsnumberNoUpselling points for takeaway

CategoryGroup

A logical grouping of categories for display purposes.

PropertyTypeRequiredDescription
idstring (UUID)YesUnique group identifier
namestringYesDisplay name
descriptionstringNoGroup description
imageUrlstringNoURL of the group image
categoryIdsstring[]YesIDs of categories in this group

AvailabilityOverride

Controls when and where a category or item is available.

PropertyTypeRequiredDescription
namestringYesOverride rule name
enabledbooleanYesWhether the entity is enabled under this override
propertyIdsstring[]YesProperty (store) IDs this override applies to
venueCodesstring[]YesVenue codes this override applies to (see Venue Codes)
dispatchTypesstring[]YesDispatch types this override applies to (see Dispatch Types)
mondayEnabledbooleanNoAvailable on Mondays
tuesdayEnabledbooleanNoAvailable on Tuesdays
wednesdayEnabledbooleanNoAvailable on Wednesdays
thursdayEnabledbooleanNoAvailable on Thursdays
fridayEnabledbooleanNoAvailable on Fridays
saturdayEnabledbooleanNoAvailable on Saturdays
sundayEnabledbooleanNoAvailable on Sundays
fromTimestringNoStart time (e.g. "09:00")
toTimestringNoEnd time (e.g. "17:00")

ItemCharge

A reference linking an item to a charge.

PropertyTypeRequiredDescription
chargeIdstring (UUID)YesCharge identifier
priceBandIdstring (UUID)YesPrice band the charge applies to

Enums and Constants

Menu Types

ValueDescription
StoreStandard store menu
PrimaryPrimary menu for a property
RewardRewards/loyalty menu
KioskSelf-service kiosk menu

Dispatch Types

ValueDescription
DineInCustomer eats at the venue
TakeAwayCustomer orders and takes food away
CollectionCustomer collects a pre-placed order
DeliveryOrder is delivered to the customer

Venue Codes

ValueDescription
FlipdishFlipdish own channels
DeliverooDeliveroo marketplace
JustEatsJust Eat marketplace
UberEatsUber Eats marketplace
PropertyProperty-specific channel
ExternalAppExternal application channel

Cell Layout Types

ValueDescription
SmallSmall item card
MediumMedium item card
LargeLarge item card
HiddenImageItem card with hidden image

Allergens

Items can declare the following allergens (based on EU food allergen regulations):

Celery, Crustaceans, Egg, Fish, Gluten, Lupin, Milk, Molluscs, Mustard, Nuts, Peanuts, Sesame, Soybeans, Sulphur Dioxide, Wheat

Example

A minimal menu with one category, one item, one modifier, and one category group:

{
  "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "orgId": "org123",
  "name": "Lunch Menu",
  "description": "Available 11am - 3pm",
  "type": "Store",
  "revisionId": 3,
  "createdAt": "2025-06-01T10:00:00Z",
  "updatedBy": "[email protected]",
  "updatedAt": "2025-06-15T14:30:00Z",
  "categories": [
    {
      "id": "c0000001-0000-4000-8000-000000000001",
      "caption": "Burgers",
      "enabled": true,
      "description": "Our handcrafted burgers",
      "imageUrl": "https://example.com/images/burgers.jpg",
      "availabilityOverrides": [],
      "items": [
        {
          "id": "10000001-0000-4000-8000-000000000001",
          "caption": "Classic Burger",
          "enabled": true,
          "description": "Beef patty with lettuce, tomato, and our secret sauce",
          "productId": "prod-burger-classic",
          "imageUrl": "https://example.com/images/classic-burger.jpg",
          "cellLayoutType": "Large",
          "alcohol": false,
          "allergens": ["Gluten", "Sesame", "Milk"],
          "disableVouchers": false,
          "excludeFromVoucherDiscounting": false,
          "modifierMembers": [
            {
              "id": "e0000001-0000-4000-8000-000000000001",
              "parentModifierId": "d0000001-0000-4000-8000-000000000001",
              "caption": "Choose your size",
              "min": 1,
              "max": 1,
              "enabled": true,
              "canSameItemBeSelectedMultipleTimes": false
            }
          ],
          "pricingProfiles": [
            {
              "priceBandId": "f0000001-0000-4000-8000-000000000001",
              "collectionPrice": 9.99,
              "collectionTax": 1.50,
              "collectionTaxable": true,
              "deliveryPrice": 10.99,
              "deliveryTax": 1.65,
              "deliveryTaxable": true,
              "dineInPrice": 9.99,
              "dineInTax": 1.50,
              "dineInTaxable": true,
              "takeawayPrice": 9.99,
              "takeawayTax": 1.50,
              "takeawayTaxable": true
            }
          ],
          "charges": [],
          "availabilityOverrides": [
            {
              "name": "Weekday lunch only",
              "enabled": true,
              "propertyIds": [],
              "venueCodes": [],
              "dispatchTypes": [],
              "mondayEnabled": true,
              "tuesdayEnabled": true,
              "wednesdayEnabled": true,
              "thursdayEnabled": true,
              "fridayEnabled": true,
              "saturdayEnabled": false,
              "sundayEnabled": false,
              "fromTime": "11:00",
              "toTime": "15:00"
            }
          ]
        }
      ]
    }
  ],
  "modifiers": [
    {
      "id": "d0000001-0000-4000-8000-000000000001",
      "caption": "Choose your size",
      "enabled": true,
      "description": "Select a burger size",
      "min": 1,
      "max": 1,
      "canSameItemBeSelectedMultipleTimes": false,
      "hiddenInOrderFlow": false,
      "items": [
        {
          "id": "20000001-0000-4000-8000-000000000001",
          "caption": "Regular",
          "enabled": true,
          "alcohol": false,
          "allergens": [],
          "disableVouchers": false,
          "excludeFromVoucherDiscounting": false,
          "modifierMembers": [],
          "pricingProfiles": [
            {
              "priceBandId": "f0000001-0000-4000-8000-000000000001",
              "collectionPrice": 0,
              "collectionTax": 0,
              "collectionTaxable": true,
              "deliveryPrice": 0,
              "deliveryTax": 0,
              "deliveryTaxable": true,
              "dineInPrice": 0,
              "dineInTax": 0,
              "dineInTaxable": true,
              "takeawayPrice": 0,
              "takeawayTax": 0,
              "takeawayTaxable": true
            }
          ],
          "charges": [],
          "availabilityOverrides": []
        },
        {
          "id": "20000002-0000-4000-8000-000000000002",
          "caption": "Large",
          "enabled": true,
          "alcohol": false,
          "allergens": [],
          "disableVouchers": false,
          "excludeFromVoucherDiscounting": false,
          "modifierMembers": [],
          "pricingProfiles": [
            {
              "priceBandId": "f0000001-0000-4000-8000-000000000001",
              "collectionPrice": 2.00,
              "collectionTax": 0.30,
              "collectionTaxable": true,
              "deliveryPrice": 2.00,
              "deliveryTax": 0.30,
              "deliveryTaxable": true,
              "dineInPrice": 2.00,
              "dineInTax": 0.30,
              "dineInTaxable": true,
              "takeawayPrice": 2.00,
              "takeawayTax": 0.30,
              "takeawayTaxable": true
            }
          ],
          "charges": [],
          "availabilityOverrides": []
        }
      ]
    }
  ],
  "categoryGroups": [
    {
      "id": "a0000001-0000-4000-8000-000000000001",
      "name": "Food",
      "description": "All food categories",
      "imageUrl": null,
      "categoryIds": ["c0000001-0000-4000-8000-000000000001"]
    }
  ]
}