REST Resource: inventory.partners.merchants.services

Resource: Service

Info about a service that is provided by the merchant, e.g. haircut.

JSON representation
{
  "name": string,
  "serviceName": string,
  "localizedServiceName": {
    object (Text)
  },
  "description": string,
  "localizedDescription": {
    object (Text)
  },
  "price": {
    object (Price)
  },
  "priceInterpretation": enum (PriceInterpretation),
  "rules": {
    object (SchedulingRules)
  },
  "prepaymentType": enum (PrepaymentType),
  "prepaymentTerms": {
    object (PrepaymentTerms)
  },
  "form": [
    {
      object (ServiceIntakeForm)
    }
  ],
  "intakeForm": {
    object (ServiceIntakeForm)
  },
  "perTicketIntakeForm": {
    object (ServiceIntakeForm)
  },
  "taxRate": {
    object (TaxRate)
  },
  "paymentOptionId": [
    string
  ],
  "deposit": {
    object (Deposit)
  },
  "noShowFee": {
    object (NoShowFee)
  },
  "requireCreditCard": enum (RequireCreditCard),
  "actionLink": [
    {
      object (ActionLink)
    }
  ],
  "type": enum (ServiceType),
  "ticketType": [
    {
      object (TicketType)
    }
  ],
  "relatedMedia": [
    {
      object (RelatedMedia)
    }
  ],
  "serviceAttributeValueId": [
    {
      object (ServiceAttributeValueId)
    }
  ],
  "waitlistRules": {
    object (WaitlistRules)
  },
  "ticketingVerticalSpecificData": {
    object (TicketingVerticalSpecificData)
  },
  "integrationType": enum (IntegrationType),
  "perOrderFee": {
    object (PerOrderFee)
  },
  "toursAndActivitiesContent": {
    object (ToursAndActivitiesContent)
  },
  "location": [
    {
      object (Location)
    }
  ],
  "rating": {
    object (Rating)
  },
  "homeServiceData": {
    object (HomeServiceData)
  },
  "virtualSession": {
    object (VirtualSession)
  },
  "directMerchantPayment": {
    object (DirectMerchantPayment)
  },
  "uriTemplate": {
    object (UriTemplate)
  }
}
Fields
name

string

The service resource name, which has the format of partners/{partner_id}/merchants/{merchantId}/services/{serviceId}.

serviceName

string

The name of the service, e.g. "Men's haircut". Deprecated, use localizedServiceName instead.

localizedServiceName

object (Text)

The name of the service, e.g. "Men's haircut". Possibly in several locales.

description

string

The user-visible description of the service. Deprecated, use localizedDescription instead.

localizedDescription

object (Text)

The user-visible description of the service.

This field supports both plain-text and HTML-like formatting. Unlike plain text sections, customized layouts can be created here using headings, paragraphs, lists and some phrase tags. Please read the following instructions and notes carefully to ensure you create the best user-experience.

Supported HTML-like formatting tags:

Heading tags: <h1>, <h2>, <h3>, <h4>, <h5>, <h6>
Heading tags can be used to display titles and sub-titles. For example, <h1>Itinerary</h1> will display the inline text as the most important heading of the section. Note that any inner HTML tags, styles or attributes will be ignored. For example, <h1 style=".."> will be treated the same as <h1>. Only pure text wil be preserved.

Paragraph tag: <p>
The paragraph tag can be used to highlight a detailed introduction or contents. Any inner tags, styles or attributes will be ignored, with a few exceptions: <br>, <strong> and <em>. Please see the phrase tag section below for more details.

List tags: <ul>, <ol>, <li>
The <ul> tag can be used with the <li> tag to display unordered lists, and the <ol> tag can be used with <li> to display ordered lists. This is a good way to display checklists, schedules, or any other lists that fit your use-cases.
Example: To show a list of features of a cruise trip:
<ol>
<li>Wonderful ocean view and chances to play with wildlife.</li>
<li>Carefully designed travel arrangements and services.</li>
<li>Guaranteed lowest price.</li>
</ol>
Note that only <li> children under <ul> or <ol> tags will be converted. All other children will be dropped. Also, any inner tags, attributes and styles will be ignored; we only preserve pure text contents.

Division tag: <div>
All supported inner tags of the <div> tag will be parsed with the rules stated above, imply <div> tag itself does not mean any grouping or indenting here. Also, any inner attributes and styles will be ignored.

Phrase tags: <br>, <strong>, <em>:
Only the three 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.

