Relational inventory schema

This page describes the format for the Ordering End-to-End data feeds (Food Catalog Specification) you provide to Google. For a machine-readable version of this information, you can download the JSON schema.

General requirements

Entities must be structured to be on one line per entity in the feeds (entities are separated by newline characters). For readability purposes, JSON examples on this page do not follow that structure. However, you must follow that structure when sending your feeds. For example, a menu entity must be structured like the following code:

{"@type": "Menu","name": "Coffee Shop A","@id": "1535"}

Each `Restaurant` entity may have two Service entities (one each for the `DELIVERY` and `TAKEOUT` service types). Each `Service` entity may only have one `Menu` entity.

Any sub-entities can be reused across multiple restaurants.

JSON value guidelines

Type coercion

A type of a JSON value can be different from the type defined in the schema as long as the value can be coerced into the required type. For example, string properties can accept both string as well as integer values as input. Similarly, integer properties can accept string value as long as string can be parsed into valid integer.

Type coercion also works for repeated properties. Repeated properties can accept values as input without being enclosed in brackets []. For example, the OperationHours.serviceId property accepts both "service_id" and ["service_id"] as valid inputs.

DateTime and Time Values

DateTime is based on the schema.org type, and, unless otherwise stated, must follow the ISO 8601 format and include the date, the time, and the time zone. Use following syntax for DateTime:

// DateTime format:
YYYY-MM-DDTHH:MM:SS[HH:MM|Z]

For example:

2017-05-01T06:30:00-07:00 // UTC minus 7 hours
2017-05-01T06:30:00Z  // UTC time zone. The optional "Z" suffix represents the UTC time zone.

Time is the local time for a given restaurant or service location's time zone, is also based on the schema.org type, and must also follow the ISO 8601 format. Time uses the following syntax:

// Time format:
THH:MM:SS

For example:

T08:08:00 // 8:08 AM

Note the following whenever you specify a DateTime or Time:

  • The "T" prefix before the time is part of the format and is required.
  • The time zone must be specified for DATETIME. It isn't required for TIME.
  • The time must be specified in the local time for the restaurant or service.

Restaurant data

Restaurant (required)

A required entity to implement. Describes a restaurant.

The following table lists the properties for the Restaurant type:

Property Type Description
@type Const

Required.

Value: Restaurant

@id String

Required.

A unique identifier of the restaurant or delivery provider.

Example: restaurant_1

name String

Required.

Name of the restaurant.

Example: Foo

description String

A description of the restaurant.

Example: Best seafood in town

url Url

The URL that represents the restaurant. The restaurant domain is preferred over the aggregator domain.

Example: http://www.provider.com/somerestaurant

sameAs Url

The official website for the restaurant.

Example: http://www.provider2.com/somerestaurant

telephone String

Telephone number of the restaurant.

Example: +12345665898

streetAddress String

Required.

The street address of the restaurant.

Example: 12345 Bar Avenu

addressLocality String

Required.

The locality or city.

Example: San Francisco

addressRegion String

Required.

The region or state.

Example: CA

postalCode String

Required.

The postal code.

Example: 94124

addressCountry String

Required.

Two-letter ISO 3166-1 alpha-2 country code.

Example: US

latitude Number

Latitude in degrees. Values are restricted to the range [[-90, 90]]. The precision should be at least 5 decimal places.

Example: 35.7392607

longitude Number

Longitude in degrees. Values are restricted to the range [[-180, 180]]. The precision should be at least 5 decimal places.

Example: -120.3895522

dealId List<String>

Applicable Deals from the restaurant.

imprint String

A restaurant imprint is a section of additional information about the restaurant, such as legal name, legal address, and registration number. This information can be formatted using " ".

Example:

Three Brothers Tacos
123 FooSt
Mountain View
CA 94041, United States
email: contact@threebrotherstacos.com

Commercial Register: 123456789

economicOperator String

Economic Operator information associated with the restaurant, if applicable. This information will be displayed within the Trader Info section. Text can be formatted using " ".

Example:

XYZ Corp
123 Main Street
555-555-5555

dateModified ISO Timestamp

The last modified date and time of the Restaurant entity feed in ISO timestamp format but with type String.

Example: 2017-01-02T00:00:00-07:00

The following example shows a Restaurant element:

Example

{
  "@type": "Restaurant",
  "@id": "10824",
  "name": "Pronto Wood Fired Pizzeria",
  "url": "https://www.provider.com/pronto-wood-fired-pizzeria",
  "telephone": "+16503659978",
  "streetAddress": "2560 El Camino Real",
  "addressLocality": "Palo Alto",
  "addressRegion": "CA",
  "postalCode": "94061",
  "addressCountry": "US",
  "latitude": 37.472842,
  "longitude": -122.217144
}

Deal

Types of discounts which can be applied to a cart.

The following table lists the properties for the Deal type:

Property Type Description
@type Const

Required.

Value: Deal

@id String

Required.

A unique identifier of the deal.

Example: FREEDELIVERY

dealCode String

Required.

Unique deal ID per deal per partner. This ID must uniquely identify the deal in your promotion system. Google sends you this identifier in the promotions.coupon field of a CheckoutRequest for validation.

Example: ADETRE23

applicableServiceType List<ServiceType>

The service that this deal is applicable to. Default assumes a deal applicable to all.

eligibleMaxOrders Integer

This deal is only eligible when the user has less than or equal to this number of past successful orders.

availabilityId List<String>

The @id values of Availability entities which provide details on when the menu section is available.

Example: [ "availability_1" ]

isDisabled Boolean

This overrides other validity checks.

dealType DealType

Required.

Category of deal to apply the discount to. The category can be the whole cart total, service fees, or delivery fees.

priceCurrency String

