message MerchantMenuFeed {
repeated MerchantMenu data = 1;
}
// 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.
DAY_OF_WEEK_UNSPECIFIED = 0;
// The day-of-week of Monday.
MONDAY = 1;
// The day-of-week of Tuesday.
TUESDAY = 2;
// The day-of-week of Wednesday.
WEDNESDAY = 3;
// The day-of-week of Thursday.
THURSDAY = 4;
// The day-of-week of Friday.
FRIDAY = 5;
// The day-of-week of Saturday.
SATURDAY = 6;
// 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. Optional.
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;
}