Unsupported tags:

  • <html>, <header>, and <body> tags are not allowed.
  • Any other tags not mentioned above are not supported (for example <table>, <td> ...).
    Any URLs, anchors, and links will be stripped, and will never be displayed to end-users. If you want to use photos to create a rich user experience, please use the "relatedMedia" field below to send your photo URLs.

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.
  • If the currently supported layouts are not sufficient for your use cases, please reach out to the Reserve with Google team.
  • The recommended maximum size is 32,000 characters.
price

object (Price)

The price of the service.

priceInterpretation

enum (PriceInterpretation)

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.

rules

object (SchedulingRules)

Rules to book/cancel an appointment.

prepaymentType

enum (PrepaymentType)

Whether a prepayment is required, optional or not supported.

prepaymentTerms

object (PrepaymentTerms)

Terms around when the prepayment is completed.

form[]
(deprecated)

object (ServiceIntakeForm)

Deprecated. Please use intakeForm and perTicketIntakeForm.

intakeForm

object (ServiceIntakeForm)

A form requesting additional information from the user when they book this service. (optional)

perTicketIntakeForm

object (ServiceIntakeForm)

A form requesting additional information from the user when they book this service. This form must be filled out once for each ticket the user is booking. (optional)

taxRate

object (TaxRate)

The service's tax rate. If present this field overrides any taxRate set at the merchant level. An empty message (i.e. taxRate { }) will reset the applied tax rate to zero.

paymentOptionId[]

string

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.

deposit

object (Deposit)

Defines how a deposit may be charged to the user. Overrides the service deposit if one was specified. Setting this to an empty Deposit message removes any service-level deposit. (optional)

noShowFee

object (NoShowFee)

Defines a no show fee that may be charged to the user. Overrides the service no show fee if one was specified. Setting this to an empty NoShowFee message removes any service-level no show fee. (optional)

requireCreditCard

enum (RequireCreditCard)

Indicates whether the user must provide a credit card in order to book this service. This field can be overridden at the availability level. (optional)

type

enum (ServiceType)

The predefined type of this service. (optional)

ticketType[]

object (TicketType)

Types of tickets that can be booked/purchased for this service, if tickets are supported. (optional)

relatedMedia[]

object (RelatedMedia)

Photos related to this service. Google will crawl and store the media to ensure that they are displayed to end-users in the most efficient way. (optional)

serviceAttributeValueId[]

object (ServiceAttributeValueId)

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. (optional)

waitlistRules

object (WaitlistRules)

Rules to joining the waitlist.

ticketingVerticalSpecificData

object (TicketingVerticalSpecificData)

Additional information unique to the event ticketing vertical. (optional)

integrationType

enum (IntegrationType)

Depth of integration we support for this service. (optional) Irrelevant for partners with the starter integration. End to end will always be disabled for these partners.

perOrderFee

object (PerOrderFee)

Order level fees for purchasing this service. (optional)

toursAndActivitiesContent

object (ToursAndActivitiesContent)

Content fields specific to Tours and Activities.

location[]

object (Location)

Locations related to this service. IMPORTANT NOTES: If there are multiple visited locations related to this service, or the START_LOCATION is different from the VISITED_LOCATION, the START_LOCATION must be specified. Example: - A guided biking tour visiting three venues, the start venue needs to be specified. - A bus tour meeting at a hotel lobby and then head to the visited venue. The meeting location needs to be specified.

rating

object (Rating)

User rating for this service as an aggregate metric over all reviews.

homeServiceData

object (HomeServiceData)

Additional information unique to home service vertical. (optional)

virtualSession

object (VirtualSession)

Optional. Information about virtual session. It is required for enabling virtual services.

directMerchantPayment

object (DirectMerchantPayment)

Optional. 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. It is required if virtualSession is defined and the service is not free or prepaymentType is NOT set to REQUIRED.

uriTemplate

object (UriTemplate)

Optional. An optional template specifying how Google should generate URLs to external site.

PriceInterpretation

Describes how a Price should be interpreted and displayed to the user.

Enums
PRICE_INTERPRETATION_UNSPECIFIED Price interpretation unspecified, defaults to EXACT_AMOUNT.
EXACT_AMOUNT

When the price should be interpreted as a specific value.

Examples: $20 for a yoga class; $15 for a child haircut

STARTS_AT

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

NOT_DISPLAYED

When the price of a service is variable and no price information is displayed to consumers ahead of time.

Note that any service that uses this PriceInterpretation must use PrepaymentType NOT_SUPPORTED and Price must be empty.

