Note: The Services feed spec is defined in protobuffer format below,
however we recommend uploading the feeds in JSON format.
Note: The order in which the services are displayed cannot be configured at this time.
ServiceFeed Definition
message ServiceFeed {
FeedMetadata metadata = 1;
repeated Service service = 2;
}
Service Definition
// The definition of a service provided by a merchant .
message Service {
// An opaque string from an aggregator partner which uniquely identifies a
// merchant . ( required )
string merchant_id = 1 ;
// An opaque string from an aggregator partner which uniquely identifies the
// service . ( required )
string service_id = 2 ;
// The name of the service . Deprecated . Please use localized_service_name .
string name = 3 [ deprecated = true ] ;
// The name of the service , e . g . "Men's haircut ". Possibly in several locales .
// ( required )
Text localized_service_name = 26 ;
// The description of the service .
// Deprecated . Please use localized_description .
string description = 4 [ deprecated = true ] ;
// The description of the product . Limited formatting options are allowed in
// the HTML format . Supported tags :
// * h1 - h5
// * ul , ol , li
// * strong , italic , em
// * p , br
// Other tags are not supported and will be removed . CSS , tables , style
// property , `a` links are not supported . Images are not allowed , use the
// related_media field instead .
// Important notes :
// * Try not to use other tags except for the supported ones mentioned
// above , because the contents within unsupported tags will be stripped ,
// and may lead to an undesirable user experience .
// * Try avoid deep nested structures like more than 3 different heading
// levels or nested lists . Keeping the structure flat , simple , and
// straightforward , helps to create a better user experience .
// * Do not duplicate info from the product_features field below in the
// description as both would normally be shown side by side .
// Recommended to not exceed length of 10000 in any language . Max length :
// 16000.
// Recommended .
// ( optional )
Text localized_description = 27 ;
// The price of the service . ( optional , overridden when payment options or
// ticket types present )
Price price = 5 ;
// Describes how the price is interpreted and displayed to the user . Can be
// used by any vertical except Dining and Things To Do to configure display of
// the service price . ( optional )
PriceInterpretation price_interpretation = 23 ;
// Rules to book / cancel an appointment . ( optional )
SchedulingRules rules = 6 ;
// Enum to indicate the prepayment type .
enum PrepaymentType {
// By default we will assume that the prepayment is NOT_SUPPORTED .
PREPAYMENT_TYPE_UNSPECIFIED = 0 ;
// The user has to pay this service at the booking time .
REQUIRED = 1 ;
// The user can choose to pre - pay this service at the booking time or later ,
// but it is not required in order to book .
OPTIONAL = 2 ;
// The prepayment is not supported for this service .
NOT_SUPPORTED = 3 ;
}
// Whether a prepayment is required , optional or not supported . ( optional )
PrepaymentType prepayment_type = 8 ;
// Specific information around when prepayment is completed .
message PrepaymentTerms {
// Enum to specify when the charge will occur relative to the purchase
// time .
enum ChargeTiming {
CHARGE_TIMING_UNSPECIFIED = 0 ;
CHARGE_NOW = 1 ;
CHARGE_LATER = 2 ;
}
ChargeTiming charge_timing = 1 ;
}
PrepaymentTerms prepayment_terms = 34 ;
// The service's tax rate . If present this field overrides any tax_rate set at
// the merchant level . An empty message ( i . e . tax_rate { } ) will reset the
// applied tax rate to zero . ( optional )
TaxRate tax_rate = 9 ;
// A list of ids referencing the payment options which can be used to pay
// for this service . The actual payment options are defined at the Merchant
// level , and can also be shared among multiple Merchants . ( optional )
repeated string payment_option_id = 10 ;
// Defines how a deposit may be charged to the user . Can be overridden at the
// availability level . ( optional )
Deposit deposit = 11 ;
// Defines a no show fee that may be charged to the user . Can be overridden
// at the availability level . ( optional )
NoShowFee no_show_fee = 12 ;
// Indicates whether the user must provide a credit card in order to book this
// service .
// This value can be overridden at the availability level . ( optional )
RequireCreditCard require_credit_card = 13 ;
// Additional information which needs to be added if the service requires the
// user to pay directly to the merchant . IMPORTANT NOTE : RwG would not be
// involved in this transaction . ( Optional . Required if virtual_session is
// defined and prepayment_type is NOT set to REQUIRED ).
DirectMerchantPayment direct_merchant_payment = 36 ;
// An action link related to this service . If action link exists , type ( see
// below ) must be set in the Service .
repeated ActionLink action_link = 14 ;
enum ServiceType {
SERVICE_TYPE_UNSPECIFIED = 0 ;
// Service that provides dining reservation .
SERVICE_TYPE_DINING_RESERVATION = 1 ;
// Service that provides food ordering in general , could be either takeout
// or delivery or both .
SERVICE_TYPE_FOOD_ORDERING = 2 ;
// Service that only provides food delivery .
SERVICE_TYPE_FOOD_DELIVERY = 6 ;
// Service that only provides food takeout .
SERVICE_TYPE_FOOD_TAKEOUT = 7 ;
// Services that provide event based ticketing ( e . g . concerts , sporting
// events , shows ). Do not use for Reserve with Google integrations .
SERVICE_TYPE_EVENT_TICKET = 3 ;
SERVICE_TYPE_TRIP_TOUR = 4 ;
// Service that provides appointments or classes . Recommended for ( 1 ) health
// and fitness , ( 2 ) spa and beauty , and ( 3 ) financial consults and
// evaluations services . Please see the supported service types :
// https :// developers . google . com / maps - booking / guides / end - to - end - integration / overview
SERVICE_TYPE_APPOINTMENT = 5 ;
// Service that provides appointment for an online class or session which
// will be fully virtual . Must be set if enabling virtual service bookings .
SERVICE_TYPE_ONLINE_APPOINTMENT = 8 ;
// Service that allows users to shop from the given merchant . It could
// either be delivery or pickup .
SERVICE_TYPE_SHOPPING = 9 ;
}
// The predefined type of this service . ( optional )
ServiceType type = 15 ;
// Types of tickets that can be booked / purchased for this service . Only
// supported in order based booking API , see
// https :// developers . google . com / maps - booking / guides / partner - implementing - booking - server - 1a
// ( optional )
repeated TicketType ticket_type = 16 ;
// Photos related to this service . Google will crawl these media to ensure
// that they are displayed correctly to end - users . ( optional )
repeated RelatedMedia related_media = 17 ;
// Service attribute values that apply to this service ( optional ).
// Each Service may have zero or more values for each service attribute
// defined in the corresponding Merchant .
repeated ServiceAttributeValueId service_attribute_value_id = 18 ;
// Rules related to joining the waitlist . Should be populated if the service
// and merchant support waitlist functionality . Should not be populated
// otherwise .
WaitlistRules waitlist_rules = 19 ;
// Additional information unique to the event ticketing vertical . ( optional )
TicketingVerticalSpecificData ticketing_vertical_specific_data = 22 ;
// User rating for this service as an aggregate metric over all reviews .
Rating rating = 30 ;
// Additional information unique to home service vertical . ( optional )
HomeServiceData home_service_data = 31 ;
// Information about virtual session . ( Optional . Required if enabling
// virtual services )
VirtualSession virtual_session = 35 ;
// Ranking hint for this service . Optional .
ServiceRankingHint ranking_hint = 37 ;
// A template specifying how Google should generate URLs to external site .
// Used for Dining Reservations Payment Redirect Partners only .
UriTemplate uri_template = 38 ;
}
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 ;
}
PriceInterpretation Definition
// Describes how a Price should be interpreted and displayed to the user .
enum PriceInterpretation {
// Price interpretation unspecified , defaults to EXACT_AMOUNT .
PRICE_INTERPRETATION_UNSPECIFIED = 0 ;
// When the price should be interpreted as a specific value .
//
// Examples :
// $ 20 for a yoga class ; $ 15 for a child haircut
EXACT_AMOUNT = 1 ;
// When the price of a service is variable but a minimum price is known and
// displayed to consumers . Consumers may make choices which increase the
// price .
//
// Note that any service that uses this PriceInterpretation must use
// PrepaymentType NOT_SUPPORTED .
//
// Examples :
// $ 30 for dog grooming , but additional consumer choices may increase the
// price
STARTS_AT = 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 ;
}
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 ;
}
SchedulingRules Definition
// The scheduling rules for a service .
message SchedulingRules {
// The duration ( in seconds ) from when the last booking can be made to
// when the availability slot starts or ends .
//
// If "min_advance_booking " is set , the last bookable time is calculated as
// ( <slot start time > - "min_advance_booking ") .
// If "min_booking_buffer_before_end_time " is set , the last bookable time is
// calculated as ( <slot end time > - "min_booking_buffer_before_end_time ") .
// Note that the value of "min_booking_buffer_before_end_time " must be
// positive if set .
// If both are unset , the slot is bookable until the slot begin time . If both
// fields are set , only one value will be picked while the other value
// ignored -- we cannot reliably predict which value is chosen .
//
// Examples :
// * A haircut that needs to be booked at least 1 hour before the start time .
// 'scheduling_rules { min_advance_booking : 3600 ... } `
//
// * A museum where the last ticket can be purchased 30 mins before closing :
// 'scheduling_rules { min_booking_buffer_before_end_time : 1800 ... } '
//
// * A movie ticket that needs to be purchased before the start time .
// 'scheduling_rules { ... } ' ( leave this field empty )
// ( optional )
oneof min_booking_buffer {
// The duration ( in seconds ) from when the last booking can be made to
// when the availability slot starts .
int64 min_advance_booking = 1 ;
// The duration ( in seconds ) from when the last booking can be made to
// when the availability slot ends . If this field is set , the
// "admission_policy " field must be set to TIME_FLEXIBLE to indicate that
// users can use the purchased tickets after slots start .
int64 min_booking_buffer_before_end_time = 6 ;
}
// The minimum advance notice in seconds required to cancel a booked
// appointment online . ( optional )
int64 min_advance_online_canceling = 2 ;
// The fee for canceling within the minimum advance notice period .
Price late_cancellation_fee = 3 [ deprecated = true ];
// The fee for no - show without canceling .
Price noshow_fee = 4 [ deprecated = true ];
// The admission policy of this service .
enum AdmissionPolicy {
// Unused .
ADMISSION_POLICY_UNSPECIFIED = 0 ;
// Customers are required to be present at the start time of the
// availability slot , and the service is expected to finish at the
// end time of the slot .
// Examples of TIME_STRICT use cases :
// * A tour that starts at 9 am that requires all attendees to arrive
// at the start time , and returns at around 12 pm .
// * A haircut reservation at 3 pm on Saturday that will take approximately
// 30 minutes .
// * A fitness class from 6 pm to 8 pm .
TIME_STRICT = 1 ;
// Customers can arrive at any time between the start and end time of the
// availability slot to use this booking .
//
// Examples of TIME_FLEXIBLE use cases :
// * A museum ticket that can be used during any time on the purchase
// date .
// * An afternoon admission to an amusement park that can be used from
// 12 pm to 9 pm .
TIME_FLEXIBLE = 2 ;
// Customers need to arrive at the merchant at the start time of the
// availability slot but can leave any time they want .
//
// For example , in the museum admission scenario , a timed entry ticket
// for 10 am requires the user to be at the museum at 10 am . The start time of
// availability slots for this service represents the designated entry
// time . The end time , however , is used solely as a key to identify the
// availability slot for booking .
TIMED_ENTRY_WITH_FLEXIBLE_DURATION = 3 ;
}
// The admission policy that applied to this service . If unset , defaults to
// TIME_STRICT . ( optional )
AdmissionPolicy admission_policy = 5 ;
// Scheduling rules cancellation policy ( required for Things - to - do ) .
// Defaults to non - refundable .
CancellationPolicy cancellation_policy = 7 ;
}
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 ;
}
// Defines a field that is included in a ServiceIntakeForm .
message ServiceIntakeFormField {
// A string from an aggregator partner which uniquely identifies a form field .
// This id should be the same as the id in the corresponding form field
// answer and must be unique across both the service level and per ticket
// intake forms . ( required )
string id = 5 ;
// Enum to indicate the type of field .
enum FieldType {
// Fields of unspecified or unknown type will be ignored .
FIELD_TYPE_UNSPECIFIED = 0 ;
// A one - line input field for text .
SHORT_ANSWER = 1 ;
// A multi - line input field for text .
PARAGRAPH = 2 ;
// A set of radio buttons that requires one choice from many options .
MULTIPLE_CHOICE = 3 ;
// One or more enumerated items with checkboxes .
CHECKBOXES = 4 ;
// A selection from a dropdown .
DROPDOWN = 5 ;
// A yes / no button .
BOOLEAN = 6 ;
// A search widget that supports finding matched location given user input
// from provided location list .
LOCATION_SEARCH = 7 ;
}
// The type of this field . ( required )
FieldType type = 1 ;
// The text shown to the user for this field . Deprecated , please use
// `localized_label` instead .
string label = 2 [ deprecated = true ] ;
// The text shown to the user for this field . The field can be supplied in
// multiple locales . ( required )
Text localized_label = 7 ;
// Set if and only if the field type is LOCATION_SEARCH . Please use the
// "location_id " in the "location " field to specify the location value .
repeated string value = 3 ;
// Set if and only if the field type is MULTIPLE_CHOICE , CHECKBOXES , or
// DROPDOWN . Used to enumerate possible choices .
repeated Text choice_text = 8 ;
// Indicates whether an answer to this field is required by a user . ( optional )
bool is_required = 4 ;
// Indicates whether a custom value is allowed in additional to predefined
// answers . This is only applicable when the field type is LOCATION_SEARCH .
// ( optional )
bool allow_custom_answer = 9 ;
// Additional options provided in addition to the provided values . Only
// applicable when the field type is LOCATION_SEARCH .
// E . g . in addition to the provided location list , another available option
// can be "I will contact supplier later ". ( optional )
repeated Text additional_option = 10 ;
// If this question should only be shown when the user books certain ticket
// types , this field should be set as the set of applicable ticket type ids .
// Leave the field empty if the question is always applicable .
// ( optional )
repeated string ticket_type_restrict = 6 ;
// The hint text for input , which shows up as a text placeholder . This is only
// applicable when the field type is SHORT_ANSWER or PARAGRAPH .
// ( optional )
Text hint = 11 ;
}
// Defines an intake form that customizes the service provided by a merchant.
message ServiceIntakeForm {
// Fields that will be displayed to the user. (required)
repeated ServiceIntakeFormField field = 1 ;
// If true, this form will be shown to first time customers.
// Deprecated. This functionality is not supported for intake forms.
bool first_time_customers = 2 [ deprecated = true ];
// If true, this form will be shown to repeat customers.
// Deprecated. This functionality is not supported for intake forms.
bool returning_customers = 3 [ deprecated = true ];
}
Deposit Definition
// A deposit that the user may be charged or have a hold on their credit card
// for.
message Deposit {
// Deposit amount.
Price deposit = 1 ;
// Minimum advance cancellation for the deposit.
int64 min_advance_cancellation_sec = 2 ;
// Defines how the deposit is determined from the availability.
PriceType deposit_type = 3 ;
}
NoShowFee Definition
// A fee that a user may be charged if they have made a booking but do not
// show up.
message NoShowFee {
// The amount the user may be charged if they do not show up for their
// reservation.
Price fee = 1 ;
// Defines how the fee is determined from the availability.
PriceType fee_type = 3 ;
}
PriceType Definition
// Defines how a total price is determined from an availability .
enum PriceType {
// The price is for a fixed amount . This is the default value if the field is
// not set .
//
// Examples :
// $ 50 deposit to reserve a table ; $ 20 no show fee for a yoga class
FIXED_RATE_DEFAULT = 0 ;
// The price specified is per person , and the total price is calculated
// according to the party size specified in Resources as price_micros *
// party_size . A PER_PERSON price must be accompanied by a party size in the
// availability resources . If it is not , a party size of one is used .
//
// Examples :
// $ 10 each for tickets to a museum
PER_PERSON = 1 ;
}
RequireCreditCard Definition
// Defines whether a credit card is required in order to book an appointment .
enum RequireCreditCard {
// The credit card requirement is not explicitly specified and the
// behaviour is identical to the one specified for CONDITIONAL .
REQUIRE_CREDIT_CARD_UNSPECIFIED = 0 ;
// Google will require a credit card for the booking if any of the following
// conditions are met :
// * the availability has a price and the prepayment_type is REQUIRED
// * the no_show_fee is set
// * the deposit field is set .
REQUIRE_CREDIT_CARD_CONDITIONAL = 1 ;
// A credit card is always required in order to book this availability
// regardless of other field values .
REQUIRE_CREDIT_CARD_ALWAYS = 2 ;
}
PerTicketFee Definition
// Fees that must be paid for each ticket the user purchases. These fields
// must add up to the total per ticket fee.
message PerTicketFee {
// An extra charge assessed for a service.
Price service_charge = 1 ;
// A fee that goes to the venue/facility.
Price facility_fee = 2 ;
// Per ticket taxes.
Price taxes = 3 ;
}
PreOrderFee Definition
// Fees that must be paid once per order , regardless of number of tickets . These
// fields must add up to the total per order fee .
message PerOrderFee {
// A fee that can vary by delivery method .
Price delivery_fee = 1 ;
// A fee to process the user's payment method .
Price processing_fee = 2 ;
}
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 ;
// An unordered list of ISO 3166 - 1 alpha - 2 country codes . Leave empty for
// unrestricted visibility .
repeated string restricted_country = 3 ;
// 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 ;
}
// 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 ;
}
// 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 ;
}
TicketType Definition
// TicketType is used to differentiate among tickets ( where a ticket can be a
// spot on a raft trip , an admission to a museum , etc .) with different prices
// and / or availabilities due to different user types or different service
// attributes .
// Only add new ticket types when at least one of the following differs :
// ( 1 ) short_description ( 2 ) option_description ( 3 ) price
message TicketType {
// The ticket id is used to differentiate among different ticket types of the
// same service , and is only expected to be unique within a service .
string ticket_type_id = 1 ;
// This can be user visible , e . g ., “adult” , "child ", “veteran” , “Row J” , etc .
// Deprecated , use `localized_short_description` instead .
string short_description = 2 [ deprecated = true ] ;
// This can be user visible , e . g ., “adult” , "child ", “veteran” , “Row J” , etc .
// The field can be supplied in multiple locales .
Text localized_short_description = 6 ;
// The price of a single ticket of this type .
Price price = 3 ;
// Additional fees for purchasing this ticket . ( optional )
PerTicketFee per_ticket_fee = 5 ;
// Indicates the price format displayed on the landing page .
//
// This field is ignored for non - link - out inventory .
//
// This field allows Google surfaces to show the same price format as used by
// the landing page . Consistent price formats improve conversion rate and
// reduce confusion .
enum PriceDisplayType {
// The price display type is unspecified . Google will determine which
// format to show .
PRICE_DISPLAY_TYPE_UNSPECIFIED = 0 ;
// The price shown on the landing page is the base price .
PRICE_DISPLAY_TYPE_BASE = 1 ;
// The price shown on the landing page includes all fees and taxes .
PRICE_DISPLAY_TYPE_ALL_IN = 2 ;
}
// Predetermined price display type of a single ticket of this type .
PriceDisplayType price_display_type = 9 ;
// Description of any additional option which this ticket type represents , if
// any . Deprecated , use `localized_option_description` instead .
string option_description = 4 [ deprecated = true ] ;
// Description of any additional option which this ticket type represents , if
// any . The field can be supplied in multiple locales .
//
// This is useful when the ticket type represents multiple dimensions .
//
// Example : an admission ticket with different types 'adult ', 'child ' and
// language as an additional option , the expected TicketType list would be :
// - { ticket_type_id : "ticket_type_1 "
// localized_short_description { value : "adult " }
// localized_option_description { value : "english " }
// }
// - { ticket_type_id : "ticket_type_2 "
// localized_short_description { value : "adult " }
// localized_option_description { value : "spanish " }
// }
// - { ticket_type_id : "ticket_type_3 "
// localized_short_description { value : "child " }
// localized_option_description { value : "english " }
// }
// - { ticket_type_id : "ticket_type_4 "
// localized_short_description { value : "child " }
// localized_option_description { value : "spanish " }
// }
//
// Optional , but if any ticket type within the service has this field set , we
// expect all other ticket types to have this field set as well ( a default
// option_description could be used ). E . g .
// [{ ticket_type_1 , adult , english } , { ticket_type_1 , adult , ''}] is not a
// valid list .
//
// Only two HTML formatting tags are supported : <em > and <br >. They are
// intended to be used for specifying options with both a title and
// detailed description , for example : "<em>Premium Seating </ em><br>This option
// offers seating at the private boxes including fully cushioned seats ,
// private TVs , in - seat food and beverage service . These seats provide
// picturesque views of the field . "
Text localized_option_description = 7 ;
// Predetermined inventory type of a single ticket of this type .
enum InventoryType {
// The inventory type is unspecified .
INVENTORY_TYPE_UNSPECIFIED = 0 ;
// Primary inventory .
INVENTORY_TYPE_PRIMARY = 1 ;
// Verified resale inventory .
INVENTORY_TYPE_VERIFIED_RESALE = 2 ;
// Resale inventory .
INVENTORY_TYPE_RESALE = 3 ;
// Aggregator inventory .
INVENTORY_TYPE_AGGREGATOR = 4 ;
}
// Predetermined inventory type of a single ticket of this type .
InventoryType inventory_type = 8 ;
}
Location Definition
// Geographic information about a location.
message Location {
// 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 match the location to this place.
// (optional)
string place_id = 1 ;
// The location's name, telephone, url and geo are used to support matching
// the location with places already present on Google Maps.
//
// This field is optional, but may be required in some contexts. For example,
// a Service.location without a name will not be matched to a business entity,
// even if they are located at the same address. (optional)
string name = 2 ;
// The public telephone number of the location including its country and area
// codes, e.g. +14567891234. (optional)
string telephone = 3 ;
// The url of the location's public website. (optional)
string url = 4 ;
// The Geo info of the location, including latitude, longitude, and address.
// (optional)
GeoCoordinates geo = 5 ;
// Optional text to provide more precise description of the location, or
// instructions assisting locating the place. E.g. "Front entrance of the
// library", "meet at the intersect of Road A and Street B". (optional)
Text description = 6 ;
// The type of the location. Note that this field may be required when
// attached to a Service, see comments in Service.location for more details.
// (optional)
LocationType location_type = 7 ;
// Unique reference of the location within the service. This id can be used to
// refer to this location in other service fields. E.g. in the custom intake
// form, a set of location ids can be used to specify pick up location
// options. If set, this id should be unique within the same service.
// Note this is only applicable for Service.
// (optional)
string location_id = 8 ;
}
Rating Definition
// Defines Rating for an entity.
message Rating {
// Average rating value (required when number_of_ratings > 0).
// The value must be in the range of [1, 5] and can be omitted if and only if
// the number_of_ratings is zero.
double value = 1 ;
// Number of ratings used in calculating the value (required).
uint64 number_of_ratings = 2 ;
}
LocationType Definition
enum LocationType {
// Location type unspecified .
LOCATION_TYPE_UNSPECIFIED = 0 ;
// The location where this service visits .
VISITED_LOCATION = 1 ;
// The location where this service starts , also serves as MEETING_LOCATION
// or START_LOCATION .
START_LOCATION = 2 ;
// The location where this service ends .
END_LOCATION = 3 ;
}
CancellationPolicy Definition
// Cancellation policy for a service .
message CancellationPolicy {
// Defines a single refund condition . Multiple refund conditions could be
// used together to describe "refund steps " as various durations before the
// service start time .
message RefundCondition {
// Duration in seconds before the start time , until when the customer can
// receive a refund for part of the service's cost specified in
// `refund_percent` .
// When set to 0 ( default ), the service can be cancelled at any time .
int64 min_duration_before_start_time_sec = 1 ;
// The percent that can be refunded , as long as the service booking is
// cancelled at least `min_duration_before_start_time` before the service
// start time , in the range of [ 0 , 100 ] . When set to 0 ( default ), the
// service is not refundable . When set to 100 this service is fully
// refundable .
uint32 refund_percent = 2 ;
}
// Zero or more refund conditions applicable to the policy .
repeated RefundCondition refund_condition = 1 ;
}
// Photos related to this service . Google will crawl these media to ensure
// that they are displayed correctly to end - users . ( optional )
message RelatedMedia {
// URL of this media source . Google will crawl the media hosted at this URL .
string url = 1 ;
// Type of this media source .
MediaType type = 2 ;
// Enum to indicate the type of this media source . Only photos are supported .
// Please reach out to the Reserve with Google team if other media beyond
// photos need to be supported .
enum MediaType {
// Unused .
TYPE_UNSPECIFIED = 0 ;
// Indicates the media provided by the url is a photo .
PHOTO = 1 ;
}
// Caption of the media that supports i18n , only plain text is supported . Any
// HTML components will be stripped . ( optional )
Text localized_caption = 5 ;
// Attribution information about the source of the media . Note that if
// the attribution is required to display with the media to give credit to
// photographer or agency , this field must be set . ( optional )
Attribution attribution = 4 ;
// Attribution information for this media .
message Attribution {
// The text to give credit to the photographer or agency supporting i18n .
// This text will be displayed together with the source media . Note that
// only plain text is supported for this field , any HTML components will be
// stripped ( hyperlink based attribution is not supported ) .
Text localized_text = 2 ;
// Deprecated , prefer to use localized_text .
string text = 1 [ deprecated = true ];
}
// Deprecated , prefer to use localized_caption .
string caption = 3 [ deprecated = true ];
}
ServiceAttributeValueId Definition
// Identifies a particular value of a service attribute to be applied to a
// Service.
message ServiceAttributeValueId {
// ID of an attribute as defined in Merchant.service_attribute, e.g.
// "service-type".
string attribute_id = 1 ;
// ID of the value for this attribute, e.g. "haircut". Must match a value_id
// in the service attribute definition.
string value_id = 2 ;
}
WaitlistRules Definition
// Rules related to joining the waitlist.
message WaitlistRules {
// Required. Must be a positive integer for services providing waitlist
// functionality. If the service or merchant does not provide waitlist
// functionality, this must not be populated.
int32 min_party_size = 1 ;
// Required. Must be a positive integer for services providing waitlist
// functionality. If the service or merchant does not provide waitlist
// functionality, this must not be populated.
int32 max_party_size = 2 ;
// If true, the user will be able to send a free-form additional text request
// when joining the waitlist for this service.
bool supports_additional_request = 3 ;
// Set options for parties larger than the set max_party_size.
// Leave empty if larger parties should not be given alternative options
// for joining a waitlist.
repeated UnsupportedPartySizeOption above_max_party_size_options = 4 ;
}
UnsupportedPartySizeOption Definition
// Options for parties that are out of range.
message UnsupportedPartySizeOption {
// Available options for parties that are out of range.
oneof kind {
// Party sizes that are out of range can call the business.
// A predefined message will be displayed to the user.
// Sample text to be displayed: "For parties larger than
// {waitlist_rules.max_party_size} please call the restaurant at
// {restaurant phone number in Google maps}." CallMerchant must be
// set, but will be empty.
CallMerchant call_merchant = 1 ;
}
}
CallMerchant Definition
// Empty message to be used in UnsupportedPartySizeOption, setting this will
// display a pre-defined message to users to call the business for a booking.
message CallMerchant {}
TicketingVerticalSpecificData Definition>
// Additional information unique to the event ticketing vertical .
message TicketingVerticalSpecificData {
// A subset of event categories for which we customize the product experience .
// Note : not intended to be a universal ontology of events .
enum EventCategory {
// Not specified . Do not use .
EVENT_CATEGORY_UNSPECIFIED = 0 ;
// Concerts .
EVENT_CATEGORY_CONCERT = 1 ;
// Sports events .
EVENT_CATEGORY_SPORTS = 2 ;
// Theatre events .
EVENT_CATEGORY_THEATRE = 3 ;
// Exhibits .
EVENT_CATEGORY_EXHIBITS = 4 ;
// Workshops and Classes .
EVENT_CATEGORY_WORKSHOPS_AND_CLASSES = 5 ;
}
// The category of the event . Set only when event falls into one of the
// predefined categories . ( optional )
EventCategory event_category = 1 ;
// The URL of the event on the partner's website . ( optional )
string event_url = 2 ;
// Identifiers , webpages , or any other public sources that reference an
// entity .
message PublicIdentificationData {
// Public URL of any webpage that is dedicated to only the topic . This could
// include official websites , discogs , social media platforms , wikipedia or
// imdb pages , e . g . https : // www . discogs . com / artist / 1124645 - Taylor - Swift ,
// https : // www . wikidata . org / wiki / Q19320959 , https : // twitter . com / acmilan .
// ( optional )
repeated string relevant_url = 1 ;
// The 36 - character musicbrainz identifier of the artist or other music
// entities , if applicable . See
// https : // musicbrainz . org / doc / MusicBrainz_Identifier .
// ( optional )
string musicbrainz_id = 2 ;
}
// Represents an entity related to the event .
message Entity {
// Unique identifier of the entity in the partner's database . ( optional )
string id = 1 ;
// Name of the entity . ( required )
string name = 2 ;
// Url of the webpage that unambiguously describes the entity .
// This is the webpage on the partner's website for the entity if any ; for
// other public URLs of the entity , use relevant_url in
// public_identification_data . ( optional )
string url = 3 ;
// The type of the entity . Note : not intended to be a universal ontology .
enum EntityType {
// Not specified . Do not use .
ENTITY_TYPE_UNSPECIFIED = 0 ;
// The entity represents the artist or group performing at a
// concert or a show . Only applicable when event category is CONCERT or
// THEATRE .
ENTITY_TYPE_PERFORMER = 1 ;
// The entity represents the sports team or player at the event . Only
// applicable when event category is SPORTS .
ENTITY_TYPE_PLAYER = 2 ;
// The entity represents the tour that this event belongs to . Only
// applicable when event category is CONCERT .
ENTITY_TYPE_CONCERT_TOUR = 3 ;
// The entity represents a sports tournament that this event
// belongs to . Only applicable when event category is SPORTS .
ENTITY_TYPE_SPORTS_SERIES = 4 ;
// The entity represents the type of play ( e . g . , musical , comedy , ballet ,
// etc . ) performed at the event . Only applicable when event category is
// THEATRE .
ENTITY_TYPE_PLAY = 5 ;
}
// The type of the entity . ( optional )
EntityType entity_type = 4 ;
// The role of the entity in the event .
enum EntityRole {
// Not specified .
ENTITY_ROLE_UNSPECIFIED = 0 ;
// The entity represents a headliner or leading performer at the event .
ENTITY_ROLE_HEADLINER = 1 ;
// The entity represents a supporting performer at the event .
ENTITY_ROLE_SUPPORTER = 2 ;
// The entity represents the home team at the ( sports ) event .
ENTITY_ROLE_HOME_TEAM = 3 ;
// The entity represents the away team at the ( sports ) event .
ENTITY_ROLE_AWAY_TEAM = 4 ;
}
// The role of the entity in the event . ( optional )
EntityRole entity_role = 5 ;
// Public references of the entity . ( optional )
PublicIdentificationData public_identification_data = 6 ;
}
// A list of entities related to the event . ( optional )
repeated Entity entity = 3 ;
// The type of the event attendance .
enum AttendanceMode {
// Not specified .
ATTENDANCE_MODE_UNSPECIFIED = 0 ;
// For virtual events .
ONLINE = 1 ;
// For physical events .
PHYSICAL = 2 ;
// For events that are both physical and virtual .
PHYSICAL_ONLINE_MIXED = 3 ;
}
// Required . The type of the event attendance .
AttendanceMode event_attendance_mode = 4 ;
// Optional . URL where the event can be watched .
repeated string event_virtual_location_url = 5 ;
// Optional . Organizer who hosts the event .
Text event_organizer = 6 ;
// Optional . URL of the organizer who hosts the event .
string event_organizer_url = 7 ;
// The type of the organizer .
enum OrganizerType {
// Not specified .
ORGANIZER_TYPE_UNSPECIFIED = 0 ;
// For organizer who is a person .
PERSON = 1 ;
// For organizer who is an organization .
ORGANIZATION = 2 ;
}
// Optional . The type of the organizer .
OrganizerType event_organizer_type = 8 ;
// URL of the pages where the event information or descriptions can be found .
// Required for virtual events as virtual events may not have a ticketing
// page and this url contains the basic information of the event .
repeated string event_source_url = 9 ;
// State of the event .
enum EventState {
// Not specified .
EVENT_STATE_UNSPECIFIED = 0 ;
// The event is scheduled .
SCHEDULED = 1 ;
// The event is rescheduled .
RESCHEDULED = 2 ;
// The event is cancelled .
CANCELLED = 3 ;
// The event is postponed .
POSTPONED = 4 ;
}
// Optional . State of the event .
EventState event_state = 10 ;
// The localized brand name . ( optional )
Text brand_name = 11 ;
// Information about the creator of the event . Only relevant for platforms
// that include user - generated content events .
message EventCreator {
// Name of the event creator . No character restriction .
string name = 1 [ features . field_presence = EXPLICIT ];
}
// Information about the creator of the event .
EventCreator event_creator = 12 ;
}
IntegrationType Definition
// Depth of integration supported .
enum IntegrationType {
// Defaults to END_TO_END .
INTEGRATION_TYPE_UNSPECIFIED = 0 ;
// Complete integration that allows end to end booking through Google .
INTEGRATION_TYPE_END_TO_END = 1 ;
// Feed integration that does not allow end to end booking through Google .
// Only merchants , services , and ( optionally ) availability data need
// to be sent .
INTEGRATION_TYPE_INVENTORY_ONLY = 2 ;
}
ToursAndActivitiesContent Definition
// Content fields specific to Tours and Activities . Each element in the repeated
// field should be independent to allow separate rendering ( e . g . as a bullet
// point ).
//
// Populating ToursAndActivitiesContent is strongly recommended for tours and
// activities , but not strictly required . All fields support both plain - text
// and HTML - like text for basic formatting . Supported HTML - like formatting tags :
//
// Phrase tags : <br >, <strong >, <em >, <i >:
// Only the four tags mentioned above are supported . <br > can be used to
// break lines in paragraphs , and <strong >/ <em > can be used to highlight
// important text . Any other phrase tags will be ignored .
//
// All other tags and custom styles are not allowed and will be removed . Any
// URLs , anchors , and links will be stripped , and will never be displayed to
// end - users .
//
// Important notes :
// * Don't duplicate data already supplied in `highlights` , `exclusion` and
// other , more specific , fields in service description .
// * Avoid using other tags except for the supported ones mentioned above ,
// because the contents within unsupported tags will be stripped , and may
// lead to an undesirable user experience .
message ToursAndActivitiesContent {
// The user - visible list of highlights .
repeated Text highlights = 1 ;
// The user - visible list of inclusions .
repeated Text inclusions = 2 ;
// The user - visible list of exclusions .
repeated Text exclusions = 3 ;
// The user - visible list of important notes , use for details such as age
// restrictions or other conditions that make this service unsuitable .
repeated Text must_know = 4 ;
}
HomeServiceData Definition
// Additional information required to be provided for home service vertical.
message HomeServiceData {
// The high level category to which this home service belongs to. E.g.
// plumber, electrician etc.
string category_type = 1 ;
// The job type under the category to which the given home service belongs to.
// E.g. unclog_drain, install_faucet are the job types under plumber
// category.
string job_type = 2 ;
}
VirtualSession Definition
// Information about virtual / online session . E . g . Online yoga class , virtual
// cooking class etc .
message VirtualSession {
// Instructions on how this virtual class is set up . If the partner does not
// include the video URL with the booking , then this text must include when
// the video URL will be shared with the user . Eg . “ Zoom url will be mailed
// 30 minutes prior to the class ” . ( Recommended )
// Only the folloiwng four tags are supported : <br >, <strong >, <em >, <i >.
Text session_instructions = 1 ;
// Requirements for the given virtual session . Eg . yoga mat ,
// cooking utensils etc . ( Recommended )
// Only the folloiwng four tags are supported : <br >, <strong >, <em >, <i >.
Text session_requirements = 2 ;
// Information about the virtual platform used in this session . ( Required to
// enable virtual services )
message VirtualPlatformInfo {
// Enum to indicate which virtual platform would be used by the merchant .
enum Platform {
PLATFORM_UNSPECIFIED = 0 ;
// The merchant is flexible in which video platform they use .
FLEXIBLE = 1 ;
GOOGLE_HANGOUTS = 2 ;
GOOGLE_MEET = 3 ;
ZOOM = 4 ;
SKYPE = 5 ;
YOUTUBE = 6 ;
// Should be set if the video platform used is different from the ones
// mentioned here .
OTHER = 7 ;
}
Platform platform = 1 ;
// The name of the platform if the platform is set to OTHER . ( Required if
// platform is set to OTHER )
Text other_platform_name = 2 ;
}
VirtualPlatformInfo virtual_platform_info = 3 ;
// Set this as true if the virtual session is not live and is pre - recorded .
// ( Optional )
bool is_session_prerecorded = 4 ;
}
DirectMerchantPayment Definition
// Information about how the user can pay directly to the merchant instead of
// pre-paying for the service via RwG.
message DirectMerchantPayment {
// Users would be advised to pay only via the payment methods mentioned below.
repeated Text payment_methods = 1 ;
}
ServiceRankingHint Definition
// Ranking hints for a service.
message ServiceRankingHint {
// Arbitrary partner or merchant assigned rank for this service.
//
// Services with a higher score will be shown more prominently (e.g. shown
// higher in lists). Note that other factors may also influence ranking, such
// as price, availability, user history, etc.
//
// Optional. Must be non-negative if set.
float score = 1 [ features . field_presence = EXPLICIT ];
}