When it fires
Way sendsbooking.modified when an existing booking is changed after it was completed - for example, when participants or add-ons are added to the booking. It is also sent when a reschedule results in an additional charge; in that case a booking.rescheduled event is sent as well.
Events arrive at your endpoint as a POST request with the body { "event": "booking.modified", "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 on the booking after the modification. |
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, PT2H). |
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 after the modification. |
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. |
paymentMethod | string | Payment method used: credit-card, room-charge, member-number, loyalty, kicc, cash, pay-later, or pay-upon-arrival. |
mode | string | Booking mode: private or shared. |
amount | number | Amount charged for the modification. |
modifiedAt | string (ISO 8601) | Timestamp when the booking was modified. |
loyaltyTransactionId | string | null | Identifier of the associated loyalty transaction, if any. |
Sample
Illustrative payload derived from the event schema.
{
"event": "booking.modified",
"payload": {
"mode": "shared",
"brand": {
"id": "8e12bfdc-a74c-48e2-8a76-2996a359c10c",
"name": "The Seaside Hotel",
"tier": "growth",
"currency": "USD",
"countryCode": "US",
"externalReferenceId": "ABC"
},
"addOns": [],
"amount": 100,
"cartId": "5a8a3e57-cf43-4473-8fec-422809da78f7",
"metadata": null,
"bookingId": "a4b16eba-f47a-49da-be4f-b6f9e1c01dec",
"purchaser": {
"fullName": "Alice Rivera",
"lastName": "Smith",
"firstName": "Alice",
"phoneNumber": "+15550100",
"emailAddress": "alice@example.com"
},
"experience": {
"id": "7a78a18a-aa8f-456b-9fef-b43e0814401d",
"title": "Guided Coastal Hike",
"duration": {
"duration": "PT2H"
},
"location": {
"id": "2d786cca-8596-4c47-8b16-0c8e50451d77",
"city": "Austin",
"name": "Austin, TX, USA",
"state": "TX",
"country": "United States",
"latitude": 30.267153,
"longitude": -97.7430608,
"timezoneId": "America/Chicago",
"additionalInfo": "Please meet on the beach"
},
"startDateTime": "2026-02-21T14:00"
},
"priceTiers": [
{
"id": "1e067a99-cc18-4e18-a514-0d64b05b5a95",
"name": "Adult",
"price": 100,
"amount": 200,
"participantsCount": 2
},
{
"id": "7a9d0374-c24d-436c-b07b-c308737e20f3",
"name": "Child",
"price": 50,
"amount": 50,
"participantsCount": 1
}
],
"participants": [
{
"id": "f5130f1c-d9c7-42c5-a873-4fae31dc1aec",
"lastName": "Smith",
"firstName": "Alice",
"phoneNumber": null,
"priceTierId": "1e067a99-cc18-4e18-a514-0d64b05b5a95",
"emailAddress": null,
"priceTierName": "Adult",
"bookingHistoryId": "805fcac7-747a-470d-b45f-b046b72ed68a"
},
{
"id": "75040b2b-fff5-498b-a52a-c8012b605900",
"lastName": "Smith",
"firstName": "Suzie",
"phoneNumber": null,
"priceTierId": "7a9d0374-c24d-436c-b07b-c308737e20f3",
"emailAddress": null,
"priceTierName": "Child",
"bookingHistoryId": "805fcac7-747a-470d-b45f-b046b72ed68a"
},
{
"id": "c2f9a6d1-3b84-4e0a-9c57-6f1e2a8b4d30",
"lastName": "Smith",
"firstName": "Jane",
"phoneNumber": null,
"priceTierId": "1e067a99-cc18-4e18-a514-0d64b05b5a95",
"emailAddress": null,
"priceTierName": "Adult",
"bookingHistoryId": "3d1a7f42-9c65-4e8b-b210-5a84c7d96e13"
}
],
"paymentMethod": "credit-card",
"loyaltyMemberId": null,
"participantsCount": 3,
"cartConfirmationCode": "mAOxREWCU",
"loyaltyTransactionId": null,
"modifiedAt": "2026-02-14T16:42:10.512Z",
"bookingConfirmationCode": "wU3gwz0bJ",
"externalAnalyticsUserId": null
}
}