Required when discount is defined.

Required when eligibleTransactionVolumeMin is defined.

Currency (in 3-letter ISO 4217 format) of the discount.

Example: USD

eligibleTransactionVolumeMin Number

Transaction volume, in a monetary unit, for which this promotion is valid.

termsOfServiceUrl Url

Required.

Human-readable terms of service documentation.

dateModified ISO Timestamp

The last modified date and time of the Deal entity feed in ISO timestamp format but with type String.

Example: 2017-01-02T00:00:00-07:00

Exactly one of the following groups of properties is required.
discount Group 1 Number

Value of the discount as a number.

discountPercentage Group 2 Number

Value of the discount as a percentage of the original price.

The following example shows a Deal element:

Example 1

{
  "@type": "Deal",
  "@id": "ONEDOLLARFEE",
  "dealCode": "THREEDOLLARFEE",
  "dealType": "CART_OFF",
  "availabilityId": [
    "availability_may2020"
  ],
  "termsOfServiceUrl": "http://www.provider.com/onedollardeal",
  "applicableServiceType": [
    "TAKEOUT"
  ],
  "discount": 3,
  "priceCurrency": "USD"
}

Example 2

{
  "@type": "Deal",
  "@id": "10PERCOFF",
  "dealCode": "10PERCOFF",
  "dealType": "CART_OFF",
  "availabilityId": [
    "availability_weekdays_evening"
  ],
  "termsOfServiceUrl": "http://www.provider.com/deal",
  "discountPercentage": 10,
  "priceCurrency": "USD"
}

Example 3

{
  "@type": "Deal",
  "@id": "FREEDELIVERY",
  "dealCode": "FREEDELIVERY",
  "dealType": "DELIVERY_OFF",
  "availabilityId": [
    "availability_may"
  ],
  "applicableServiceType": [
    "DELIVERY"
  ],
  "termsOfServiceUrl": "http://www.provider.com/free_delivery_deal",
  "discountPercentage": 100,
  "eligibleTransactionVolumeMin": 25,
  "priceCurrency": "USD"
}

Service data

Service (required)

Describes food ordering service details for a restaurant. Service is a required entity to implement.

The following table lists the properties for the Service type:

Property Type Description
@type Const

Required.

Value: Service

@id String

Required.

Identifier for the fulfillment service.

Example: service_1

serviceType ServiceType

Required.

The type of service being offered. Possible values are "DELIVERY" or "TAKEOUT".

Example: DELIVERY

restaurantId String

Required.

The @id value of the Restaurant entity correlated to this Service entity.

Example: restaurant_1

menuId String

Required.

The @id value of the Menu entity correlated to this Service entity.

Example: menu_1

dateModified ISO Timestamp

The last modified date and time of the Service entity feed in ISO timestamp format.

Example: 2017-01-02T00:00:00-07:00

isDisabled Boolean

Indicates if the entity is disabled. Only use this type when you must disable the entity due to an unexpected event and you don't know when the service will be re-established (e.g. do not use for holidays).

Example: true

servingConfig ServingConfig

Serving config for the service used to control various features. e.g. disabling promo widget etc.

actionLinkUrl String

Contains a URL for a delivery/takeout service that will be used while migrating from end-to-end food ordering experience to redirect.

The following example shows a Service element:

Example 1

{
  "@type": "Service",
  "@id": "10824/takeout",
  "serviceType": "TAKEOUT",
  "menuId": "10824",
  "restaurantId": "10824",
  "actionLinkUrl": "https://www.rwgpartnerwebsite.com/foodorderpickup/merchant_foepa_3"
}

Example 2

{
  "@type": "Service",
  "@id": "10824/delivery",
  "serviceType": "DELIVERY",
  "menuId": "10824",
  "restaurantId": "10824",
  "actionLinkUrl": "https://www.rwgpartnerwebsite.com/foodorderdelivery/merchant_foepa_3"
}

ServiceArea

Describes the geographical region in which food can be delivered. This entity is required to implement if the associated Service entity has serviceType set to "DELIVERY".

The following table lists the properties for the ServiceArea type:

Property Type Description
@type Const

Required.

Value: ServiceArea

@id String

Required.

A unique identifier of the service area.

Example: service_area_1

serviceId List<String>

Required.

The @id value of the Service entity correlated to this ServiceArea entity.

Example: [ "service_1" ]

dateModified ISO Timestamp

The last modified date and time of the ServiceArea entity feed in ISO timestamp format but with type String.

Example: 2017-01-02T00:00:00-07:00

exclude Boolean

Exclude this service area from the total delivery region. For example, a zip code can be excluded from a larger polygon area.

Exactly one of the following groups of properties is required.
polygon Group 1 List<String>

A polygon or multipolygon expressed as a series of three or more space delimited points. It is recommended that the first and last points be the same, but it is not required. Each point in a polygon or multipolygon is defined by a latitude point followed by a longitude point. You also must specify the points in a counter-clockwise direction.

Example: [ "37.806000 -122.425592 37.775849 -122.419043 37.795547 -122.394046 37.808747" ]

geoMidpointLatitude Group 2 Number

Indicates the latitude coordinate at the center of the CIRCLE area.

Example: 37.806000

geoMidpointLongitude Group 2 Number

Indicates the longitude coordinate at the center of the CIRCLE area.

Example: -122.425592

geoRadius Group 2 Integer

Indicates the approximate radius (in meters) of the CIRCLE area.

Example: 10000

postalCode Group 3 String

Indicates the postal code.

Example: 91234

addressCountry Group 3 String

Indicates the two-letter ISO 3166-1 alpha-2 country code

Example: US

The following example shows a ServiceArea element:

Example

