Menu feed

MerchantMenuFeed Definition

message MerchantMenuFeed {
  repeated MerchantMenu data = 1;

MerchantMenu Definition

// Top level proto in the Menu Feed. MerchantMenu contains a list of merchant
// ids and a list of all the menus that apply to those merchants. A MerchantMenu
// can be used to represent single merchant with one menu, a single merchant
// with multiple menus, or multiple merchants (typically chain restaurants) with
// one or multiple menus.
message MerchantMenu {
  // The merchants to whom the menu(s) apply.
  // Note: This field is repeated so chain restaurants can share the same menu
  // across multiple locations, each of which is a separate merchant. In case
  // these locations have different menus, those can be sent invidually with
  // a single merchant_id. (required)
  repeated string merchant_id = 1;

  // Menus applicable for the merchants above. Each merchant can have multiple
  // menus e.g. for different times of day (breakfast, lunch, dinner, etc.),
  // special menus for weekends or seasonal menus. (required)
  repeated Menu menu = 2;
// The definition of a menu provided by a merchant.
// Contents in a menu share the same MenuAvailability, so merchant menus with
// different availability times (e.g. Breakfast/Lunch/Dinner menus) should be
// represented as different Menus rather than a single menu with multiple
// sections.
message Menu {
  // An opaque string from an aggregator partner which uniquely identifies the
  // menu. (required)
  string menu_id = 1;

  // Specifies when this menu would be available to the users. (optional)
  repeated MenuAvailability availability = 2;

  // The name of the menu.
  // e.g. "Dinner", "Brunch", "Happy Hour", "Holidays Special", etc. (optional)
  Text menu_name = 3;

  // The description of the menu. (optional)
  Text description = 4;

  // Price for this entire menu; should only be available for set courses or
  // prix fixe menus. (optional)
  PriceSpec price = 5;

  // The sections of this menu.
  // If the menu does not contain multiple sections or groupings for menu items,
  // a single MenuSection should be created to hold all the menu items.
  // At least one MenuSection should be present. (required)
  repeated MenuSection menu_section = 6;
// Represents the availability of a menu or offer on an item in the menu.
message MenuAvailability {
  // Represents a time range during a single day, i.e. [begin, end).
  message TimeOfDayRange {
    // Time in a day (required)
    google.type.TimeOfDay begin = 1;
    // Time in a day (required)
    google.type.TimeOfDay end = 2;

  // The time within a day when this menu is available. (required)
  TimeOfDayRange time_of_day = 1;

  // The days of the week where the time_of_day is applicable.
  // Default is to assume applicable for all 7 days of the week. (optional)
  repeated google.type.DayOfWeek days_of_week = 2;

  // The total range of time through which this availability is valid, e.g.
  // Winter Dinner Special might be valid only between the December and January
  // of a particular year. Default is to assume that the time_of_day and
  // days_of_week fields are valid to recur every week indefinitely, i.e. this
  // availability is always true. (optional)
  TimeRange time_range = 3;
// A menu section is a grouping of items on a menu. For multiple sections in the
// menu such as (Appetizer, Main, Dessert) or food categories (Burgers,
// Vegetables), separate MenuSections can be created.
// To represent menus with different avaialbilities, such as
// Breakfast/Lunch/Dinner, please refer to multiple menus in MerchantMenu
// section.
message MenuSection {
  // An opaque string from an aggregator partner which uniquely identifies the
  // menu section from within the partner feed. (required)
  string menu_section_id = 1;

  // The name of the menu section. (optional)
  Text section_name = 2;

  // The description of the menu section. (optional)
  Text description = 3;

  // The list of menu items contained in this menu section.
  repeated MenuItem menu_item = 4;

  // The sub-sections contained in this menu section (e.g. A "Salads"
  // sub-section may appear within an "Appetizers" section). (optional)
  repeated MenuSection menu_section = 5;
// A menu item is a food or drink item listed in a MenuSection.
message MenuItem {
  // An opaque string from an aggregator partner which uniquely identifies the
  // menu item from within the partner feed. (required)
  string menu_item_id = 1;

  // The name of the menu item. (required)
  Text item_name = 2;

  // The description of the menu item. (optional)
  Text description = 3;

  // Price for this menu item. (optional)
  PriceSpec price = 4;

  // Attributes about this menu item. (optional)
  MenuItemAttributes attributes = 5;

  // Options available to this menu item. (optional)
  repeated MenuItemOption item_option = 6;
// An item option is a variation of a base menu item. A menu item with multiple
// options would require the user to select one of the options for
// ordering. Common options represented as MenuItemOptions:
// Sizes -
//   Pepperoni pizza menu item, with “Small”, “Medium”, and “Large” options,
//   each with different pricing and nutritional properties.
// Key ingredient -
//   Pad thai menu item, with “chicken”, “vegetarian”, “shrimp” options.
// Container/packaging -
//   1 scoop ice cream menu item, with “Bowl” and “Cone” options.
message MenuItemOption {
  // An opaque string from an aggregator partner which uniquely identifies the
  // menu item option from within the partner feed. (required)
  string menu_item_option_id = 1;

  // The name of the menu item option. (required)
  Text item_option_name = 2;

  // The description of the menu item option. (optional)
  Text description = 3;

  // Price for this menu item option. (optional)
  PriceSpec price = 4;

  // Set to true if this item option should be selected by default. (optional)
  bool is_default = 5;

  // An item option can have a different set of attributes as the base item and
  // will override the base item attributes.
  // (e.g. large vs medium pizza might have different calorie count)
  // (optional)
  MenuItemAttributes attributes = 6;
// Describes attributes about a particular menu item or menu item
// option. These fields should all be considered optional.
message MenuItemAttributes {
  // The number of calories for the item. (optional)
  int32 calories = 1;

  // The size of one order of the menu item, to describe how many units of the
  // item a user would receive (e.g. “4 skewers”, “6 pieces”). (optional)
  Text portion_size = 2;

  // How many people a single order of the menu item is expected to feed.
  // (optional)
  int32 serves_num_people = 3;

  // Textual description for how the menu item tastes.
  // e.g. Olive oil, Butter, Italian parsley, Brandy etc. (optional)
  repeated Text flavor = 4;

  // ISO 3166-1 alpha-2 country code representing the country where this menu
  // item originated, for example 'US' or 'BR'. (optional)
  string country_of_origin = 5;

  // How the menu item is prepared (e.g. Baked, Fried, Fermented, etc.).
  // (optional)
  repeated Text preparation_method = 6;

  // Ingredients and food items that are contained within this menu item.
  // (optional)
  repeated Text ingredients = 7;

  // The alcohol concentration (e.g. 5% for most beers) in this menu item.
  // This is typically only available on drinks. (optional)
  double alcohol_concentration_mass_volume_percent = 8;

TimeOfDay Definition

// Represents a time of day. The date and time zone are either not significant
// or are specified elsewhere. An API may choose to allow leap seconds.
message TimeOfDay {
  // Hours of day in 24 hour format. Should be from 0 to 23. An API may choose
  // to allow the value "24:00:00" for scenarios like business closing time.
  int32 hours = 1;
  // Minutes of hour of day. Must be from 0 to 59.
  int32 minutes = 2;
  // Seconds of minutes of the time. Must normally be from 0 to 59. An API may
  // allow the value 60 if it allows leap-seconds.
  int32 seconds = 3;
  // Fractions of seconds in nanoseconds. Must be from 0 to 999,999,999.
  int32 nanos = 4;

DayOfWeek Definition

// Represents a day of week.
enum DayOfWeek {
  // The unspecified day-of-week.
  // The day-of-week of Monday.
  MONDAY = 1;
  // The day-of-week of Tuesday.
  TUESDAY = 2;
  // The day-of-week of Wednesday.
  // The day-of-week of Thursday.
  // The day-of-week of Friday.
  FRIDAY = 5;
  // The day-of-week of Saturday.
  // The day-of-week of Sunday.
  SUNDAY = 7;

TimeRange Definition

// A closed-open time range, i.e. [begin_sec, end_sec)
message TimeRange {
  // Seconds of UTC time since Unix epoch (required)
  int64 begin_sec = 1;
  // Seconds of UTC time since Unix epoch (required)
  int64 end_sec = 2;

Text Definition

// A possibly-localized text payload. Some Text fields may contain marked-up
// content.
message Text {
  // Required. Text value in an unknown locale, which will be displayed if
  // `localized_value` for the user locale is empty or missing. The locale for
  // this value may depend on the partner or service provider, and it should not
  // be assumed to be any specific language.
  string value = 1;

  // Per-locale text values. Required.
  repeated LocalizedString localized_value = 2;

PriceSpec Definition

message PriceSpec {
  // The listed price on the menu.
  Price price = 1;

  // True if the listed price already includes tax.
  bool tax_included = 2;

Price Definition

// The price of a service or a fee.
message Price {
  // The price in micro-units of the currency.
  // For example: 1.95 USD is 1950000 in micro-units.
  // If your price contains fractions of the smallest currency unit, then it
  // will be rounded using nearest even rounding (e.g. 2.5 cents rounded
  // to 2 cents, 3.5 cents rounded to 4 cents, 0.5 cents rounded to 0 cents,
  // 2.51 cents rounded to 3 cents). (required)
  int64 price_micros = 1;
  // The currency of the price that is defined in ISO 4217. (required)
  string currency_code = 2;
  // An optional and opaque string that identifies the pricing option that is
  // associated with the extended price. (optional)
  string pricing_option_tag = 3;