Examples: A consultation for a home service

SchedulingRules

The scheduling rules for a service.

JSON representation
{
  "minAdvanceOnlineCanceling": string,
  "lateCancellationFee": {
    object (Price)
  },
  "noshowFee": {
    object (Price)
  },
  "admissionPolicy": enum (AdmissionPolicy),
  "cancellationPolicy": {
    object (CancellationPolicy)
  },

  // Union field min_booking_buffer can be only one of the following:
  "minAdvanceBooking": string,
  "minBookingBufferBeforeEndTime": string
  // End of list of possible types for union field min_booking_buffer.
}
Fields
minAdvanceOnlineCanceling

string (int64 format)

The minimum advance notice in seconds required to cancel a booked appointment online. (optional)

lateCancellationFee
(deprecated)

object (Price)

The fee for canceling within the minimum advance notice period.

noshowFee
(deprecated)

object (Price)

The fee for no-show without canceling.

admissionPolicy

enum (AdmissionPolicy)

The admission policy that applies to this service. If unset, defaults to TIME_STRICT. (optional)

cancellationPolicy

object (CancellationPolicy)

Scheduling rules cancellation policy. (required for Things-to-do)

Union field min_booking_buffer. 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) min_booking_buffer can be only one of the following:

minAdvanceBooking

string (int64 format)

The duration (in seconds) from when the last booking can be made to when the availability slot starts.

minBookingBufferBeforeEndTime

string (int64 format)

The duration (in seconds) from when the last booking can be made to when the availability slot ends. If this field is set, the "admissionPolicy" field must be set to TIME_FLEXIBLE to indicate that users can use the purchased tickets after slots start.

AdmissionPolicy

The admission policy of this service.

Enums
ADMISSION_POLICY_UNSPECIFIED Unused.
TIME_STRICT 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 9am that requires all attendees to arrive at the start time, and returns at around 12pm. * A haircut reservation at 3pm on Saturday that will take approximately 30 minutes. * A fitness class from 6pm to 8pm.
TIME_FLEXIBLE

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 12pm to 9pm.

TIMED_ENTRY_WITH_FLEXIBLE_DURATION

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 10am requires the user to be at the museum at 10am. 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.

CancellationPolicy

Cancellation policy for a service.

JSON representation
{
  "refundCondition": [
    {
      object (RefundCondition)
    }
  ]
}
Fields
refundCondition[]

object (RefundCondition)

Zero or more refund conditions applicable to the policy.

RefundCondition

Defines a single refund condition. Multiple refund conditions could be used together to describe "refund steps" as various durations before the service start time.

JSON representation
{
  "minDurationBeforeStartTime": string,
  "refundPercent": integer
}
Fields
minDurationBeforeStartTime

string (Duration format)

Duration before the start time, until when the customer can receive a refund for part of the service's cost specified in refundPercent. When set to 0 (default), the service can be cancelled at any time.

A duration in seconds with up to nine fractional digits, ending with 's'. Example: "3.5s".

refundPercent

integer (uint32 format)

The percent that can be refunded, as long as the service booking is cancelled at least minDurationBeforeStartTime 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.

PrepaymentType

Enum to indicate the prepayment type.

Enums
PREPAYMENT_TYPE_UNSPECIFIED By default we will assume that the prepayment is NOT_SUPPORTED.
REQUIRED The user has to pay this service at the booking time.
OPTIONAL The user can choose to pre-pay this service at the booking time or later, but it is not required in order to book.
NOT_SUPPORTED The prepayment is not supported for this service.

PrepaymentTerms

Specific information around when prepayment is completed.

JSON representation
{
  "chargeTiming": enum (ChargeTiming),
  "chargeTimeBeforeStartTimeSec": string
}
Fields
chargeTiming

enum (ChargeTiming)

When the charge will occur relative to the purchase time.

chargeTimeBeforeStartTimeSec

string (int64 format)

Time in seconds before the service start time that the user is charged for payment. This field should only be set when ChargeTiming is CHARGE_LATER.

ChargeTiming

Enum to specify when the charge will occur relative to the purchase time.

Enums
CHARGE_TIMING_UNSPECIFIED Unused.
CHARGE_NOW Customer will be charged immediately.
CHARGE_LATER Customer will be charged later.

ServiceIntakeForm

Defines an intake form that customizes the service provided by a merchant.

JSON representation
{
  "field": [
    {
      object (ServiceIntakeFormField)
    }
  ],
  "firstTimeCustomers": boolean,
  "returningCustomers": boolean
}
Fields
field[]

