Viator · AsyncAPI Specification
Viator Events
Version
View Spec
View on GitHub
TravelUnited StatesTours and ActivitiesExperiencesOTABookingDistributionMarketplaceAffiliateHospitalityAsyncAPIWebhooksEvents
AsyncAPI Specification
generated: '2026-07-28'
method: searched
source: >-
https://docs.viator.com/partner-api/technical/ (Bookings section, BookingEvent schema) and
https://docs.viator.com/supplier-api/technical/ (What's new - Notification Webhooks, Connectivity
overview, Viator APIs tag), plus openapi/viator-partner-api-v2-openapi.json and
openapi/viator-reservation-system-api-openapi.json
spec_type: none
asyncapi_published: false
asyncapi_probe:
urls_checked:
- https://api.viator.com/asyncapi.json
- https://docs.viator.com/asyncapi.yaml
finding: >-
No AsyncAPI document is published on any Viator surface, and the docs host answers 403
AccessDenied for any object it does not hold. Viator's event surface is real but is described
entirely in OpenAPI and prose. Nothing was fabricated to fill this gap.
summary: >-
Viator has three distinct event surfaces and none of them is a classic outbound HTTP webhook to a
partner-supplied URL. On the demand side, booking events are delivered by a cursored PULL feed
with a server-side acknowledgement cursor. On the supply side, Viator hosts inbound notification
endpoints that a reservation system POSTs to when availability, capacity, pricing or special
offers change - Viator's own documentation calls these "Notification Webhooks". Also on the supply
side, the entire Reservation System API is an inverted callback contract: the operator's booking
software implements the endpoints and Viator calls them.
surfaces:
- name: Booking event feed (demand side)
direction: partner pulls from Viator
transport: https
pattern: cursored delta feed with explicit acknowledgement
spec: openapi/viator-partner-api-v2-openapi.json
operations:
- operationId: bookingsModifiedSince
method: GET
path: /bookings/modified-since
description: >-
Returns booking events modified since a timestamp or cursor. Events initiated by the partner
through the API are excluded by default - this is a feed of things that happened TO the
partner's bookings, not an echo of its own writes.
- operationId: bookingsModifiedSinceAcknowledge
method: POST
path: /bookings/modified-since/acknowledge
description: >-
Acknowledges a list of transactionRefs. For supplier-initiated cancellations, acknowledging
before the event's acknowledgeBy timestamp transfers ownership of the customer-communication
obligation to the merchant partner.
message:
name: BookingEvent
schema: openapi/viator-partner-api-v2-openapi.json#/components/schemas/BookingEvent
required: [transactionRef, eventType, acknowledgeBy, bookingRef, partnerBookingRef, lastUpdated,
bookedItem]
id_field: transactionRef
id_format: PBE-<uuid>
correlation_fields: [bookingRef, partnerBookingRef]
event_types:
- type: CONFIRMATION
description: The booking was confirmed.
acknowledgement_required: false
- type: REJECTION
description: The booking was rejected by the supplier.
acknowledgement_required: false
- type: AMENDMENT
description: >-
The booking was amended. Amendments actioned through the amendment endpoints are not returned.
acknowledgement_required: false
- type: CANCELLATION
description: The booking was cancelled by the supplier.
acknowledgement_required: true
note: >-
The only event type with an acknowledgeBy deadline; refundPercentage is always 100 because the
supplier cancelled.
- type: CUSTOMER_CANCELLATION
description: >-
The booking was cancelled by the customer. Cancellations actioned through bookingsCancel are
not returned.
acknowledgement_required: false
added: '2024-07-29'
access: >-
Opened to all partner types on 2025-09-11; the acknowledge endpoint remains restricted to
Full-access + Booking affiliates and merchant partners.
- name: Viator-hosted notification endpoints (supply side)
direction: reservation system pushes to Viator
transport: https
pattern: inbound notification webhook hosted by Viator
spec: openapi/viator-reservation-system-api-openapi.json
status: beta
viator_terminology: Notification Webhooks
operations:
- operationId: eventNotification
method: POST
path: /v2/notification/events
description: >-
Lets a reservation system notify Viator when pricing changes, or when capacity and
availability change, so Viator can prevent overbookings and surface last-minute inventory.
signals: [salability, capacity, pricing]
sla: {p90_seconds: 1, acceptable_seconds: 2, max_monthly_error_rate: 0.5%}
- operationId: specialOffersNotification
method: POST
path: /v2/notification/special-offers
description: >-
Notifies Viator of new or updated special offers so discounted inventory is merchandised
correctly.
sla: {p90_seconds: 1, acceptable_seconds: 2, max_monthly_error_rate: 0.5%}
supersedes:
- operationId: availabilityNotification2
path: /availabilitynotification2
status: deprecated
- name: Inverted callback contract (supply side)
direction: Viator calls the reservation system
transport: https
pattern: >-
The Reservation System API specification defines endpoints the operator's booking software must
itself implement and expose for Viator to call. Functionally these are webhooks with Viator as
the sender and a published contract, SLA and circuit breaker attached.
spec: openapi/viator-reservation-system-api-openapi.json
server_placeholder: https://your-reservation-system.example.com
authentication: {scheme: apiKey, in: header, name: X-Api-Key}
callbacks:
- {operationId: tourList, path: /tourlist, mandatory: false, purpose: inventory mapping}
- {operationId: availabilityCheck, path: /v2/availability/check, mandatory: true, purpose: real-time
capacity check}
- {operationId: calendar, path: /v2/availability/calendar, mandatory: true, purpose: long-term
availability, pricing and offers}
- {operationId: specialOffers, path: /v2/product/special-offers, mandatory: false, purpose: special
offer metadata}
- {operationId: reserve, path: /v2/reserve, mandatory: true, purpose: hold inventory and price
during checkout}
- {operationId: booking, path: /booking, mandatory: true, purpose: create the booking after payment}
- {operationId: bookingAmendment, path: /booking-amendment, mandatory: false, purpose: apply
post-confirmation changes}
- {operationId: bookingCancellation, path: /booking-cancellation, mandatory: true, purpose: cancel
and free inventory}
- {operationId: redemption, path: /redemption, mandatory: true, purpose: redemption status at
cancellation time}
failure_handling: >-
Failed API bookings, amendments and cancellations fall back to email notification of the
operator. Successful API calls generate no operator email. A persistently degraded reservation
system has its circuit breaker opened by Viator at a 70% failure rate.
sla: lifecycle/viator-lifecycle.yml
outbound_webhooks_to_partner_urls: false
outbound_webhooks_note: >-
Viator does not let a demand-side partner register a callback URL. Booking events must be polled
from bookingsModifiedSince. Recorded as measured absence.