Create a booking
Creates bookings for the cart’s items in a single call. Card bookings are created in processing state before the charge and return the Stripe client secret to confirm; non-card methods and zero totals confirm synchronously. See the booking integration guide for the full flow.
Authorizations
Your brand's secret API key, e.g. Bearer way_sk_live_bhEqcn0i1fRoUEHBPjJkQA. Older Way-Brand-Id + Way-Secret-Key credentials still work: see Legacy authentication.
Headers
Optional bearer token used only by loyalty-authenticated flows (for example Hyatt members); not required for standard integrations.
Path Parameters
The brand's ID - must match the brand your API key identifies (or the Way-Brand-Id header when one is sent).
Body
The cart items to book, one per experience session. Uses the same item shape as the payment intent request; all items are booked together under the cart identified by cartId.
The person paying for the booking, who receives the confirmation email. Does not have to be one of the participants.
Loyalty program membership to associate with the booking, used with loyalty payment flows and member benefits.
How the guest pays. credit-card goes through Stripe: create a payment intent first and confirm the charge after booking. cash, room-charge, member-number, loyalty and pay-upon-arrival skip Stripe entirely and the booking is confirmed synchronously; room-charge and member-number additionally require paymentDetail populated from the room-charge validate endpoint. kicc is the KICC payment-gateway flow. Any booking with a zero total also confirms synchronously.
credit-card, room-charge, member-number, loyalty, kicc, cash, pay-later, pay-upon-arrival "credit-card"
Payment reference details for non-card methods. Required for room-charge and member-number bookings - populate it from the room-charge validate response. Omit for card payments.
URL of the page where the booking was made. Stored as the booking's source URL for attribution.
"https://www.example-hotel.com/experiences"
Your analytics platform's identifier for the guest. Stored on the booking and surfaced in financial reports for cross-system attribution.
"GA1.2.345678901.1720000000"
Language code of the site where the booking was made (e.g. en). Stored on the booking and included in booking details and webhooks.
"en"
Type of device the guest booked from, recorded for analytics.
pc, mobile "pc"
Client-generated UUID (v4 or v7) identifying this checkout's cart - there is no create-cart endpoint; Way accepts the ID lazily the first time it appears. Use the same cartId as the payment intent so Way can correlate booking and payment, and rotate to a fresh UUID before retrying a failed checkout.
"14e722e0-048b-4c7b-a70d-5e812b2b761e"
Whether Way sends the guest confirmation emails for this booking. Defaults to true.
When true and the cart's currency is not USD, charges the booking in USD using Way's conversion rate. Defaults to false.
ID of the listing recommendation that led to this checkout, stored on the resulting bookings for attribution.
"0d9c1f2e-3a4b-4c5d-8e6f-7a8b9c0d1e2f"
Response
Booking details.
The unique identifier of the payment subject.
"subject-123"
The type of the subject related to the payment.
"booking"
Confirmation code for the payment.
"CONFIRM12345"
Amount of the payment. For card payments this echoes the Stripe payment intent and is in minor units (15000 = $150.00); for cash and other non-card bookings it is in major units. Prefer the payment intent's totalNetAmount or the booking's amount from Get bookings for pricing.
17800
Currency of the transaction.
"USD"
Stripe client secret to confirm the payment with (card payments only); null for cash and other non-card bookings.
"pi_3NxA7bK2eZ_secret_Yz4Q8w"
Additional metadata related to the payment.