Menu feed

  • The Menu feed spec is defined in protobuffer format but recommends uploading feeds in JSON format.

  • The FoodMenuFeed contains repeated MenuComponents, which can represent a Menu, MenuSection, MenuItem, or MenuItemOption.

  • A Menu represents the top-level catalog of food items and can apply to one or multiple merchants.

  • MenuSections group items on a menu, while MenuItems represent single food or drink items.

  • MenuItemOptions describe choices a user must make for an item, often with associated pricing in an OfferSet.

Definitions

FoodMenuFeed Definition

 message 
  
 FoodMenuFeed 
  
 { 
  
 repeated 
  
 MenuComponent 
  
 data 
  
 = 
  
 1 
 ; 
 } 
  
 message 
  
 MenuComponent 
  
 { 
  
 oneof 
  
 type 
  
 { 
  
 food.menu.v1.Menu 
  
 menu 
  
 = 
  
 1 
 ; 
  
 food.menu.v1.MenuSection 
  
 section 
  
 = 
  
 2 
 ; 
  
 food.menu.v1.MenuItem 
  
 item 
  
 = 
  
 3 
 ; 
  
 food.menu.v1.MenuItemOption 
  
 option 
  
 = 
  
 4 
 ; 
  
 } 
 } 
  
  
 // Top-level catalog of food items offered by a Food establishment. Menu 
 // contains a list of merchant ids and the menu that apply to those merchants. 
 // A Menu can be used to represent single merchant with the menu, or multiple 
 // merchants (typically chain restaurants) with the menus. 
 // (-- LINT.IfChange --) 
 message 
  
 Menu 
  
 { 
  
 option 
  
 features. 
 ( 
 pb.java 
 ) 
 . 
 nest_in_file_class 
  
 = 
  
 YES 
 ; 
  
 // An opaque string from a partner which uniquely identifies the Menu within 
  
 // the partner feed. 
  
 // Required.; 
  
 // The merchants to whom the menu apply. 
  
 // Note: This field is repeated so chain restaurants can share the same menu 
  
 // across multiple locations, each of which is a separate merchant. 
  
 // Required.; 
  
 // The name that can identify the Menu when a user is browsing the menu. 
  
 // Optional. 
  
 TextField 
  
 display_name 
  
 = 
  
 3 
 ; 
  
 // The default language code associated with the text labels contained in the 
  
 // menu. Expects BCP-47 language code, such as "en-US" or "sr-Latn". 
  
 // 
  
 // For more information, see 
  
 // http://www.unicode.org/reports/tr35/#Unicode_locale_identifier. 
  
 // Optional. 
  
 string 
  
 language 
  
 = 
  
 4 
 ; 
  
 // IDs of items contained within this menu. Expects first-level menu items 
  
 // only. 
  
 // Optional.; 
  
 // IDs of sections contained within this menu. Expects first-level menu 
  
 // sections only. 
  
 // Optional.; 
  
 // Timestamp when this Menu or any of its contents was last updated by the 
  
 // restaurant; i.e. a date to be associated with the phrase “accurate as of 
  
 // date”. 
  
 // Optional. 
  
 google.protobuf.Timestamp 
  
 last_merchant_update_time 
  
 = 
 ; 
 } 
  
  
 // A menu section is a grouping of items on a menu. Separate MenuSections are 
 // usually created for each logical grouping of items on a menu. For example, 
 // meal course type (Appetizer, Main, Dessert) and food categories (Burgers, 
 // Drinks) are typical sections. 
 message 
  
 MenuSection 
  
 { 
  
 option 
  
 features. 
 ( 
 pb.java 
 ) 
 . 
 nest_in_file_class 
  
 = 
  
 YES 
 ; 
  
 // An opaque string from a partner that uniquely identifies the MenuSection 
  
 // within the partner feed. 
  
 // Required.; 
  
 // The name that can identify the MenuSection when a user is browsing the 
  
 // menu. 
  
 // Required.; 
  
 // A description of the menu section. 
  
 // Optional. 
  
 TextField 
  
 description 
  
 = 
  
 3 
 ; 
  
 // Image(s) of the menu section. 
  
 // Optional. 
  
 repeated 
  
 Image 
  
 images 
  
 = 
  
 4 
 ; 
  
 // IDs of MenuItem entities that correspond to this MenuSection entity. A 
  
 // section is expected to have at least 1 item if it does not contain any 
  
 // sub-sections. 
  
 // Optional.; 
  
 // Child MenuSections (sub-sections) that correspond to this MenuSection 
  
 // entity. 
  
 // Optional.; 
 } 
  
  
 // Represents a single food or drink item offered by a Food establishment. 
 message 
  
 MenuItem 
  
 { 
  
 option 
  
 features. 
 ( 
 pb.java 
 ) 
 . 
 nest_in_file_class 
  
 = 
  
 YES 
 ; 
  
 // An opaque string from a partner that uniquely identifies the MenuItem 
  
 // within the partner feed. 
  
 // Required.; 
  
 // The name that can identify the MenuItem when a user is browsing the menu. 
  
 // Required.; 
  
 // A description of the menu item. 
  
 // Optional. 
  
 TextField 
  
 description 
  
 = 
  
 3 
 ; 
  
 // Image(s) of the menu item. 
  
 // Optional. 
  
 repeated 
  
 Image 
  
 images 
  
 = 
  
 4 
 ; 
  
 // Container that specifies a list of options available on an item. 
  
 message 
  
 MenuItemOptionSet 
  
 { 
  
 // IDs of menu item options that are applicable to this menu item. 
  
 // Required.; 
  
 } 
  
 // The menu item must either have a price, or a set of menu item options. 
  
 // Required. 
  
 oneof 
  
 pricing 
  
 { 
  
 // Available offers to purchase this food item. 
  
 OfferSet 
  
 offer_set 
  
 = 
  
 6 
 ; 
  
 // Available options for this menu item. 
  
 MenuItemOptionSet 
  
 menu_item_option_set 
  
 = 
  
 7 
 ; 
  
 } 
  
 // Attributes about this menu item. 
  
 // Optional. 
  
 MenuItemAttributes 
  
 item_attributes 
  
 = 
  
 8 
 ; 
 } 
  
  
 // 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). 
 message 
  
 MenuItemOption 
  
 { 
  
 option 
  
 features. 
 ( 
 pb.java 
 ) 
 . 
 nest_in_file_class 
  
 = 
  
 YES 
 ; 
  
 // An opaque string from a partner that uniquely identifies the 
  
 // MenuItemOption within the partner feed. 
  
 // Required.; 
  
 // Option property and value e.g. Size: Small. 
  
 // Required.; 
  
 // Available offers to purchase this menu item option. 
  
 // Required.; 
  
 // Attributes about this menu item option. 
  
 // Optional. 
  
 MenuItemAttributes 
  
 item_attributes 
  
 = 
  
 5 
 ; 
 } 
  
 // Describes attributes about a particular menu item or option. 
 message 
  
 MenuItemAttributes 
  
 { 
  
 // Number of servings available in a given menu item. 
  
 // Optional. 
  
 int32 
  
 number_of_servings 
  
 = 
  
 1 
 ; 
  
 // Describes all the nutritional information of the item, e.g. calories, fat 
  
 // content. 
  
 // Optional. 
  
 NutritionInformation 
  
 nutrition_information 
  
 = 
  
 2 
 ; 
  
 // The dietary restrictions that this menu item complies with. 
  
 // Optional. 
  
 repeated 
  
 DietaryRestriction 
  
 suitable_diets 
  
 = 
  
 3 
 ; 
  
 // Additives of this menu item. 
  
 // Optional. 
  
 repeated 
  
 Additive 
  
 additive 
  
 = 
  
 4 
 ; 
  
 // Allergens of this menu item. 
  
 // Optional. 
  
 repeated 
  
 Allergen 
  
 allergen 
  
 = 
  
 5 
 ; 
  
 // Packaging and recycling information of this menu item. 
  
 // Optional. 
  
 DepositInfo 
  
 packaging_deposit_info 
  
 = 
  
 6 
 ; 
 } 
  

