Entity feed

Create and upload Entity feeds

When creating and uploading Entity feeds, follow these instructions:

  • Follow the spec described in the Entity feed for Entity data files. We recommend using unique Entity data file names for each upload. Include a timestamp in the filename, for example, Entity_1633621547.json.
  • In the fileset descriptor, set the name field to reservewithgoogle.entity. For an example of the descriptor file, refer to the JSON sample. We recommend using unique descriptor file names for each upload. Include a timestamp in the filename, for example, Entity_1633621547.filesetdesc.json. The descriptor file must be uploaded to the generic SFTP server.
  • Upload feeds to the generic SFTP server daily as full refreshes.
  • You can find SFTP server details in the Configuration > Feeds section of the Partner Portal.
  • Selecting feed servers

    Selecting feed servers in the Partner Portal
  • View feed ingestion status in the Feeds > History section of the Partner Portal.

Definitions

EntityFeed definition

message EntityFeed {
  repeated Entity data = 1;
}

Entity definition

//
// Information about an Entity that is on the partner's platform. For example,
// an Entity could be a retail store, a hospital, an online business etc.
message Entity {
  // An opaque string generated by the partner that identifies an Entity.
  // Must be unique across all entities.
  // Strongly recommended to only include URL-safe characters. (required)
  string entity_id = 1;

  // If present, the name, telephone, url and location are used to support
  // matching partner inventory with entities already present on Google. This
  // information will not be displayed.

  // The name of the Entity. (required)
  string name = 2;

  // The contact telephone number of the Entity including its country and area
  // codes, e.g. +14567891234. Highly recommended. (optional)
  string telephone = 3;

  // The url of the Entity's public website. Highly recommended. (optional)
  string url = 4;

  // The location of the Entity (required)
  madden.ingestion.GeoCoordinates location = 5;

  // This field is used by the aggregator to define which Brand should be
  // applied to which entity. (optional)
  string aggregator_brand_id = 6;
}

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;
}
// 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
        ;
  }
}

Entity feed samples

Entity feed

Filename : entity_1697754089_0001.json

{
  "data": [
    {
      "entity_id": "dining-1",
      "name": "Sample Eatery 1",
      "telephone": "+1-415-876-5432",
      "url": "www.sampleeatery1.com",
      "location": {
        "latitude": 37.404570,
        "longitude": -122.033160,
        "address": {
          "country": "US",
          "locality": "Sunnyvale",
          "region": "CA",
          "postal_code": "94089",
          "street_address": "815 11th Ave"
        }
      }
    },
    {
      "entity_id": "dining-2",
      "name": "Sample Eatery 2",
      "telephone": "+1-415-123-4567",
      "url": "www.sampleeatery2.com",
      "location": {
        "latitude": 37.422113,
        "longitude": -122.084041,
        "address": {
          "country": "US",
          "locality": "Sunnyvale",
          "region": "CA",
          "postal_code": "94089",
          "street_address": "805 11th Ave"
        }
      }
    }
  ]
}

Descriptor File

Filename : entity_1697754089.filesetdesc.json

{
  "generation_timestamp": 1697754089,
  "name": "reservewithgoogle.entity",
  "data_file": [
    "entity_1697754089_0001.json",
    "entity_1697754089_0002.json"
  ]
}