- Enums
- Error codes
Reference data
Language codes
Language codes
Supported language codes for API localization.
| Code | Language |
|---|---|
EN | English |
ES | Spanish |
FR | French |
IT | Italian |
DE | German |
PT | Portuguese |
NL | Dutch |
PL | Polish |
KO | Korean |
JA | Japanese |
ZH_HANS | Chinese (Simplified) |
ZH_HANT | Chinese (Traditional) |
AR | Arabic |
DA | Danish |
NO | Norwegian |
RO | Romanian |
RU | Russian |
SV | Swedish |
TR | Turkish |
If a translation is not available for the requested language, content falls back to English (
EN).Currency codes
Currency codes
City codes
City codes
Supported cities are returned dynamically by the City API. This list may change over time, so always handle cities dynamically rather than hardcoding values.See: List Cities · List Collections · List Categories · List Subcategories · List Products
Media types
Media types
Supported media types in product details.
See: List Products · Get Product
| Type | Description |
|---|---|
IMAGE | Image media |
VIDEO | Video media |
PDF | PDF document |
Product types
Product types
Supported product types within product details.
See: List Products · Get Product
| Type |
|---|
TOUR |
ACTIVITY |
EVENT |
ATTRACTION |
TRANSFER |
AIRPORT_TRANSFER |
ADD_ON |
Listing price types
Listing price types
Pricing types used in product listings. The price type determines how inventory pricing is structured and how booking requests must be formed.
See: List Products · Get Product
| Type | Description |
|---|---|
PER_PERSON | Price is charged per individual. Inventory returns person types (e.g., ADULT, CHILD, SENIOR) each with their own price point. The booking request must include one guest object per person with a valid personType. |
PER_GROUP | A single price covers a group. Inventory returns pricing tiers by group size (e.g., 1-4 people = 120, 8-10 = $150). The booking request does not require a personType per guest. |
Inventory types
Inventory types
Defines how a variant’s start time and duration are structured. This affects how
See: List Inventory
startDateTime and endDateTime in inventory slots should be interpreted, and what kind of date/time picker to show the user.| Type | Description | Example |
|---|---|---|
FIXED_START_FIXED_DURATION | Starts at a precise time and lasts a fixed duration. startDateTime = actual start, endDateTime = actual end. | A Broadway show at 7:00 PM lasting 2.5 hours |
FIXED_START_FLEXIBLE_DURATION | Starts at a fixed time but the customer stays as long as they wish. startDateTime = entry time, endDateTime = venue closing time. | An observation deck visit with a timed entry slot |
FLEXIBLE_START_FIXED_DURATION | Customer can arrive any time during operating hours but the experience lasts a fixed duration once started. startDateTime = opening time, endDateTime = latest allowed entry. | A hot-air balloon ride (1 hour) during a morning window |
FLEXIBLE_START_FLEXIBLE_DURATION | Open entry and open-ended duration — customer arrives and leaves whenever they want within the day. startDateTime = opening time, endDateTime = closing time. | A theme park day pass |
For
FLEXIBLE_START_* types, startDateTime represents the opening time of the venue, not a specific entry time for the customer.Inventory availability
Inventory availability
Availability status within inventory slots. Determines whether and how many bookings can still be made for a given slot.
See: List Inventory
| Status | Description |
|---|---|
LIMITED | Limited spots remaining — check the remaining field for the exact count before booking. |
UNLIMITED | No cap on bookings — the slot can be booked any number of times. |
CLOSED | The slot is unavailable and cannot be booked. |
Inventory selection types
Inventory selection types
Inventory selection types for booking interfaces.
See: List Inventory
| Type | Description |
|---|---|
NORMAL | Standard selection interface |
SEATMAP | Seat map selection interface |
Person types
Person types
Person types valid for booking variants.
See: List Inventory · Create Booking · Get Booking — see Pax Types
| Type |
|---|
ADULT |
CHILD |
INFANT |
SENIOR |
GENERAL |
STUDENT |
YOUTH |
Additional types such as
RESIDENT, NON_EUR_CHILD, etc. may appear dynamically.Input fields
Input field types
Input field types
Input field types for variant-specific customer information.
See: Get Product · List Inventory — see Input Fields
| Field | Description |
|---|---|
NAME | Customer name |
EMAIL | Email address |
PHONE | Phone number |
ADDRESS | Address information |
AGE_ | Age-related fields |
COUNTRY_ | Country information |
DATE_OF_BIRTH_ | Date of birth |
DROP_OFF_LOCATION_ | Drop-off location |
FULL_NAME_ | Full name fields |
GENDER_ | Gender information |
IDENTITY_DOCUMENT_DETAILS_ | ID document details |
LANGUAGE_ | Language preference |
NATIONALITY_ | Nationality |
PASSPORT_DETAILS_ | Passport information |
PHYSICAL_INFORMATION_-_HEIGHT_ | Physical characteristics |
PICK_UP_DETAILS_ | Pickup information |
PICKUP_LOCATION | Pickup location |
CUSTOM_* | Custom dynamic fields provided by supply partners |
Many more values may appear dynamically from supply partners. Always handle unknown values gracefully.
Input field data types
Input field data types
Data types an input field can have. Use this to drive form validation and rendering on your end.
The type of items in
See: Get Product · List Inventory
| Data Type | Description | Validation |
|---|---|---|
STRING | Free-form text (e.g., John Doe) | Apply regex, minLength, maxLength from the validation object if present |
ENUM | One of a predefined set of string literals (e.g., MALE, FEMALE, OTHER) | Value must be one of the entries in validation.values (always string[] for this type) |
BOOL | Boolean flag — submit as the string "true" or "false" | — |
INT | Whole-number value (e.g., 25) | Apply minValue, maxValue from validation if present |
FLOAT | Decimal number (e.g., 25.50) | Apply minValue, maxValue from validation if present |
LOCATION | Pickup or drop-off location. When validation.values is non-empty, items are predefined location objects (not strings) — the customer must select one. When validation.values is null, accept a free-form address string. | See predefined location object shape below |
There is no dedicated
DATE dataType. Date and date-time fields (such as DATE_OF_BIRTH_*) are submitted as STRING, with the expected format enforced by validation.regex on the field.validation.values — Polymorphic Field
The type of items in validation.values depends on the field’s dataType:-
ENUM—validation.valuesisstring[]. The submitted value must be an exact match. -
LOCATIONwith predefined options —validation.valuesis an array of location objects. Render these as a dropdown and submit either the selected object’sidor itsdisplayNameas the field value. -
All other types —
validation.valuesisnull.
Predefined location object fields
| Field | Type | Description |
|---|---|---|
id | integer | Unique identifier for this location. Submit this value or the location’s displayName as the field value when creating a booking. |
latitude | number | Latitude of the pickup/drop-off point in decimal degrees. |
longitude | number | Longitude of the pickup/drop-off point in decimal degrees. |
address | string | Full street address of the location. |
displayName | string | Short human-readable label for display in a dropdown (e.g., "Bellagio"). |
timingConfig.startTime | string | null | Earliest pickup time for this location (HH:mm format). Null if no restriction. |
timingConfig.endTime | string | null | Latest pickup time for this location (HH:mm format). Null if no restriction. |
timingConfig.minPeriod | integer | null | Minimum notice required for this pickup in minutes. Null if no restriction. |
timingConfig.maxPeriod | integer | null | Maximum advance booking window in minutes. Null if no restriction. |
note | object | null | Additional instruction for this pickup location. Null if no note. Contains content (string) and language (language code). |
Booking lifecycle
Cashback types
Cashback types
Cashback value types for promotional offers. The
See: List Products · Get Product
value field on the cashback object should be interpreted according to this type.| Type | Description | Example |
|---|---|---|
ABSOLUTE | Fixed cashback amount in the product’s native currency | value: 10 → customer receives $10 cashback |
PERCENTAGE | Cashback as a percentage of the total variant price | value: 10 → customer receives 10% of the booking total as cashback |
Booking status
Booking status
Booking lifecycle statuses.
Transitions
PENDING and COMPLETED can still move to CANCELLED — e.g. customer cancellation within policy, or Headout-initiated cancellations like venue closures.| Status | Description |
|---|---|
UNCAPTURED | Booking entry has been created but payment has not been captured. Does not lock inventory or price. Never sent via webhook. |
PENDING | Payment captured. Booking is confirmed with the supplier — show it to the customer as confirmed. Ticket generation may still be in progress. |
COMPLETED | Ticket has been generated and is available in the tickets array. |
CANCELLED | Booking was cancelled — by the partner, customer, or Headout (e.g. venue closures). Reachable from PENDING or COMPLETED. |
FAILED | Capture was attempted but rejected. The booking cannot move to any other status — create a new booking if the customer still wants to proceed. |
CAPTURE_TIMEDOUT | UNCAPTURED booking was not captured within 1 hour and can no longer be captured. The booking cannot move to any other status — create a new booking if the customer still wants to proceed. |
- From
UNCAPTURED: remainsUNCAPTUREDuntil captured, →PENDINGon successful capture, →FAILEDon rejected capture, →CAPTURE_TIMEDOUTif no capture within 1 hour. - From
PENDING: →COMPLETEDwhen the ticket is generated, →CANCELLEDif cancelled before fulfilment. - From
COMPLETED: →CANCELLEDif cancelled after fulfilment (e.g. venue closure). - From
FAILEDorCAPTURE_TIMEDOUT: no further transitions.
Ticket types
Ticket types
Ticket delivery formats returned in the
See: Get Booking
tickets array of a booking.| Type | Description |
|---|---|
PDF_URL | URL to a downloadable PDF ticket |
HTML_URL | URL to an HTML ticket page |
QRCODE | QR code data for scanning at the venue |
BARCODE | Barcode data for scanning at the venue |
TEXT | Plain text ticket information |
APPLE_WALLET_URL | URL to add ticket to Apple Wallet |
GOOGLE_WALLET_URL | URL to add ticket to Google Wallet |
Input field level
Input field level
Defines who a given input field should be collected for. Use this to drive form rendering — only show and collect fields appropriate for each level.
See: Get Product · List Inventory
| Level | Description | Typical Fields |
|---|---|---|
PRIMARY_CUSTOMER | Collected once, from the lead guest only. There is always exactly one primary customer per booking. Submit inside the isPrimary: true customer’s inputFields. | Name, email, phone, address |
ALL_CUSTOMER | Collected from every guest in the booking, including the primary customer. Submit inside every customer’s inputFields. | Weight, height, meal preference, date of birth |
BOOKING | Applies to the booking as a whole — not tied to any individual guest. Collected once regardless of pax count. Submit in the booking-level variantInputFields array, not inside any customer object. | Language preference, group name on the reservation, special accessibility request |
level (who you collect from) and dataType (what shape the value takes) are independent axes. A BOOKING-level field can be any dataType, and a LOCATION dataType field can be at any level.Cancellation reasons
Cancellation reasons
Permitted cancellation reasons for partner cancellation requests.
See: Cancel Booking
| Value | Description |
|---|---|
TICKETS_NOT_RECEIVED | Tickets or voucher not received by the customer |
CHANGE_OF_TRAVEL_PLANS | Customer changed travel plans |
MODIFY_EXISTING_RESERVATION | Customer wants to modify an existing reservation |
FOUND_CHEAPER_OPTION_ELSEWHERE | Customer found a cheaper alternative |
OTHER | Other reason not listed above |