Guidelines

An article with full guidelines on how to make your menu standout is available, below is an extract adapted and updated for API users.

Example menu on Deliveroo appExample menu on Deliveroo app

Cover photo1

This should showcase your brand and encourage customers to visit your restaurant page.
Accepted formats: JPEG, PNG. At least 1920x1080 pixels, 16:9 aspect ratio.

Menu description2

This sits at the top of the menu page and explains what makes your restaurant different. We recommend telling the story of your brand and explaining why it was created.
Accepted formats: Up to 500 characters - ideally between 200-245 characters.

Category names3

The titles of the sections of your menu. This should help customers easily navigate your menu and clearly understand each section.
Accepted formats: Between 3-120 characters.

Category descriptions4

It should explain why these set of items are grouped together as well as highlight the key ingredients and tastes associated with the category.
Accepted formats: Between 3-255 characters - ideally between 200-245 characters.

Item names5

The titles of your dishes.
Accepted formats: 2-120 characters, ideally below 60 characters.

Item descriptions6

It should give the customer all the information they need to understand the dish, from ingredients to allergens.
Accepted formats: Up to 500 characters, but only the first 60 characters will be visible on screen on the menu page (the rest is visible when click on the item)

Item photos7

These will be photos of specific menu items. Customers will see these photos when they visit your restaurant page. Specific photos of each item on your menu makes it as easy as possible for customers to decide what to order.
Accepted formats: JPEG, PNG. 1920x1080 pixels 16:9 aspect ratio.

Item allergens

Help consumers with allergies by providing an up-to-date structure description of any allergens that may be present in your dishes.

The special code no_allergens means that the item has none of the known allergens on the list. In order to send "information unavailable" just provide an empty array.

Valid allergen values by country:

CountryValid allergens value
UK"no_allergens","celery", "crustaceans", "eggs", "fish", "gluten", "lupin", "milk", "molluscs", "mustard", "nuts", "peanuts", "sesame_seeds", "soybeans", "sulphur_dioxide_sulphites"

Item classifications information

If an item falls into any of the applicable classifications from the list below it should be set where relevant.

This information is used to ensure age, marketing and/or quantity restrictions are applied in line with local legislation.

Currently supported classifications are:

ClassificationDescription
"early_stage_infant_formula"This includes all infant formula products, excluding follow on formula products
"pharmaceuticals_aspirin"Any product that is exclusively or contains aspirin
"pharmaceuticals_ibuprofen"Any product that is exclusively or contains ibuprofen
"pharmaceuticals_paracetamol"Any product that is exclusively or contains paracetamol

Item dietary information

Help consumers with dietary information by providing an up-to-date description of any dietary category (or categories) a specific item complies with.

This information helps customers to easily identify the items that more closely match with their requirements

Currently supported dietary codes are:

"dairy_free"
"gluten_free"
"halal"
"keto"
"paleo"
"plant_based"
"vegan"
"vegetarian"

Item nutritional info

Calories

For Deliveroo menus, both top-level menu items, and items that are only available as modifier choices can have calorie information attributed to them via a specificenergy_kcal field (present on menu.items[].nutritional_info). This information will be displayed clearly and prominently at the ‘point of choice’ for the customer on Deliveroo menu pages.

From the energy_kcal field on the nutritional information object, we will only display the nutritional_info.energy_kcal.high field to customers, however this may change in the future.

In the case of mapping a single value, rather than a range, both nutritional_info.energy_kcal.high and nutritional_info.energy_kcal.low should be set to the same value.

To remove calorie information from an item, or signify that an Item does not have calorie information set nutritional_info.energy_kcal to null, when an Item is configured like this, no calorie value will be shown at all.

Additionally, setting the whole nutritional_info field to null will also have the same effect.

Scheduled menus

Scheduled menus allow you to set which categories of items should appear to customers on a schedule. In order to drive this experience, you’ll need to utilise the menu.mealtimes.schedule object within your menu payload (see sidebar).

{
 "schedule": [
   {
     "day_of_week": 0,
     "time_periods": [
       {
         "start": "00:00:00",
         "end": "10:29:00"
       }
     ]
   },
   {
     "day_of_week": 1,
     "time_periods": [
       {
         "start": "00:00:00",
         "end": "10:29:00"
       }
     ]
   },
   {
     "day_of_week": 2,
     "time_periods": [
       {
         "start": "00:00:00",
         "end": "10:29:00"
       }
     ]
   },
   {
     "day_of_week": 3,
     "time_periods": [
       {
         "start": "00:00:00",
         "end": "10:29:00"
       }
     ]
   },
   {
     "day_of_week": 4,
     "time_periods": [
       {
         "start": "00:00:00",
         "end": "10:29:00"
       }
     ]
   },
   {
     "day_of_week": 5,
     "time_periods": [
       {
         "start": "00:00:00",
         "end": "10:29:00"
       }
     ]
   },
   {
     "day_of_week": 6,
     "time_periods": [
       {
         "start": "00:00:00",
         "end": "10:29:00"
       }
     ]
   }
 ]
}

Mealtime Images

A “hero” image is the image that customers see for your shop and menu page when browsing the consumer app. You can configure an image for each mealtime (i.e. an image url for each mealtime in your menu).

When multiple hero images are provided, customers will see a different image for your shop and menu page when browsing the consumer app depending on which mealtime is active.

Mealtime Schedules

Two options are available for configuring schedules. The options are detailed below.

24H/7D Coverage

The provided schedules must cover a 7D/24H period. This is to ensure that if customers are browsing a menu outside of opening hours, they still see a menu. Consider the following hours:

  • Breakfast: 00:00 - 10:29
  • Lunch: 10:30 - 13:59
  • Dinner: 14:00 - 23:59

Customers browsing in the early hours in the morning (4-6AM) would see the breakfast menu. Users browsing outside of the opening hours of the store would still see the configured mealtime. If it is not possible to configure schedules for all days+hours of the week, partners should explore the option below.

Default Mealtime

A default mealtime is a mealtime without any schedules associated. Menu API - Scheduled Menus should be either null or an empty collection. This will be recognised as the “default” mealtime.

A default mealtime is one that shows when there are no other active mealtimes by schedule. Consider a single “breakfast” mealtime in addition to a default:

  • Breakfast: 08:00 - 10:29
  • All Day - no schedule

During the breakfast hours, the breakfast mealtime will be shown. Outside these hours, given no other mealtime is active, the default will be shown.

This gives partners the ability to only configure a single specific mealtime and use a fallback at all other times of the day without increased scheduling complexity.

Schedule Rules

Scheduled start and end times must not have the same start and end time, e.g. a mealtime ends at 10:29 and another starts at 10:30. The next mealtime must start at 10:30. Schedules must not overlap, a single mealtime may only be active at a given time. If using default mealtimes, only a single mealtime must be present. Schedules that do not meet the above requirements will cause the menu request to be rejected (400 - Bad Request).

Category/Item Duplication

Partners should avoid duplicating categories, items and modifiers across mealtimes. The correct usage is to use the same category in multiple mealtimes (if required), and items within multiple categories.

Do not create duplicate items and categories unless the items in the category differ, or some part of the item differs.

If the items are not unique by their name+price (excluding overrides), the menu request will be rejected (400 - Bad Request).

Examples:

  • Do not create duplicate “Pizza” categories that are the same (except for the ID) but are used in different mealtimes.
  • Do not create duplicate “Hawaiian Pizza” items (except for the ID) that are used in the two unique “Pizza” categories above.
  • Do create separate categories when the items within them differ.
  • Do create separate items when parts of the item differ.