{
  "@type": "ServiceArea",
  "@id": "28427",
  "serviceId": [
    "10824/delivery"
  ],
  "polygon": [
    "37.4818562 -122.25801303 37.48247836 -122.25801303 37.48434484 -122.25621319 37.48621133 -122.25424681 37.49181077 -122.24704744 37.49305509 -122.24541414 37.49429942 -122.2436143 37.49803238 -122.23821477 37.49803238 -122.21285044 37.49367726 -122.15885517 37.49056645 -122.15722187 37.48621133 -122.15542202 37.48558917 -122.15525548 37.4818562 -122.15525548 37.43191387 -122.17865343 37.43191387 -122.23444854"
  ]
}

OperationHours (required)

Describes the ordering window in which users can access the flow and place ASAP or future orders. Implementation of OperationHours is required, and defaults to representing operation at all hours on all days.

The OperationHours opens and closes attributes specify the opening and closing times for the online system that allows users to place orders. Within those online system hours, use ServiceHours to specify opening and closing hours for when users' orders can be fulfilled.

Times must be specified in the local time for the service. Do not include a time zone in an opens value. If a time zone is specified, Google ignores this information. For more information, see DateTime and Time formats.

The following table lists the properties for the OperationHours type:

Property Type Description
@type Const

Required.

Value: OperationHours

@id String

Required.

A unique identifier to the entity describing the ordering window which users can access the flow and place ASAP/future orders.

Example: operation_hour_1

serviceId List<String>

Required.

The @id value of the Service entity correlated to this OperationHours entity.

Example: [ "service_1" ]

opens ISO Time (Local)

Indicates the specific time of day in ISO format starting from which users' orders can be placed.

Example: T00:00

closes ISO Time (Local)

Indicates the specific time of day in ISO format beyond which users' orders cannot be placed.

Example: T16:00

dayOfWeek List<DayOfWeek>

A list of the day(s) of the week for which these operation hours are valid. Acceptable values are "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY", and "SUNDAY".

Example: [ "MONDAY", "TUESDAY" ]

validFrom ISO Timestamp

Required when isSpecialHour = true.

An ISO Timestamp indicating the beginning time of the ordering window which users can access the flow and place ASAP/future orders.

Example: 2017-01-01T00:00:00-07:00

validThrough ISO Timestamp

Required when isSpecialHour = true.

An ISO Timestamp indicating the ending time of the ordering window beyond which users cannot access the flow and place ASAP/future orders.

Example: 2017-01-02T00:00:00-07:00

isSpecialHour Boolean

A boolean indicating if the OperationHours is for special hours. Acceptable values are "false" and "true".

Example: False

dateModified ISO Timestamp

The last modified date and time of the OperationHours entity feed in ISO timestamp format but with type String.

Example: 2017-01-02T00:00:00-07:00

The following example shows a OperationHours element:

Example 1

{
  "@type": "OperationHours",
  "@id": "10824/deliveryOh",
  "serviceId": [
    "10824/delivery"
  ],
  "isSpecialHour": false
}

Example 2

{
  "@type": "OperationHours",
  "@id": "10824/takeoutOh",
  "serviceId": [
    "10824/takeout"
  ],
  "isSpecialHour": false
}

ServiceHours (required)

Describes the fulfillment window in which users can choose fulfillment slots (ASAP or future slots). Implementation of ServiceHours is required.

The OperationHours opens and closes attributes specify the opening and closing times for the online system that allows users to place orders. Within those online system hours, use ServiceHours to specify opening and closing hours for when users' orders can be fulfilled.

Times must be specified in the local time for the service. Do not include a time zone in an opens value. If a time zone is specified, Google ignores this information. For more information, see DateTime and Time formats.

The following table lists the properties for the ServiceHours type:

Property Type Description
@type Const

Required.

Value: ServiceHours

@id String

Required.

A unique identifier of the entity describing the fulfillment window which users can choose fulfillment slots i.e. ASAP or future slots.

Example: service_hour_1

orderType OrderType

Required.

A String indicating if the service hours apply to ASAP or advanced orders. Acceptable values are "ASAP" and "ADVANCE".

Example: ASAP

serviceId List<String>

Required.

The @id value of the Service entity correlated to this ServiceHours entity.

Example: [ "service_1" ]

operationHoursId List<String>

Required when isSpecialHour = false.

The @id value of the OperationHours entity correlated to this ServiceHours entity.

Example: [ "operation_hour_1" ]

opens ISO Time (Local)

Indicates the specific time of day in ISO format starting from which users' orders can be fulfilled.

Example: T00:00

closes ISO Time (Local)

Indicates the specific time of day in ISO format beyond which users' orders cannot be fulfilled.

Example: T16:00

dayOfWeek List<DayOfWeek>

A list of the day(s) of the week for which these operation hours are valid.

Example: [ "MONDAY", "TUESDAY" ]

validFrom ISO Timestamp

Required when isSpecialHour = true.

An ISO Timestamp indicating the beginning time of the ordering window which users can access the flow and place ASAP/future orders.

Example: 2017-01-01T00:00:00-07:00

validThrough ISO Timestamp

Required when isSpecialHour = true.

An ISO Timestamp indicating the ending time of the ordering window beyond which users cannot access the flow and place ASAP/future orders.

Example: 2017-01-02T00:00:00-07:00

isSpecialHour Boolean

A boolean indicating if the OperationHours is for special hours. Acceptable values are "false" and "true".

Example: False

leadTimeMin Integer

Minimum estimated delivery/pickup time, in minutes, once the ASAP order has been placed. We strongly recommend that you set this property.

Example: 60

leadTimeMax Integer

Maximum estimated delivery/pickup time, in minutes, once the ASAP order has been placed. We strongly recommend that you set this property.

Example: 70

advanceBookingRequirementMin Integer