object (ServiceIntakeFormField)

Fields that will be displayed to the user.

firstTimeCustomers
(deprecated)

boolean

If true, this form will be shown to first time customers. Deprecated. This functionality is not supported for intake forms.

returningCustomers
(deprecated)

boolean

If true, this form will be shown to repeat customers. Deprecated. This functionality is not supported for intake forms.

ServiceIntakeFormField

Defines a field that is included in a ServiceIntakeForm.

JSON representation
{
  "id": string,
  "type": enum (FieldType),
  "label": string,
  "localizedLabel": {
    object (Text)
  },
  "value": [
    string
  ],
  "choiceText": [
    {
      object (Text)
    }
  ],
  "isRequired": boolean,
  "allowCustomAnswer": boolean,
  "additionalOption": [
    {
      object (Text)
    }
  ],
  "ticketTypeRestrict": [
    string
  ],
  "hint": {
    object (Text)
  }
}
Fields
id

string

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)

type

enum (FieldType)

The type of this field.

label

string

The text shown to the user for this field. Deprecated, please use localizedLabel instead.

localizedLabel

object (Text)

The text shown to the user for this field. The field can be supplied in multiple locales. (required)

value[]

string

Set if and only if the field type is LOCATION_SEARCH. Please use the "locationId" in the "location" field to specify the location value.

choiceText[]

object (Text)

Set if and only if the field type is MULTIPLE_CHOICE, CHECKBOXES, or DROPDOWN. Used to enumerate possible choices.

isRequired

boolean

Indicates whether an answer to this field is required by a user.

allowCustomAnswer

boolean

Indicates whether a custom value is allowed in additional to predefined answers. This is only applicable when the field type is LOCATION_SEARCH. (optional)

additionalOption[]

object (Text)

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)

ticketTypeRestrict[]

string

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.

hint

object (Text)

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)

FieldType

Enum to indicate the type of field.

Enums
FIELD_TYPE_UNSPECIFIED Fields of unspecified or unknown type will be ignored.
SHORT_ANSWER A one-line input field for text.
PARAGRAPH A multi-line input field for text.
MULTIPLE_CHOICE A set of radio buttons that requires one choice from many options.
CHECKBOXES One or more enumerated items with checkboxes.
DROPDOWN A selection from a dropdown.
BOOLEAN A yes/no button.

ServiceType

Predefined service types.

Enums
SERVICE_TYPE_UNSPECIFIED Unused.
SERVICE_TYPE_DINING_RESERVATION Dining reservation.
SERVICE_TYPE_FOOD_ORDERING Food ordering, could be either food delivery or takeout or both.
SERVICE_TYPE_FOOD_DELIVERY Food delivery.
SERVICE_TYPE_FOOD_TAKEOUT Food takeout.
SERVICE_TYPE_EVENT_TICKET Event ticket.
SERVICE_TYPE_TRIP_TOUR Trip tour.
SERVICE_TYPE_APPOINTMENT 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_ONLINE_APPOINTMENT Service that provides online appointment for a class or session which will be fully virtual. Must be set if enabling virtual service bookings.
SERVICE_TYPE_SHOPPING Service that allows users to shop from the given merchant. It could either be delivery or pickup.

TicketType

TicketType is used to differentiate among tickets with different prices and/or availabilities due to different user types, different service attributes, or different options/add-ons.

A ticket is the minimal bookable unit to a service, e.g. a spot on a rafting trip, an admission to a museum, a full day double kayak rental.

JSON representation
{
  "ticketTypeId": string,
  "shortDescription": string,
  "localizedShortDescription": {
    object (Text)
  },
  "price": {
    object (Price)
  },
  "perTicketFee": {
    object (PerTicketFee)
  },
  "priceDisplayType": enum (PriceDisplayType),
  "optionDescription": string,
  "localizedOptionDescription": {
    object (Text)
  },
  "inventoryType": enum (InventoryType)
}
Fields
ticketTypeId

string

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.

shortDescription

string

A short description to this TicketType.

This can be user visible, e.g., “adult”, "child", “veteran”, “Row J”, etc. Required, each ticket type should have a description to be user visible. Deprecated, use localizedShortDescription instead.

localizedShortDescription

object (Text)

A short description to this TicketType with i18n support.

This can be user visible, e.g., “adult”, "child", “veteran”, “Row J”, etc. Required, each ticket type should have a description to be user visible. Separate values could be supplied for each locale.

price

object (Price)

The price of a single ticket of this type, exclusive of any taxes. The tax rate of Service is applied to its tickets.