OfferSet Definition

  
 // Container for a list of offers available on a menu item / option. 
 // Only one offer should be applicable/valid at one particular time. 
 // For example, a drink can have 2 offers where one is applicable in the morning 
 // while the other is applicable in the evening during happy hours. 
 message 
  
 OfferSet 
  
 { 
  
 option 
  
 features. 
 ( 
 pb.java 
 ) 
 . 
 nest_in_file_class 
  
 = 
  
 YES 
 ; 
  
 // List of possible offers. 
  
 // Required.; 
 } 
  

Offer Definition

  
 // Represents pricing and availability information for MenuItems and 
 // MenuItemOptions. 
 message 
  
 Offer 
  
 { 
  
 option 
  
 features. 
 ( 
 pb.java 
 ) 
 . 
 nest_in_file_class 
  
 = 
  
 YES 
 ; 
  
 // Monetary value of the menu item/option on sale. 
  
 // Required. 
  
 // Note that nanos are 1e-9 of a unit. 
  
 // To display $1.00 set currency_code='USD', units=1 and nanos=0. 
  
 // To display $9.99 set currency_code='USD', units=9 and nanos=900000000. 
  
 // To display $0.01 set currency_code='USD', units=0 and nanos=10000000. 
  
 // Valid inputs are 
  
 //   Valid currency code units >0, nanos >0: 
  
 //     price {currency_code: 'USD’, units: 100, nanos: 1000000} 
  
 //   Valid currency code units >0, no nanos specified: 
  
 //     price {currency_code: 'USD’, units: 100} 
  
 //   Valid currency code, no units specified, nanos>0: 
  
 //     price {currency_code: 'USD’, nanos: 1000000} 
  
 //   Empty Price proto (will show no price in the UI): 
  
 //     price {} 
  
 // The following cases are invalid and will result in no price being shown in 
  
 // the menu: 
  
 //   Price with only currency code: 
  
 //     price {currency_code: 'USD’} 
  
 //   Price with currency code and unit = 0 and nano = 0: 
  
 //     price {currency_code: 'USD’, units: 0, nanos: 0} 
  
 // The following cases are invalid and will result in the menu item being 
  
 // dropped: 
  
 //   Price with no currency code but with unit or nanos or both: 
  
 //     price {units: 100, nanos: 1000000} 
  
 //     price {units: 100} 
  
 //     price {nanos: 1000000} 
  
 //   Price with invalid currency code but with unit or nanos or both: 
  
 //     price {currency_code: 'gXYZ’, units: 100, nanos: 1000000} 
  
 //     price {currency_code: 'gXYZ’, units: 100} 
  
 //     price {currency_code: 'gXYZ’, nanos: 1000000} 
  
 //   Price with currency code but invalid units or nanos 
  
 //     price {currency_code: 'USD’, units: 100, nanos: -100} 
  
 //     price {currency_code: 'USD’, units: -100, nanos: 100}; 
 } 
  

