message ServiceFeed {
FeedMetadata metadata = 1;
repeated Service service = 2;
}
Service Definition
//Thedefinitionofaserviceprovidedbyamerchant.messageService{//Anopaquestringfromanaggregatorpartnerwhichuniquelyidentifiesa//merchant.(required)stringmerchant_id=1;//Anopaquestringfromanaggregatorpartnerwhichuniquelyidentifiesthe//service.(required)stringservice_id=2;//Thenameoftheservice.Deprecated.Pleaseuselocalized_service_name.stringname=3[deprecated=true];//Thenameoftheservice,e.g."Men's haircut".Possiblyinseverallocales.//(required)Textlocalized_service_name=26;//Thedescriptionoftheservice.//Deprecated.Pleaseuselocalized_description.stringdescription=4[deprecated=true];//Thedescriptionoftheproduct.Limitedformattingoptionsareallowedin//theHTMLformat.Supportedtags://*h1-h5//*ul,ol,li//*strong,italic,em//*p,br//Othertagsarenotsupportedandwillberemoved.CSS,tables,style//property,`a`linksarenotsupported.Imagesarenotallowed,usethe//related_mediafieldinstead.//Importantnotes://*Trynottouseothertagsexceptforthesupportedonesmentioned//above,becausethecontentswithinunsupportedtagswillbestripped,//andmayleadtoanundesirableuserexperience.//*Tryavoiddeepnestedstructureslikemorethan3differentheading//levelsornestedlists.Keepingthestructureflat,simple,and//straightforward,helpstocreateabetteruserexperience.//*Donotduplicateinfofromtheproduct_featuresfieldbelowinthe//descriptionasbothwouldnormallybeshownsidebyside.//Recommendedtonotexceedlengthof10000inanylanguage.Maxlength://16000.//Recommended.//(optional)Textlocalized_description=27;//Thepriceoftheservice.(optional,overriddenwhenpaymentoptionsor//tickettypespresent)Priceprice=5;//Describeshowthepriceisinterpretedanddisplayedtotheuser.Canbe//usedbyanyverticalexceptDiningandThingsToDotoconfiguredisplayof//theserviceprice.(optional)PriceInterpretationprice_interpretation=23;//Rulestobook/cancelanappointment.(optional)SchedulingRulesrules=6;//Enumtoindicatetheprepaymenttype.enumPrepaymentType{//BydefaultwewillassumethattheprepaymentisNOT_SUPPORTED.PREPAYMENT_TYPE_UNSPECIFIED=0;//Theuserhastopaythisserviceatthebookingtime.REQUIRED=1;//Theusercanchoosetopre-paythisserviceatthebookingtimeorlater,//butitisnotrequiredinordertobook.OPTIONAL=2;//Theprepaymentisnotsupportedforthisservice.NOT_SUPPORTED=3;}//Whetheraprepaymentisrequired,optionalornotsupported.(optional)PrepaymentTypeprepayment_type=8;//Specificinformationaroundwhenprepaymentiscompleted.messagePrepaymentTerms{//Enumtospecifywhenthechargewilloccurrelativetothepurchase//time.enumChargeTiming{CHARGE_TIMING_UNSPECIFIED=0;CHARGE_NOW=1;CHARGE_LATER=2;}ChargeTimingcharge_timing=1;}PrepaymentTermsprepayment_terms=34;//Theservice'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.messagePrice{// 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)int64price_micros=1;// The currency of the price that is defined in ISO 4217. (required)stringcurrency_code=2;// An optional and opaque string that identifies the pricing option that is// associated with the extended price. (optional)stringpricing_option_tag=3;}
// Instance of a string in one locale.messageLocalizedString{// IETF BCP 47 language code, such as "en", "mas", "zh-Hant", "de-CH-1901".// See http://www.w3.org/International/articles/language-tags/.stringlocale=1;// Message in the locale above (UTF-8).stringvalue=2;}
// 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.messageTaxRate{// 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)int32micro_percent=1;}
Deposit Definition
// A deposit that the user may be charged or have a hold on their credit card// for.messageDeposit{// Deposit amount.Pricedeposit=1;// Minimum advance cancellation for the deposit.int64min_advance_cancellation_sec=2;// Defines how the deposit is determined from the availability.PriceTypedeposit_type=3;}
NoShowFee Definition
// A fee that a user may be charged if they have made a booking but do not// show up.messageNoShowFee{// The amount the user may be charged if they do not show up for their// reservation.Pricefee=1;// Defines how the fee is determined from the availability.PriceTypefee_type=3;}
// Defines Rating for an entity.messageRating{// 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.doublevalue=1;// Number of ratings used in calculating the value (required).uint64number_of_ratings=2;}
CancellationPolicy Definition
//Cancellationpolicyforaservice.messageCancellationPolicy{//Definesasinglerefundcondition.Multiplerefundconditionscouldbe//usedtogethertodescribe"refund steps"asvariousdurationsbeforethe//servicestarttime.messageRefundCondition{//Durationinsecondsbeforethestarttime,untilwhenthecustomercan//receivearefundforpartoftheservice'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;}
// Identifies a particular value of a service attribute to be applied to a// Service.messageServiceAttributeValueId{// ID of an attribute as defined in Merchant.service_attribute, e.g.// "service-type".stringattribute_id=1;// ID of the value for this attribute, e.g. "haircut". Must match a value_id// in the service attribute definition.stringvalue_id=2;}
WaitlistRules Definition
// Rules related to joining the waitlist.messageWaitlistRules{// 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.int32min_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.int32max_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.boolsupports_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.repeatedUnsupportedPartySizeOptionabove_max_party_size_options=4;}
UnsupportedPartySizeOption Definition
// Options for parties that are out of range.messageUnsupportedPartySizeOption{// Available options for parties that are out of range.oneofkind{// 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.CallMerchantcall_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.messageCallMerchant{}
HomeServiceData Definition
// Additional information required to be provided for home service vertical.messageHomeServiceData{// The high level category to which this home service belongs to. E.g.// plumber, electrician etc.stringcategory_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.stringjob_type=2;}
// Information about how the user can pay directly to the merchant instead of// pre-paying for the service via RwG.messageDirectMerchantPayment{// Users would be advised to pay only via the payment methods mentioned below.repeatedTextpayment_methods=1;}
ServiceRankingHint Definition
// Ranking hints for a service.messageServiceRankingHint{// 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.floatscore=1[features.field_presence=EXPLICIT];}
Services Feed samples
Beauty
{"metadata":{"processing_instruction":"PROCESS_AS_COMPLETE","generation_timestamp":1535437200,"total_shards":1},"service":[{"price":{"currency_code":"USD","price_micros":20000000},"service_id":"haircut","prepayment_type":"NOT_SUPPORTED","merchant_id":"beauty-1","localized_service_name":{"value":"Haircut","localized_value":[{"locale":"en","value":"Haircut"}]},"localized_description":{"value":"Awesome haircut","localized_value":[{"locale":"en","value":"Awesome haircut"}]}},{"localized_service_name":{"value":"Get your Hair Dyed","localized_value":[{"locale":"en","value":"Get your Hair Dyed"}]},"price":{"currency_code":"USD","price_micros":40000000},"service_id":"haircoloring","prepayment_type":"NOT_SUPPORTED","merchant_id":"beauty-1","localized_description":{"value":"haircut","localized_value":[{"locale":"en","value":"haircut"}]}}]}
Fitness
{"metadata":{"total_shards":1,"processing_instruction":"PROCESS_AS_COMPLETE","shard_number":0,"generation_timestamp":1462926569},"service":[{"merchant_id":"fitness-1","service_id":"hathayogaclass","localized_service_name":{"value":"Hatha Yoga Class","localized_value":[{"locale":"en","value":"Hatha Yoga Class"}]},"localized_description":{"value":"Yoga master John will teach the basics of Hatha Yoga. Water and mat for purchase at the studio.","localized_value":[{"locale":"en","value":"Yoga master John will teach the basics of Hatha Yoga. Water and mat for purchase at the studio."}]},"price":{"currency_code":"USD","price_micros":30000000},"prepayment_type":"NOT_SUPPORTED"},{"merchant_id":"fitness-1","service_id":"hotyogaclass","localized_service_name":{"value":"Hot Yoga Class","localized_value":[{"locale":"en","value":"Hot Yoga Class"}]},"localized_description":{"value":"Yoga master Jane will teach the basics of hot yoga. Water and mat for purchase at the studio.","localized_value":[{"locale":"en","value":"Yoga master Jane will teach the basics of hot yoga. Water and mat for purchase at the studio."}]},"price":{"currency_code":"USD","price_micros":30000000},"prepayment_type":"NOT_SUPPORTED"}]}
[null,null,["Last updated 2024-10-31 UTC."],[[["A `ServiceFeed` contains metadata and a list of services offered by a merchant, recommended to be uploaded in JSON format."],["Each `Service` within a `ServiceFeed` represents a specific offering with details like pricing, booking requirements, and payment options."],["Services can be categorized by `type` (e.g., dining, appointment) and further detailed with attributes like `ticket_type` or `virtual_session` for online appointments."],["Rich content such as multilingual names and descriptions, images, and external links can be included to enhance service listings."],["Specialized data structures like `SchedulingRules`, `WaitlistRules`, and industry-specific fields cater to diverse service offerings and operational needs."]]],[]]