perTicketFee

object (PerTicketFee)

Additional fees for purchasing this ticket. (optional)

priceDisplayType

enum (PriceDisplayType)

Optional. Predetermined price display type of a single ticket of this type.

optionDescription

string

Description of any additional option which this ticket type represents, if any. Deprecated, use localizedOptionDescription instead.

localizedOptionDescription

object (Text)

Description of any additional option which this ticket type represents, if any. Separate values could be supplied for each locale.

Additional options are useful when the ticket type represents multiple dimensions.

Example 1: an admission ticket with different types 'adult', 'child' and language as an additional option, the expected TicketType list would be: - { ticketTypeId: "ticket_type_1" localizedShortDescription { value: "adult" } localizedOptionDescription { value: "english" } } - { ticketTypeId: "ticket_type_2" localizedShortDescription { value: "adult" } localizedOptionDescription { value: "spanish" } } - { ticketTypeId: "ticket_type_3" localizedShortDescription { value: "child" } localizedOptionDescription { value: "english" } } - { ticketTypeId: "ticket_type_4" localizedShortDescription { value: "child" } localizedOptionDescription { value: "spanish" } }

Example 2: an multi-hour kayak rental with optional dry bag add-on, the shortDescription could be "3 hours" and the optionDescription could be either "with dry bag" or "without dry bag": - { ticketTypeId: "ticket_type_1" localizedShortDescription { value: "2 hours" } localizedOptionDescription { value: "english" } } - { ticketTypeId: "ticket_type_2" localizedShortDescription { value: "2 hours" } localizedOptionDescription { value: "spanish" } } - { ticketTypeId: "ticket_type_3" localizedShortDescription { value: "3 hours" } localizedOptionDescription { value: "english" } } - { ticketTypeId: "ticket_type_4" localizedShortDescription { value: "3 hours" } localizedOptionDescription { 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 optionDescription 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: and
. They are intended to be used for specifying options with both a title and detailed description, for example: "Premium Seating
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."

inventoryType

enum (InventoryType)

Optional. Predetermined inventory type of a single ticket of this type.

PerTicketFee

Fees that must be paid for each ticket the user purchases.

JSON representation
{
  "serviceCharge": {
    object (Price)
  },
  "facilityFee": {
    object (Price)
  },
  "taxes": {
    object (Price)
  }
}
Fields
serviceCharge

object (Price)

An extra charge assessed for a service.

facilityFee

object (Price)

A fee that goes to the venue/facility.

taxes

object (Price)

Per ticket taxes.

PriceDisplayType

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 byService the landing page. Consistent price formats improve conversion rate and reduce confusion.

Enums
PRICE_DISPLAY_TYPE_UNSPECIFIED The price display type is unspecified. Google will determine which format to show.
PRICE_DISPLAY_TYPE_BASE The price shown on the landing page is the base price.
PRICE_DISPLAY_TYPE_ALL_IN The price shown on the landing page includes all fees and taxes.

InventoryType

Predetermined inventory type of a single ticket of this type.

Enums
INVENTORY_TYPE_UNSPECIFIED The inventory type is unspecified.
INVENTORY_TYPE_PRIMARY Primary inventory.
INVENTORY_TYPE_VERIFIED_RESALE Verified resale inventory.
INVENTORY_TYPE_RESALE Resale inventory.
INVENTORY_TYPE_AGGREGATOR Aggregator inventory.

RelatedMedia

Photos related to this service. Google will crawl these media to ensure that they are displayed correctly to end-users. (optional)

JSON representation
{
  "url": string,
  "type": enum (MediaType),
  "localizedCaption": {
    object (Text)
  },
  "attribution": {
    object (Attribution)
  },
  "caption": string
}
Fields
url

string

URL of this media source. Google will crawl the media hosted at this URL.

type

enum (MediaType)

Type of this media source.

localizedCaption

object (Text)

Caption of the media that supports i18n, only plain text is supported. Any HTML components will be stripped. (optional)

attribution

object (Attribution)

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)

caption
(deprecated)

string

Deprecated, prefer to use localizedCaption.

MediaType

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.

Enums
TYPE_UNSPECIFIED Unused.
PHOTO Indicates the media provided by the url is a photo.

Attribution

Attribution information for this media.

JSON representation
{
  "localizedText": {
    object (Text)
  },
  "text": string
}
Fields
localizedText

object (Text)

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
(deprecated)

string

Deprecated, prefer to use localizedText.

ServiceAttributeValueId

Identifies a particular value of a service attribute to be applied to a Service.

JSON representation
{
  "attributeId": string,
  "valueId": string
}
Fields
attributeId

string

ID of an attribute as defined in Merchant.service_attribute, e.g. "service-type".

valueId

string

ID of the value for this attribute, e.g. "haircut". Must match a valueId in the service attribute definition.

WaitlistRules

Rules related to joining the waitlist.

JSON representation
{
  "minPartySize": integer,
  "maxPartySize": integer,
  "supportsAdditionalRequest": boolean,
  "aboveMaxPartySizeOptions": [
    {
      object (UnsupportedPartySizeOption)
    }
  ]
}
Fields
minPartySize

integer

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.

maxPartySize

integer

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.

supportsAdditionalRequest

boolean

If true, the user will be able to send a free-form additional text request when joining the waitlist for this service.

aboveMaxPartySizeOptions[]

object (UnsupportedPartySizeOption)

Set options for parties larger than the set maxPartySize. Leave empty if larger parties should not be given alternative options for joining a waitlist.

UnsupportedPartySizeOption

Options for parties that are out of range.

JSON representation
{

  // Union field kind can be only one of the following:
  "callMerchant": {
    object (CallMerchant)
  }
  // End of list of possible types for union field kind.
}
Fields
Union field kind. Available options for parties that are out of range. kind can be only one of the following:
callMerchant

object (CallMerchant)

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 {waitlistRules.max_party_size} please call the restaurant at {phone}." CallMerchant must be set, but will be empty.

CallMerchant

This type has no fields.

Empty message to be used in UnsupportedPartySizeOption, setting this will display an option to users to call the business for a booking.

TicketingVerticalSpecificData

Additional information unique to the event ticketing vertical.

JSON representation
{
  "eventCategory": enum (EventCategory),
  "eventUrl": string,
  "entity": [
    {
      object (Entity)
    }
  ],
  "eventAttendanceMode": enum (AttendanceMode),
  "eventVirtualLocationUrl": [
    string
  ],
  "eventOrganizer": {
    object (Text)
  },
  "eventOrganizerUrl": string,
  "eventOrganizerType": enum (OrganizerType),
  "eventSourceUrl": [
    string
  ],
  "eventState": enum (EventState),
  "brandName": {
    object (Text)
  },
  "eventCreator": {
    object (EventCreator)
  }
}
Fields
eventCategory

enum (EventCategory)

The category of the event. Set only when event falls into one of the predefined categories. (optional)

eventUrl

string

The URL of the event on the partner's website. (optional)

entity[]

object (Entity)

A list of entities related to the event. (optional)

eventAttendanceMode

enum (AttendanceMode)

Required. The type of the event attendance.

eventVirtualLocationUrl[]

string

Optional. URL where the event can be watched.

eventOrganizer

object (Text)

Optional. Organizer who hosts the event.

eventOrganizerUrl

string

Optional. URL of the organizer who hosts the event.

eventOrganizerType

enum (OrganizerType)

Optional. The type of the organizer.

eventSourceUrl[]

string

Required. URL of the pages where the event information or descriptions can be found.

eventState

enum (EventState)

Optional. State of the event.

brandName

object (Text)

Optional. The localized brand name.

eventCreator

object (EventCreator)

Optional. Information about the creator of the event.

EventCategory

A subset of event categories for which we customize the product experience. Note: not intended to be a universal ontology of events.

Enums
EVENT_CATEGORY_UNSPECIFIED Not specified. Do not use.
EVENT_CATEGORY_CONCERT Concerts.
EVENT_CATEGORY_SPORTS Sports events.
EVENT_CATEGORY_THEATRE Theatre events.
EVENT_CATEGORY_EXHIBITS Exhibits.
EVENT_CATEGORY_WORKSHOPS_AND_CLASSES Workshops and Classes.

Entity

Represents an entity related to the event.

JSON representation
{
  "id": string,
  "name": string,
  "url": string,
  "entityType": enum (EntityType),
  "entityRole": enum (EntityRole),
  "publicIdentificationData": {
    object (PublicIdentificationData)
  }
}
Fields
id

string

Unique identifier of the entity in the partner's database. (optional)

name

string

Name of the entity. (required)

url

string

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 relevantUrl in publicIdentificationData. (optional)

entityType

enum (EntityType)

The type of the entity. (optional)

entityRole

enum (EntityRole)

The role of the entity in the event. (optional)

publicIdentificationData

object (PublicIdentificationData)

Public references of the entity. (optional)

EntityType

The type of the entity. Note: not intended to be a universal ontology.

Enums
ENTITY_TYPE_UNSPECIFIED Not specified. Do not use.
ENTITY_TYPE_PERFORMER 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_PLAYER The entity represents the sports team or player at the event. Only applicable when event category is SPORTS.
ENTITY_TYPE_CONCERT_TOUR The entity represents the tour that this event belongs to. Only applicable when event category is CONCERT.
ENTITY_TYPE_SPORTS_SERIES The entity represents a sports tournament that this event belongs to. Only applicable when event category is SPORTS.
ENTITY_TYPE_PLAY The entity represents the type of play (e.g., musical, comedy, ballet, etc.) performed at the event. Only applicable when event category is THEATRE.

EntityRole

The role of the entity in the event.

Enums
ENTITY_ROLE_UNSPECIFIED Not specified.
ENTITY_ROLE_HEADLINER The entity represents a headliner or leading performer at the event.
ENTITY_ROLE_SUPPORTER The entity represents a supporting performer at the event.
ENTITY_ROLE_HOME_TEAM The entity represents the home team at the (sports) event.
ENTITY_ROLE_AWAY_TEAM The entity represents the away team at the (sports) event.

PublicIdentificationData

Identifiers, webpages, or any other public sources that reference an entity.

JSON representation
{
  "relevantUrl": [
    string
  ],
  "musicbrainzId": string
}
Fields
relevantUrl[]

string

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)