TextField Definition

 // A text payload that contains one or more localized values. 
 message 
  
 TextField 
  
 { 
  
 // Per-locale text values. 
  
 // 
  
 // If there is only one desired locale support, then the language_code within 
  
 // each text is not required to be set and the language will be inferred from 
  
 // the default language of the menu. 
  
 // 
  
 // If there are multiple texts across different locales, then the 
  
 // language_code must be set for each text. The first text in the list is 
  
 // considered the preferred representation. 
  
 // Required.; 
 } 
  

Image Definition

 // Represents an image associated with a menu entity. 
 message 
  
 Image 
  
 { 
  
 // URL containing the raw pixels of the image. 
  
 // Required.; 
 } 
  
 // Describes the property of a menu item option and its value. 
 message 
  
 MenuItemOptionProperty 
  
 { 
  
 // Types of property that the option is for. 
  
 enum 
  
 PropertyType 
  
 { 
  
 // Do not use. The property type is not explicitly specified. 
  
 UNKNOWN_PROPERTY_TYPE 
  
 = 
  
 0 
 ; 
  
 // A generic menu item option property, which is not one of the more 
  
 // specific types below. Use this if the property is not of type 
  
 // SIZE or PIZZA_SIDE. 
  
 OPTION 
  
 = 
  
 1 
 ; 
  
 // Denotes the menu item option property of size (e.g. small, medium, or 
  
 // large). 
  
 SIZE 
  
 = 
  
 2 
 ; 
  
 // Property specific to pizzas. For example: this MenuItemOption is only 
  
 // valid for a portion/whole pizza, such as mushroom toppings on the left 
  
 // side, right side, or whole pizza). 
  
 PIZZA_SIDE 
  
 = 
  
 3 
 ; 
  
 } 
  
 // Well-defined values for the option property. 
  
 enum 
  
 PropertyValue 
  
 { 
  
 // Do not use. The property value is not explicitly specified. 
  
 UNKNOWN_PROPERTY_VALUE 
  
 = 
  
 0 
 ; 
  
 // The MenuItemOption applies only to the left side of a pizza. 
  
 PIZZA_SIDE_LEFT 
  
 = 
  
 1 
 ; 
  
 // The MenuItemOption applies only to the right side of a pizza. 
  
 PIZZA_SIDE_RIGHT 
  
 = 
  
 2 
 ; 
  
 // The MenuItemOption applies to the entire pizza. 
  
 PIZZA_SIDE_WHOLE 
  
 = 
  
 3 
 ; 
  
 } 
  
 // The type of this option property. 
  
 // Required. 
  
 PropertyType 
  
 property_type 
  
 = 
 ; 
  
 // Required. 
  
 oneof 
  
 value 
  
 { 
  
 // A well-defined value for the option property. Currently only expected 
  
 // if the property_type is PIZZA_SIDE.; 
  
 // A free-form text for the value of the property. Expected for 
  
 // property_type OPTION and SIZE.; 
  
 } 
 } 
  

