AI-generated Key Takeaways
-
The Merchant Feed is a JSON or Protobuf file containing a list of
Merchant
objects that represent businesses on the platform. -
Each
Merchant
must have a uniquemerchant_id
,name
,geo
coordinates, andcategory
. -
Geo
coordinates can be specified using either aPostalAddress
with required fields or anunstructured_address
. -
Merchants can define supported payment options using
PaymentOption
, including specific payment restrictions throughPaymentRestrictions
. -
Optional fields like
telephone
,url
, andterms
enrich merchant information and enhance user experience.
Definitions
MerchantFeed Definition
message MerchantFeed { FeedMetadata metadata = 1; repeated Merchant merchant = 2; }
Merchant Definition
// Info about a merchant that is on the aggregator's platform. // A merchant feed should be a list of this message. message Merchant { // An opaque string generated by the partner that identifies a merchant. // Must be unique across all merchants. // Strongly recommended to only include URL-safe characters. (required) string merchant_id = 1; // The name, telephone, url and geo are used to support matching partner // inventory with merchants already present on Google Maps. This information // will not be displayed. // // The name of the merchant. (required) string name = 2; // The contact telephone number of the merchant including its country and area // codes, e.g. +14567891234. Highly recommended. (optional) string telephone = 3; // The url of the merchant's public website. Highly recommended. (optional) string url = 4; // The Geo info of the merchant, including latitude, longitude, and address. // (required) GeoCoordinates geo = 5; // The category of the business in aggregator's platform. (required) // You should categorize this business as you categorize it in your inventory. // We will use your provided category as a parameter in trying to determine // the best location match to the physical business. string category = 6; // The specific merchant's Terms and Conditions displayed to the user when a // service is being booked through Reserve with Google. // In addition to these the aggregator partner's Terms and Conditions are // always displayed to the user and must not be provided here. (optional) Terms terms = 13; // An opaque string that identifies the consumer-facing brand to use when // displaying partner attribution. This field allows partners with multiple // consumer-facing brands to provide merchants for all brands within the same // feed. // // A brand consists of consumer-facing properties like the name, logo, Terms // of Service, and Privacy Policy. // // If there is only one consumer-facing partner brand, this field does not // need to be set and can be ignored. // // If the partner... // // Does not have multiple consumer-facing brands? // --> Ignore this field // // Has Multiple Brands that are configured? // // If this field is set // --> Associated consumer-facing brand attribution is used // // If this field is unset or the empty string // --> Default consumer-facing brand attribution is used // // Careful Note: most partners do not need to set this field. If a partner // wishes to use this field, they must contact us first to configure separate // brands, including the default brand. string brand_id = 14; // Hints to help Google match a merchant to a place on Google Maps. // Note: Typically, this field does not need to be set, as Google will match // merchants to places on Google Maps using the information provided above. // (optional) MerchantMatchingHints matching_hints = 16; // Definitions for any service attributes used to describe the Services for // this Merchant. (optional) repeated ServiceAttribute service_attribute = 17; // An action URL with associated language, list of countries restricted to, // type, and optional platform that indicates which platform this action // should be performed on. This action link is specifically for the merchant, // please use the ActionLink in the service feed to link to a specific // service. repeated ActionLink action_link = 20; // The linkout template that specifies how Google should generate the // partner's URL to reserve a table on their platform. // // Note that currently only the first one will be used if multiple are // provided. // // The URI template has support for fields which will be populated based // on the user's reservation selections, all required fields are needed to // build a reservation URL successfully: // * (required) party_size, int: The size of the party for which the user is // requesting a reservation. // * (required) selected_date_time, ISO 8601 datetime // (https://en.wikipedia.org/wiki/ISO_8601): The time the user is requesting a // reservation for. // * (optional) merchant_id, string: The ID of the Merchant the user is // requesting a reservation with, not needed if template already includes a // merchant identifier. // * (optional) room_id, string: The id of the room the user is requesting a // reservation for. repeated LinkoutTemplate reservation_linkout_template = 21; // General advisements from a specific merchant for a user joining a waitlist // through Reserve with Google. Individual text fields in the advisement // should be limited to 100 bytes in length. Advisement waitlist_advisement = 22; // Economic Operator information associated to this specific merchant, if // applicable for an end to end payments integration. // For further info, refer to: // https://developers.google.com/actions-center/verticals/reservations/e2e/partner-portal/testing/regulatory-requirements#economic-operator // // (optional) EconomicOperator economic_operator = 23; }
GeoCoordinates Definition
// The Geo data of a location, including latitude, longitude, and address. // At least one of [lat/lng or address] should be provided (or both). message GeoCoordinates { // [-90, +90] degrees (inclusive). (optional) double latitude = 1; // [-180, +180] degrees (inclusive). (optional) double longitude = 2; // Address for a location, could either be structured or unstructured. oneof addresses { // Postal address of the location, preferred. PostalAddress address = 3; // An unstructured address could also be provided as a fallback. // E.g. "1600 amphitheatre parkway mountain view, ca 94043" string unstructured_address = 4; } }
PostalAddress Definition
// The postal address for a merchant. message PostalAddress { // The country, using ISO 3166-1 alpha-2 country code, e.g. "US" (required) string country = 1; // The locality/city, e.g. "Mountain View". (required) string locality = 2; // The region/state/province, e.g. "CA". This field is only required in // countries where region is commonly a part of the address. (optional) string region = 3; // The postal code, e.g. "94043". (required) string postal_code = 4; // The street address, e.g. "1600 Amphitheatre Pkwy". (required) string street_address = 5; }
TaxRate Definition
// A tax rate applied when charging the user for a service, and which can be set // on either a per merchant, or per service basis. message TaxRate { // A tax rate in millionths of one percent, effectively giving 6 decimals of // precision. For example, if the tax rate is 7.253%, this field should be set // to 7253000. // // If this field is left unset or set to 0, the total price charged to a user // for any service provided by this merchant is the exact price specified by // Service.price. The service price is assumed to be exempt from or already // inclusive of applicable taxes. Taxes will not be shown to the user as a // separate line item. // // If this field is set to any nonzero value, the total price charged to a // user for any service provided by this merchant will include the service // price plus the tax assessed using the tax rate provided here. Fractions of // the smallest currency unit (for example, fractions of one cent) will be // rounded using nearest even rounding. Taxes will be shown to the user as a // separate line item. (required) int32 micro_percent = 1; }
PaymentRestrictions Definition
// Restrictions to the payment methods this merchant accepts. message PaymentRestrictions { // Restrictions to the credit cards this merchant accepts. We assume all // credit cards are accepted if this field is not set. // Note that the list of cards supported by CreditCardType will grow over // time, meaning that leaving this empty subjects a configuration to future // changes. (optional) CreditCardRestrictions credit_card_restrictions = 1; }
CreditCardRestrictions Definition
// Restrictions to the credit card types this merchant accepts. message CreditCardRestrictions { // A credit card type. enum CreditCardType { // Unused. CREDIT_CARD_TYPE_UNSPECIFIED = 0; // A Visa credit card. VISA = 1; // A Mastercard credit card. MASTERCARD = 2; // An American Express credit card. AMERICAN_EXPRESS = 3; // A Discover credit card. DISCOVER = 4; // A JCB credit card. JCB = 5; } // A list of supported credit cards. No credit cards are supported if empty. // (optional) repeated CreditCardType credit_card_type = 1; }
PaymentOption Definition
// A payment option, which can be used to pay for services provided by a // merchant. Payment options can be shared among multiple merchants // (e.g. merchants belonging to the same chain). message PaymentOption { // An opaque string from an aggregator partner to identify a payment option. // // This id is global to the whole aggregator, and re-using a value across // multiple merchants will allow a user to pay with the corresponding payment // option across those merchants. // // When re-using an id across multiple merchants, updating any value for a // payment option under one merchant will also update any other payment option // with the same id, under a different merchant. As such, it's a best practice // to have all payment options sharing the same id, always be updated to // identical values, to avoid any possibility of nondeterministic behavior. // // Do NOT confuse it with the internal payment option id. (required) string payment_option_id = 1; // The name of the payment option. This can be user visible. (required) string name = 2; // A description of the payment option. This can be user visible. (optional) string description = 3; // The price of the payment option. (required) Price price = 4; // The tax rate for this payment option. If present this field overrides the // tax_rate field present in the Merchant or Service. An empty message // (i.e. tax_rate { }) will reset the applied tax rate to zero. (optional) TaxRate tax_rate = 5; // A payment option type. enum PaymentOptionType { // Unused. PAYMENT_OPTION_TYPE_UNSPECIFIED = 0; // Payment option can only be used once. PAYMENT_OPTION_SINGLE_USE = 1; // Payment option can be used if its session count > 0. PAYMENT_OPTION_MULTI_USE = 2; // Payment option can be used within its valid time range - session count // is inapplicable. PAYMENT_OPTION_UNLIMITED = 3; } // The type of this payment option. Single-use for drop-ins, multi-use for // packs, and unlimited for memberships. (required) PaymentOptionType payment_option_type = 6; // How many sessions this payment option can be used for. Valid only for // multi-session / packs, where the value should be > 1. // (required if payment_option_type is PAYMENT_OPTION_MULTI_USE) int64 session_count = 7; // The payment option can be purchased within this interval. (optional) TimeRange purchase_interval = 8; // The payment option can be used within this interval (e.g. special price // for January 2017). // If present, this overrides valid_duration_sec and activation_type. // (optional) TimeRange valid_interval = 9; // Duration of the payment option validity (e.g. 30 day membership). // (optional) int64 valid_duration_sec = 10; // Defines how the validity start date is determined. enum ActivationType { // Unused. ACTIVATION_TYPE_UNSPECIFIED = 0; // Validity starts at the time of purchase. ACTIVATION_ON_PURCHASE = 1; // Validity starts when the payment option is used for the first time. ACTIVATION_ON_FIRST_USE = 2; } // Defines how the validity start date is determined for this payment option. // (required) ActivationType activation_type = 11; // Restricts the users eligible to purchase this payment option. Can be used // to restrict a promotional payment option to a subset of users. If not set, // all users are eligible. (optional) UserPurchaseRestriction user_restriction = 12; }
UserPurchaseRestriction Definition
message UserPurchaseRestriction { // A payment option that can only be purchased by users who have never // purchased from the same merchant before. (required if new_to_payment_option // is not set) bool new_to_merchant = 1; // A payment option that can only be purchased by users who have never // purchased the same payment option before. (required if new_to_payment is // not set) bool new_to_payment_option = 2; }
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; }
TokenizationConfig Definition
// A configuration for payment-processor tokenization, set up on a per-Merchant // basis. message TokenizationConfig { // A tokenization configuration will typically have one // tokenization_parameter whose key is "gateway" and whose value is the // name of the processor. // // The rest of the parameters are dependent on the processor. See // documentation from Google Pay and your processor for further information. // https://developers.google.com/pay/api/web/object-reference# \ // PaymentMethodTokenizationSpecification // https://developers.google.com/pay/api/#participating-google-pay-processors // // Braintree example: // tokenization_parameter { key: "gateway" value: "braintree" } // tokenization_parameter { key: "braintree:apiVersion" value: "v1" } // tokenization_parameter { key: "braintree:sdkVersion" value: "2.30.0" } // tokenization_parameter { key: "braintree:merchantId" value: "abcdef" } // tokenization_parameter { key: "braintree:clientKey" // value: "production_xxx_yyy" } // // Stripe example: // tokenization_parameter { key: "gateway" value: "stripe" } // tokenization_parameter { key: "stripe:version" value: "2018-02-28" } // tokenization_parameter { key: "stripe:publishableKey" value: "pk_1234" } // // Adyen example: // tokenization_parameter { key: "gateway" value: "adyen" } // tokenization_parameter { key: "gatewayMerchantId" value: "yourId" } map<string, string> tokenization_parameter = 1; // The following field controls how much billing information to include in the // payment token. Verification of billing information is the responsibility of // Google Pay upon entry of Form Of Payment (FOP). If the FOP is currently in // Google Pay without the requested level of billing information, the user // will not see their FOP as a choice, and they will have to enter the FOP and // required information according to the current Google Pay UI. // // Some merchants like to keep the requested information minimal because // requesting more information can lead to lower conversion rates. // // Note that they can also go to payments.google.com to enhance an FOP but // most users will not know to do so. // How much of the Billing Address to require of the user and include in the // token. The enum values correspond to parameters in the Google Pay API (see // https://developers.google.com/pay/api/web/reference/object\ // #BillingAddressParameters). enum BillingInformationFormat { BILLING_INFORMATION_FORMAT_UNSPECIFIED = 0; // name, country code, and postal code (GPay default setting). MIN = 1; // name, street address, locality, region, country code, and postal code FULL = 2; } // Include in the payment token the user's billing information as entered into // Google Pay with their FOP (see above). BillingInformationFormat billing_information_format = 2; // Name of the Merchant Of Record (MOR). This user-visible name will be shown // in 3DS2 challenges. In some cases, this is the Merchant, in others this is // the Aggregator. string merchant_of_record_name = 3; // Country where transaction will be processed, in ISO 3166-1 alpha-2 form. string payment_country_code = 4; // Per CardNetwork Processing information. message CardNetworkParameters { // The Card Network that these parameters are about CreditCardRestrictions.CreditCardType card_network = 1; // The Bank Identification Number of the acquiring bank used for processing // of the card. // // If this value is not known to you, you should ask your acquirer or // merchant processor representative. string acquirer_bin = 2; // The merchant identifier assigned by the acquirer to the merchant for use // in transaction authorization (for Visa and American Express // transactions). // // If this value is not known to you, you should ask the acquirer or // merchant processor representative. string acquirer_merchant_id = 3; } // Per-Card Network processing parameters. // // These are currently only required for PSD2 // (https://en.wikipedia.org/wiki/Payment_Services_Directive) // processing when payment_country_code is a European country where PSD2 is in // effect. They are also only currently required for VISA and // AMERICAN_EXPRESS. repeated CardNetworkParameters card_network_parameters = 5; // Fields supported to authorize a card transaction. // // See the GPay documentation at // https://developers.google.com/pay/api/web/reference/object#CardParameters enum AuthMethod { AUTH_METHOD_UNSPECIFIED = 0; // This authentication method is associated with payment cards stored on // file with the user's Google Account. Returned payment data includes // personal account number (PAN) with the expiration month and the // expiration year. PAN_ONLY = 1; // This authentication method is associated with cards stored as Android // device tokens. Returned payment data includes a 3-D Secure (3DS) // cryptogram generated on the device. CRYPTOGRAM_3DS = 2; } // Defines types of cardholder data that are accepted by the gateway. // If not specified, no restrictions are applied. // // Note that partners who use commercial gateways should leave this // empty unless their gateway provider has specified otherwise. Restricting // allowed_auth_methods is most useful in the scenario that a partner // integrates with GPay as a gateway themselves. repeated AuthMethod allowed_auth_methods = 6; }
Terms Definition
// A set of rules and guidelines that are displayed to the // user in order to make a booking through Reserve with Google. message Terms { // The URL to the Terms and Conditions. (optional) string url = 1; // The text to be displayed to the user. // Use localized_text below for new integrations. string text = 2; // The localized text to be displayed to the user. (required) Text localized_text = 3; }
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; }
LocalizedString Definition
// Instance of a string in one locale. message LocalizedString { // IETF BCP 47 language code, such as "en", "mas", "zh-Hant", "de-CH-1901". // See http://www.w3.org/International/articles/language-tags/. string locale = 1; // Message in the locale above (UTF-8). string value = 2; }
Advisement Definition
// Advisements that are displayed to the user when booking through Reserve with // Google. message Advisement { // Custom message to be displayed to the user when booking through // Reserve with Google. Text text = 1; }
EconomicOperator Definition
// Economic Operator information for the Merchant. message EconomicOperator { // Name, address, telephone number and email address of the economic operator, // defined as the manufacturer, authorized representative, importer, // distributor, fulfillment service provider or any other natural or legal // person subject to obligations related to the manufacture of products, // making them available, or putting them into service. // Freeform string representation of the economic_operator. This information // may be formatted using " " and "\n". Text text = 1; }
MerchantMatchingHints Definition
// Hints used to help Google match a merchant to a place on Google Maps. message MerchantMatchingHints { // The Place ID for a place in the Google Places database and on Google Maps. // See https://developers.google.com/places/place-id for more about Place IDs. // If this is provided, Google will use it as a hint when matching, and // prioritize the hint over other candidates. string place_id = 1; }
ServiceAttribute Definition
// Service attributes are partner-defined categories that describe the Services // for a Merchant. For example, a bank may define an "Account Type" // service attribute with possible values of "Personal" and "Business", while a // hair salon may define a "Service Type" service attribute with possible // values of "Haircut", "Color", and "Style". message ServiceAttribute { // An identifier that uniquely identifies this service attribute among others // for the same merchant, e.g. "account-type". string attribute_id = 1; // A user-visible name for this attribute, e.g. "Account Type". string attribute_name = 2; // Represents a possible value for a particular service attribute. message Value { // An identifier that uniquely identifies this value among others for // this service attribute, e.g. "personal". string value_id = 1; // A user-visible name for the value, e.g. "Personal". string value_name = 2; } // All possible values for this service attribute. repeated Value value = 3; }
ActionLink Definition
// An action URL with associated language, list of countries restricted to, and // optional platform that indicates which platform this action should be // performed on. message ActionLink { // The entry point URL for this action link. string url = 1; // The BCP-47 language tag identifying the language in which the content // from this URI is available. string language = 2; // The platform that this action should be performed on. If this field is // unset, ACTION_PLATFORM_WEB_APPLICATION will be used as fallback. ActionPlatform platform = 4; // Predetermined type of action associated with an action link. enum ActionLinkType { // The action link type is unspecified. ACTION_LINK_TYPE_UNSPECIFIED = 0; // The action link type is booking an appointment. ACTION_LINK_TYPE_BOOK_APPOINTMENT = 1; // The action link type is booking an online appointment. ACTION_LINK_TYPE_BOOK_ONLINE_APPOINTMENT = 2; // The action link type is ordering food for delivery or takeout or both. ACTION_LINK_TYPE_ORDER_FOOD = 3; // The action link type is ordering food for delivery. ACTION_LINK_TYPE_ORDER_FOOD_DELIVERY = 4; // The action link type is ordering food for takeout. ACTION_LINK_TYPE_ORDER_FOOD_TAKEOUT = 5; // The action link type is making a dining reservation. ACTION_LINK_TYPE_MAKE_DINING_RESERVATION = 6; // The action link type allows users to shop from the given merchant. It // could either be delivery or pickup. ACTION_LINK_TYPE_SHOP_ONLINE = 7; } // Predetermined type of action associated with an action link. ActionLinkType action_link_type = 5; // Metadata for the order online link. // Supports action with ActionLinkType of ACTION_LINK_TYPE_SHOP_ONLINE. OrderOnlineMetadata order_online_metadata = 6; // Metadata for Food Ordering links. // Supports action type: // * `ACTION_LINK_TYPE_ORDER_FOOD_DELIVERY` // * `ACTION_LINK_TYPE_ORDER_FOOD_TAKEOUT` // Does NOT support `ACTION_LINK_TYPE_ORDER_FOOD` FoodOrderingMetadata food_ordering_metadata = 7 ; // Additional information about action link which is unique to the events // vertical. message EventMetadata { // Predetermined event surface associated with an action link. This is only // used for Events vertical. enum Surface { // The surface is unspecified. SURFACE_UNSPECIFIED = 0; // The action link is booking a event ticket in Search. SURFACE_SEARCH = 1; // The action link is booking a event ticket in YouTube. SURFACE_YOUTUBE = 2; // The action link is clicking on an Ad for the event. SURFACE_ADS = 3; } // Predetermined event surface associated with an action link. This is only // used for Events vertical. Surface surface = 1; } EventMetadata event_metadata = 9; reserved 8; }
ActionPlatform Definition
// The platform that the action is performed on. Web application is the general // fallback. It is recommended to have at least one ActionLink with // ACTION_PLATFORM_WEB_APPLICATION. Links with Android and iOS as platform are // only used on the respective system. enum ActionPlatform { // The platform is unspecified. ACTION_PLATFORM_UNSPECIFIED = 0; // The action platform is web in general. ACTION_PLATFORM_WEB_APPLICATION = 1; // The action platform is web on mobile devices. ACTION_PLATFORM_MOBILE_WEB = 2; // The action platform is Android OS. ACTION_PLATFORM_ANDROID = 3; // The action platform is iOS. ACTION_PLATFORM_IOS = 4; }
OrderOnlineMetadata Definition
// Metadata for an order online action link. message OrderOnlineMetadata { // Available fulfillment options for an order online action link. repeated FulfillmentOption fulfillment_option = 1; }
FulfillmentOption Definition
// The fulfillment option for an order online action link. message FulfillmentOption { // The fulfillment type associated with an action link. enum FulfillmentType { // The fulfillment type is unspecified. FULFILLMENT_TYPE_UNSPECIFIED = 0; // The fulfillment type is delivery. FULFILLMENT_TYPE_DELIVERY = 1; // The fulfillment type is pickup. FULFILLMENT_TYPE_PICKUP = 2; } // Required. The fulfillment type. FulfillmentType fulfillment_type = 1; // Day level availability. message AvailableDay { // Required. An available date for a fulfillment method. Assumed to be in // merchant's timezone. google.type.Date fulfillment_date = 1; // Required. Unix timestamp. The last time a user could order, and receive // items by `fulfillment_date`. In other words, after last_ordering_time, // fulfillment_date will no longer be shown as available. // // For example, if the fulfillment_date is 2020-08-10: // - a last_ordering_time value of 2020-08-10 18:00 means that, in order to // receive their order on 2020-08-10, a customer must make that order by 6pm // that same day. // - a last_ordering_time value of 2020-08-08 20:00 means that, in order to // receive their order on 2020-08-10, a customer must make that order by 8pm // two days prior. google.protobuf.Timestamp last_ordering_time = 2; } // Required. A list of days on which there is availability for this // fulfillment method (preferably at least 2). repeated AvailableDay available_day = 2; // No fee required for the fulfillment method associated with the action link. message NoFee {} // The minimum fee required for the fulfillment method associated with the // action link. message MinimumFee { // Required. The base fee amount for the fulfillment method. Price base_fee_amount = 1; } // The fixed fee required for the fulfillment method associated with the // action link. message FixedFee { // Required. The amount of the fixed fee for the fulfillment method. Price amount = 1; } // Fee details for the fulfillment method associated with the action link. message FeeDetails { // Fee model for the fulfillment method. oneof fee_details { // No fee for the fulfillment method. NoFee no_fee = 1; // The base fee associated with the fulfillment method. MinimumFee base_fee = 2; // The fixed fee associated with the fulfillment method. FixedFee fixed_fee = 3; } } // Required. Fee details for the fulfillment method. FeeDetails fee_details = 3; // Required. Minimum order for the fulfillment method associated with the // action link. Price minimum_order = 4; }
FoodOrderingMetadata Definition
// Metadata for food ordering action links. message FoodOrderingMetadata { // Details of fees charged to the user on top of the item total. // Repeated for different types of fees like service fee, delivery fee etc. repeated FeeDetails fee_details = 1; // Order fulfillment time duration from order confirmation. // For delivery orders, time duration until the food is delivered. // For pickup orders, time duration until the food is ready for pickup. oneof fulfillment_duration_options { // Fixed duration. For example: 30 mins. google.protobuf.Duration fulfillment_lead_time_duration = 2 ; // A range of duration. // Examples: // * 30 mins to 45 mins // * Greater than 30 mins // * Less than 50 mins DurationRange fulfillment_lead_time_duration_range = 4 ; } // Details on advanced ordering support also known as order ahead where user // can place an order for fulfillment at a later time than right now. AdvanceOrderDetails advance_order_details = 3; // Fee details. message FeeDetails { // Fee type. enum FeeType { // Fee type unspecified. FEE_TYPE_UNSPECIFIED = 0; // For delivery fees. DELIVERY = 1; // For service fees. SERVICE = 2; } // Fee type. (required) FeeType type = 1 ; // Fee amount either in unit currency, a percentage of the cart value, or a // combination of both. (required) FeeAmount fee_amount = 2 ; // `FeeAmount` examples: // * Fixed fee: USD 0 (no fee), USD 1.5 // * Range of fixed fee: USD 1.0 (minimum), USD 3.0 (maximum), USD 5.0-6.0 // * Percentage of cart size: 15.5%, 10%-20%, 10% (minimum), 15% (maximum) // * Compound of range and percentage: // 25.5% & USD 2.5 (minimum), 25.5% & USD 4.5 (maximum), // 10% & USD 1.5-2.5, 10.5%-20% & USD 2.5-3.5 message FeeAmount { // Options to specify monetary amount. oneof amount_options { // Fixed amount. For example USD 3.5. google.type.Money amount = 1; // Range of amount. // Upper and/or Lower bounds of fee range must be positive. // Examples: // * USD 3.5 to USD 5.5 // * At least USD 3.5 // * At most USD 5.5 MoneyRange amount_range = 2 ; // Unknown amount. bool amount_unknown = 4; } // Fee in terms of a percentage of the cart value. // Supports a range (bounded and unbounded) or a fixed percentage. // Value should be between 0 (exclusive) and 100 (inclusive). // Examples: // * Fixed 5.5% // * At least 5.5% // * At most 5.5% // * 4.5% to 5.5% QuantitativeValue cart_percentage = 3 ; } } // For order ahead support. message AdvanceOrderDetails { // True if Advance Orders, also known as Order Ahead, is supported. // (required) bool is_supported = 1; } }
DurationRange Definition
// Wrapper for a range of duration that can be bounded or unbounded. // At least one of min_duration and max_duration duration is required. message DurationRange { // Minimum duration. google.protobuf.Duration min_duration = 1 ; // Maximum duration. google.protobuf.Duration max_duration = 2 ; }
MoneyRange Definition
// Wrapper for a range of monetary amount that could be bounded or unbounded. // At least one of min_amount and max_amount is required. message MoneyRange { // Minimum amount. google.type.Money min_amount = 1 ; // Maximum amount. google.type.Money max_amount = 2; }
QuantitativeValue Definition
// Wrapper for a numerical value that could be a range or a fixed value. // `QuantitativeValue` examples: // * Singular value: `value: 10.5` // * Bounded range: `value_range {min_value: 5.5, max_value 10.5}` // * Lower bound: `value_range {min_value: 5.5}` // * Upper bound: `value_range {max_value: 10.5}` message QuantitativeValue { // Range of values such that `min_value` < `max_value`. // Requires at least one of `min_value` and `max_value`. message RangeValue { // Minimum value. double min_value = 1 ; // Maximum value. double max_value = 2 ; } // (required) oneof value_options { option (validator.one_of) = { // A singular value. For example: 5.6 double value = 1; // A range of values that could also be open ended or bounded. // Examples: // * At least 5.5 // * At most 5.5 // * 5.5 to 6.5 RangeValue value_range = 2 ; } }
Merchant Feed samples
Dining
{ "metadata": { "processing_instruction": "PROCESS_AS_COMPLETE", "shard_number": 0, "total_shards": 1, "nonce": "11203880", "generation_timestamp": 1524606581 }, "merchant": [ { "category": "restaurant", "merchant_id": "dining-1", "name": "Dining Eats", "url": "www.dining1publicsite.com", "telephone": "+1 123-456-7890", "geo": { "latitude": 37.422113, "longitude": -122.084041, "address": { "locality": "Mountain View", "country": "US", "region": "CA", "street_address": "1600 Amphitheatre Pkwy", "postal_code": "94043" } } }, { "category": "restaurant", "merchant_id": "dining-2", "name": "Burger Heaven", "url": "www.dining2publicsite.com", "telephone": "+1 123-456-12345", "geo": { "latitude": 37.422113, "longitude": -122.084041, "address": { "locality": "San Francisco", "country": "US", "region": "CA", "street_address": "345 Spear St", "postal_code": "94105" } } } ] }