How to use these APIs?

Headout Booking Partners
Headout offers different API products for various business needs. Make sure to choose the right one for your specific use case.- Headout API for Booking Partners
- Headout API for Affiliates
Booking partners have access to the full suite of APIs — from product discovery through to booking, ticketing, and post-booking management.
Get Supported Cities
API: List CitiesFetch the list of cities supported by Headout. Use this to populate a city picker in your UI. Every product is scoped to a city, so this is always the starting point.What you get: city code, city name, country, and coordinates.
Fetch Products for a City
API: List ProductsPass a
cityCode to retrieve all available products. Paginate using offset and limit. You can optionally filter by collectionId, categoryId, or apply a currencyCode and languageCode for localization.What you get: Product listings with IDs, titles, pricing summary, media, and category metadata.Get Full Product Details
API: Get ProductFetch complete details for a specific product. It returns all variants, their cancellation and reschedule policies, and input fields required at booking time.What you get: Variants, pricing tiers, input field definitions, policies, media, and deep-link URLs.
Read each variant’s
inputFields carefully — these define exactly what guest data you must collect before calling the Booking API.Check Real-Time Availability
API: List InventoryFor a specific product and date range, fetch live inventory. This returns available time slots, pax types (Adult, Child, etc.), and pricing per slot. Always call this in real time — never cache inventory.What you get: Time slots with
startDateTime, endDateTime, available pax types, netPrice, and headoutSellingPrice (the minimum selling price you must respect).Create a Booking
API: Create BookingSubmit the booking with the selected time slot, pax counts, and guest details collected from the input fields. The booking is created in
UNCAPTURED; then call Update Booking to move it to PENDING after payment capture.What you get: A booking object with a bookingId and initial status UNCAPTURED.| Status | Meaning |
|---|---|
PENDING | Payment captured, booking confirmed with supplier |
UNCAPTURED | Pre-payment state — does not lock inventory or price |
Track Booking Status & Retrieve Tickets
APIs: Get Booking · List BookingsPoll the booking status or use webhooks (see next step). Once status is
COMPLETED, the tickets array is populated with ticket objects for delivery to the customer.Status progression:| Status | Action |
|---|---|
PENDING | Treat as confirmed, await ticket generation |
COMPLETED | Ticket ready — deliver to customer |
FAILED | Booking failed — surface error to user |
CANCELLED | Booking cancelled |
For products where
hasInstantConfirmation: false, tickets may take up to ~30 minutes. The voucherUrl always reflects the latest state and can be shown to the customer immediately.Receive Real-Time Updates via Webhooks
APIs: Create Webhook · Webhook PayloadRegister a webhook endpoint to receive
POST notifications whenever a booking status changes. This is the recommended alternative to polling.What you receive: bookingId, new status, and eventTimestamp.Cancel or Reschedule (if needed)
APIs: Cancel Booking · Reschedule BookingIf a customer requests a change, submit a cancellation or reschedule request. Eligibility is determined by the
cancellationPolicy and reschedulePolicy returned in the Product Details API — always check these before surfacing the option to the user.What you get: An acknowledgement response with success and a message describing the outcome. Final status is delivered via webhook.High-Level Integration Flow
Headout inventory follows a strict hierarchy:City → Product → Variant → Time Slot → Booking → Ticket
Typical End-User Journey
- User selects a city
- Partner fetches all products for that city
- User selects a product and variant
- User selects date and time slot
- Partner fetches real-time availability
- User enters guest details and completes payment
- Booking is confirmed
- Ticket is generated (instant or delayed)
- Booking updates are received via webhooks
Product Discovery, Variants & Policies
Cities & Products
- Products are always fetched at a city level
- B2B APIs return all products, without B2C groupings (e.g. bestsellers)
Variants
A single product can have multiple variants. Variants can differ by many parameters, including but not limited to:- Inclusions and exclusions
- Cancellation or reschedule eligibility
- Meeting point or pickup details
- Ticket type and fulfillment behavior
- Pricing and availability patterns
Cancellation & Reschedule Policies
Cancellation and reschedule behavior is defined explicitly in the Product Details API. Important characteristics:- Cancellation is allowed or not allowed (true / false)
- Rescheduling is allowed or not allowed (true / false)
- Policies may differ across products and across variants of the same product
- Read and rely on the API response
- Surface the correct policy to users before booking
- Not assume uniform behavior across variants
Inventory, PaxTypes & Pricing
Real-Time Inventory
- Availability is fetched at variant + date level
- Inventory is time-slot based and highly dynamic
- Inventory must always be fetched in real time
PaxTypes
- Defined at time-slot level since we are aggregating the suppliers at the backend
- Can vary between slots for the same variant
- Examples include Adult, Child, EU Adult, Non-EU Adult
Pricing
Each inventory response includes:netPrice→ partner costheadoutSellingPrice→ minimum selling price (MSP)
Guest Details & Dynamic Input Fields
Some variants require additional guest information beyond name/email/phone.Input Fields
Input fields are defined dynamically in the Product Details API for each variant and specify:- Whose details are needed for the booking (level is
PRIMARY_CUSTOMER,ALL_CUSTOMERS, orBOOKING) - Data type (Boolean, String, Integer, Enum, Location)
- Optional predefined values (for all ENUM and some LOCATION fields)
Guest Objects
- A guest object is required for every pax booked
- Empty input field objects for each guest must be added if no fields are required for those guests
- This ensures reconciliation between pax count and guest data
Booking Lifecycle & Statuses
Two-Step Booking Model
| Status | Meaning |
|---|---|
UNCAPTURED | Optional pre-payment state |
PENDING | Payment done, booking confirmed |
COMPLETED | Ticket generated and available |
FAILED | Booking failed |
CANCELLED | Booking cancelled |
UNCAPTUREDdoes not lock price or inventoryPENDINGcan be treated as confirmed- Booking statuses are fluid, not terminal
Ticket Generation & hasInstantConfirmation
Each product includes a hasInstantConfirmation flag:
| Value | Meaning |
|---|---|
true | Ticket generated immediately |
false | Ticket generated with delay |
- Instant confirmation: < 1 minute (avg)
- Delayed generation: ~30 minutes on average, p99 up to 1 day before experience
- Booking should still be shown as confirmed
- Ticket generation is asynchronous
- Voucher updates automatically when the ticket is ready
Voucher URL & Ticket Delivery
Voucher URL — Key Points
- Acts as the single source of truth
- Shows booking status, ticket state, and experience instructions
- Can be Headout-branded or re-skinned by the partner by masking out the Headout logo and contact details
- Guides users clearly for delayed ticket generation
Ticket Types
Available in the booking details response. Each ticket object includes atype field:
| Type | URL present | Description |
|---|---|---|
QRCODE | No | QR code rendered inline |
BARCODE | No | Barcode rendered inline |
TEXT | No | Plain text ticket code |
PDF_URL | Yes | Link to downloadable PDF ticket |
HTML_URL | Yes | Link to hosted HTML ticket page |
APPLE_WALLET_URL | Yes | Apple Wallet pass URL |
GOOGLE_WALLET_URL | Yes | Google Wallet pass URL |
Sandbox vs Production Behavior
Sandbox Environment
Only a limited set of products transition toCOMPLETED automatically. See Fulfilment on Sandbox for the full list.
- All other sandbox bookings may remain in
PENDING - Sandbox should be used to validate: booking flow, webhooks, voucher rendering, and status transitions
Production Environment
- Real supplier behavior applies
- Ticket generation follows
hasInstantConfirmation - Cancellation and reschedule rules are enforced strictly
Webhooks & Booking Updates
Webhooks are essential to:- Track ticket generation
- Receive cancellation or reschedule updates
- Handle failures
- Keep booking state in sync
- Status transitions are non-linear
- Completed bookings can still be cancelled (ex: in case of venue closures etc)
