> For the complete documentation index, see [llms.txt](https://docs.zaui.com/webhooks/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.zaui.com/webhooks/event-data-payloads/booking-webhook-payload-schema.md).

# Booking Webhook Payload Schema

## Booking Webhook Payload Schema

This page describes the `2026-04-10` Booking Webhook payload structure.

For version migration details, see **Payload Versions**.

***

### Root Object

| Field                                |    Type | Nullable | Description                                           |
| ------------------------------------ | ------: | -------: | ----------------------------------------------------- |
| `eventNotificationUniqueId`          |  string |       No | Unique webhook event identifier. Preserved on replay. |
| `eventNotificationCompanyName`       |  string |       No | Company name.                                         |
| `eventNotificationCompanyIdentifier` |  string |       No | Company identifier.                                   |
| `eventNotificationGroupId`           | integer |       No | Event group identifier.                               |
| `eventNotificationTypeId`            | integer |       No | Event type identifier.                                |
| `eventNotificationType`              |  string |       No | Event type name.                                      |
| `eventNotificationTypeV2`            |  string |       No | Normalized event type string.                         |
| `eventNotificationDateTime`          |  string |       No | ISO 8601 event timestamp.                             |
| `eventNotificationName`              |  string |       No | Webhook name.                                         |
| `eventNotificationSystem`            |  string |       No | Source system.                                        |
| `eventNotificationSystemUrl`         |  string |      Yes | Source system URL.                                    |
| `eventNotificationApiVersion`        |  string |       No | Webhook payload version.                              |
| `eventData`                          |  object |       No | Payload body.                                         |

***

### Event Data

| Field              |   Type | Nullable | Description        |
| ------------------ | -----: | -------: | ------------------ |
| `currencySettings` | object |       No | Currency metadata. |
| `booking`          | object |       No | Booking payload.   |

***

### Currency Settings

Monetary values are returned in minor units. Use `currencyPrecision` to convert values to the display currency amount.

Example: `7840` with `currencyPrecision: 2` = `78.40`.

| Field               |    Type | Nullable | Description                                        |
| ------------------- | ------: | -------: | -------------------------------------------------- |
| `currency`          |  string |       No | Currency code, for example `CAD`, `NZD`, or `USD`. |
| `currencyPrecision` | integer |       No | Number of decimal places used by the currency.     |

Example:

```json
"currencySettings": {
  "currency": "CAD",
  "currencyPrecision": 2
}
```

**Booking Object**

| Field                  |    Type | Nullable | Description                                                                                      |
| ---------------------- | ------: | -------: | ------------------------------------------------------------------------------------------------ |
| `bookingId`            | integer |       No | Internal booking ID.                                                                             |
| `isBookingCancelled`   | boolean |       No | Indicates whether the booking is cancelled.                                                      |
| `bookingReference`     |  string |      Yes | Booking reference. Present for backward compatibility.                                           |
| `bookingRef`           |  string |      Yes | Canonical customer-facing booking reference.                                                     |
| `agentRef`             |  string |      Yes | Agent/OTA reference from `tbooking.referenceId`. `null` for direct bookings or when not present. |
| `bookingSaleDateTime`  |  string |      Yes | ISO 8601 booking sale timestamp.                                                                 |
| `bookingCloseDateTime` |  string |      Yes | ISO 8601 booking close timestamp.                                                                |
| `bookingRevenue`       |  object |       No | Booking revenue totals.                                                                          |
| `customers`            |   array |       No | Customer records.                                                                                |
| `activities`           |   array |       No | Booked activity lines.                                                                           |
| `products`             |   array |       No | Booked product lines.                                                                            |
| `giftCertificates`     |   array |       No | Gift certificate lines.                                                                          |
| `passes`               |   array |       No | Pass sale lines.                                                                                 |
| `transactions`         |   array |       No | Transaction records.                                                                             |

### Booking Revenue

| Field             |   Type | Nullable | Description                      |
| ----------------- | -----: | -------: | -------------------------------- |
| `bookingSubTotal` | number |       No | Booking subtotal in minor units. |
| `bookingTax`      | number |       No | Booking tax in minor units.      |
| `bookingTotal`    | number |       No | Booking total in minor units.    |

Example:

```
"bookingRevenue": {
  "bookingSubTotal": 6000,
  "bookingTax": 1839,
  "bookingTotal": 7840
}
```

## Customers

`customers` is always an array.

| Field                      |    Type | Nullable | Description                 |
| -------------------------- | ------: | -------: | --------------------------- |
| `customerId`               | integer |       No | Customer ID.                |
| `firstName`                |  string |      Yes | First name.                 |
| `lastName`                 |  string |      Yes | Last name.                  |
| `birthDate`                |  string |      Yes | Birth date, when available. |
| `homePhone`                |  string |      Yes | Home phone.                 |
| `mobilePhone`              |  string |      Yes | Mobile phone.               |
| `email`                    |  string |      Yes | Email address.              |
| `addressLine1`             |  string |      Yes | Address line 1.             |
| `addressLine2`             |  string |      Yes | Address line 2.             |
| `city`                     |  string |      Yes | City.                       |
| `state`                    |  string |      Yes | State/province.             |
| `zipCode`                  |  string |      Yes | Postal/ZIP code.            |
| `country`                  |  string |      Yes | Country.                    |
| `username`                 |  string |      Yes | Username/login identifier.  |
| `newsLetterOptIn`          | boolean |       No | Newsletter opt-in flag.     |
| `loyaltyProgramOptIn`      | boolean |       No | Loyalty opt-in flag.        |
| `allowsPrivateDataSharing` | boolean |       No | Private data sharing flag.  |

## Activities

`activities` is always an array.

| Field                    |    Type | Nullable | Description                                                                    |
| ------------------------ | ------: | -------: | ------------------------------------------------------------------------------ |
| `lineItemId`             |  string |      Yes | Immutable UUID for the booked activity line. `null` for pre-migration records. |
| `activityId`             | integer |       No | Activity ID.                                                                   |
| `packageId`              | integer |      Yes | `0` for standalone activity; non-zero when part of a package.                  |
| `activityAccountingCode` |  string |      Yes | Accounting code.                                                               |
| `activityType`           |  string |      Yes | Activity type.                                                                 |
| `activityName`           |  string |      Yes | Master activity/product name.                                                  |
| `activityDescription`    |  string |      Yes | Booked activity description. For P2P, this may be the booked travel segment.   |
| `activityDuration`       |  string |      Yes | Activity duration in `HH:MM:SS` format.                                        |
| `activityDate`           |  string |      Yes | ISO 8601 activity date.                                                        |
| `activityTime`           |  string |      Yes | Activity time.                                                                 |
| `activityStatus`         |  string |      Yes | Activity status.                                                               |
| `activitySubTotal`       |  number |       No | Activity subtotal in minor units.                                              |
| `activityTax`            |  number |       No | Activity tax in minor units.                                                   |
| `activityBaseRate`       |  number |      Yes | Base rate in minor units.                                                      |
| `activityDynamicPrice`   |  number |      Yes | Dynamic price in minor units.                                                  |
| `taxes`                  |   array |       No | Tax records.                                                                   |
| `passengers`             |  object |       No | Passenger counts.                                                              |
| `priceCodeDetails`       |  object |       No | Passenger price details.                                                       |

**Taxes**

| Field               |    Type | Nullable | Description                 |
| ------------------- | ------: | -------: | --------------------------- |
| `taxId`             | integer |       No | Tax ID.                     |
| `taxName`           |  string |      Yes | Tax name.                   |
| `taxAccountingCode` |  string |      Yes | Tax accounting code.        |
| `taxableTax`        | boolean |       No | Whether the tax is taxable. |
| `taxRate`           |  number |       No | Tax rate.                   |
| `taxRateTypeId`     | integer |       No | Tax rate type ID.           |
| `taxRateTypeIdName` |  string |      Yes | Tax rate type name.         |
| `taxAmount`         |  number |       No | Tax amount in minor units.  |

**Passengers**

| Field      |    Type | Nullable | Description              |
| ---------- | ------: | -------: | ------------------------ |
| `seniors`  | integer |       No | Senior passenger count.  |
| `adults`   | integer |       No | Adult passenger count.   |
| `students` | integer |       No | Student passenger count. |
| `children` | integer |       No | Child passenger count.   |
| `infants`  | integer |       No | Infant passenger count.  |

**Price Code Details**

| Field                |    Type | Nullable | Description                         |
| -------------------- | ------: | -------: | ----------------------------------- |
| `priceCodeId`        | integer |       No | Price code ID.                      |
| `seniorsPrice`       |  number |       No | Senior price in minor units.        |
| `seniorsSurplusFee`  |  number |       No | Senior surplus fee in minor units.  |
| `adultsPrice`        |  number |       No | Adult price in minor units.         |
| `adultsSurplusFee`   |  number |       No | Adult surplus fee in minor units.   |
| `studentsPrice`      |  number |       No | Student price in minor units.       |
| `studentsSurplusFee` |  number |       No | Student surplus fee in minor units. |
| `childrenPrice`      |  number |       No | Child price in minor units.         |
| `childrenSurplusFee` |  number |       No | Child surplus fee in minor units.   |
| `infantsPrice`       |  number |       No | Infant price in minor units.        |
| `infantsSurplusFee`  |  number |       No | Infant surplus fee in minor units.  |

## Products, Gift Certificates, and Passes

`products`, `giftCertificates`, and `passes` are always arrays.

Each purchasable line may include:

| Field        |   Type | Nullable | Description                                                              |
| ------------ | -----: | -------: | ------------------------------------------------------------------------ |
| `lineItemId` | string |      Yes | Immutable UUID for the purchased line. `null` for pre-migration records. |

Additional fields depend on the purchasable item type.

## Transactions

`transactions` is always an array.

| Field                        |    Type | Nullable | Description                                                                                      |
| ---------------------------- | ------: | -------: | ------------------------------------------------------------------------------------------------ |
| `id`                         | integer |       No | Transaction ID.                                                                                  |
| `attributeId`                | integer |      Yes | Related attribute ID.                                                                            |
| `purchaseType`               | integer |      Yes | Purchase type ID.                                                                                |
| `transactionType`            | integer |      Yes | Transaction type ID.                                                                             |
| `transactionName`            |  string |      Yes | Transaction name.                                                                                |
| `transactionTypeLedgerEntry` |  string |      Yes | Ledger entry classification.                                                                     |
| `amount`                     |  number |       No | Transaction amount in minor units.                                                               |
| `dateCreated`                |  string |      Yes | ISO 8601 transaction timestamp.                                                                  |
| `productId`                  | integer |      Yes | Related product ID.                                                                              |
| `productDate`                |  string |      Yes | Related product date.                                                                            |
| `activityId`                 | integer |      Yes | Related activity ID.                                                                             |
| `activityDateTime`           |  string |      Yes | Related activity date-time.                                                                      |
| `lineItemId`                 |  string |      Yes | Item-scoped line identifier. `null` for standard payment transactions and pre-migration records. |
| `packageId`                  | integer |      Yes | Package identifier. `null` for standard payment transactions.                                    |
| `resellerCompanyId`          | integer |      Yes | Reseller company ID.                                                                             |
| `resellerCompanyName`        |  string |      Yes | Reseller company name.                                                                           |
| `resellerInvoiceNumber`      |  string |      Yes | Reseller invoice number.                                                                         |
| `resellerRateName`           |  string |      Yes | Reseller rate name.                                                                              |
| `resellerRate`               |  number |       No | Reseller rate.                                                                                   |
| `resellerNet`                |  number |       No | Reseller net amount.                                                                             |
| `discountRate`               |  number |       No | Discount rate.                                                                                   |
| `promoCodeName`              |  string |      Yes | Promo code name.                                                                                 |
| `promoCodeRate`              |  number |       No | Promo code rate.                                                                                 |
| `promoCodeRateType`          |  string |      Yes | Promo code rate type.                                                                            |
| `resellerBusinessNumber`     |  string |      Yes | Reseller business number.                                                                        |
| `passUsage`                  |  object |      Yes | Pass usage details when applicable.                                                              |

### Transaction Line Item Rules

`lineItemId` and `packageId` are populated only where item-level transaction context applies.

For standard payment transactions, such as credit card or cash payments:

```
"lineItemId": null,"packageId": null
```

For item-scoped transactions, such as discount, promo, reseller voucher, or reseller invoice transactions, `lineItemId` identifies the specific booked line the transaction applies to.

***

## Pass Usage

When a transaction is linked to pass usage, `passUsage` is emitted as a nested object.

| Field                  | Type    | Nullable | Description                            |
| ---------------------- | ------- | -------- | -------------------------------------- |
| `passId`               | integer | No       | Pass ID.                               |
| `redemptionCode`       | string  | Yes      | Redemption code.                       |
| `usageType`            | string  | Yes      | Usage type.                            |
| `unitsUsed`            | number  | No       | Units used.                            |
| `passName`             | string  | Yes      | Pass name.                             |
| `passBalanceRemaining` | number  | No       | Remaining pass balance.                |
| `transactionId`        | integer | No       | Related transaction ID.                |
| `itemType`             | string  | Yes      | Redeemed item type.                    |
| `itemId`               | integer | Yes      | Redeemed item ID.                      |
| `itemName`             | string  | Yes      | Redeemed item name.                    |
| `amount`               | number  | No       | Amount associated with the redemption. |
| `redeemedOn`           | string  | Yes      | ISO 8601 redemption timestamp.         |

Example:

```
"passUsage": {
  "passId": 7,
  "redemptionCode": "XK856LY",
  "usageType": "1",
  "unitsUsed": 1,
  "passName": "5 Trips",
  "passBalanceRemaining": 0,
  "transactionId": 830,
  "itemType": "activity",
  "itemId": 2,
  "itemName": "The Rings of Saturn",
  "amount": 7840,
  "redeemedOn": "2026-04-09T13:11:20-07:00"
}
```

## Replay Fields

Replay payloads include two additional root-level fields.

| Field                | Type    | Nullable | Description                                     |
| -------------------- | ------- | -------- | ----------------------------------------------- |
| `_isReplayPayload`   | boolean | No       | Present only on replay payloads. Always `true`. |
| `replayOfEventLogId` | integer | No       | Event log ID being replayed.                    |

These fields are only present when a webhook delivery is replayed.

## Notes

* `lineItemId` is persistent across amendments for unchanged booked lines.
* New booked lines receive new `lineItemId` values.
* Removed booked lines no longer appear in subsequent payloads.
* Pre-migration rows return `lineItemId: null`.
* `agentRef` is populated from `tbooking.referenceId`.
* Direct bookings return `agentRef: null`.
* Do not assume `transactionReference` or `merchantRef` are currently available unless confirmed for your implementation.