NutritionInformation Definition

  
 // Describes all the nutritional measurements of a MenuItem or add-on. 
 message 
  
 NutritionInformation 
  
 { 
  
 // Describes a single nutritional measurement of the serving of food. 
  
 message 
  
 NutritionValue 
  
 { 
  
 // Describes a closed range for the nutrition value. E.g. "100-150 cal" 
  
 message 
  
 Range 
  
 { 
  
 // The minimum amount of nutrition value. 
  
 // Required. 
  
 double 
  
 min 
  
 = 
 ; 
  
 // The maximum amount of nutrition value. 
  
 // Required. 
  
 double 
  
 max 
  
 = 
 ; 
  
 } 
  
 // Required oneof. 
  
 oneof 
  
 value 
  
 { 
  
 // A single number representing the amount of nutritional value.; 
  
 // A range representing the amount of nutritional value. 
  
 Range 
  
 range 
  
 = 
  
 3 
 ; 
  
 } 
  
 // The unit associated with the amount as specified from the partner. We 
  
 // will validate the feed so that the unit for each type of nutrition value 
  
 // is expected for that type of value. For example, only ENERGY_CALORIES 
  
 // and ENERGY_KILOJOULES are expected on energy property of 
  
 // NutritionalInformation. 
  
 // Required. 
  
 NutritionValueUnit 
  
 unit 
  
 = 
 ; 
  
 } 
  
 // The amount of nutritional energy of the serving of food. Can be defined 
  
 // in Calories or kilojoules. 
  
 // Optional. 
  
 NutritionValue 
  
 energy 
  
 = 
  
 1 
 ; 
  
 // The amount of sodium content, measured in grams or milligrams. 
  
 // Optional. 
  
 NutritionValue 
  
 sodium_content 
  
 = 
  
 2 
 ; 
  
 // The number of servings the nutrition value applies to. 
  
 // Optional.; 
  
 // Nutrition information in free text. For example "Contains preservatives". 
  
 // Optional. 
  
 TextField 
  
 description 
  
 = 
  
 4 
 ; 
 } 
  

DietaryRestriction Definition

  
 // Indicates a dietary restriction or guideline adhered to during 
 // food preparation. 
 enum 
  
 DietaryRestriction 
  
 { 
  
 // Do not use. The dietary restriction is not explicitly specified. 
  
 DIET_UNSPECIFIED 
  
 = 
  
 0 
 ; 
  
 DIET_DIABETIC 
  
 = 
  
 1 
 ; 
  
 DIET_GLUTEN_FREE 
  
 = 
  
 2 
 ; 
  
 DIET_HALAL 
  
 = 
  
 3 
 ; 
  
 DIET_HINDU 
  
 = 
  
 4 
 ; 
  
 DIET_KOSHER 
  
 = 
  
 5 
 ; 
  
 DIET_LOW_CALORIE 
  
 = 
  
 6 
 ; 
  
 DIET_LOW_FAT 
  
 = 
  
 7 
 ; 
  
 DIET_LOW_LACTOSE 
  
 = 
  
 8 
 ; 
  
 DIET_LOW_SALT 
  
 = 
  
 9 
 ; 
  
 DIET_VEGAN 
  
 = 
  
 10 
 ; 
  
 DIET_VEGETARIAN 
  
 = 
  
 11 
 ; 
 } 
  

Additive Definition

 // Additive shown to the user on the MenuItem. An additive preserves or enhances 
 // the quality of the food. 
 message 
  
 Additive 
  
 { 
  
 // Descriptive text of the additive, e.g. "preservatives". 
  
 // Required.; 
  
 // Whether the MenuItem contains, may contain, or is free from this additive. 
  
 // Defaults to contains. 
  
 // Optional. 
  
 ContainmentLevelCode 
  
 containment_level_code 
  
 = 
  
 2 
 ; 
 } 
  

Allergen Definition

 // Allergen shown to the user on the MenuItem. An allergen relates to qualities 
 // of food that causes allergic reactions. 
 message 
  
 Allergen 
  
 { 
  
 // Type of allergen. 
  
 // Required. 
  
 AllergenTypeCode 
  
 allergen_type_code 
  
 = 
 ; 
  
 // Whether the MenuItem contains, may contain, or is free from this allergen. 
  
 // Defaults to contains. 
  
 // Optional. 
  
 ContainmentLevelCode 
  
 containment_level_code 
  
 = 
  
 2 
 ; 
 } 
  

