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,
  "description": string,
  "price": {
    object (Price)
  },
  "priceInterpretation": enum (PriceInterpretation),
  "rules": {
    object (SchedulingRules)
  },
  "prepaymentType": enum (PrepaymentType),
  "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)
  }
}
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".

description

string

The user-visible description of the service.

This field now supports both plain-text and HTML-like formatting rules to display structural contents to end-users. 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, highlights, 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>Gauranteed 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.

rules

object (SchedulingRules)

Rules to book/cancel an appointment.

prepaymentType

enum (PrepaymentType)

Whether a prepayment is required, optional or not supported.

form[]
(deprecated)

object (ServiceIntakeForm)

Intake forms to show to the user in order to customize the service.

Deprecated. Please see 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)

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),

  // 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)

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.

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.

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.

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,
  "value": [
    string
  ],
  "isRequired": boolean,
  "ticketTypeRestrict": [
    string
  ]
}
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.

value[]

string

For MULTIPLE_CHOICE, CHECKBOXES, or DROPDOWN, the values to enumerate.

isRequired

boolean

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

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.

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.

ActionPlatform

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.

Enums
ACTION_PLATFORM_UNSPECIFIED The platform is unspecified.
ACTION_PLATFORM_WEB_APPLICATION The action platform is web in general.
ACTION_PLATFORM_MOBILE_WEB The action platform is web on mobile devices.
ACTION_PLATFORM_ANDROID The action platform is Android OS.
ACTION_PLATFORM_IOS The action platform is iOS.

ServiceType

Predefined service types.

Enums
SERVICE_TYPE_UNSPECIFIED Unused.
SERVICE_TYPE_DINING_RESERVATION Dining reservation.
SERVICE_TYPE_FOOD_ORDERING Food ordering.
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

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,
  "price": {
    object (Price)
  },
  "perTicketFee": {
    object (PerTicketFee)
  },
  "optionDescription": string
}
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.

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)

optionDescription

string

Description of any additional option which this ticket type represents, if any.

This is 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" shortDescription: "adult" optionDescription: "english" } - { ticketTypeId: "ticket_type_2" shortDescription: "adult" optionDescription: "spanish" } - { ticketTypeId: "ticket_type_3" shortDescription: "child" optionDescription: "english" } - { ticketTypeId: "ticket_type_4" shortDescription: "child" optionDescription: "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" shortDescription: "2 hours" optionDescription: "english" } - { ticketTypeId: "ticket_type_2" shortDescription: "3 hours" optionDescription: "spanish" } - { ticketTypeId: "ticket_type_3" shortDescription: "2 hours" optionDescription: "english" } - { ticketTypeId: "ticket_type_4" shortDescription: "3 hours" optionDescription: "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.

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.

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),
  "caption": string,
  "attribution": {
    object (Attribution)
  }
}
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.

caption

string

Caption of the media, 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)

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
{
  "text": string
}
Fields
text

string

The text to give credit to the photographer or agency. 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).

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": number,
  "maxPartySize": number,
  "supportsAdditionalRequest": boolean
}
Fields
minPartySize

number

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

number

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.

TicketingVerticalSpecificData

Additional information unique to the event ticketing vertical.

JSON representation
{
  "eventCategory": enum (EventCategory),
  "eventUrl": string,
  "entity": [
    {
      object (Entity)
    }
  ]
}
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)

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

entityType

enum (EntityType)

The type of the entity. (optional)

entityRole

enum (EntityRole)

The role of the entity in the event. (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.

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.

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.