Passengers
Passenger records appear on offer search, price, create, and change. Both APIs use the same type codes and the same identity rules; only the wire shape differs.
What goes where
Section titled “What goes where”| Data | Where to send it | Notes |
|---|---|---|
| Who is traveling | JSON passengers[] / XML PaxList > Pax | One entry per traveler. |
| Passenger type | type / PTC | ADT, CHD, or INF. |
| Stable passenger ID | JSON passengerId or paxId; XML PaxID | Yours to choose on shop/price/create. Keep the same ID through price → ancillaries → create. |
| Name | name.givenName + name.surname / Individual > GivenName/Surname | Required on create. |
| Date of birth | dateOfBirth / Birthdate | YYYY-MM-DD. |
| Gender | JSON request gender; XML GenderCode | See Gender; request and response vocabularies differ on JSON. |
| Nationality / residence | nationality, residenceCountry | Optional ISO country codes. |
| Lap infant link | Adult’s infantPassengerId | Points at the infant’s passenger ID. Infants cannot exceed adults. |
| Loyalty / docs | loyaltyProgram, travelDocuments | Optional. Loyalty numbers must match the passenger name. See Name and document field limits. |
| Per-passenger email/phone | passengers[].contact / Pax-referenced ContactInfo | Irregular-ops contact; see contacts. |
| Booking notification contact | Order contact / unreferenced ContactInfo | Not on the passenger object. |
Passenger types
Section titled “Passenger types”| Code | Meaning |
|---|---|
ADT | Adult |
CHD | Child |
INF | Infant (lap) |
Infants cannot exceed adults (ERR-7003 / validation ERR-1005). Duplicate passenger IDs in one
request are rejected. Unaccompanied minors are not supported; UNN is rejected on offer search,
price, and create.
Lap infants (INF) have no seat or service allocation of their own and are excluded from the
passengers scope on seat and service availability requests. Include the accompanying adult
instead. Sending a list that names only infant passengers to a seat or service endpoint returns
ERR-1004.
IDs across the booking flow
Section titled “IDs across the booking flow”- On offer search,
paxIdis optional; when omitted, IDs are synthesized asPX1..PXn(JSON) in declaration order. - On price and offer-scoped seats/services, send stable IDs if you will book ancillaries with the create (for example
ADT-1). Anonymous passengers without IDs leave seat/service quotes without bookableofferItemIds. - On create,
passengerIdvalues must match the IDs used when selecting offer items and ancillaries. - On retrieve / change, use the IDs from the order view (
paxId/PaxID, often normalized likeADT-1).
Gender
Section titled “Gender”| Surface | Send | Read back |
|---|---|---|
| JSON | Male or Female, spelled exactly (case-sensitive) | genderCode: M or F |
| XML | GenderCode M / F, or Male / Female (case-insensitive) | GenderCode M / F |
Gender is optional on both surfaces, but the only stored values are male and female; there is no
undisclosed option. A JSON create with gender: "F" or "female" fails validation; use Female.
Travel documents
Section titled “Travel documents”travelDocuments is an optional array per passenger, capped at 4 documents per passenger. Each entry requires documentType, documentNumber, and issuingCountry.
documentType | Notes |
|---|---|
Passport | |
NationalId | |
KnownTraveler | |
Redress | |
Visa | |
PermanentResidentCard | |
AlienResidentCard | expirationDate required. |
Name and document field limits
Section titled “Name and document field limits”The following limits are enforced at the API level. Requests with values exceeding these limits or containing disallowed characters are rejected with ERR-1004.
| Field | Limit |
|---|---|
name.givenName, name.middleName, name.surname | Max 32 characters |
name.title, name.suffix | Max 6 characters |
travelDocuments | Max 4 per passenger (visas and redress cases count toward this limit) |
travelDocuments[].documentNumber | Max 35 characters |
travelDocuments[].placeOfBirth, travelDocuments[].placeOfIssue | Max 35 characters; letters and spaces only, no digits or punctuation |
loyaltyProgram.programCode | Max 3 characters; must not contain | |
loyaltyProgram.memberId | Max 32 characters |
Name changes and loyalty
Section titled “Name changes and loyalty”- A name change after booking may carry a fee. Quote it first (reshop
NameChange/ OrderReshop), then apply the change with payment when required. - A loyalty number must be a real member number matching the passenger’s name. Mismatched or unrecognized numbers are rejected (
ERR-7008).
Testing tip
Section titled “Testing tip”The reservation system rejects a passenger with the same name already booked on the same flight. Between test bookings, change the passenger name or the travel date (the usual cause of ERR-4001 during sandbox testing).