AllergenTypeCode Definition

  
 // Allergen type derived from GS1: http://gs1.org/voc/AllergenTypeCode 
 enum 
  
 AllergenTypeCode 
  
 { 
  
 // Do not use. The allergen type code is not explicitly specified. 
  
 ALLERGEN_TYPE_CODE_UNSPECIFIED 
  
 = 
  
 0 
 ; 
  
 ALLERGEN_TYPE_CODE_ALMONDS 
  
 = 
  
 1 
 ; 
  
 ALLERGEN_TYPE_CODE_ALPHA_ISOMETHYL_IONONE 
  
 = 
  
 2 
 ; 
  
 ALLERGEN_TYPE_CODE_ALCOHOL 
  
 = 
  
 3 
 ; 
  
 ALLERGEN_TYPE_CODE_AMYL_CINNAMAL 
  
 = 
  
 4 
 ; 
  
 ALLERGEN_TYPE_CODE_ANISE_ALCOHOL 
  
 = 
  
 5 
 ; 
  
 ALLERGEN_TYPE_CODE_BARLEY 
  
 = 
  
 6 
 ; 
  
 ALLERGEN_TYPE_CODE_BENZYL_ALCOHOL 
  
 = 
  
 7 
 ; 
  
 ALLERGEN_TYPE_CODE_BENZYL_BENZOATE 
  
 = 
  
 8 
 ; 
  
 ALLERGEN_TYPE_CODE_BENZYL_CINNAMATE 
  
 = 
  
 9 
 ; 
  
 ALLERGEN_TYPE_CODE_BENZYL_SALICYLATE 
  
 = 
  
 10 
 ; 
  
 ALLERGEN_TYPE_CODE_BRAZIL_NUTS 
  
 = 
  
 11 
 ; 
  
 ALLERGEN_TYPE_CODE_BUTYLPHENYL_METHYLPROPIONATE 
  
 = 
  
 12 
 ; 
  
 ALLERGEN_TYPE_CODE_CARROTS 
  
 = 
  
 13 
 ; 
  
 ALLERGEN_TYPE_CODE_CASHEW_NUTS 
  
 = 
  
 14 
 ; 
  
 ALLERGEN_TYPE_CODE_CELERY 
  
 = 
  
 15 
 ; 
  
 ALLERGEN_TYPE_CODE_CEREALS_CONTAINING_GLUTEN 
  
 = 
  
 16 
 ; 
  
 ALLERGEN_TYPE_CODE_CINNAMAL 
  
 = 
  
 17 
 ; 
  
 ALLERGEN_TYPE_CODE_CINNAMYL_ALCOHOL 
  
 = 
  
 18 
 ; 
  
 ALLERGEN_TYPE_CODE_CITRAL 
  
 = 
  
 19 
 ; 
  
 ALLERGEN_TYPE_CODE_CITRONELLOL 
  
 = 
  
 20 
 ; 
  
 ALLERGEN_TYPE_CODE_COCOA 
  
 = 
  
 21 
 ; 
  
 ALLERGEN_TYPE_CODE_CORIANDER 
  
 = 
  
 22 
 ; 
  
 ALLERGEN_TYPE_CODE_CORN 
  
 = 
  
 23 
 ; 
  
 ALLERGEN_TYPE_CODE_COUMARIN 
  
 = 
  
 24 
 ; 
  
 ALLERGEN_TYPE_CODE_CRUSTACEANS 
  
 = 
  
 25 
 ; 
  
 ALLERGEN_TYPE_CODE_EGGS 
  
 = 
  
 26 
 ; 
  
 ALLERGEN_TYPE_CODE_EUGENOL 
  
 = 
  
 27 
 ; 
  
 ALLERGEN_TYPE_CODE_EVERNIA_FURFURACEA 
  
 = 
  
 28 
 ; 
  
 ALLERGEN_TYPE_CODE_EVERNIA_PRUNASTRI 
  
 = 
  
 29 
 ; 
  
 ALLERGEN_TYPE_CODE_FARNESOL 
  
 = 
  
 30 
 ; 
  
 ALLERGEN_TYPE_CODE_FISH 
  
 = 
  
 31 
 ; 
  
 ALLERGEN_TYPE_CODE_GERANIOL 
  
 = 
  
 32 
 ; 
  
 ALLERGEN_TYPE_CODE_GLUTEN 
  
 = 
  
 33 
 ; 
  
 ALLERGEN_TYPE_CODE_HAZELNUTS 
  
 = 
  
 34 
 ; 
  
 ALLERGEN_TYPE_CODE_HEXYL_CINNAMAL 
  
 = 
  
 35 
 ; 
  
 ALLERGEN_TYPE_CODE_HYDROXYCITRONELLAL 
  
 = 
  
 36 
 ; 
  
 ALLERGEN_TYPE_CODE_HYDROXYISOHEXYL_3_CYCLOHEXENE_CARBOXALDEHYDE_ISOEUGENOL_LIMONENE_LINAL 
  
 = 
  
 37 
  
 [ 
 features.enforce_naming_style 
  
 = 
  
 STYLE_LEGACY 
 ]; 
  
 ALLERGEN_TYPE_CODE_KAMUT 
  
 = 
  
 38 
 ; 
  
 ALLERGEN_TYPE_CODE_LACTOSE 
  
 = 
  
 39 
 ; 
  
 ALLERGEN_TYPE_CODE_LUPINE 
  
 = 
  
 40 
 ; 
  
 ALLERGEN_TYPE_CODE_MACADAMIA_NUTS 
  
 = 
  
 41 
 ; 
  
 ALLERGEN_TYPE_CODE_METHYL_2_OCTYNOATE 
  
 = 
  
 42 
  
 [ 
 features.enforce_naming_style 
  
 = 
  
 STYLE_LEGACY 
 ]; 
  
 ALLERGEN_TYPE_CODE_MILK 
  
 = 
  
 43 
 ; 
  
 ALLERGEN_TYPE_CODE_MOLLUSCS 
  
 = 
  
 44 
 ; 
  
 ALLERGEN_TYPE_CODE_MUSTARD 
  
 = 
  
 45 
 ; 
  
 ALLERGEN_TYPE_CODE_NO_DECLARED_ALLERGENS 
  
 = 
  
 46 
 ; 
  
 ALLERGEN_TYPE_CODE_OAT 
  
 = 
  
 47 
 ; 
  
 ALLERGEN_TYPE_CODE_PEANUTS 
  
 = 
  
 48 
 ; 
  
 ALLERGEN_TYPE_CODE_PEAS 
  
 = 
  
 49 
 ; 
  
 ALLERGEN_TYPE_CODE_PECAN_NUTS 
  
 = 
  
 50 
 ; 
  
 ALLERGEN_TYPE_CODE_PISTACHIOS 
  
 = 
  
 51 
 ; 
  
 ALLERGEN_TYPE_CODE_POD_FRUITS 
  
 = 
  
 52 
 ; 
  
 ALLERGEN_TYPE_CODE_QUEENSLAND_NUTS 
  
 = 
  
 53 
 ; 
  
 ALLERGEN_TYPE_CODE_RYE 
  
 = 
  
 54 
 ; 
  
 ALLERGEN_TYPE_CODE_SESAME_SEEDS 
  
 = 
  
 55 
 ; 
  
 ALLERGEN_TYPE_CODE_SOYBEANS 
  
 = 
  
 56 
 ; 
  
 ALLERGEN_TYPE_CODE_SPELT 
  
 = 
  
 57 
 ; 
  
 ALLERGEN_TYPE_CODE_SULPHUR_DIOXIDE 
  
 = 
  
 58 
 ; 
  
 ALLERGEN_TYPE_CODE_TREE_NUTS 
  
 = 
  
 59 
 ; 
  
 ALLERGEN_TYPE_CODE_TREE_NUT_TRACES 
  
 = 
  
 60 
 ; 
  
 ALLERGEN_TYPE_CODE_WALNUTS 
  
 = 
  
 61 
 ; 
  
 ALLERGEN_TYPE_CODE_WHEAT 
  
 = 
  
 62 
 ; 
 } 
  