musicbrainzId

string

The 36-character musicbrainz identifier of the artist or other music entities, if applicable. See https://musicbrainz.org/doc/MusicBrainz_Identifier. (optional)

AttendanceMode

The type of the event attendance.

Enums
ATTENDANCE_MODE_UNSPECIFIED Not specified.
ONLINE For virtual events.
PHYSICAL For physical events.
PHYSICAL_ONLINE_MIXED For events that are both physical and virtual.

OrganizerType

The type of the organizer.

Enums
ORGANIZER_TYPE_UNSPECIFIED Not specified.
PERSON For organizer who is a person.
ORGANIZATION For organizer who is an organization.

EventState

State of the event.

Enums
EVENT_STATE_UNSPECIFIED Not specified.
SCHEDULED The event is scheduled.
RESCHEDULED The event is rescheduled.
CANCELLED The event is cancelled.
POSTPONED The event is postponed.

EventCreator

Information about the creator of the event. Only relevant for platforms that include user-generated content events.

JSON representation
{
  "name": string
}
Fields
name

string

Optional. Name of the event creator. No character restriction.

IntegrationType

Depth of integration supported.

Enums
INTEGRATION_TYPE_UNSPECIFIED Defaults to END_TO_END.
INTEGRATION_TYPE_END_TO_END Complete integration that allows end to end booking through Google.
INTEGRATION_TYPE_INVENTORY_ONLY Booking server doesn’t need to support this service. Only merchants, services, and (optionally) availability data need to be sent.

