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

ParameterTypeDescription
itineraryCodeStringUnique identifier for the itinerary.

Request Body Structure

KeyTypeDescription
traceIdStringUnique identifier for tracking the search request.
passengersArrayList of passenger details.

passengers Array

Each passenger object contains the following details:

KeyTypeDescription
titleStringPassenger title (e.g., "Mr", "Ms", "Mrs).
firstNameStringPassenger's first name.
lastNameStringPassenger's last name.
passportNumberStringPassport number of the passenger.
passportExpiryStringPassport expiry date (YYYY-MM-DD).
genderStringPassenger gender ("male" or "female").
isLeadPaxBooleantrue if the passenger is the primary contact, false otherwise.
paxTypeIntegerPassenger type (1: Adult, 2: Child, 3: Infant).
addressLineOneStringFirst line of the passenger's address.
addressLineTwoStringSecond line of the passenger's address.
cityStringCity name.
cellCountryCodeStringCountry code for contact number (e.g., "91" for India).
contactNumberStringPassenger's phone number.
countryCodeStringISO country code (e.g., "IN" for India).
countryNameStringName of the passenger's country.
dateOfBirthStringPassenger's date of birth (YYYY-MM-DD).
emailStringPassenger's email address.
frequentFlyerAirlineCodeStringAirline code for frequent flyer program (nullable).
frequentFlyerNumberStringFrequent flyer membership number (nullable).
gstCompanyAddressStringAddress of the GST-registered company (if applicable).
gstCompanyContactNumberStringContact number of the GST-registered company.
gstCompanyEmailStringEmail of the GST-registered company.
gstCompanyNameStringName of the GST-registered company.
gstNumberStringGST number (if applicable).
nationaltyStringPassenger 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

KeyTypeDescription
traceIdStringUnique identifier for tracking the search request.
itineraryCodeStringUnique code associated with the created itinerary.
traceIdDetailsObjectContains metadata about the trace ID.

traceIdDetails Object

KeyTypeDescription
traceIdStringUnique identifier for tracking the request.
remainingTimeIntegerRemaining validity time for the trace ID in seconds.
createdAtStringTimestamp 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

  • If isMandatoryIfVisible is true:

    • The nationality key must be included in the request.
  • If isMandatoryIfVisible is false:

    • The nationality key is optional.

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:

  1. Lead Passenger Name Matches

    • The first name + last name of the lead passenger matches an existing booking.
  2. Same Sector

    • The Airline Code, Flight Number, Origin, Destination, Departure Date, and Arrival Date match an existing booking.
  3. Same Date of Travel

    • The travel date (departure date) is identical to an existing booking.
  4. 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 LNU as 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 FNU as 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