When it fires
Way sendsbooking.cancelled when a booking is canceled, whether the cancellation is partial or full and whether it is performed by the brand or by the guest.
Events arrive at your endpoint as a POST request with the body { "event": "booking.cancelled", "payload": { ... } }. When a webhook secret is set, the X-Way-Signature header carries an HMAC of the request body - see Verify signatures.
Payload
| Field | Type | Description |
|---|---|---|
brand.id | string (UUID) | Unique identifier of the brand. |
brand.name | string | Display name of the brand. |
brand.tier | string | Subscription tier of the brand. |
brand.countryCode | string | Country code of the brand. |
brand.currency | string | Currency code used by the brand. |
brand.externalReferenceId | string | null | External reference identifier configured for the brand. |
addOns | array | Add-ons purchased with the booking. |
addOns[].id | string (UUID) | Unique identifier of the add-on item. |
addOns[].label | string | Display label of the add-on. |
addOns[].price | number | Unit price of the add-on. |
addOns[].paidAmount | number | Amount paid for the add-on. |
addOns[].taxes[].id | string (UUID) | Unique identifier of the applied tax entry. |
addOns[].taxes[].included | boolean | Whether the tax is included in the price. |
addOns[].taxes[].paidAmount | number | Tax amount paid. |
addOns[].taxes[].tax.id | string (UUID) | Unique identifier of the tax. |
addOns[].taxes[].tax.name | string | Name of the tax. |
bookingId | string (UUID) | Unique identifier of the booking. |
bookingConfirmationCode | string | Human-readable confirmation code of the booking. |
cartId | string (UUID) | null | Identifier of the cart the booking was purchased in, if any. |
cartConfirmationCode | string | null | Confirmation code of the cart, if any. |
experience.id | string (UUID) | Unique identifier of the experience. |
experience.title | string | Title of the experience. |
experience.startDateTime | string | Local start date and time of the booked session. |
experience.duration.duration | string | Session duration in ISO 8601 format (for example, PT1H). |
experience.location.id | string (UUID) | Unique identifier of the location. |
experience.location.name | string | Display name of the location. |
experience.location.additionalInfo | string | null | Extra directions or meeting instructions. |
experience.location.city | string | null | City of the location. |
experience.location.state | string | null | State of the location. |
experience.location.country | string | null | Country of the location. |
experience.location.latitude | number | Latitude of the location. |
experience.location.longitude | number | Longitude of the location. |
experience.location.timezoneId | string | IANA time zone of the location. |
participantsCount | number | Total number of participants on the booking. |
participants[].id | string | Unique identifier of the participant. |
participants[].firstName | string | First name of the participant. |
participants[].lastName | string | Last name of the participant. |
participants[].priceTierName | string | Name of the price tier the participant booked. |
participants[].priceTierId | string | Identifier of the price tier the participant booked. |
participants[].emailAddress | string | null | Email address of the participant. |
participants[].phoneNumber | string | null | Phone number of the participant. |
participants[].answerIds | string[] | Identifiers of the participant’s custom question answers, when present. |
participants[].bookingHistoryId | string | null | Identifier of the booking history entry that added the participant. |
priceTiers[].id | string | Unique identifier of the price tier. |
priceTiers[].name | string | Name of the price tier. |
priceTiers[].price | number | Unit price of the tier. |
priceTiers[].amount | number | Total amount for the tier on this booking. |
priceTiers[].participantsCount | number | Number of participants booked on the tier. |
purchaser.fullName | string | Full name of the purchaser. |
purchaser.firstName | string | First name of the purchaser. |
purchaser.lastName | string | Last name of the purchaser. |
purchaser.emailAddress | string | Email address of the purchaser. |
purchaser.phoneNumber | string | null | Phone number of the purchaser. |
metadata | object | null | Custom metadata attached to the booking at checkout. |
loyaltyMemberId | string | null | Loyalty member identifier of the purchaser, if any. |
externalAnalyticsUserId | string | null | External analytics user identifier, if any. |
cancelledAt | string (ISO 8601) | Timestamp when the booking was canceled. |
Sample
{
"event":"booking.cancelled",
"payload":{
"bookingId":"e0bec7d5-5263-4191-a61c-c4c948223fe4",
"experience":{
"id":"53e7c7e3-37c2-4af1-ab9f-958af8d42ccc",
"title":"Sunrise Surf & Swim",
"startDateTime":"2022-11-21T09:00"
},
"participantsCount":2,
"participants":[
{
"lastName":"Rivera",
"firstName":"Alice",
"emailAddress":"alice@example.com",
"priceTierName":"Adult"
},
{
"lastName":"Rivera",
"firstName":"Susan",
"priceTierName":"Child"
}
],
"priceTiers":[
{
"name":"Adult",
"price":100,
"amount":100,
"participantsCount":1
},
{
"name":"Child",
"price":50,
"amount":50,
"participantsCount":1
}
],
"purchaser":{
"fullName":"Alice Rivera",
"emailAddress":"alice@example.com"
},
"metadata":null,
"cancelledAt":"2022-11-18T19:30:52.787Z"
}
}