Overview
Booking webhooks notify your application when a booking (dossier) is created, modified or deleted - including status changes, date/time changes, guest count changes, contact reassignment and custom field edits.Booking events are currently in beta: the payload structure may still evolve before general availability.
Payload
Thedata field carries the full booking payload, identical to GET /bookings/{id} - nested events[], financial references and custom fields included.
status_changed event: a status change is a booking.updated like any other - read status_id (and resolve its type/is_canceled via GET /status) to drive your pipeline.
Delivery semantics
- One webhook per logical mutation. Changes are coalesced over a short window (~10 seconds): creating a 3-day booking, or changing the status of a multi-event booking, delivers one webhook with the final state - not one per event.
- No-op suppression. An update that leaves the payload identical to the last delivered one is not delivered.
- Upsert semantics. The first delivered event for a booking that existed before your webhook was created (or before the feature went live) may be a
booking.created. Treatcreatedandupdatedas upserts of the same resource. - Booking ID changes. When a single-event booking gains a second event, its
idchanges (new group ID). You then receive abooking.updatedcarrying the newid; the event IDs (events[].id) never change, so match on the events you already hold and re-key your side. - New webhooks warm-up. A newly created webhook can take up to 5 minutes to start receiving booking events.
- Deliveries use the standard envelope, HMAC signature and retry policy - see Webhooks introduction and Security.
Typical integration loop
- Subscribe to
booking.created+booking.updated+booking.deleted. - On each delivery, upsert the booking in your system keyed by its
id, and store theevents[].idlist: if a later delivery arrives under a new bookingid, the shared event IDs identify it as the same booking. - Backfill or reconcile at any time by paging through
GET /bookings(optionally windowed withcreated_from/created_to).
