Protocol Documentation
Table of Contents
- engine/book/common/service/v1/error.proto
- engine/book/lodging/service/v1/book.proto
- engine/book/lodging/service/v1/confirm_offer.proto
- engine/book/lodging/service/v1/generate_folio.proto
- engine/book/lodging/service/v1/get_bookings.proto
- engine/book/lodging/service/v1/get_bookings_streaming.proto
- engine/book/lodging/service/v1/preview_cancellation.proto
- engine/book/lodging/service/v1/service.proto
- engine/book/lodging/service/v1/submit_cancellation.proto
- engine/content/service/v1/get_properties.proto
- engine/content/service/v1/list_properties.proto
- engine/content/service/v1/list_property_catalog.proto
- engine/content/service/v1/service.proto
- engine/notification/service/v1/delete_subscription.proto
- engine/notification/service/v1/error.proto
- engine/notification/service/v1/list_event_attempts.proto
- engine/notification/service/v1/list_subscriptions.proto
- engine/notification/service/v1/rotate_secret.proto
- engine/notification/service/v1/service.proto
- engine/notification/service/v1/subscribe.proto
- engine/notification/service/v1/update_subscription.proto
- engine/service/common/v1/error.proto
- engine/shop/lodging/service/v1/find_availability.proto
- engine/shop/lodging/service/v1/find_best_offers.proto
- engine/shop/lodging/service/v1/find_best_offers_streaming.proto
- engine/shop/lodging/service/v1/service.proto
- Scalar Value Types
engine/book/common/service/v1/error.proto
ActionNotAvailableError
An error indicating that an action attempted by the client is unavailable for the given BookingDetails.
| Field | Type | Label | Description |
|---|---|---|---|
| action_availability | engine.common.v1.ActionAvailability | The availability of the attempted action. |
BookingNeedsReviewError
An error that indicates a BookingDetails failed in an unknown state and needs to be manually reviewed to determine if it was completed successfully.
CannotCancelError
An error indicating that a BookingDetails cannot be canceled.
InvalidPaymentError
An error indicating that a Booking payment failed due to invalid PaymentInfo.
InvalidStateError
An error indicating that the requested BookingDetails is not in a valid state to perform the operation.
OfferNoLongerAvailableError
An error indicating that the OfferSummary is no longer available. This is likely due to the OfferSummary being sold out.
PaymentProcessingError
An error indicating that a Booking payment failed during processing. These errors are not safe to retry. Contact Member Support for assistance.
engine/book/lodging/service/v1/book.proto
BookError
Error details of a failed LodgingBookingService.Book call.
| Field | Type | Label | Description |
|---|---|---|---|
| offer_no_longer_available | engine.book.common.service.v1.OfferNoLongerAvailableError | Defined when the operation returns with a status of INVALID_ARGUMENT and the requested offer is no longer available for sale. | |
| invalid_state | engine.book.common.service.v1.InvalidStateError | Defined when the operation returns with a status of INVALID_ARGUMENT and the booking associated with the given continuation token is not in a valid state, e.g. It has already been booked or needs CS review. | |
| needs_review | engine.book.common.service.v1.BookingNeedsReviewError | Defined when the operation returns with a status of INTERNAL and the booking is in a non-retriable state that requires manual review to determine if it was completed successfully. | |
| invalid_payment | engine.book.common.service.v1.InvalidPaymentError | Defined when the operation returns with a status of INVALID_ARGUMENT and the provided payment information is invalid or insufficient to complete the booking. | |
| payment_processing | engine.book.common.service.v1.PaymentProcessingError | Defined when the operation returns with a status of INTERNAL and the payment failed to process. |
BookRequest
A request to purchase and reserve an OfferSummary.
| Field | Type | Label | Description |
|---|---|---|---|
| continuation_token | string | An continuation_token from LodgingBookingService.ConfirmOffer. | |
| guests | engine.book.lodging.v1.RoomGuests | repeated | The details of the guests staying on the ReservationDetails. The number of provided RoomGuests entries must match the number of rooms requested during shopping. Some Properties may not retain all of the provided guest names and may not honor more than one guest's loyalty per BookingDetails. |
| metadata | engine.book.lodging.v1.BookingMetadata | repeated | Metadata to be stored and retrieved along with this BookingDetails. |
| payment_info | engine.common.v1.PaymentInfo | Optionally, the PaymentInfo to be used for this booking. |
BookResponse
The result of an attempt to purchase and reserve an OfferSummary.
| Field | Type | Label | Description |
|---|---|---|---|
| details | engine.book.lodging.v1.BookingDetails | The recorded details of the BookingDetails and ReservationDetails. |
engine/book/lodging/service/v1/confirm_offer.proto
ConfirmOfferError
Error details of a failed LodgingBookingService.ConfirmOffer call.
| Field | Type | Label | Description |
|---|---|---|---|
| offer_no_longer_available | engine.book.common.service.v1.OfferNoLongerAvailableError | Defined when the operation returns with a status of INVALID_ARGUMENT and the requested offer is no longer available for sale. | |
| invalid_state | engine.book.common.service.v1.InvalidStateError | Defined when the operation returns with a status of INVALID_ARGUMENT and the booking associated with the given continuation token is not in a valid state, e.g. It has already been booked or needs CS review. | |
| booking_id | string | optional | Optionally, the unique identifier for this booking if it is known when the error occurs. |
ConfirmOfferRequest
A request to confirm final pricing and availability of an OfferSummary.
| Field | Type | Label | Description |
|---|---|---|---|
| continuation_token | string | A continuation_token from LodgingShoppingService.FindBestOffers, LodgingShoppingService.FindBestOffersStreaming, or LodgingShoppingService.FindAvailability. | |
| currency_code | string | The currency code for this request. This field specifies the currency in which the requester expects to see prices. It must adhere to the ISO 4217 three-character alphabetic currency code ("USD", "EUR", etc.). https://www.iso.org/iso-4217-currency-codes.html |
ConfirmOfferResponse
The result of a price and availability check.
| Field | Type | Label | Description |
|---|---|---|---|
| continuation_token | string | An opaque token that may be used to book the stay via LodgingBookingService.Book. See LodgingBookingService.ConfirmOffer | |
| quote | engine.book.lodging.v1.Quote | The full details of the OfferSummary, RoomDescription, Dates of Travel, and any notices required for display during the confirmation process. |
engine/book/lodging/service/v1/generate_folio.proto
GenerateFolioError
Error information returned in the error details of failed GenerateFolio calls.
| Field | Type | Label | Description |
|---|---|---|---|
| invalid_state | engine.book.common.service.v1.InvalidStateError | Defined when the operation returns with a status of FAILED_PRECONDITION and the booking associated with the given booking ID is not in a valid state, e.g. it has not been booked |
GenerateFolioRequest
Generates a folio HTTP response for a Booking.
| Field | Type | Label | Description |
|---|---|---|---|
| booking_id | string | The booking ID for which to generate the folio. |
engine/book/lodging/service/v1/get_bookings.proto
GetBookingError
Describes a failure to retrieve a single BookingDetails.
| Field | Type | Label | Description |
|---|---|---|---|
| booking_id | string | The id of the BookingDetails that could not be retrieved. | |
| error | google.rpc.Status | If available, the reason the BookingDetails could not be retrieved. |
GetBookingsError
Error details of a failed LodgingBookingService.GetBookings call.
| Field | Type | Label | Description |
|---|---|---|---|
| errors | GetBookingError | repeated | If available, the individual BookingDetails that could not be retrieved, in no particular order. |
GetBookingsRequest
A request to retrieve one or more BookingDetails.
| Field | Type | Label | Description |
|---|---|---|---|
| booking_ids | string | repeated | The identifiers of the BookingDetails to retrieve. No more than 50 BookingDetails may be requested at a time. |
GetBookingsResponse
The details of a single BookingDetails.
| Field | Type | Label | Description |
|---|---|---|---|
| bookings | engine.book.lodging.v1.BookingDetails | repeated | The requested BookingDetails in no particular order. |
engine/book/lodging/service/v1/get_bookings_streaming.proto
GetBookingsStreamingError
Error details for a failed LodgingBookingService.GetBookingsStreaming call.
GetBookingsStreamingRequest
A request to retrieve a single BookingDetails.
| Field | Type | Label | Description |
|---|---|---|---|
| booking_id | string |
GetBookingsStreamingResponse
A single BookingDetails or an error describing why that BookingDetails could not be retrieved.
| Field | Type | Label | Description |
|---|---|---|---|
| booking_details | engine.book.lodging.v1.BookingDetails | A single BookingDetails. | |
| error | GetBookingError | Error details describing a failure to retrieve a single BookingDetails. |
engine/book/lodging/service/v1/preview_cancellation.proto
PreviewCancellationError
Error details of a failed LodgingBookingService.PreviewCancellation call.
| Field | Type | Label | Description |
|---|---|---|---|
| invalid_state | engine.book.common.service.v1.InvalidStateError | Defined when the operation returns with a status of INVALID_ARGUMENT and the booking associated with the given booking ID is not in a valid state, e.g. It has not been booked, or is already cancelled. |
PreviewCancellationRequest
Requests the expected result of a cancellation.
| Field | Type | Label | Description |
|---|---|---|---|
| booking_id | string |
PreviewCancellationResponse
Returns the expected result and availability of a cancellation.
| Field | Type | Label | Description |
|---|---|---|---|
| available_actions | engine.common.v1.AvailableActions | Details the means in which a cancellation could occur. | |
| refund | engine.common.v1.Refund | Optionally, the refund details if they can be determined. If cancellation is not possible or cannot be done through the API, this field will not be set. See ActionAvailability for more information. |
engine/book/lodging/service/v1/service.proto
LodgingBookingService
A service to support transactions on offer OfferSummary or one or more BookingDetails.
| Method Name | Request Type | Response Type | Description |
|---|---|---|---|
| ConfirmOffer | ConfirmOfferRequest | ConfirmOfferResponse | Given a In case of error, the status will contain a ConfirmOfferError within the Status.details field. |
| Book | BookRequest | BookResponse | Given a In case of error, the status will contain a BookError within the Status.details field. |
| GetBookings | GetBookingsRequest | GetBookingsResponse | Retrieve multiple BookingDetails given provided one or more BookingDetails.booking_id. In case of error, the status will contain a GetBookingsError within the Status.details field. |
| GetBookingsStreaming | GetBookingsStreamingRequest stream | GetBookingsStreamingResponse stream | Stream a set of BookingDetails given a set of streamed BookingDetails.booking_id. In case of fatal error that interrupts the stream, the status will contain a GetBookingsStreamingError within the Status.details field. In the case of non-fatal errors (such as an individual booking not found), the error details will be found in the response object. This rpc is unavailable via the HTTP/JSON API. |
| PreviewCancellation | PreviewCancellationRequest | PreviewCancellationResponse | Get the availability, means, and expected refund for a booking cancellation. In case of error, the status will contain a PreviewCancellationError within the Status.details field. |
| SubmitCancellation | SubmitCancellationRequest | SubmitCancellationResponse | Submit a cancellation for a specific booking. In case of error, the status will contain a SubmitCancellationError within the Status.details field. |
| GenerateFolio | GenerateFolioRequest | google.api.HttpBody | Generate a folio for a specific booking. In case of error, the status will contain a GenerateFolioError within the Status.details field. |
engine/book/lodging/service/v1/submit_cancellation.proto
SubmitCancellationError
Error information returned in the error details of failed SubmitCancellation calls.
| Field | Type | Label | Description |
|---|---|---|---|
| action_not_available | engine.book.common.service.v1.ActionNotAvailableError | The cancellation action is not available for the booking. | |
| cannot_cancel | engine.book.common.service.v1.CannotCancelError | Defined when the operation returns with a status of INVALID_ARGUMENT and the requested booking is not cancellable. | |
| invalid_state | engine.book.common.service.v1.InvalidStateError | Defined when the operation returns with a status of INVALID_ARGUMENT and the booking associated with the given booking ID is not in a valid state, e.g. It has not been booked, or is already cancelled. |
SubmitCancellationRequest
Requests cancellation of a Booking.
| Field | Type | Label | Description |
|---|---|---|---|
| booking_id | string |
SubmitCancellationResponse
Returns the result of a requested cancellation.
| Field | Type | Label | Description |
|---|---|---|---|
| details | engine.book.lodging.v1.CancellationDetails | The timestamp and refund details. |
engine/content/service/v1/get_properties.proto
GetPropertiesRequest
A request to retrieve specific Properties by their IDs.
| Field | Type | Label | Description |
|---|---|---|---|
| property_ids | string | repeated | The list of Engine Property IDs. Maximum of 50 property IDs per request. |
GetPropertiesResponse
A response containing Property information.
| Field | Type | Label | Description |
|---|---|---|---|
| properties | engine.content.v1.lodging.Property | repeated | The list of available Property objects including phone numbers. |
| inaccessible_property_ids | string | repeated | The list of Property IDs that were requested but not found. |
engine/content/service/v1/list_properties.proto
ListPropertiesCriteria
Criteria that define the properties that may be responsive to a ContentServiceV1.ListProperties request.
| Field | Type | Label | Description |
|---|---|---|---|
| radius | RadiusSearch | ||
| exclude_properties_without_hero_image | bool | optional | Optionally, if true, properties that do not have a Property#hero_image_uri will not be returned. Excluded properties will not count against the page size or limit. |
| exclude_properties_without_description | bool | optional | Optionally, if true, properties that do not have a Property#description will not be returned. Excluded properties will not count against the page size or limit. |
| sort_mode | ListPropertiesSortMode | optional | The order in which the properties will be returned. |
ListPropertiesRequest
A request to retrieve one page of properties.
| Field | Type | Label | Description |
|---|---|---|---|
| request | ListPropertiesRequestDetails | The definition of this ListPropertiesRequest. | |
| next_page_token | string | Optionally, a next_page_token retrieved from a ListPropertiesResponse. |
ListPropertiesRequestDetails
The request definition for a ListPropertiesRequest.
| Field | Type | Label | Description |
|---|---|---|---|
| criteria | ListPropertiesCriteria | The criteria that defines responsive properties for a ListPropertiesRequest. | |
| page_size | int32 | optional | The maximum number of search results to be returned in a page. Default: 100 Minimum: 1 Maximum: 500 |
ListPropertiesResponse
A response to a ContentServiceV1.ListProperties request.
| Field | Type | Label | Description |
|---|---|---|---|
| properties | ResponsiveProperty | repeated | Up to ListPropertiesRequest.page_size responsive to |
| next_page_token | string | optional | Optionally, an opaque token to be passed into the next ListPropertiesRequest in order to retrieve the next page of results. |
RadiusSearch
A search area in a perfect circle around a central point.
| Field | Type | Label | Description |
|---|---|---|---|
| coordinates | engine.common.v1.GeoPoint | Latitude and Longitude coordinates to use as the center point of the search. | |
| physical_address | engine.common.v1.PostalAddress | A physical address to use as the center point of the search. | |
| freeform_search_text | string | A description of a point of interest, an unstructured address, etc. Freeform input will make a "best effort" match to a point of interest and its corresponding geo coordinates. If available, using coordinates or physical_address will yield better results. | |
| radius | engine.common.v1.Distance | The size of the search area. Default: 10 miles Minimum: 1 mile (~1.6 kilometers) Maximum: 50 miles (~80 kilometers) |
ResponsiveProperty
A Property that meets the criteria of a ContentServiceV1.ListProperties request.
| Field | Type | Label | Description |
|---|---|---|---|
| property | engine.content.v1.lodging.Property | The property details. | |
| distance | engine.common.v1.Distance | The distance between the center point of the ListProperties.inclusion_type and the property. |
ListPropertiesSortMode
Controls the order in which Property results are returned from ContentServiceV1.ListProperties.
| Name | Number | Description |
|---|---|---|
| PROPERTY_SORT_MODE_DISTANCE | 0 | Results are returned in ascending order from the center point of the ListProperties.inclusion_type. |
engine/content/service/v1/list_property_catalog.proto
ListPropertyCatalogRequest
A request to retrieve one page of the property catalog.
| Field | Type | Label | Description |
|---|---|---|---|
| request | ListPropertyCatalogRequestDetails | The parameters and filters to retrieve the first page of the catalog. | |
| page_token | string | Optionally, a page_token retrieved from a previous call. |
ListPropertyCatalogRequestDetails
Parameters and filters to be applied to a property catalog request.
| Field | Type | Label | Description |
|---|---|---|---|
| page_size | int32 | optional | The maximum number of records to be returned in a page. Default: 100 Minimum: 1 Maximum: 250 |
| updated_after | string | optional | Optionally, return only properties updated after this timestamp. When omitted, the full catalog is returned. Conforms to ISO-8601, see https://en.wikipedia.org/wiki/ISO_8601 |
ListPropertyCatalogResponse
A response to a CatalogService.ListPropertyCatalog request.
| Field | Type | Label | Description |
|---|---|---|---|
| entries | PropertyCatalogEntry | repeated | The catalog entries returned by the request. It will contain up to ListPropertyCatalogRequestDetails.page_size records. |
| next_page_token | string | optional | Optionally, an opaque token to be passed into the next ListPropertyCatalogRequest to retrieve the next page. |
PropertyCatalogEntry
A single entry in the property catalog, wrapping a Property together with its state.
| Field | Type | Label | Description |
|---|---|---|---|
| state | PropertyCatalogState | The PropertyCatalogState of this entry within the catalog. | |
| property | engine.content.v1.lodging.Property | The Property content for this entry. |
PropertyCatalogState
The state of a property within the catalog.
| Name | Number | Description |
|---|---|---|
| PROPERTY_CATALOG_STATE_UNSPECIFIED | 0 | The state is unknown or unspecified. |
| PROPERTY_CATALOG_STATE_ACTIVE | 1 | The property is active within the catalog |
| PROPERTY_CATALOG_STATE_INACTIVE | 2 | The property is inactive within the catalog. |
engine/content/service/v1/service.proto
CatalogService
| Method Name | Request Type | Response Type | Description |
|---|---|---|---|
| ListPropertyCatalog | .engine.content.service.v1.ListPropertyCatalogRequest | .engine.content.service.v1.ListPropertyCatalogResponse | Retrieves one page of the lodging properties catalog. |
ContentService
| Method Name | Request Type | Response Type | Description |
|---|---|---|---|
| ListProperties | .engine.content.service.v1.ListPropertiesRequest | .engine.content.service.v1.ListPropertiesResponse | |
| GetProperties | .engine.content.service.v1.GetPropertiesRequest | .engine.content.service.v1.GetPropertiesResponse | Retrieves details for the set of properties specified in the request. |
engine/notification/service/v1/delete_subscription.proto
DeleteSubscriptionError
Error information returned in the error details of failed NotificationManagementService.DeleteSubscription calls.
| Field | Type | Label | Description |
|---|---|---|---|
| subscription_not_found | SubscriptionNotFound | The requested event subscription does not exist. |
DeleteSubscriptionRequest
Requests deletion of an event subscription.
| Field | Type | Label | Description |
|---|---|---|---|
| subscription_id | string | This identifies the subscription to remove as provided by Subscribe. |
DeleteSubscriptionResponse
Confirms the requested deletion.
engine/notification/service/v1/error.proto
InvalidCallbackUri
callback_uri is malformed or not an HTTPS URI.
| Field | Type | Label | Description |
|---|---|---|---|
| callback_uri | string | The callback URI that failed validation. |
InvalidDescription
The supplied description is missing, blank, or exceeds the accepted length.
| Field | Type | Label | Description |
|---|---|---|---|
| reason | string | Why the description failed validation, e.g. "blank" or "too_long". |
InvalidEntityType
entity_type was unspecified (ENTITY_TYPE_UNSPECIFIED) or is not a recognized entity domain.
InvalidEventType
event_types contained EVENT_TYPE_UNSPECIFIED or is not a recognized event.
InvalidSecret
The supplied secret is not valid base64 or decodes to a length outside the accepted range.
| Field | Type | Label | Description |
|---|---|---|---|
| reason | string | Why the secret failed validation, e.g. "invalid_base64" or "length_out_of_range". |
InvalidTimeWindow
The requested time window is invalid, e.g. window_end is not after window_start.
| Field | Type | Label | Description |
|---|---|---|---|
| window_start | string | optional | Inclusive start of the query window in ISO 8601 timestamp format. See https://en.wikipedia.org/wiki/ISO_8601#Combined_date_and_time_representations |
| window_end | string | optional | Exclusive end of the query window in ISO 8601 timestamp format. See https://en.wikipedia.org/wiki/ISO_8601#Combined_date_and_time_representations |
MissingNotificationType
No notification_type channel was provided in SubscribeRequest.
SecretRotationLimitReached
The subscription's secrets have already been rotated the maximum number of times within the rolling 24-hour window.
| Field | Type | Label | Description |
|---|---|---|---|
| retry_after | string | ISO 8601 timestamp when the oldest 24-hour window rotation falls off and another rotation will be permitted. See https://en.wikipedia.org/wiki/ISO_8601#Combined_date_and_time_representations |
SubscriptionNotFound
The requested event subscription does not exist. Reused across the endpoints that operate on an existing subscription (e.g. NotificationManagementService.UpdateSubscription, NotificationManagementService.DeleteSubscription, NotificationManagementService.RotateSecret, NotificationManagementService.ListSubscriptionEventAttempts).
| Field | Type | Label | Description |
|---|---|---|---|
| subscription_id | string | The subscription id from the request that could not be found. |
engine/notification/service/v1/list_event_attempts.proto
ListSubscriptionEventAttemptsError
Error details of a failed NotificationManagementService.ListSubscriptionEventAttempts call.
| Field | Type | Label | Description |
|---|---|---|---|
| subscription_not_found | SubscriptionNotFound | The requested event subscription does not exist. | |
| invalid_time_window | InvalidTimeWindow | The requested time window is invalid, e.g. window_end is not after window_start, or window_end is more than 7 days before the current time. |
ListSubscriptionEventAttemptsRequest
Lists event delivery attempts for an event subscription. Attempt history is retained for 7 days.
| Field | Type | Label | Description |
|---|---|---|---|
| subscription_id | string | The subscription id for which to pull event delivery attempts. See NotificationManagementService.Subscribe and NotificationManagementService.ListSubscriptions | |
| window_start | string | optional | Inclusive start of the query window, ISO 8601 timestamp (e.g. 2026-04-01T00:00:00Z). See https://en.wikipedia.org/wiki/ISO_8601#Combined_date_and_time_representations If not set, will default to 24 hours before window_end. If set or calculated to include more than 7 days of history, will not throw an error but returned results will be limited to the history limit. |
| window_end | string | optional | Exclusive end of the query window, ISO 8601 timestamp. See https://en.wikipedia.org/wiki/ISO_8601#Combined_date_and_time_representations Must be after window_start when both are set. If not set, defaults to current time. If set more than 7 days before the current time, rejected with gRPC INVALID_ARGUMENT(3) / HTTP 400 and a ListSubscriptionEventAttemptsError whose invalid_time_window field is set. |
| status | engine.notification.v1.EventDeliveryAttemptStatus | optional | Filter by attempt outcome. Omitting or setting to the unspecified enum value will include all statuses. |
| limit | int32 | optional | Maximum number of records to return. Defaults to 50; maximum is 100. |
| page_token | string | optional | Opaque pagination token returned by a prior response. Omit to start from the first page. |
ListSubscriptionEventAttemptsResponse
Paginated list of event delivery attempts for the requested subscription.
| Field | Type | Label | Description |
|---|---|---|---|
| attempts | engine.notification.v1.EventDeliveryAttempt | repeated | Event delivery attempt records for the page, ordered by attempted_at (descending). |
| next_page_token | string | optional | Opaque token used to fetch the next page of attempts. If omitted, there are no additional pages. |
engine/notification/service/v1/list_subscriptions.proto
ListSubscriptionsRequest
A request for a list of subscriptions. See NotificationManagementService.ListSubscriptions.
| Field | Type | Label | Description |
|---|---|---|---|
| limit | int32 | optional | Maximum number of subscriptions to return. Defaults to 50; maximum is 100. |
| page_token | string | optional | Opaque pagination token returned by a prior response. Omit to start from the first page. |
ListSubscriptionsResponse
A paginated list of event subscriptions returned from NotificationManagementService.ListSubscriptions.
| Field | Type | Label | Description |
|---|---|---|---|
| subscriptions | engine.notification.webhook.v1.Subscription | repeated | Event subscriptions for the current page. Paginate with [next_page_token]. |
| next_page_token | string | optional | Opaque token used to fetch the next page of subscriptions. If omitted, there are no additional pages. |
engine/notification/service/v1/rotate_secret.proto
RotateSecretError
Error details of a failed NotificationManagementService.RotateSecret call.
| Field | Type | Label | Description |
|---|---|---|---|
| subscription_not_found | SubscriptionNotFound | The requested event subscription does not exist. | |
| invalid_secret | InvalidSecret | The supplied secret is not valid base64 or decodes to a length outside the accepted range. | |
| secret_rotation_limit_reached | SecretRotationLimitReached | The subscription's secrets have already been rotated the maximum number of times within the rolling 24-hour window. |
RotateSecretRequest
Rotates the HMAC signing secret for an event subscription. The previous secret remains valid for 24 hours after rotation.
| Field | Type | Label | Description |
|---|---|---|---|
| subscription_id | string | Opaque identifier of the event subscription whose secret is being rotated. | |
| secret | string | optional | Base64-encoded secret key used for HMAC signature verification. If not provided, the server will generate one and return it in RotateSecretResponse.secret. The decoded key must be 24-75 bytes (32-100 base64 characters). |
RotateSecretResponse
Confirms rotation and returns the newly-active HMAC signing secret.
| Field | Type | Label | Description |
|---|---|---|---|
| subscription_id | string | Opaque identifier of the event subscription whose secret was rotated. | |
| secret | string | Base64-encoded HMAC signing secret now in effect, generated by the server if not provided in the request. The prior secret remains valid for verification for 24 hours. |
engine/notification/service/v1/service.proto
NotificationManagementService
A service to register and manage event subscriptions for event notifications.
In case of error, failed calls return a per-endpoint error type (e.g. SubscribeError) within the Status.details field.
| Method Name | Request Type | Response Type | Description |
|---|---|---|---|
| Subscribe | SubscribeRequest | SubscribeResponse | Creates a new event subscription for one or more events. In case of error, the status will contain a SubscribeError within the Status.details field. |
| UpdateSubscription | UpdateSubscriptionRequest | UpdateSubscriptionResponse | Update an existing subscription's details. This method does not allow changing an existing subscription's entity type. To change an entity type you must create a new subscription and/or delete the old one. In case of error, the status will contain an UpdateSubscriptionError within the Status.details field. |
| DeleteSubscription | DeleteSubscriptionRequest | DeleteSubscriptionResponse | Delete an event subscription. Once deleted, no further events will be delivered to this subscription. If the URI associated with this subscription is associated with any other event subscriptions, it will still receive events from those other subscriptions. In case of error, the status will contain a DeleteSubscriptionError within the Status.details field. |
| ListSubscriptions | ListSubscriptionsRequest | ListSubscriptionsResponse | Returns all event subscriptions. |
| RotateSecret | RotateSecretRequest | RotateSecretResponse | Rotate the HMAC signing secret for event payload signature verification. The previous secret remains in-effect for 24 hours after rotation. A subscription may be rotated at most 10 times within any rolling 24-hour window. Requests that exceed this cap fail with gRPC INVALID_ARGUMENT(3) / HTTP 400 and a RotateSecretError. The cap relaxes as prior rotations age past 24 hours. In case of error, the status will contain a RotateSecretError within the Status.details field. |
| ListSubscriptionEventAttempts | ListSubscriptionEventAttemptsRequest | ListSubscriptionEventAttemptsResponse | Lists event delivery attempts for a subscription over a time window of up to 7 days. In case of error, the status will contain a ListSubscriptionEventAttemptsError within the Status.details field. |
engine/notification/service/v1/subscribe.proto
SubscribeError
Error details of a failed NotificationManagementService.Subscribe call.
| Field | Type | Label | Description |
|---|---|---|---|
| invalid_entity_type | InvalidEntityType | entity_type was unspecified or is not a recognized entity domain. | |
| invalid_callback_uri | InvalidCallbackUri | callback_uri is missing, malformed, or not an HTTPS URI. | |
| invalid_secret | InvalidSecret | The supplied secret is not valid base64 or decodes to a length outside the accepted range. | |
| missing_notification_type | MissingNotificationType | No notification_type channel was provided. | |
| invalid_event_type | InvalidEventType | event_types contained EVENT_TYPE_UNSPECIFIED or is not a recognized event. | |
| invalid_description | InvalidDescription | description was missing, blank, or exceeded the accepted length. |
SubscribeRequest
Subscribe to receive notifications for one or more event types for a given entity at a webhook URI.
| Field | Type | Label | Description |
|---|---|---|---|
| entity_type | engine.notification.v1.EntityType | Entity domain this subscription applies to. Required: a request with ENTITY_TYPE_UNSPECIFIED is rejected with gRPC INVALID_ARGUMENT(3) / HTTP 400 and a SubscribeError whose invalid_entity_type field is set. | |
| event_types | engine.notification.v1.EventType | repeated | Events that trigger delivery for the given entity type. Omit or send an empty list to subscribe to all event types for this entity_type. When present, the list must not contain EVENT_TYPE_UNSPECIFIED; if it does, the call is rejected with gRPC INVALID_ARGUMENT(3) / HTTP 400 and a SubscribeError whose invalid_event_type field is set. |
| webhook | SubscribeWebhookNotification | Delivery via an HTTPS webhook endpoint. | |
| description | string | Text associated to provide more context about the given subscription. This information can help provide additional context about the intent of this particular subscription as part of a larger set of subscriptions, for example. The description can be updated in UpdateSubscriptionRequest. Required: Must be non-blank after trimming whitespace. Limited to 120 characters. Rejected with gRPC INVALID_ARGUMENT(3) / HTTP 400 and a SubscribeError whose invalid_description field is set. | |
| enabled | bool | optional | Whether the subscription is enabled for delivery. Defaults to true when omitted. While disabled, the subscription is retained but receives no deliveries until re-enabled via NotificationManagementService.UpdateSubscription. Re-enabling resumes delivery for new events only; events that occurred while disabled are not automatically sent. |
SubscribeResponse
Subscribe response from NotificationManagementService.Subscribe
| Field | Type | Label | Description |
|---|---|---|---|
| subscription_id | string | Opaque identifier for this event subscription. | |
| webhook | SubscribeResponseWebhookNotification | Details for a subscription delivered via an HTTPS webhook endpoint. |
SubscribeResponseWebhookNotification
Webhook-specific fields returned from a NotificationManagementService.Subscribe request.
| Field | Type | Label | Description |
|---|---|---|---|
| secret | string | The Base64-encoded HMAC signing secret used to sign request payloads to the subscription's webhook URI. If a secret was provided in SubscribeWebhookNotification this will be the same value. If the secret was omitted this will be a generated secret from the server. This secret is only available in this response and cannot be fetched later. It must be stored by the caller in order to verify inbound webhook deliveries. |
SubscribeWebhookNotification
Webhook-specific fields for a NotificationManagementService.Subscribe request.
| Field | Type | Label | Description |
|---|---|---|---|
| callback_uri | string | The HTTPS URI Engine will POST signed webhook payloads to. Must be reachable from Engine infrastructure. This URI must be an HTTPS endpoint and start with "https://". | |
| secret | string | optional | Base64-encoded secret key used for HMAC signature verification on inbound webhook deliveries. If not provided, the server will generate one and return it in SubscribeResponseWebhookNotification.secret. The decoded key must be 24-75 bytes (32-100 base64 characters). |
engine/notification/service/v1/update_subscription.proto
EventTypeUpdate
A replacement set of event types for [UpdateSubscriptionRequest.event_types]. Wrapping the repeated field lets the request distinguish "leave unchanged" (field omitted) from "replace with this set" (field present), including replacing with all event types (empty values).
| Field | Type | Label | Description |
|---|---|---|---|
| values | engine.notification.v1.EventType | repeated | Event types that trigger delivery for the subscription. An empty list delivers all event types. Must not contain EVENT_TYPE_UNSPECIFIED; if it does, the call is rejected with gRPC INVALID_ARGUMENT(3) / HTTP 400 and an UpdateSubscriptionError whose invalid_event_type field is set. |
UpdateSubscriptionError
Error details of a failed NotificationManagementService.UpdateSubscription call.
| Field | Type | Label | Description |
|---|---|---|---|
| subscription_not_found | SubscriptionNotFound | The requested event subscription does not exist. | |
| invalid_callback_uri | InvalidCallbackUri | callback_uri was provided but is malformed or not an HTTPS URI. | |
| invalid_event_type | InvalidEventType | event_types contained EVENT_TYPE_UNSPECIFIED or is not a recognized event. | |
| invalid_description | InvalidDescription | description was blank or exceeded the accepted length. |
UpdateSubscriptionRequest
The request object for NotificationManagementService.UpdateSubscription.
| Field | Type | Label | Description |
|---|---|---|---|
| subscription_id | string | The subscription to update using the subscription_id returned from NotificationManagementService.Subscribe or NotificationManagementService.ListSubscriptions. | |
| event_types | EventTypeUpdate | optional | Replaces the event types this subscription delivers. Omit to leave the existing event types unchanged. When present, the supplied set fully replaces the prior set (it is not merged). Provide the message with an empty values list to deliver all event types for the subscription's entity type. |
| webhook | UpdateWebhookNotification | Updates to a subscription delivered via an HTTPS webhook endpoint. | |
| description | string | optional | Text associated to provide more context about the given subscription. This information can help provide additional context about the intent of this particular subscription as part of a larger set of subscriptions, for example. If omitted, will leave the existing subscription description unchanged. If present, must be non-blank after trimming whitespace. Limited to 120 characters. Rejected with gRPC INVALID_ARGUMENT(3) / HTTP 400 and an UpdateSubscriptionError whose invalid_description field is set. |
| enabled | bool | optional | Whether the subscription is enabled for delivery. While disabled, the subscription is retained but receives no deliveries. Re-enabling resumes delivery for new events only; events that occurred while disabled are not automatically sent. If omitted, will leave the existing subscription value unchanged. |
UpdateSubscriptionResponse
Acknowledges a successful update; no payload is returned.
UpdateWebhookNotification
Webhook-specific fields for a NotificationManagementService.UpdateSubscription request.
| Field | Type | Label | Description |
|---|---|---|---|
| callback_uri | string | optional | The HTTPS URI Engine will POST signed webhook payloads to. Must be reachable from Engine infrastructure. This URI must be an HTTPS endpoint and start with "https://". If omitted or an empty string, will leave the existing subscription URI unchanged. |
engine/service/common/v1/error.proto
InvalidSortError
An error indicating that the requested sorting option provided is not valid for the given search criteria.
engine/shop/lodging/service/v1/find_availability.proto
FindAvailabilityPropertyRequest
A request to find availability for a single Property.
| Field | Type | Label | Description |
|---|---|---|---|
| property_id | string | The Engine Property ID | |
| check_in_date | string | An ISO-8601-compliant date on which you will check in to the property. See https://en.wikipedia.org/wiki/ISO_8601#Dates | |
| check_out_date | string | An ISO-8601-compliant date on which you will check out of the property. See https://en.wikipedia.org/wiki/ISO_8601#Dates | |
| num_rooms | int32 | The number of rooms to book. May not exceed 8 | |
| currency_code | string | The 3-character ISO-4217 alphabetic currency code to be used to convey pricing information. https://www.iso.org/iso-4217-currency-codes.html | |
| travelers | engine.common.v1.AnonymousTraveler | repeated | Describes the travelers for whom you are searching. Changes to the quantity or age of travelers has an impact on the Offer price. Failure to properly identify your travelers may incur additional charges at checkin or cancellation of the booking. |
| sales_channel | engine.common.v1.SalesChannel | optional | If available, the sales channel for the customer |
FindAvailabilityRequest
| Field | Type | Label | Description |
|---|---|---|---|
| continuation_token | string | A [BestOffer.continuation_token]. Passing a continuation_token allows you to continue the shopping flow from a BestOffers search with the necessary search context preserved. | |
| single_property | FindAvailabilityPropertyRequest | A request to find availability for a Property directly, skipping the BestOffers search. |
FindAvailabilityResponse
A response to a LodgingShoppingService.FindBestOffers call.
| Field | Type | Label | Description |
|---|---|---|---|
| room_groups | RoomGroup | repeated | A list of available OfferSummary, grouped by RoomDescription. |
Offer
A bookable Offer representing a set of amenities and a price for the booking.
| Field | Type | Label | Description |
|---|---|---|---|
| continuation_token | string | An opaque token that may be passed to LodgingBookingService.ConfirmOffer to begin the booking process. | |
| summary | engine.shop.lodging.v1.OfferSummary | The details of the Offer to book. |
RoomGroup
A grouping of bookable Offers, collected by the RoomDescription to which they apply.
| Field | Type | Label | Description |
|---|---|---|---|
| room_description | engine.shop.lodging.v1.RoomDescription | A description of the rooms for which the Offer applies. For example, "Standard 1 King Bed", "Standard 2 Queen Beds", or "Suite 1 King Bed". | |
| offers | Offer | repeated | A list of bookable Offers for the room. |
engine/shop/lodging/service/v1/find_best_offers.proto
BestOffer
The details of the Best Offer available for a property given the search criteria and aggregated data about other Offers that are available at the same property. A BestOffer is not an exhaustive representation of all amenities and options available at a Property. For example, it is possible that a BestOffer might indicate no loyalty is available because it cannot be known until full availability has been pulled. To retrieve the full availability for a Property, see LodgingShoppingService.FindAvailability.
| Field | Type | Label | Description |
|---|---|---|---|
| continuation_token | string | An opaque token that may be used to see all available Offers for the property, or to book the offer directly. See LodgingShoppingService.FindAvailability See LodgingBookingService.ConfirmOffer | |
| best_offer | engine.shop.lodging.v1.OfferSummary | The specific details of the Best Offer available for a Property. | |
| is_refundable_available | bool | True if it is known that at least one refundable Offer is available for the property. | |
| is_loyalty_available | bool | True if it is known that at least one Offer is available that earns loyalty points. | |
| is_free_parking_available | bool | True if it is known that at least one Offer is available that has free parking included. Please note: this value will be false if it is known that the Property offers free parking to all guests. | |
| is_free_breakfast_available | bool | True if it is known that at least one Offer is available that has free breakfast included. Please note: this value will be false if it is known that the Property offers free breakfast to all guests. | |
| is_loyalty_membership_rate_available | bool | True if it is known that at least one Offer is available that requires a loyalty membership id to book. |
FindBestOffersError
Error details of a failed LodgingShoppingService.FindBestOffers call.
| Field | Type | Label | Description |
|---|---|---|---|
| invalid_sort | engine.service.common.v1.InvalidSortError | Defined when the operation returns with a status of INVALID_ARGUMENT and [FindBestOffersRequest.sort_mode] is not valid for the given search criteria. |
FindBestOffersRequest
A request that defines the criteria of a "Best Offers" search. See LodgingShoppingService.FindBestOffers
| Field | Type | Label | Description |
|---|---|---|---|
| criteria | FindBestOffersRequestCriteria | The criteria to be used to identify and filter Properties and Offers. | |
| include_properties_with_no_availability | bool | By default, only Properties that have rooms matching your criteria will be returned. This differs from LodgingShoppingService.FindBestOffersStreaming which returns all considered properties. You may wish to set this to true if you are building a shopping experience that indicates availability may differ with different criteria, such as dates, but streaming is not viable. | |
| sort_mode | FindBestOffersSortMode | The order in which the results will be returned. |
FindBestOffersRequestCriteria
Defines the base criteria used in a "Best Offers" search.
| Field | Type | Label | Description |
|---|---|---|---|
| point_and_radius | RadiusSearch | Check the availability of up to max_property_candidates hotels nearest the center of the provided radius. | |
| property_id | PropertyIdSearch | Check the availability of properties as identified by the provided Engine Property IDs. | |
| check_in_date | string | An ISO-8601-compliant date on which you will check in to the property. See https://en.wikipedia.org/wiki/ISO_8601#Dates | |
| check_out_date | string | An ISO-8601-compliant date on which you will check out of the property. See https://en.wikipedia.org/wiki/ISO_8601#Dates | |
| num_rooms | int32 | The number of rooms to book. May not exceed 8 | |
| currency_code | string | The 3-character ISO-4217 alphabetic currency code to be used to convey pricing information. https://www.iso.org/iso-4217-currency-codes.html | |
| travelers | engine.common.v1.AnonymousTraveler | repeated | Describes the travelers for whom you are searching. Changes to the quantity or age of travelers has an impact on the Offer price. Failure to properly identify your travelers may incur additional charges at checkin or cancellation of the booking. |
| sales_channel | engine.common.v1.SalesChannel | optional | If available, the sales channel for the customer |
| max_property_candidates | int32 | optional | The maximum number of properties to be considered for Offers. Properties with no availability will count against this limit, but may not be returned if there is no availability. May not exceed 250. This limit is not honored when Property IDs are provided via [property_ids]. |
FindBestOffersResponse
The results of a LodgingShoppingService.FindBestOffers search.
| Field | Type | Label | Description |
|---|---|---|---|
| offers | PropertyBestOffer | repeated | The full list of offers responsive your search. |
PropertyBestOffer
A Property and the BestOffer available for that Property given the provided search criteria.
| Field | Type | Label | Description |
|---|---|---|---|
| property | ResponsiveProperty | Details of the Property for which this BestOffer applies. | |
| best_offer | BestOffer | The details of the available BestOffer. |
PropertyIdSearch
A list of Engine Property IDs to shop for Best Offers.
| Field | Type | Label | Description |
|---|---|---|---|
| property_ids | string | repeated | The list of Engine Property IDs. Minimum: 1 Maximum: 250 |
RadiusSearch
A search area in a perfect circle around a central point.
| Field | Type | Label | Description |
|---|---|---|---|
| coordinates | engine.common.v1.GeoPoint | Latitude and Longitude coordinates to use as the center point of the search. | |
| radius | engine.common.v1.Distance | The size of the search area. Default: 10 miles Minimum: 1 mile (~1.6 kilometers) Maximum: 50 miles (~80 kilometers) |
ResponsiveProperty
A Property that is responsive to the current shopping search.
| Field | Type | Label | Description |
|---|---|---|---|
| property | engine.content.v1.lodging.Property | The details of the returned property. | |
| distance | engine.common.v1.Distance | The distance from the center point of the search area, if appropriate. |
FindBestOffersSortMode
Describes the various ways a LodgingShoppingService.FindBestOffers search maybe sorted.
| Name | Number | Description |
|---|---|---|
| FIND_BEST_OFFERS_SORT_MODE_UNSPECIFIED | 0 | No specific sort criteria will be used. |
| FIND_BEST_OFFERS_SORT_MODE_DISTANCE | 1 | Properties are returned in order of increasing distance. In case of ties, Property names are sorted lexically. Only valid when candidate properties are identified via RadiusSearch (point_and_radius). |
engine/shop/lodging/service/v1/find_best_offers_streaming.proto
FindBestOffersStreamingRequest
A request that defines the criteria of a "Best Offers" streaming search. See LodgingShoppingService.FindBestOffersStreaming.
| Field | Type | Label | Description |
|---|---|---|---|
| criteria | FindBestOffersRequestCriteria | The criteria to be used to identify and filter Properties and Offers. |
FindBestOffersStreamingResponse
An alternation to support multi-message-type streaming of BestOffers.
| Field | Type | Label | Description |
|---|---|---|---|
| property | ResponsiveProperty | A property that will be used as a candidate for Offer retrieval. Not every property sent will have a BestOffer associated with it if there is no availability within your specified parameters. While it is possible for Properties and BestOffers to be interleaved, the ResponsiveProperty for a BestOffer will always be sent and received first. | |
| offer | BestOffer | A BestOffer candidate for a Property. A BestOffer will never be sent for a property before its responsive property is sent. A single property may have multiple BestOffers returned if a better offer is encountered after the first has already been sent. If multiple BestOffers are received for a single Property, the last always wins. |
engine/shop/lodging/service/v1/service.proto
LodgingShoppingService
Service and methods to support shopping for lodging.
| Method Name | Request Type | Response Type | Description |
|---|---|---|---|
| FindBestOffers | FindBestOffersRequest | FindBestOffersResponse | Identifies a set of candidate Properties that match the provided criteria. Once the appropriate properties have been identified, the Best Offer available for each property is selected and augmented with the details of other available Offers. Best Offers are not exhaustive of all available offers for a property. In case of error, the status will contain a FindBestOffersError within the Status.details field. |
| FindBestOffersStreaming | FindBestOffersStreamingRequest | FindBestOffersStreamingResponse stream | Identifies a set of candidate Properties that match the provided criteria. All ResponsiveProperties are returned regardless of availability. BestOffers for candidate Properties will be returned as soon as they are available. It is possible for there to be multiple BestOffers for a single candidate property if we discover a better Offer or additional available amenities after the first is sent. The last BestOffer received for a ResponsiveProperty always supersedes any previously received Offers. FindBestOffersStreaming is not offered via the HTTP/JSON API. |
| FindAvailability | FindAvailabilityRequest | FindAvailabilityResponse | Finds availability for a given property, broken down by individual room type. RoomGroups describe the various rooms available to book. Offers describe the cheapest OfferSummary along various dimensions like refundability and loyalty eligible within the RoomGroup. |