Required when orderType = "ADVANCE".

The minimum number of minutes from the ordering time when the advance order can be fulfilled. For example, if an advance order needs at least 60 minutes to be fulfilled, then the advanceBookingRequirementMin is 60.

Example: 15

advanceBookingRequirementMax Integer

Required when orderType = "ADVANCE".

The maximum number of minutes from the ordering time when the advance order can be fulfilled. For example, if an advance order is restricted from being fulfilled more than 2 days later, then the advanceBookingRequirementMax value is 2880.

Example: 10080

advanceBookingSlotInterval String

Required when orderType = "ADVANCE".

Interval between two successive advance booking slot times. For example: If opens and closes are 8am and 8pm and the advanceBookingSlotInterval is 15 minutes, then the user can choose fulfillment times of 8am, 8:15am, 8:30am, 8:45am, and so on until 8pm. Duration must be specified as an ISO Period duration. For example: "PT15M" means 15 minute intervals.

Example: PT15M

dateModified ISO Timestamp

The last modified date and time of the ServiceHours entity feed in ISO timestamp format but with type String.

Example: 2017-01-02T00:00:00-07:00

The following example shows a ServiceHours element:

Example 1

{
  "@type": "ServiceHours",
  "@id": "613741/delivery",
  "orderType": "ASAP",
  "serviceId": [
    "10824/delivery"
  ],
  "opens": "T00:00",
  "closes": "T00:00",
  "isSpecialHour": true,
  "validFrom": "2017-12-25T00:00:00-07:00",
  "validThrough": "2017-12-25T23:59:00-07:00"
}

Example 2

{
  "@type": "ServiceHours",
  "@id": "10824/takeoutSh_0",
  "orderType": "ASAP",
  "serviceId": [
    "10824/takeout"
  ],
  "operationHoursId": [
    "10824/takeoutOh"
  ],
  "opens": "11:00",
  "closes": "21:00",
  "dayOfWeek": [
    "MONDAY",
    "TUESDAY",
    "WEDNESDAY",
    "THURSDAY"
  ],
  "isSpecialHour": false
}

Fee

Describes a fee. If the associated Service entity has serviceType set to "DELIVERY", then a Fee with feeType set to "DELIVERY" is required.

The following table lists the properties for the Fee type:

Property Type Description
@type Const

Required.

Value: Fee

@id String

Required.

A unique identifier of the entity describing the fee.

Example: service_fee_1

serviceId List<String>

Required.

The @id value of the Service entity correlated to this Fee entity.

Example: [ "service_1" ]

feeType FeeType

Required.

A String indicating if the fee applies to delivery or service orders. Acceptable values are "DELIVERY" and "SERVICE".

Example: DELIVERY

priceCurrency String

Required.

The 3-letter ISO 4217 currency code.

Example: USD

basePrice Number

Base price of the fee, applicable when percentageOfCart or pricePerMeter is used.

Example: 2.0

minPrice Number

Min fee, caps fee value when percentageOfCart or pricePerMeter is used.

Example: 2.0

maxPrice Number

Max fee, caps fee value when percentageOfCart or pricePerMeter is used.

Example: 10.0

eligibleRegion List<String>

The @id of the ServiceArea for the geo-political region(s) for which the fee is valid. Use this property only if delivery fees vary by the region.

Example: [ "service_area_1" ]

eligibleTransactionVolumeMin Number

The minimum transaction volume, in a monetary unit, for which this fee specification is valid.

Example: 50

eligibleTransactionVolumeMax Number

The maximum transaction volume, in a monetary unit, for which this fee specification is valid. For example, the fee does not apply if above a certain order volume.

Example: 10

validFrom ISO Timestamp

An ISO Timestamp indicating the beginning time of when the fee is valid.

Example: 2017-01-01T00:00:00-07:00

validThrough ISO Timestamp

An ISO Timestamp indicating the ending time beyond which the fee is invalid.

Example: 2017-01-02T00:00:00-07:00

dateModified ISO Timestamp

The last modified date and time of the Fee entity feed in ISO timestamp format but with type String.

Example: 2017-01-02T00:00:00-07:00

priority Number

A positive, non-zero value. When more than 1 fee applies to the user's cart, the highest priority fee will take precedence over the lower ones. If this field is provided, the priority will always take precedence over a calculated priority.

Example: 3

Exactly one of the following groups of properties is required.
price Group 1 Number

Price of the fee. If price is not fixed, minPrice and maxPrice can be provided instead of price.

Example: 1.5

percentageOfCart Group 2 Number

Fee in percentage of the cart value. Acceptable values are float values between 0 and 100 inclusive.

Example: 9.00

pricePerMeter Group 3 Number

Fee per meter for radial distance from user. e.g. If distance to user is 5km and rate is $0.001 then user fee will be $5.

Example: 0.001

The following example shows a Fee element:

Example 1

{
  "@type": "Fee",
  "@id": "28427",
  "serviceId": [
    "10824/delivery"
  ],
  "feeType": "DELIVERY",
  "priceCurrency": "USD",
  "eligibleRegion": [
    "28427"
  ],
  "eligibleTransactionVolumeMin": 20,
  "price": 5
}

Example 2

{
  "@type": "Fee",
  "@id": "28427",
  "serviceId": [
    "10824/delivery"
  ],
  "feeType": "DELIVERY",
  "priceCurrency": "USD",
  "eligibleRegion": [
    "28427"
  ],
  "eligibleTransactionVolumeMin": 20,
  "pricePerMeter": 0.0005,
  "basePrice": 4
}

Example 3