PerOrderFee

Fees that must be paid once per order, regardless of number of tickets.

JSON representation
{
  "deliveryFee": {
    object (Price)
  },
  "processingFee": {
    object (Price)
  }
}
Fields
deliveryFee

object (Price)

A fee that can vary by delivery method.

processingFee

object (Price)

A fee to process the user's payment method.

ToursAndActivitiesContent

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:
, , , : Only the three tags mentioned above are supported.
can be used to break lines in paragraphs, and // can be used to highlight an 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 the 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.

JSON representation
{
  "highlights": [
    {
      object (Text)
    }
  ],
  "inclusions": [
    {
      object (Text)
    }
  ],
  "exclusions": [
    {
      object (Text)
    }
  ],
  "mustKnow": [
    {
      object (Text)
    }
  ]
}
Fields
highlights[]

object (Text)

The user-visible list of highlights.

inclusions[]

object (Text)

The user-visible list of inclusions.

exclusions[]

object (Text)

The user-visible list of exclusions.

mustKnow[]

object (Text)

The user-visible list of important notes, use for details such as age restrictions or other conditions that make this service unsuitable.

Location

Geographic information about a location.

JSON representation
{
  "placeId": string,
  "name": string,
  "telephone": string,
  "url": string,
  "geo": {
    object (GeoCoordinates)
  },
  "locationType": enum (LocationType),
  "locationId": string
}
Fields
placeId

string

The Place ID for a place in the Google Places database and on Google Maps. See https://developers.google.com/places/web-service/place-id for more about Place IDs. If this is provided, Google will match the location to this place.