ContainmentLevelCode Definition

  
 // Indicates the level of containment a food item has of a certain attribute, 
 // such as allergens or additives. 
 enum 
  
 ContainmentLevelCode 
  
 { 
  
 // Do not use. The containment level code is not explicitly specified. 
  
 CONTAINMENT_LEVEL_CODE_UNSPECIFIED 
  
 = 
  
 0 
 ; 
  
 CONTAINMENT_LEVEL_CODE_CONTAINS 
  
 = 
  
 1 
 ; 
  
 CONTAINMENT_LEVEL_CODE_DOES_NOT_CONTAIN 
  
 = 
  
 2 
 ; 
  
 CONTAINMENT_LEVEL_CODE_MAY_CONTAIN 
  
 = 
  
 3 
 ; 
 } 
  

DepositInfo Definition

  
 // Partner provided deposit info to instruct the user how to deposit a food item 
 // or bottle and the value of such deposit. 
 message 
  
 DepositInfo 
  
 { 
  
 // The deposit strategy to employ, e.g. "reusable". 
  
 // Optional. 
  
 DepositCode 
  
 deposit_code 
  
 = 
  
 1 
 ; 
  
 // Value refunded for depositing the item properly. 
  
 // Optional.; 
 } 
  

Menu Feed samples

 { 
  
 "data" 
 : 
  
 [ 
  
 { 
  
 "menu" 
 : 
  
 { 
  
 "menu_id" 
 : 
  
 "menu1" 
 , 
  
 "merchant_ids" 
 : 
  
 [ 
  
 "dining-1" 
  
 ], 
  
 "display_name" 
 : 
  
 { 
  
 "text" 
 : 
  
 [ 
  
 { 
  
 "text" 
 : 
  
 "Menu" 
 , 
  
 "language_code" 
 : 
  
 "en-US" 
  
 } 
  
 ] 
  
 }, 
  
 "language" 
 : 
  
 "en-US" 
 , 
  
 "menu_section_ids" 
 : 
  
 [ 
  
 "appetizers" 
 , 
  
 "dinner" 
  
 ], 
  
 "last_merchant_update_time" 
 : 
  
 { 
  
 "seconds" 
 : 
  
 1692825444 
  
 } 
  
 } 
  
 }, 
  
 { 
  
 "section" 
 : 
  
 { 
  
 "menu_section_id" 
 : 
  
 "appetizers" 
 , 
  
 "display_name" 
 : 
  
 { 
  
 "text" 
 : 
  
 [ 
  
 { 
  
 "text" 
 : 
  
 "Lunch Appetizers" 
 , 
  
 "language_code" 
 : 
  
 "en-US" 
  
 } 
  
 ] 
  
 }, 
  
 "menu_item_ids" 
 : 
  
 [ 
  
 "breadsticks-sauce" 
  
 ] 
  
 } 
  
 }, 
  
 { 
  
 "section" 
 : 
  
 { 
  
 "menu_section_id" 
 : 
  
 "dinner" 
 , 
  
 "display_name" 
 : 
  
 { 
  
 "text" 
 : 
  
 [ 
  
 { 
  
 "text" 
 : 
  
 "Dinner" 
 , 
  
 "language_code" 
 : 
  
 "en-US" 
  
 } 
  
 ] 
  
 }, 
  
 "menu_item_ids" 
 : 
  
 [ 
  
 "meatballs" 
  
 ] 
  
 } 
  
 }, 
  
 { 
  
 "item" 
 : 
  
 { 
  
 "menu_item_id" 
 : 
  
 "breadsticks-sauce" 
 , 
  
 "display_name" 
 : 
  
 { 
  
 "text" 
 : 
  
 [ 
  
 { 
  
 "text" 
 : 
  
 "Bread Sticks & Sauce" 
 , 
  
 "language_code" 
 : 
  
 "en-US" 
  
 } 
  
 ] 
  
 }, 
  
 "description" 
 : 
  
 { 
  
 "text" 
 : 
  
 [ 
  
 { 
  
 "text" 
 : 
  
 "Breakfast basket w/ side of tomato sauce (size 6 or 12)" 
 , 
  
 "language_code" 
 : 
  
 "en-US" 
  
 } 
  
 ] 
  
 }, 
  
 "images" 
 : 
  
 [ 
  
 { 
  
 "uri" 
 : 
  
 "http://www.example.com/photos/breadsticks.jpg" 
  
 }, 
  
 { 
  
 "uri" 
 : 
  
 "http://www.example.com/photos/sauce.jpg" 
  
 } 
  
 ], 
  
 "menu_item_option_set" 
 : 
  
 { 
  
 "menu_item_option_ids" 
 : 
  
 [ 
  
 "breadstick-sm" 
 , 
  
 "breadstick-lg" 
  
 ] 
  
 } 
  
 } 
  
 }, 
  
 { 
  
 "item" 
 : 
  
 { 
  
 "menu_item_id" 
 : 
  
 "meatballs" 
 , 
  
 "display_name" 
 : 
  
 { 
  
 "text" 
 : 
  
 [ 
  
 { 
  
 "text" 
 : 
  
 "Grandma Grace's Meatballs" 
 , 
  
 "language_code" 
 : 
  
 "en-US" 
  
 } 
  
 ] 
  
 }, 
  
 "description" 
 : 
  
 { 
  
 "text" 
 : 
  
 [ 
  
 { 
  
 "text" 
 : 
  
 "Two 40x beef with pork tomato sauce, coarse grated cheese" 
 , 
  
 "language_code" 
 : 
  
 "en-US" 
  
 } 
  
 ] 
  
 }, 
  
 "images" 
 : 
  
 [ 
  
 { 
  
 "uri" 
 : 
  
 "http://www.example.com/photos/meatballs.jpg" 
  
 }, 
  
 { 
  
 "uri" 
 : 
  
 "http://www.example.com/photos/meatballs2.jpg" 
  
 } 
  
 ], 
  
 "offer_set" 
 : 
  
 { 
  
 "offers" 
 : 
  
 [ 
  
 { 
  
 "price" 
 : 
  
 { 
  
 "currency_code" 
 : 
  
 "USD" 
 , 
  
 "units" 
 : 
  
 1 
 , 
  
 "nanos" 
 : 
  
 750000000 
  
 } 
  
 } 
  
 ] 
  
 } 
  
 } 
  
 }, 
  
 { 
  
 "option" 
 : 
  
 { 
  
 "menu_item_option_id" 
 : 
  
 "breadstick-sm" 
 , 
  
 "value" 
 : 
  
 { 
  
 "property_type" 
 : 
  
 "SIZE" 
 , 
  
 "text_val" 
 : 
  
 { 
  
 "text" 
 : 
  
 [ 
  
 { 
  
 "text" 
 : 
  
 "Small" 
 , 
  
 "language_code" 
 : 
  
 "en-US" 
  
 } 
  
 ] 
  
 } 
  
 }, 
  
 "offer_set" 
 : 
  
 { 
  
 "offers" 
 : 
  
 [ 
  
 { 
  
 "price" 
 : 
  
 { 
  
 "currency_code" 
 : 
  
 "USD" 
 , 
  
 "units" 
 : 
  
 8 
 , 
  
 "nanos" 
 : 
  
 0 
  
 } 
  
 } 
  
 ] 
  
 } 
  
 } 
  
 }, 
  
 { 
  
 "option" 
 : 
  
 { 
  
 "menu_item_option_id" 
 : 
  
 "breadstick-lg" 
 , 
  
 "value" 
 : 
  
 { 
  
 "property_type" 
 : 
  
 "SIZE" 
 , 
  
 "text_val" 
 : 
  
 { 
  
 "text" 
 : 
  
 [ 
  
 { 
  
 "text" 
 : 
  
 "Large" 
 , 
  
 "language_code" 
 : 
  
 "en-US" 
  
 } 
  
 ] 
  
 } 
  
 }, 
  
 "offer_set" 
 : 
  
 { 
  
 "offers" 
 : 
  
 [ 
  
 { 
  
 "price" 
 : 
  
 { 
  
 "currency_code" 
 : 
  
 "USD" 
 , 
  
 "units" 
 : 
  
 11 
 , 
  
 "nanos" 
 : 
  
 0 
  
 } 
  
 } 
  
 ] 
  
 } 
  
 } 
  
 } 
  
 ] 
 } 