{
  "@type": "Fee",
  "@id": "28427",
  "serviceId": [
    "10824/delivery"
  ],
  "feeType": "DELIVERY",
  "priceCurrency": "USD",
  "eligibleRegion": [
    "28427"
  ],
  "eligibleTransactionVolumeMin": 20,
  "pricePerMeter": 0.0005,
  "basePrice": 4,
  "minPrice": 5,
  "maxPrice": 50
}

Example 4

{
  "@type": "Fee",
  "@id": "28427",
  "serviceId": [
    "10824/delivery"
  ],
  "feeType": "DELIVERY",
  "priceCurrency": "USD",
  "eligibleRegion": [
    "28427"
  ],
  "eligibleTransactionVolumeMin": 20,
  "percentageOfCart": 5,
  "basePrice": 4
}

Example 5

{
  "@type": "Fee",
  "@id": "28427",
  "serviceId": [
    "10824/delivery"
  ],
  "feeType": "DELIVERY",
  "priceCurrency": "USD",
  "eligibleRegion": [
    "28427"
  ],
  "eligibleTransactionVolumeMin": 20,
  "percentageOfCart": 5,
  "basePrice": 4,
  "minPrice": 5,
  "maxPrice": 50
}

A required entity to implement. Describes a menu.

The following table lists the properties for the Menu type:

Property Type Description
@type Const

Required.

Value: Menu

@id String

Required.

A unique identifier of the menu.

Example: menu_1

name String

The text that can identify the Menu when a user is browsing the menu.

Example: Foo

disclaimer String

Disclaimer for the menu. For example, nutritional information disclosure and allergen disclosure.

Example: Items may contain peanuts.

disclaimerUrl Url

URL pointing to a page providing more details on the disclaimer.

dateModified ISO Timestamp

The last modified date and time of the Menu entity feed in ISO timestamp format but with type String.

Example: 2017-01-02T00:00:00-07:00

The following example shows a Menu element:

{
  "@type": "Menu",
  "@id": "10824"
}

An optional entity to implement. Describes a particular section in the menu.

The following table lists the properties for the MenuSection type:

Property Type Description
@type Const

Required.

Value: MenuSection

@id String

Required.

A unique identifier of the menu section.

Example: menu_section_1

menuId List<ReverseReference>

The @id value of the Menu entity correlated to this MenuSection entity.

Example: [ { "@id": "menu_id", "displayOrder": 4 } ]

menuSectionId List<String>

A list of the @id values of the child MenuSection entities that correspond to this MenuSection entity.

Important: You must only use one of menuSectionId or parentMenuSectionId(in child) reference.

Example: [ "child_menu_section_1", "child_menu_section_2" ]

parentMenuSectionId List<ReverseReference>

The @id value of the parent MenuSection entity correlated to this MenuSection entity.

Important: You must only use one of parentMenuSectionId or menuSectionId(in parent) reference.

Example: [ { "@id": "parent_menu_section_id", "displayOrder": 4 } ]

name String

Required.

The text that can identify the MenuSection when a user is browsing the menu.

Example: Foo

description String

A description of the menu section.

Example: Example menu section description that helps users.

image Url

The URL of an image of the menu section.

Example: https://provider.com/someimage

menuItemId List<String>

A list of the @id values of the MenuItem entities that correspond to this MenuSection entity.

Important: You must only use one of menuItemId or MenuItem.parentMenuSectionId reference.

Example: [ "menu_item1", "menu_item2" ]

parentMenuItemId List<ReverseReference>

A list of the @id values of the parent MenuItem entities that correspond to this MenuSection entity.

Important: You must only use one of parentMenuItemId or MenuItem.menuAddOnId reference.

Example: [ { "@id": "parent_menu_item_id", "displayOrder": 4 } ]

parentMenuItemOptionId List<ReverseReference>

A list of the @id values of the parent MenuItemOption entities that correspond to this MenuSection entity.

Important: You must only use one of parentMenuItemOptionId or MenuItemOption.menuAddOnId reference.

Example: [ { "@id": "parent_menu_item_option_id", "displayOrder": 4 } ]

eligibleQuantityMax Integer

The maximum number of addon which can be selected in the add-on section.

Example: 5

eligibleQuantityMin Integer

The minimum number of addon which should be selected in the add-on section.

Example: 1

defaultItemId List<String>

A list of @id referencing MenuItem entities to be pre-selected by default for users in the add-on MenuSection. Users can change the final selections. If defaultItemId is not specified, no MenuItem is pre-selected.

Example: [ "item1", "item2" ]

availabilityId List<String>

The @id values of Availability entities which provide details on when the menu section is available.

Example: [ "menu_availability_1" ]

numberOfFreeAddOns Integer

Indicates the number of add-ons a user can select at no charge. Only valid for add-on menu sections.

Example: 3

dateModified ISO Timestamp

The last modified date and time of the MenuSection entity feed in ISO timestamp format but with type String.

Example: 2017-01-02T00:00:00-07:00

applicableServiceType List<ServiceType>

The service that this MenuSection is applicable to. Default assumes a MenuSection applicable to all.

offeredById List<String>

The @id values of Restaurant entities which this MenuSection is available at. Default assumes a MenuSection is available at all locations.

Example: [ "restaurant_id_1", "restaurant_id_55" ]

The following example shows a MenuSection element:

{
  "@type": "MenuSection",
  "@id": "853705",
  "menuId": [
    {
      "@id": "10824",
      "displayOrder": 853705
    }
  ],
  "menuSectionId": [
    12345,
    43645
  ],
  "name": "Pasta",
  "applicableServiceType": [
    "TAKEOUT"
  ],
  "offeredById": [
    "italian_restaurant_location_1"
  ]
}
{
  "@type": "MenuSection",
  "@id": "427484",
  "menuId": [
    {
      "@id": "4287",
      "displayOrder": 964376
    }
  ],
  "menuItemId": [
    46784,
    42728
  ],
  "name": "Burger",
  "applicableServiceType": [
    "TAKEOUT",
    "DELIVERY"
  ]
}
{
  "@type": "MenuSection",
  "@id": "3138486",
  "name": "Choose a side:",
  "parentMenuItemId": [
    {
      "@id": "6680295",
      "displayOrder": 3138486
    }
  ],
  "eligibleQuantityMax": "5",
  "numberOfFreeAddOns": "2"
}
{
  "@type": "MenuSection",
  "@id": "3138482",
  "name": "Additional Pizza Toppings",
  "parentMenuItemId": [
    {
      "@id": "6680246",
      "displayOrder": 3138482
    }
  ],
  "eligibleQuantityMax": "3"
}

Availability

An optional entity to implement. Describes the time period during which a MenuSection entity is served.

The following table lists the properties for the Availability type:

Property Type Description
@type Const

Required.

Value: Availability

@id String

Required.

A unique identifier of the entity describing the menu section availability.

Example: menu_section_avail_1

availabilityStarts ISO Time (Local)

The ISO Timestamp indicating the starting time in which the menu section availability is valid.

Example: T00:00

availabilityEnds ISO Time (Local)

The ISO Timestamp indicating the ending time beyond which the menu section availability is invalid.

Example: T16:00

availableDay List<DayOfWeek>

A list of the day(s) of the week for which the menu section availability is valid.

Example: [ "MONDAY", "TUESDAY" ]

validFrom ISO Timestamp

An ISO Timestamp indicating the beginning time in which the menu section availability is valid.

Example: 2017-01-01T00:00:00-07:00

validThrough ISO Timestamp

An ISO Timestamp indicating the ending time beyond which the menu section availability is invalid.

Example: 2017-01-02T00:00:00-07:00

dateModified ISO Timestamp

The last modified date and time of the Availability entity feed in ISO timestamp format but with type String.

Example: 2017-01-02T00:00:00-07:00

The following example shows a Availability element:

Example

{
  "@type": "Availability",
  "@id": "85343705",
  "availabilityStarts": "06:00",
  "availabilityEnds": "22:30",
  "availableDay": [
    "SATURDAY",
    "SUNDAY"
  ]
}

A required entity to implement. Describes an item in a Menu entity.

The following table lists the properties for the MenuItem type:

Property Type Description
@type Const

Required.

Value: MenuItem

@id String

Required.

A unique identifier of the menu item.

Example: menu_item_1

name String

Required.

The text that can identify the MenuItem when a user is browsing the menu.

Example: Foo

description String

A description of the menu item.

Example: Foo

image Url

A URL of an image of the menu item.

Example: http://someprovider.com/someimage

parentMenuSectionId List<ReverseReference>

A list of the @id values of the parent MenuSection entities that correspond to this MenuItem entity.

Important: You must only use one of parentMenuSectionId or MenuSection.menuItemId reference.

Example: { "@id": "menu_section_parent_id", "displayOrder": 4 }

menuAddOnId List<String>

A list of the @id values of the MenuSection entities that are from the add on section which correspond to this MenuItem entity.

Important: You must only use one of menuAddOnId or MenuSection.parentMenuItemId reference.

Example: menu_addon_1

nutrition NutritionInformation

Nutrition information for the dish, most notably calories.

Example: { "calories": "120-150 Cal" }

allergen List<Allergen>

Allergens of this MenuItem.

Example: [ { "allergenType": "PEANUTS", "levelOfContainment": "MAY_CONTAIN" } ]

additive List<Additive>

Additives of this MenuItem.

Example: [ { "additiveName": "Sodium nitrite", "levelOfContainment": "CONTAINS" } ]

suitableDiet List<RestrictedDiet>

The dish complies with the described dietary restriction.

Example: [ "DIABETIC", "GLUTEN_FREE" ]

depositInfo DepositInfo

Packaging and recycling information of this MenuItem.

Example: { "depositCode": "RECYCLABLE", "depositValue": "0.05", "depositValueCurrency": "USD" }

numberOfServings Integer

Number of servings available in a given menu item.

Example: 2

dateModified ISO Timestamp

The last modified date and time of the MenuItem entity feed in ISO timestamp format but with type String.

Example: 2017-01-02T00:00:00-07:00

The following example shows a MenuItem element:

{
  "@type": "MenuItem",
  "@id": "18931508",
  "name": "Sauteed Baby Spinach",
  "parentMenuSectionId": [
    {
      "@id": "3138479",
      "displayOrder": 18931508
    }
  ]
}
{
  "@type": "MenuItem",
  "@id": "18931508",
  "name": "Hamburger",
  "parentMenuSectionId": [
    {
      "@id": "4645747",
      "displayOrder": 12345
    }
  ],
  "nutrition": {
    "calories": "400 cal"
  },
  "allergen": [
    {
      "allergenType": "GLUTEN",
      "levelOfContainment": "CONTAINS"
    }
  ],
  "additive": [
    {
      "additiveName": "Sodium nitrite",
      "levelOfContainment": "CONTAINS"
    }
  ],
  "suitableDiet": [
    "DIABETIC",
    "LOW_FAT"
  ]
}

An optional entity to implement. Describes choices that a user would be required to make when selecting a dish/combo. The user must select an option, otherwise the order is considered invalid (e.g. the user must choose small, medium, or large for a pizza).

The following table lists the properties for the MenuItemOption type:

Property Type Description
@type Const

Value: MenuItemOption

@id String

Required.

A unique identifier of the menu item option.

Example: menu_item_1_option

menuItemId ReverseReference

Required.

The @id value of the MenuItem entity correlated to this MenuItemOption entity.

Example: { "@id": "menu_item_1", "displayOrder": 4 }

optionType OptionType

A String indicating if the menu item option is categorized on size, option, or pizza side. Acceptable values are "SIZE", "OPTION", and "PIZZA_SIDE". "SIZE": Size of the MenuItemOption. For example, small, medium, or large. "OPTION": Any variation other than size (e.g. a dish that comes either as a salad or a sandwich). If you can't distinguish between "SIZE" and "OPTION", then use "OPTION". "PIZZA_SIDE": Specific to pizzas: example being this MenuItemOption is only valid for a portion/whole pizza (e.g. mushroom toppings on the left side, right side, or whole pizza).

Example: SIZE

value String or PizzaSide

Required when optionType is defined.

A string value or enum value. Enum values are specific to PIZZA_SIDE option type.

applicableParentOptionValue String

A String containing the value of parent item’s option value for which this option is available.

Example: Small

menuAddOnId List<String>

A list of the @id values of the MenuSection entities that are from the add on section which correspond to this MenuItemOption entity.

Important: You must only use one of menuAddOnId or MenuSection.parentMenuItemId reference.

Example: menuAddOnId

nutrition NutritionInformation

Nutrition information for the dish, most notably calories.

Example: { "calories": "120-150 Cal" }

allergen List<Allergen>

Allergens of this MenuItem.

Example: { "allergenType": "PEANUTS", "levelOfContainment": "MAY_CONTAIN" }

additive List<Additive>

Additives of this MenuItem.

Example: { "additiveName": "Sodium nitrite", "levelOfContainment": "CONTAINS" }

depositInfo DepositInfo

The packaging and recycling information of this MenuItem.

Example: { "depositCode": "RECYCLABLE", "depositValue": "0.05", "depositValueCurrency": "USD" }

numberOfServings Integer

Number of servings available in a given menu item option.

Example: 2

dateModified ISO Timestamp

The last modified date and time of the MenuItemOption entity feed in ISO timestamp format but with type String.

Example: 2017-01-02T00:00:00-07:00

The following example shows a MenuItemOption element:

{
  "@type": "MenuItemOption",
  "@id": "56177944",
  "menuItemId": {
    "@id": "18930213",
    "displayOrder": 1234
  },
  "optionType": "PIZZA_SIDE",
  "value": "PIZZA_SIDE_LEFT"
}
{
  "@type": "MenuItemOption",
  "@id": "56177944",
  "menuItemId": {
    "@id": "18930213",
    "displayOrder": 1234
  },
  "applicableParentOptionValue": "Small Pizza"
}

A required entity to implement. Describes an offer for a MenuItem or MenuItemOption entity.

The following table lists the properties for the MenuItemOffer type:

Property Type Description
@type Const

Required.

Value: MenuItemOffer

@id String

Required.

A unique identifier of the menu item offer.

Example: menu_item_offer

sku String

Required.

An identifier of the menu item offer. The sku values could be different or the same across multiple menu item offer entities. The sku value will be set in order when we make an API call to you.

Example: Menu_item_offer_sku

price Number

Required.

Price of the menu item offer.

Example: 2.5

priceCurrency String

Required.

The 3-letter ISO 4217 currency code.

Example: USD

availabilityId List<String>

The @id values of Availability entities which provide details on when the menu item offer is available.

Example: [ "menu_availability_1" ]

eligibleQuantityMin Number

The minimum ordering quantity for which the MenuItemOffer is valid.

Example: 1

eligibleQuantityMax Number

The maximum ordering quantity for which the MenuItemOffer is valid.

Example: 25

inventoryLevel Number

The current approximate inventory level for the item or items corresponding to this MenuItemOffer.

Example: 10

dateModified ISO Timestamp

The last modified date and time of the MenuItemOffer entity feed in ISO timestamp format but with type String.

Example: 2017-01-02T00:00:00-07:00

applicableServiceType List<ServiceType>

The service that this MenuItemOffer is applicable to. Default assumes a MenuItemOffer applicable to all.

offeredById List<String>

The @id values of Restaurant entities which this MenuItemOffer is available at. Default assumes a MenuItemOffer is available at all locations.

Example: [ "restaurant_id_5", "restaurant_id_26" ]

Exactly one of the following groups of properties is required.
menuItemId Group 1 String

The @id value of the MenuItem entity correlated to this MenuItemOffer entity.

Example: menu_item_1

menuItemOptionId Group 2 String

The @id value of the MenuItemOption entity correlated to this MenuItemOffer entity.

Example: menu_item_option_1

The following example shows a MenuItemOffer element:

{
  "@type": "MenuItemOffer",
  "@id": "6680262",
  "sku": "offer-mediterranean-bagel",
  "menuItemId": "896532",
  "price": 15.5,
  "priceCurrency": "USD",
  "applicableServiceType": [
    "DELIVERY"
  ],
  "offeredById": [
    "bagel_shop_location_5"
  ]
}

Common

ReverseReference

The following table lists the properties for the ReverseReference type:

Property Type Description
@id String

Required.

@id of the parent entity.

displayOrder Integer

Required.

Display order of item within the parent.

NutritionInformation

The following table lists the properties for the NutritionInformation type:

Property Type Description
description String

Nutrition information in free text. For example "Contains preservatives".

calories String

The number of calories in Cal, kcal, or kJ, using the following format: value Cal or min-max Cal

Example: 120.34 Cal

sodiumContent String

The number of mg or g of sodium, using the following format: value g or min-max g

Example: 1200 mg

The following example shows a NutritionInformation element:

Example

{
  "calories": "120-150 Cal",
  "sodiumContent": "100 mg"
}

Allergen

The following table lists the properties for the Allergen type:

Property Type Description
allergenType AllergenType

Required.

Type of allergen.

levelOfContainment ContainmentLevel

Level of a given allergen in the menu item.

The following example shows a Allergen element:

Example

{
  "allergenType": "PEANUTS",
  "levelOfContainment": "MAY_CONTAIN"
}

Additive

The following table lists the properties for the Additive type:

Property Type Description
additiveName String

Required.

Name of the additive.

levelOfContainment ContainmentLevel

Level of a given additive in the menu item.

The following example shows a Additive element:

Example

{
  "additiveName": "Sodium nitrite",
  "levelOfContainment": "CONTAINS"
}

DepositInfo

The following table lists the properties for the DepositInfo type:

Property Type Description
depositCode DepositCode

Deposit Code.

depositValue Number

Numerical value of the item's deposit, for example, when recycled.

depositValueCurrency String

Currency of the deposit value

The following example shows a DepositInfo element:

Example

{
  "depositCode": "RECYCLABLE",
  "depositValue": 0.05,
  "depositValueCurrency": "USD"
}

ServingConfig

Serving config for the service used to control various features. e.g. disabling promo widget etc.

The following table lists the properties for the ServingConfig type:

Property Type Description
disableOrderInstructions Boolean

Hides the ability to specify order instructions.

disableMenuItemSpecialInstructions Boolean

Hides the ability to specify special instructions on a menu item.

disableTipWidget Boolean

Hides the tip widget in the 'Place Order' page of the ordering flow.

disablePromoWidget Boolean

Hides the promo widget in the 'Place Order' page of the ordering flow.

menuItemSpecialInstructionsMaxLength Number

Specifies the max number of characters a menu item special instruction can contain.

orderInstructionsMaxLength Number

Specifies the max number of characters an order instruction can contain.

The following example shows a ServingConfig element:

Example 1

{
  "disableMenuItemSpecialInstructions": true
}

Example 2

{
  "disableTipWidget": true,
  "disablePromoWidget": true
}

Example 3

{
  "menuItemSpecialInstructionsMaxLength": 250,
  "orderInstructionsMaxLength": 1000
}

Enums

DayOfWeek

The DayOfWeek type has the following possible values:

  • MONDAY
  • TUESDAY
  • WEDNESDAY
  • THURSDAY
  • FRIDAY
  • SATURDAY
  • SUNDAY

ServiceType

The ServiceType type has the following possible values:

  • DELIVERY
  • TAKEOUT

OrderType

The OrderType type has the following possible values:

  • ASAP
  • ADVANCE

FeeType

The FeeType type has the following possible values:

  • DELIVERY
  • SERVICE

OptionType

The OptionType type has the following possible values:

  • SIZE
  • OPTION
  • PIZZA_SIDE

PizzaSide

The PizzaSide type has the following possible values:

  • PIZZA_SIDE_LEFT
  • PIZZA_SIDE_RIGHT
  • PIZZA_SIDE_WHOLE

AllergenType

Type of allergens per gs1:AllergenTypeCode.

The AllergenType type has the following possible values:

  • ALMONDS
  • ALPHA_ISOMETHYL_IONONE
  • ALCOHOL
  • AMYL_CINNAMAL
  • ANISE_ALCOHOL
  • BARLEY
  • BENZYL_ALCOHOL
  • BENZYL_BENZOATE
  • BENZYL_CINNAMATE
  • BENZYL_SALICYLATE
  • BRAZIL_NUTS
  • BUTYLPHENYL_METHYLPROPIONATE
  • CARROTS
  • CASHEW_NUTS
  • CELERY
  • CEREALS_CONTAINING_GLUTEN
  • CINNAMAL
  • CINNAMYL_ALCOHOL
  • CITRAL
  • CITRONELLOL
  • COCOA
  • CORIANDER
  • CORN
  • COUMARIN
  • CRUSTACEANS
  • EGGS
  • EUGENOL
  • EVERNIA_FURFURACEA
  • EVERNIA_PRUNASTRI
  • FARNESOL
  • FISH
  • GERANIOL
  • GLUTEN
  • HAZELNUTS
  • HEXYL_CINNAMAL
  • HYDROXYCITRONELLAL
  • HYDROXYISOHEXYL_3_CYCLOHEXENE_CARBOXALDEHYDE_ISOEUGENOL_LIMONENE_LINAL
  • KAMUT
  • LACTOSE
  • LUPINE
  • MACADAMIA_NUTS
  • METHYL_2_OCTYNOATE
  • MILK
  • MOLLUSCS
  • MUSTARD
  • NO_DECLARED_ALLERGENS
  • OAT
  • PEANUTS
  • PEAS
  • PECAN_NUTS
  • PISTACHIOS
  • POD_FRUITS
  • QUEENSLAND_NUTS
  • RYE
  • SESAME_SEEDS
  • SOYBEANS
  • SPELT
  • SULPHUR_DIOXIDE
  • TREE_NUTS
  • TREE_NUT_TRACES
  • WALNUTS
  • WHEAT

ContainmentLevel

The ContainmentLevel type has the following possible values:

  • CONTAINS
  • FREE_FROM
  • MAY_CONTAIN

DepositCode

The DepositCode type has the following possible values:

  • REUSABLE
  • RECYCLABLE

DealType

Category of deal to apply the discount to. The category can be the whole cart total or delivery fees.

The DealType type has the following possible values:

  • CART_OFF
  • DELIVERY_OFF

RestrictedDiet

Type of restricted diets per schema.org:RestrictedDiet.

The RestrictedDiet type has the following possible values:

  • DIABETIC
  • GLUTEN_FREE
  • HALAL
  • HINDU
  • KOSHER
  • LOW_CALORIE
  • LOW_FAT
  • LOW_LACTOSE
  • LOW_SALT
  • VEGAN
  • VEGETARIAN