> ## Documentation Index
> Fetch the complete documentation index at: https://docs.way.co/llms.txt
> Use this file to discover all available pages before exploring further.

# booking.completed

> Fires when a booking is confirmed after checkout completes successfully.

## When it fires

Way sends `booking.completed` when a booking is confirmed - after the payment (or the selected payment method's confirmation step) is processed successfully. This includes bookings created individually through checkout as well as bookings created in bulk.

Events arrive at your endpoint as a `POST` request with the body `{ "event": "booking.completed", "payload": { ... } }`. When a webhook secret is set, the `X-Way-Signature` header carries an HMAC of the request body - see [Verify signatures](/webhooks/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, `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 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.                                                                                        |
| `paymentMethod`                      | string                | Payment method used: `credit-card`, `room-charge`, `member-number`, `loyalty`, `kicc`, `cash`, `pay-later`, or `pay-upon-arrival`. |
| `paymentDetail`                      | object                | Payment details; may include `lastName`, `methodNumber`, and `reservationId` depending on the payment method.                      |
| `discountAmount`                     | number                | Discount amount applied to the booking.                                                                                            |
| `notes`                              | string \| null        | Guest notes attached to the booking.                                                                                               |
| `mode`                               | string                | Booking mode: `private` or `shared`.                                                                                               |
| `amount`                             | number                | Total amount of the booking.                                                                                                       |
| `completedAt`                        | string (ISO 8601)     | Timestamp when the booking was completed.                                                                                          |
| `bookingSourceUrl`                   | string \| null        | URL of the page where the booking originated.                                                                                      |
| `siteLanguage`                       | string \| null        | Language of the site the booking was made on.                                                                                      |
| `loyaltyTransactionId`               | string \| null        | Identifier of the associated loyalty transaction, if any.                                                                          |

## Sample

```json theme={null}
{
  "event": "booking.completed",
  "payload": {
    "mode": "shared",
    "brand": {
      "id": "8e12bfdc-a74c-48e2-8a76-2996a359c10c",
      "name": "The Seaside Hotel",
      "tier": "growth",
      "currency": "USD",
      "countryCode": "US",
      "externalReferenceId": "ABC"
    },
    "notes": null,
    "addOns": [],
    "amount": 165,
    "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,
        "createdAt": "2026-02-13T01:16:24.658Z",
        "longitude": -97.7430608,
        "updatedAt": "2026-02-13T01:16:24.658Z",
        "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": 100,
        "participantsCount": 1
      },
      {
        "id": "7a9d0374-c24d-436c-b07b-c308737e20f3",
        "name": "Child",
        "price": 50,
        "amount": 50,
        "participantsCount": 1
      }
    ],
    "completedAt": "2026-02-13T01:17:45.631Z",
    "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"
      }
    ],
    "siteLanguage": null,
    "paymentDetail": {},
    "paymentMethod": "credit-card",
    "discountAmount": 0,
    "loyaltyMemberId": null,
    "bookingSourceUrl": "https://embed-demo.staging.letsway.com/brands/8e12bfdc-a74c-48e2-8a76-2996a359c10c#!/checkout",
    "participantsCount": 2,
    "cartConfirmationCode": "mAOxREWCU",
    "loyaltyTransactionId": null,
    "bookingConfirmationCode": "wU3gwz0bJ",
    "externalAnalyticsUserId": null
  }
}
```

## Related endpoints

Retrieve the full booking with [Get Booking](/api-reference/bookings/get-booking).
