Services Feed

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 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_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
    //     12pm to 9pm.
    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 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.
    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;
}

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

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

ActionPlatform Definition

// The platform that the action is performed on. Web application is the general
// fallback. It is recommended to have at least one ActionLink with
// ACTION_PLATFORM_WEB_APPLICATION. Links with Android and iOS as platform are
// only used on the respective system.
enum ActionPlatform {
  // The platform is unspecified.
  ACTION_PLATFORM_UNSPECIFIED = 0;

  // The action platform is web in general.
  ACTION_PLATFORM_WEB_APPLICATION = 1;

  // The action platform is web on mobile devices.
  ACTION_PLATFORM_MOBILE_WEB = 2;

  // The action platform is Android OS.
  ACTION_PLATFORM_ANDROID = 3;

  // The action platform is iOS.
  ACTION_PLATFORM_IOS = 4;
}

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

RelatedMedia Definition

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

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

Services Feed Sample

Services Feed

    {
  "metadata": {
    "processing_instruction": "PROCESS_AS_COMPLETE",
    "shard_number": 0,
    "total_shards": 1,
    "generation_timestamp": 1534731312
  },
  "service": [
    {
      "merchant_id": "10000001",
      "service_id": "20000001",
      "localized_service_name": {
        "value": "Beyoncé Concert World Tour",
        "localized_value": [
          {
            "locale": "en",
            "value": "Beyoncé Concert World Tour"
          }
        ]
      },
      "localized_description": {
        "value": "The Beyoncé World Tour will feature all the hits from her latest album.",
        "localized_value": [
          {
            "locale": "en",
            "value": "The Beyoncé World Tour will feature all the hits from her latest album."
          }
        ]
      },
      "type": "SERVICE_TYPE_EVENT_TICKET",
      "action_link": [
        {
          "url": "https://www.selltickets.com/event/beyonce/1234?cid=youtube",
          "language": "en-us"
        }
      ],
      "ticket_type": [
        {
          "ticket_type_id": "20000001-1",
          "inventory_type": "INVENTORY_TYPE_PRIMARY",
          "price": {
            "price_micros": 200000000,
            "currency_code": "USD"
          },
          "per_ticket_fee": {
            "service_charge": {
              "price_micros": 20000000,
              "currency_code": "USD"
            },
            "facility_fee": {
              "price_micros": 10000000,
              "currency_code": "USD"
            },
            "taxes": {
              "price_micros": 20000000,
              "currency_code": "USD"
            }
          },
          "localized_short_description": {
            "value": "General admission",
            "localized_value": [
              {
                "locale": "en",
                "value": "General admission"
              }
            ]
          }
        }
      ],
      "ticketing_vertical_specific_data": {
        "event_category": "EVENT_CATEGORY_CONCERT",
        "event_url": "https://www.selltickets.com/event/beyonce/1234",
        "entity": [
          {
            "id": "501",
            "name": "Beyoncé Knowles",
            "url": "https://www.beyonce.com",
            "entity_type": "ENTITY_TYPE_PERFORMER",
            "entity_role": "ENTITY_ROLE_HEADLINER",
            "public_identification_data": {
              "relevant_url": [
                "https://twitter.com/beyonce",
                "https://en.wikipedia.org/wiki/Beyonc%C3%A9"
              ],
              "musicbrainz_id": "859d0860-d480-4efd-970c-c05d5f1776b8"
            }
          }
        ]
      }
    },
    {
      "merchant_id": "10000001",
      "service_id": "20000002",
      "localized_service_name": {
        "value": "The Lion King",
        "localized_value": [
          {
            "locale": "en",
            "value": "The Lion King"
          }
        ]
      },
      "localized_description": {
        "value": "Experience the award-winning Best Musical with beautifully composed music and stunning choreography.",
        "localized_value": [
          {
            "locale": "en",
            "value": "Experience the award-winning Best Musical with beautifully composed music and stunning choreography."
          }
        ]
      },
      "type": "SERVICE_TYPE_EVENT_TICKET",
      "action_link": [
        {
          "url": "https://www.selltickets.com/event/theater/1923?cid=youtube",
          "language": "en-us"
        }
      ],
      "ticket_type": [
        {
          "ticket_type_id": "20000002-1",
          "inventory_type": "INVENTORY_TYPE_PRIMARY",
          "price": {
            "price_micros": 100000000,
            "currency_code": "USD"
          },
          "per_ticket_fee": {
            "service_charge": {
              "price_micros": 10000000,
              "currency_code": "USD"
            },
            "facility_fee": {
              "price_micros": 5000000,
              "currency_code": "USD"
            },
            "taxes": {
              "price_micros": 10000000,
              "currency_code": "USD"
            }
          },
          "localized_short_description": {
            "value": "General admission",
            "localized_value": [
              {
                "locale": "en",
                "value": "General admission"
              }
            ]
          }
        }
      ],
      "ticketing_vertical_specific_data": {
        "event_category": "EVENT_CATEGORY_THEATRE",
        "event_url": "https://www.selltickets.com/event/theater/1923",
        "entity": [
          {
            "id": "15632",
            "name": "The Lion King",
            "url": "https://www.lionkingbroadway.com"
          }
        ],
        "entity_type": "ENTITY_TYPE_PLAY"
      }
    },
    {
      "merchant_id": "10000002",
      "service_id": "20000003",
      "localized_service_name": {
        "value": "Tampa Bay Buccaneers vs. Dallas Cowboys",
        "localized_value": [
          {
            "locale": "en",
            "value": "Tampa Bay Buccaneers vs. Dallas Cowboys"
          }
        ]
      },
      "localized_description": {
        "value": "Watch the Tampa Bay Buccaneers vs. Dallas Cowboys game at AT&T Stadium.",
        "localized_value": [
          {
            "locale": "en",
            "value": "Watch the Tampa Bay Buccaneers vs. Dallas Cowboys game at AT&T Stadium."
          }
        ]
      },
      "type": "SERVICE_TYPE_EVENT_TICKET",
      "action_link": [
        {
          "url": "https://www.selltickets.com/event/sports/4543?cid=youtube",
          "language": "en-us"
        }
      ],
      "ticket_type": [
        {
          "ticket_type_id": "20000003-1",
          "inventory_type": "INVENTORY_TYPE_RESALE",
          "price": {
            "price_micros": 50000000,
            "currency_code": "USD"
          },
          "per_ticket_fee": {
            "service_charge": {
              "price_micros": 5000000,
              "currency_code": "USD"
            },
            "facility_fee": {
              "price_micros": 0,
              "currency_code": "USD"
            },
            "taxes": {
              "price_micros": 5000000,
              "currency_code": "USD"
            }
          },
          "localized_short_description": {
            "value": "General admission",
            "localized_value": [
              {
                "locale": "en",
                "value": "General admission"
              }
            ]
          }
        }
      ],
      "ticketing_vertical_specific_data": {
        "event_category": "EVENT_CATEGORY_SPORTS",
        "event_url": "https://www.selltickets.com/event/sports/4543",
        "entity": [
          {
            "id": "9010",
            "name": "Tampa Bay Buccaneers",
            "url": "https://www.tampabaybuccaneers.com",
            "entity_type": "ENTITY_TYPE_PLAYER",
            "entity_role": "ENTITY_ROLE_HOME_TEAM"
          }
        ]
      }
    }
  ]
}