This feed contains examples of non-ASCII characters in a menu data feed. The first menu item has non-ASCII characters provided as it is. The second menu item has non-ASCII characters represented in hexadecimal UTF-8 notation. Both are valid options on how to include non-ASCII characters in the menu feeds. The recommended way is to include the non-ASCII characters as-is.

 { 
  
 "data" 
 : 
  
 [ 
  
 { 
  
 "menu" 
 : 
  
 { 
  
 "menu_id" 
 : 
  
 "menu2" 
 , 
  
 "merchant_ids" 
 : 
  
 [ 
  
 "dining-2" 
  
 ], 
  
 "display_name" 
 : 
  
 { 
  
 "text" 
 : 
  
 [ 
  
 { 
  
 "text" 
 : 
  
 "Menu" 
 , 
  
 "language_code" 
 : 
  
 "en-FR" 
  
 } 
  
 ] 
  
 }, 
  
 "language" 
 : 
  
 "en-FR" 
 , 
  
 "menu_section_ids" 
 : 
  
 [ 
  
 "salad" 
  
 ], 
  
 "last_merchant_update_time" 
 : 
  
 { 
  
 "seconds" 
 : 
  
 1692902166 
  
 } 
  
 } 
  
 }, 
  
 { 
  
 "section" 
 : 
  
 { 
  
 "menu_section_id" 
 : 
  
 "salad" 
 , 
  
 "display_name" 
 : 
  
 { 
  
 "text" 
 : 
  
 [ 
  
 { 
  
 "text" 
 : 
  
 "Salade" 
 , 
  
 "language_code" 
 : 
  
 "en-FR" 
  
 } 
  
 ] 
  
 }, 
  
 "menu_item_ids" 
 : 
  
 [ 
  
 "cesar" 
 , 
  
 "nicoise" 
  
 ] 
  
 } 
  
 }, 
  
 { 
  
 "item" 
 : 
  
 { 
  
 "menu_item_id" 
 : 
  
 "cesar" 
 , 
  
 "display_name" 
 : 
  
 { 
  
 "text" 
 : 
  
 [ 
  
 { 
  
 "text" 
 : 
  
 "Salade César" 
 , 
  
 "language_code" 
 : 
  
 "en-FR" 
  
 } 
  
 ] 
  
 }, 
  
 "description" 
 : 
  
 { 
  
 "text" 
 : 
  
 [ 
  
 { 
  
 "text" 
 : 
  
 "Classique délicieux, croustillant grâce à ses croûtons et gourmande grâce à sa tendre volaille." 
 , 
  
 "language_code" 
 : 
  
 "en-FR" 
  
 } 
  
 ] 
  
 }, 
  
 "offer_set" 
 : 
  
 { 
  
 "offers" 
 : 
  
 [ 
  
 { 
  
 "price" 
 : 
  
 { 
  
 "currency_code" 
 : 
  
 "EUR" 
 , 
  
 "units" 
 : 
  
 9 
 , 
  
 "nanos" 
 : 
  
 450000000 
  
 } 
  
 } 
  
 ] 
  
 } 
  
 } 
  
 }, 
  
 { 
  
 "item" 
 : 
  
 { 
  
 "menu_item_id" 
 : 
  
 "nicoise" 
 , 
  
 "display_name" 
 : 
  
 { 
  
 "text" 
 : 
  
 [ 
  
 { 
  
 "text" 
 : 
  
 "Salade Ni\u00e7oise" 
 , 
  
 "language_code" 
 : 
  
 "en-FR" 
  
 } 
  
 ] 
  
 }, 
  
 "description" 
 : 
  
 { 
  
 "text" 
 : 
  
 [ 
  
 { 
  
 "text" 
 : 
  
 "Salade fran\u00e7aise d\u00e9licieuse et nourrissante" 
 , 
  
 "language_code" 
 : 
  
 "en-FR" 
  
 } 
  
 ] 
  
 }, 
  
 "offer_set" 
 : 
  
 { 
  
 "offers" 
 : 
  
 [ 
  
 { 
  
 "price" 
 : 
  
 { 
  
 "currency_code" 
 : 
  
 "EUR" 
 , 
  
 "units" 
 : 
  
 10 
 , 
  
 "nanos" 
 : 
  
 800000000 
  
 } 
  
 } 
  
 ] 
  
 } 
  
 } 
  
 } 
  
 ] 
 } 

Descriptor file

 { 
  
 "generation_timestamp" 
 : 
  
 1692998244 
 , 
  
 "name" 
 : 
  
 "google.food_menu" 
 , 
  
 "data_file" 
 : 
  
 [ 
  
 "menu_1692825444_0001.json" 
 , 
  
 "menu_1692902166_0002.json" 
  
 ] 
 } 
Design a Mobile Site
View Site in Mobile | Classic
Share by: