Save Passenger
This API creates a collection of passengers for a specified itinerary and saves the details in the database. It also validates the provided guest information.
API Request Response Structure
Path Parameters
| Parameter | Type | Description |
|---|---|---|
itineraryCode | String | Unique identifier for the itinerary. |
Request Body Structure
| Key | Type | Description |
|---|---|---|
traceId | String | Unique identifier for tracking the search request. |
passengers | Array | List of passenger details. |
passengers Array
passengers ArrayEach passenger object contains the following details:
| Key | Type | Description |
|---|---|---|
title | String | Passenger title (e.g., "Mr", "Ms", "Mrs). |
firstName | String | Passenger's first name. |
lastName | String | Passenger's last name. |
passportNumber | String | Passport number of the passenger. |
passportExpiry | String | Passport expiry date (YYYY-MM-DD). |
gender | String | Passenger gender ("male" or "female"). |
isLeadPax | Boolean | true if the passenger is the primary contact, false otherwise. |
paxType | Integer | Passenger type (1: Adult, 2: Child, 3: Infant). |
addressLineOne | String | First line of the passenger's address. |
addressLineTwo | String | Second line of the passenger's address. |
city | String | City name. |
cellCountryCode | String | Country code for contact number (e.g., "91" for India). |
contactNumber | String | Passenger's phone number. |
countryCode | String | ISO country code (e.g., "IN" for India). |
countryName | String | Name of the passenger's country. |
dateOfBirth | String | Passenger's date of birth (YYYY-MM-DD). |
email | String | Passenger's email address. |
frequentFlyerAirlineCode | String | Airline code for frequent flyer program (nullable). |
frequentFlyerNumber | String | Frequent flyer membership number (nullable). |
gstCompanyAddress | String | Address of the GST-registered company (if applicable). |
gstCompanyContactNumber | String | Contact number of the GST-registered company. |
gstCompanyEmail | String | Email of the GST-registered company. |
gstCompanyName | String | Name of the GST-registered company. |
gstNumber | String | GST number (if applicable). |
nationalty | String | Passenger nationality |
Sample Request
{
"traceId": "{{traceId}}",
"passengers": [
{
"title": "Mr",
"firstName": "Test",
"lastName": "Test",
"passportNumber": "T1234563",
"passportExpiry": "2026-12-06",
"gender": "male",
"isLeadPax": true,
"paxType": 1,
"addressLineOne": "delhi",
"addressLineTwo": "SSSSS",
"city": "Gurgaon",
"cellCountryCode": "91",
"contactNumber": "8077021456",
"countryCode": "IN",
"countryName": "India",
"dateOfBirth": "1987-12-06",
"email": "[email protected]",
"frequentFlyerAirlineCode": null,
"frequentFlyerNumber": null,
"gstCompanyAddress": "reliance mumbai",
"gstCompanyContactNumber": "1234569876",
"gstCompanyEmail": "[email protected]",
"gstCompanyName": "reliance",
"gstNumber": "07AAACR5055K1Z9"
},
{
"title": "Mr",
"firstName": "Testsecondpax",
"lastName": "seconpax",
"passportNumber": "T1234563",
"passportExpiry": "2026-12-06",
"gender": "male",
"isLeadPax": false,
"paxType": 1,
"addressLineOne": "delhi",
"addressLineTwo": "SSSSS",
"city": "Gurgaon",
"cellCountryCode": "91",
"contactNumber": "8077021456",
"countryCode": "IN",
"countryName": "India",
"dateOfBirth": "1987-12-06",
"email": "[email protected]",
"frequentFlyerAirlineCode": null,
"frequentFlyerNumber": null,
"gstCompanyAddress": "reliance mumbai",
"gstCompanyContactNumber": "1234569876",
"gstCompanyEmail": "[email protected]",
"gstCompanyName": "reliance",
"gstNumber": "07AAACR5055K1Z9"
}
]
}Sample Request Payload With SSR (seat, meal and baggage)
{
"traceId": "e746fba8-3027-43dc-9189-2b8b9de68927",
"passengers": [
{
"paxType": 1,
"title": "Mr",
"firstName": "rahul",
"lastName": "kumar",
"nationality": "IN",
"isLeadPax": true,
"cellCountryCode": "91",
"contactNumber": "893273545",
"email": "[email protected]",
"ssr": {
"meal": [
{
"code": "VCSW",
"origin": "DEL",
"destination": "AMD",
"amt": 400
},
{
"code": "VGML",
"origin": "AMD",
"destination": "BOM",
"amt": 400
}
],
"baggage": [
{
"code": "IXBB",
"origin": "DEL",
"destination": "AMD",
"amt": 3000
}
],
"seat": [
{
"origin": "DEL",
"destination": "AMD",
"code": "4B",
"amt": 450,
"seat": "4B"
},
{
"origin": "AMD",
"destination": "BOM",
"code": "8B",
"amt": 320,
"seat": "8B"
}
]
}
}
]
}
Passenger Types
- ADULT:
1 - CHILD:
2 - INFANT:
3
Titles
-
Mr – Applicable for:
- Male Adult
- Male Child
- Male Infant
-
Miss – Applicable for:
- Female Adult
- Female Child
- Female Infant
-
Mrs – Applicable for:
- Married Female Adult
Response Body Structure
| Key | Type | Description |
|---|---|---|
traceId | String | Unique identifier for tracking the search request. |
itineraryCode | String | Unique code associated with the created itinerary. |
traceIdDetails | Object | Contains metadata about the trace ID. |
traceIdDetails Object
traceIdDetails Object| Key | Type | Description |
|---|---|---|
traceId | String | Unique identifier for tracking the request. |
remainingTime | Integer | Remaining validity time for the trace ID in seconds. |
createdAt | String | Timestamp when the trace ID was generated (YYYY-MM-DDTHH:mm:ss). |
Sample Response
{
"traceId": "8e3a162d-6801-4001-b539-9a8096c7ee41",
"itineraryCode": "itrjie4",
"traceIdDetails": {
"traceId": "8e3a162d-6801-4001-b539-9a8096c7ee41",
"remainingTime": 8891,
"createdAt": "2024-07-30T15:29:01"
}
}Handling Mandatory Keys in Passenger Data
The booking may fail if required keys (such as nationality, dateOfBirth, or others) are missing in the passenger data.
How to Determine When a Key is Required
In the Create Itinerary API response, check the paxRules node to determine whether specific fields are mandatory. Below is an example structure for the paxRules node which work pax type wise:
"paxRules": {
"leadPax": {
"isPassportIssueDateRequired": {
"isVisible": true,
"isMandatoryIfVisible": true
},
"dateOfBirth": {
"isVisible": true,
"isMandatoryIfVisible": true
},
"cellCountryCode": {
"isVisible": true,
"isMandatoryIfVisible": true
},
"nationality": {
"isVisible": true,
"isMandatoryIfVisible": true
}
}
}Example
Rules for the nationality Key
nationality Key-
If
isMandatoryIfVisibleistrue:- The
nationalitykey must be included in the request.
- The
-
If
isMandatoryIfVisibleisfalse:- The
nationalitykey is optional.
- The
Important Note:
Ensure all mandatory fields are included in the request same way as in above example of nationality.
Duplicate Booking Prevention
To prevent duplicate bookings, the system applies specific validation checks based on predefined criteria.
Duplicate Booking Criteria
A booking is considered duplicate if all of the following conditions are met:
-
Lead Passenger Name Matches
- The first name + last name of the lead passenger matches an existing booking.
-
Same Sector
- The Airline Code, Flight Number, Origin, Destination, Departure Date, and Arrival Date match an existing booking.
-
Same Date of Travel
- The travel date (departure date) is identical to an existing booking.
-
Recent Confirmed or Hold Bookings Exist (Within Last 7 Days)
- The system checks for bookings in Confirmed or Hold status within the last 7 days to identify potential duplicates.
Exclusions from Duplicate Checks
The system does not validate duplicates based on:
- Cabin Class
- Fare Class
- Baggage Allowance
Sample Response for Duplicate Bookings
If a duplicate booking is detected in the Passenger Save API, the system will return the following response:
{
"traceId": "0d537699-ecae-4a0b-9d74-2b739e3f06fe",
"itineraryCode": "itrf1k4",
"traceIdDetails": {
"traceId": "0d537699-ecae-4a0b-9d74-2b739e3f06fe",
"remainingTime": 836,
"createdAt": "2024-11-09T18:22:08"
},
"duplicateBookings": [
{
"status": "CONFIRMED",
"memberCode": "mjcoq",
"pnr": "9DYP4N",
"originCityCode": "DEL",
"destinationCityCode": "AMD",
"bmsBookingCode": "tk34z",
"createdAt": "2024-11-09T18:21:32.000Z"
},
{
"status": "CONFIRMED",
"memberCode": "mjcoq",
"pnr": "9DYP4M",
"originCityCode": "AMD",
"destinationCityCode": "DEL",
"bmsBookingCode": "tk343",
"createdAt": "2024-11-09T18:21:34.000Z"
}
],
"duplicatesFound": true
}Handling Single-Word Names in Flight Bookings
Some airlines provide guidelines for handling single-word names, which are common in Indian passports.
How to Manage Indian Passports with a Single-Word Name?
1. Repeat the First Name as the Last Name
- If the traveler has only a first name on their passport, repeat it as the last name.
- Example:
- First Name: RAJESH
- Last Name: RAJESH
- This method is accepted by many airline systems.
2. Use "LNU" (Last Name Unknown) – If Supported by the Airline
- Some systems allow
LNUas a placeholder for passengers without a surname. - Example:
- First Name: RAJESH
- Last Name: LNU
3. Use "FNU" (First Name Unknown) – If Surname Exists
- If the surname is present but the first name is missing, use
FNUas the first name. - Example:
- First Name: FNU
- Last Name: KUMAR
4. Check Airline-Specific Rules
- Some airlines have specific guidelines for single-name passengers.
- Before confirming the booking, check the airline’s rules or contact customer support.
Following these best practices ensures smooth flight bookings while complying with airline regulations. 🚀
API Reference
https://volt-docs.travclan.com/reference/passenger-collections
Updated 10 months ago