name

string

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)

telephone

string

The public telephone number of the location including its country and area codes, e.g. +14567891234. (optional)

url

string

The url of the location's public website. (optional)

geo

object (GeoCoordinates)

The Geo info of the location, including latitude, longitude, and address. (optional)

locationType

enum (LocationType)

The type of the location, must be supplied if this location is provided for a Service.

locationId

string

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. (optional)

LocationType

The type of this location.

Enums
LOCATION_TYPE_UNSPECIFIED Location type unspecified.
VISITED_LOCATION The location where this service visits.
START_LOCATION The location where this service starts, also serves as MEETING_LOCATION.
END_LOCATION The location where this service ends.

Rating

Defines Rating for an entity.

JSON representation
{
  "value": number,
  "numberOfRatings": string
}
Fields
value

number

Average rating value (required when numberOfRatings > 0). The value must be in the range of [1, 5] and can be omitted if and only if the numberOfRatings is zero.

numberOfRatings

string

Number of ratings used in calculating the value (required).

HomeServiceData

Additional information required to be provided for home service vertical.

JSON representation
{
  "categoryType": string,
  "jobType": string
}
Fields
categoryType

string

The high level category to which this home service belongs to. E.g. plumber, electrician etc.

jobType

string

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.

VirtualSession

Information about virtual/online session. E.g. Online yoga class, virtual cooking class etc.

JSON representation
{
  "sessionInstructions": {
    object (Text)
  },
  "sessionRequirements": {
    object (Text)
  },
  "virtualPlatformInfo": {
    object (VirtualPlatformInfo)
  },
  "isSessionPrerecorded": boolean
}
Fields
sessionInstructions

object (Text)

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)

sessionRequirements

object (Text)

Requirements for the given virtual session. Eg. yoga mat, cooking utensils etc. (Recommended)

virtualPlatformInfo

object (VirtualPlatformInfo)

Information about the virtual platform used in this session. (Required to enable virtual services)

isSessionPrerecorded

boolean

Required. Set this as true if the virtual session is not live and is pre-recorded.

VirtualPlatformInfo

Information about platform which will be used for this virtual session.

JSON representation
{
  "platform": enum (Platform),
  "otherPlatformName": {
    object (Text)
  }
}
Fields
platform

enum (Platform)

Platform used for virtual session.

otherPlatformName

object (Text)

The name of the platform if the platform is set to OTHER. (Required if platform is set to OTHER)

Platform

Enum to indicate which virtual platform would be used by the merchant.

Enums
PLATFORM_UNSPECIFIED Unused.
FLEXIBLE The merchant is flexible in which video platform they use.
GOOGLE_HANGOUTS Google Hangouts product.
GOOGLE_MEET Google Meet product.
ZOOM Zoom Video Communications.
SKYPE Skype.
YOUTUBE Livestreaming in YouTube.
OTHER Should be set if the video platform used is different from the ones mentioned here.

DirectMerchantPayment

Information about how the user can pay directly to the merchant instead of pre-paying for the service via RwG.

JSON representation
{
  "paymentMethods": [
    {
      object (Text)
    }
  ]
}
Fields
paymentMethods[]

object (Text)

Users would be advised to pay only via the payment methods mentioned below.

UriTemplate

A template specifying how Google should generate URLs to external site.

JSON representation
{
  "uriTemplate": string
}
Fields
uriTemplate

string

Optional. The uri template must follow the RFC6570, see https://datatracker.ietf.org/doc/html/rfc6570. Supports Level 2 templates. These parameters will be resolved to their values specified in their respective entities.

5 available parameters for Dining Reservation Linkout: 1) (required) {availability_slot_start_seconds} :: populated from startSec field in availability feed 2) (required) {availability_slot_duration_seconds} :: populated from durationSec field in availability feed 3) (optional) {resources_party_size} :: populated from partySize field in availability feed 4) (optional) {availability_availability_tag} :: populated from availabilityTag field in availability feed 5) (optional) {resources_room_id} :: populated from roomId field in availability feed

Example Usage: http://example.com/book/restaurant?start={availability_slot_start_seconds} &num_guests={resources_party_size} * startSec = 123456 * partySize = 2 https://example.com/book/restaurant?start=123456&num_guests=2

Methods

create

Creates a new Service of a merchant managed by the specified aggregator, and returns it.

delete

Deletes an existing Service of a merchant managed by the specified aggregator.

patch

Updates an existing Service of a merchant managed by the specified aggregator, and returns it.