Before you build
Access and setup
- Sandbox API credentials received
- Production API access process understood
- Webhook endpoint planned
- Currency strategy finalized
Product understanding
- Reviewed product / variant model
- Reviewed cancellation & reschedule flags
- Understood
hasInstantConfirmationbehavior - Understood that sandbox fulfilment is dummy and still needs live production testing — see Sandbox and production
While building
Product and inventory
- Fetch and cache active cities
- Fetch products using the List products endpoint
- Fetch product details by ID using Get product
- Treat each variant as a separate SKU
- Fetch inventory in real time
- Do not cache inventory responses
Pax types and pricing
- Render paxTypes dynamically — see Pax Types
- Support paxType changes per slot
- Never hardcode or enumerate paxTypes. There are 400+ and the list grows. Read them from
pricing.persons[]once a slot is selected — see Pax types - Enforce MSP using
headoutSellingPrice— see MSP Limitation Product List - Use
netPricefor booking creation - Validate total price = pax × price
Guest details
- Render input fields dynamically — see Input Fields
- Support all data types
- Respect
PRIMARY_CUSTOMER,ALL_CUSTOMER, andBOOKINGfield levels - Create one guest object per pax
- Ensure exactly one primary guest
Booking flow
- Create booking in
UNCAPTURED(optional) - Collect payment before moving to
PENDING - Treat
PENDINGas confirmed - Handle price mismatch errors
- Allow all valid status transitions
Cancellation and reschedule
- Read cancel / reschedule flags from Get product
- Surface correct policy per variant
- Integrate Cancel booking
- Integrate Reschedule booking
- Handle not-allowed cases gracefully
Test in sandbox
- Test full booking flow using sandbox products for multiple input fields and pax types
- Validate the
PENDING → COMPLETEDtransition and ticket handling — all products are fulfilled in sandbox. See Sandbox and production - Verify webhook delivery
- Verify voucher rendering
- Verify QR and PDF/HTML ticket handling
- Verify that bookings with more tickets than guests, or with mixed ticket types (for example a QR code and a barcode), show every ticket on your voucher
- Verify that a booking with
ticketsset tonullor[]is not treated as an error — see Bookings with no tickets. What to check depends on your voucher flow:- Headout voucher URL: the guest gets the
voucherUrl. The Headout voucher already shows the redemption instructions, so no extra handling is needed - Your own voucher built from the Voucher API (API Partners): the tickets section is left out when
ticketSectionisnull, andinstructionsis always rendered, so guests onCOMPLETEDbookings can see any steps they need to follow to get their tickets
- Headout voucher URL: the guest gets the
- Verify Cancel booking and Reschedule booking
- For seatmap products, test seat selection, Validate and booking with the sandbox seatmap test products
Test before launch
- Place limited live bookings
- Validate
PENDING → COMPLETEDflow - Validate delayed ticket generation
- Test cancellation on allowed products
- Test reschedule on allowed products
- Verify webhook behavior in prod
- Verify voucher updates correctly
Go live
- Communication opt-in / opt-out finalized
- Support escalation flow aligned
- If you are going live with a static product list, update it one last time