Skip to main content

CreatePassengerNameRecordRQ

Create Passenger Name Record - REST

Create Passenger Name Record - SOAP

The Create Passenger Name Record API allows client applications to combine the PassengerDetailsRQ and EnhancedAirBookRQ API requests in a single call.

Create a full reservation (Passenger Name Record) with the following features:

  • Add agency/customer details
  • Book a flight, hotel, or car reservation
  • Price a flight, hotel, or car reservation
  • Add any special requests (remarks, SSRs, or seats)
  • Change target cities (PCCs) before the operation is performed

Workflow

Create Passenger Name Record

Create Passenger Name Record performs the following steps to complete a reservation:

  1. Adds Profile, Passenger, and Agency details – 1st call to PassengerDetailsRQ
  2. Performs air booking and pricing – EnhancedAirBookRQ
  3. Performs hotel booking - EnhancedHotelBookRQ
  4. Performs vehicle booking - OTA_VehResLLSRQ
  5. Adds miscelleaneous segment information, special service details (SSRs, Remarks, etc), and finalizes the transaction – 2nd call to PassengerDetailsRQ

haltOnAirPriceError

This flag defaults to false. The haltOnAirPriceError attribute controls whether the processing of the orchestrated API is stopped if a pricing error is encountered.

Automated Handling of Hosted vs. Non-Hosted Indicators for SSRs/OSIs

Due to Sabre's spec system, it's necessary to append information if SSR/OSI information should be passed to a hosted or non-hosted carrier.

This is controlled within CreatePassengerNameRecordRQ by the following attributes:

Include

/CreatePassengerNameRecordRQ/SpecialReqDetails/SpecialService/SpecialServiceInfo/AdvancePassenger/VendorPrefs/Airline/@Hosted

/CreatePassengerNameRecordRQ/SpecialReqDetails/SpecialService/SpecialServiceInfo/SecureFlight/VendorPrefs/Airline/@Hosted

/CreatePassengerNameRecordRQ/SpecialReqDetails/SpecialService/SpecialServiceInfo/Service/VendorPrefs/Airline/@Hosted

Do Not Include

As of version 2.0.0, Create Passenger Name Record handles the flags mentioned above automatically. It's not necessary to include the below elements/attributes within the payload:

/CreatePassengerNameRecordRQ/SpecialReqDetails/SpecialServiceRQ/SpecialServiceInfo/AdvancePassenger/VendorPrefs

/CreatePassengerNameRecordRQ/SpecialReqDetails/SpecialServiceRQ/SpecialServiceInfo/SecureFlight/VendorPrefs

/CreatePassengerNameRecordRQ/SpecialReqDetails/SpecialServiceRQ/SpecialServiceInfo/Service/VendorPrefs/Airline/@Hosted

Post-Booking Validation of Airline Record Locators and/or HK Status for Flight Segments

As of version 2.1.0, the API validates airline record locators returned after end transaction and/or checking if the HK status for the flight segment(s) was modified by a carrier after the end transaction step:

/CreatePassengerNameRecordRQ/PostProcessing/PostBookingHKValidation

This element requires the waitinterval and numAttempts attributes to be set, which control the number of times the API will attempt to redisplay the reservation after a PNR locator has been generated.

During each redisplay, the API will check if the existing HK status for all flight segments has changed. Once all redisplay attempts have been completed and at least one flight segment modified its HK status, the API will return a warning stating:

Flight segment status changed for: ../TravelItineraryRead/TravelItinerary/ItineraryInfo/ReservationItems/Item[n]/FlightSegment/@FlightNumber="1234" to "UC".

/CreatePassengerNameRecordRQ/PostProcessing/WaitForAirlineRecLoc

This element requires the waitinterval and numAttempts attributes to be set, which control the number of times the API will attempt to redisplay the reservation after a PNR locator has been generated.

During each redisplay, the API will check if the airline record locator was added by a carrier. Once all redisplay attempts have been completed and at least one flight segment does not contain a full airline record locator, the API will return a warning stating:

Missing airline record locators for: .../TravelItineraryRead/TravelItinerary/ItineraryInfo/ReservationItems/Item/FlightSegment/@FlightNumber="1234"

If the system cannot determine airline record locator and/or HD status for Flight Segments, then API returns the following warning messages:

"After maximum number of attempts it was not possible to validate post booking flight segment HK status"

"After maximum number of attempts it was not possible to obtain airline record locator"

"After maximum number of attempts it was not possible to obtain airline record locator and/or validate post booking flight segment HK status"

"Unable to perform HK Validation and/or Airline Record Locator Validation due to lack of reservation details. Low level reservation service did not return required data"

Booking GDS or Aggregator Hotel Content

As of version 2.2.0, the API has the ability to create reservations for GDS and aggregator hotel chains. This solution integrates multiple sources of content, including:

  • Sabre Global Distribution System (GDS)

And non-GDS sources:

  • Redistributors
  • Agency-sourced hotel content and aggregators

Hotel bookings are initiated with …/CreatePassengerNameRecordRQ/HotelBook. You may combine air and hotel booking within a single transaction; the /CreatePassengerNameRecordRQ/@haltOnHotelBookError attribute controls whether the transaction should be terminated upon encountering a hotel booking error.

Prior to booking, it is mandatory to obtain a booking key by means of calling the Hotel Price Check API:

Hotel Price Check - SOAP

HotelPrice Check - REST

The Create Passenger Name API will automatically decode the booking key, obtain the hotel rate, and determine its source (GDS or Aggregator). Finally, the API will check the value of the attribute @bookGDSviaCSL.

  • If the attribute is set to false, the GDS rate will be booked as legacy content.

  • If the attribute is set to true, the GDS rate will be booked as a Content Service for Lodging segment.

To successfully create a Passenger Name Record with a hotel segment, it's mandatory to provide the agency address and traveler names with:

.../TravelItineraryAddInfo/AgencyInfo/Address

.../TravelItineraryAddInfo/CustomerInfo/PersonName

Required Elements
Element or Attribute Description
.../TravelItineraryAddInfo/AgencyInfo/Address Required to finalize PNR creation.
.../TravelItineraryAddInfo/CustomerInfo/PersonName Required to finalize PNR creation. Does not have to be the hotel guest name.
…/HotelBook/BookingInfo/BookingKey Booking key obtained from Hotel Price Check REST/SOAP API.
…/HotelBook/Rooms Used to pass details for the booked rooms.
…/HotelBook/Rooms/Room/Guests Used to pass individual guest details. At least one guest must be a lead guest and an adult. This is indicated by setting …/HotelBook/Rooms/Room/Guests/Guest/@Type="10" and …/HotelBook/Rooms/Room/Guests/Guest/@LeadGuest="true"
…/HotelBook/PaymentInformation Mandatory element used to pass payment information for hotel booking. Choose one form of payment and provide its details.

Booking Hotel Rooms With Virtual Cards

Starting with version 2.4.0, Create Passenger Name Record provides the capability to book CSL content by means of a Virtual Card booking method.

To successfully book a room using a Virtual Card, first pass the payment details at:

/CreatePassengerNameRecordRQ/HotelBook/PaymentInformation/FormOfPayment/VirtualCard

The required values are listed below:

Element/attribute Description
/PaymentInformation/@Type The payment method. This value should be set to GUARANTEE.
CustomerAccountCode The Virtual Card number.
Agency/@Email Agency contact's e-mail address.
/HotelInfo/@Fax Hotel fax number.
/HotelInfo/@HotelName Hotel name. Pass the value from: HotelPriceCheckRS/PriceCheckInfo/HotelInfo/@HotelName
/RoomDescription/@Name Room name. Pass the value from: HotelPriceCheckRS/PriceCheckInfo/HotelRateInfo/Rooms/Room/RoomDescription/@Name
/RoomDescription/Text Room text description. Pass the value from: HotelPriceCheckRS/PriceCheckInfo/HotelRateInfo/Rooms/Room/RoomDescription/Text
/RateInfo/@AmountAfterTax Booking total amount. Pass the value from: HotelPriceCheckRS/PriceCheckInfo/HotelRateInfo/RateInfos/RateInfo/@AmountAfterTax
/RateInfo/@CurrencyCode Currency code. Pass the value from: HotelPriceCheckRS/PriceCheckInfo/HotelRateInfo/RateInfos/RateInfo/@CurrencyCode
/SpecialInstructions/SpecialInstruction Use this to inform the hotel of any extra charges that will be covered by the Virtual Card. If the card is used to cover the room only, pass the Room Only value.

Booking Vehicles

As of version 2.3.0, the CreatePassengerNameRecord API allows reserving rental vehicles. You may create reservations for vehicles only or combine air, hotel, and car content within a single API call.

Prior to booking, vehicle availability may be retreived via the GetVehAvailRQ API:

Car Shopping - Get Vehicle Availability SOAP API

Car shopping -Get Vehicle Availability REST API

When you reserve a vehicle, you can specify:

  • Extended location code
  • Arrival flight information
  • Different return location
  • Name number
  • Customer address
  • Billing number, a billing reference
  • Collection site ID, name, phone number, customer collection address
  • Delivery site ID, name, phone number, customer delivery address
  • Booking agent, booking source
  • Rate code, corporate ID, frequent flyer number
  • Drop off charge, an ID number, promotion code, rate override, tour code, credit card guarantee, and other parameters

Booking a Single Vehicle

The request should contain:

  • Pick up date and time: …/VehicleBook/VehRentalCore/@PickUpDate and @PickUpTime
  • Return date and time: …/VehicleBook/VehRentalCore/@ReturnDate and @ReturnTime
  • Number of vehicles to be booked: …/VehicleBook/VehRentalCore/@Quantity
  • Vehicle pick up location (such as airport code): …/VehicleBook/VehRentalCore/PickUpLocation/@LocationCode
  • Vehicle vendor code: …/VehicleBook/VendorPrefs/VendorPref/@Code
  • Vehicle type: …/VehicleBook/VehPrefs/VehPref/VehType

Note: Refer to the vehicle type code matrix at Car Shopping - Get Vehicle Availability SOAP API for a list of values.

  • Payment information: …/VehicleBook/RentalPaymentPrefs/GuaranteePrepaid/@Type="GUARANTEE" …/VehicleBook/RentalPaymentPrefs/GuaranteePrepaid/@Type="DEPOSIT"
  • You may also book special equipment (such as booster seats, GPS, etc.) by means of passing: …/VehicleBook/CarExtrasPrefs/CarExtrasPref[n]/@Type

Note: Refer to the vehicle car extra code matrix at Car Shopping - Get Vehicle Availability SOAP API for a list of values.

haltOnVehicleBookError Flag

This flag defaults to false. The haltOnVehicleBookError attribute controls whether the processing of the orchestrated service is stopped if a vehicle booking error is encountered.

Error Handling

As Create Passenger Name Record API orchestrates calls to a number of low-level services, its error handling strategy focuses on passing the errors from downline services.

The general logic is as follows:

  1. Create Passenger Name Record returns an error message when:
    • the API encounters an internal or downline service issue that prevents PNR creation,
    • request payload does not pass internal code validation,
    • customer set haltOnAirPriceError, haltOnInvalidMCT, haltOnHotelBookError, haltOnVehicleBookError to true and the specific booking processes failed.
  2. If a downline service returns its own error/warning it is also passed in the service response as a warning below the main error message.
  3. The API always returns a single error.
  4. There may be more than one warning message.

Understanding general transaction status

On top of returning error/warning messages, the API identifies the status of the transaction by setting a specific value at .../stlp:ApplicationResults/@status.

  • @status="Complete" - transaction was successfully completed. There may be some informatory warning messages appended. This indicate the presence of messages/errors from downline service calls that did not prevent the transaction from being completed.

  • @status="Not Processed" - the transaction failed. The API could not retrieve a record locator (PNR) after a commit request. All of the requested changes were not saved.

  • @status="Incomplete" - the transaction failed. The API failed due to encountering a specified haltOn condition such as: haltOnAirPriceError, haltOnInvalidMCT, haltOnHotelBookError, haltOnVehicleBookError, HaltOnStatus. All of the conditions must be set to true.

Migration to the new form of payment field (*FOP)

As per Sabre Advance Notification (SAN) 16643, in 1Q 2025 Sabre is retiring the ‘5-‘ form of payment remarks field. This has been the traditional method of adding form of payment information in CreatePassengerNameRecordRQv2.4.0 (and older). To prepare API customers for the migration, a new version of the API is released (2.5.0) which introduces support of the updated method of adding form of payment information.

Note: You can self-activate the new form of payment field by enabling PNAPNR TJR setting on your PCC level.

Summary of changes

  • The new API version
    • takes advantage of downline call to UpdateReservationRQ instead of legacy AddRemarkLLSRQ to add form of payment information.
    • allows you to add up to ten forms of payment. (Previously only one form of payment could be added.)
  • There is no other request schema change; you may continue adding form of payment information in the same way they did in the previous versions.
  • Once the form of payment information is added, you will see a different identifier at /CreatePassengerNameRecordRS/TravelItineraryReadRS/TravelItinerary/OpenReservationElements/OpenReservationElement[n]/@elementId.

    Forms of payment added in the new way will show an extra interfix: “-or-“ .

New method snippet

<OpenReservationElement elementId="pnr-or-3" id="3" type="FP" displayIndex="1">

Old method snippet

<OpenReservationElement elementId="pnr-3" id="3" type="FP" displayIndex="1">
Supported functions

Payment type

The list below presents supported form of payment types and corresponding schema paths:

  • Payment card: .../SpecialReqDetails/AddRemarkRQ/RemarkInfo/FOP_Remark/CC_Info/PaymentCard
  • Payment card with cardholder information: .../SpecialReqDetails/AddRemarkRQ/RemarkInfo/FOP_Remark/CC_Info/PaymentCard + .../CardHolderName
  • Cash: /SpecialReqDetails/AddRemarkRQ/RemarkInfo/FOP_Remark/@Type="CASH" or "CA"
  • Check: /SpecialReqDetails/AddRemarkRQ/RemarkInfo/FOP_Remark/@Type="CHECK" or "CHEQUE"
  • Non-refundable type: /SpecialReqDetails/AddRemarkRQ/RemarkInfo/FOP_Remark/@Type="CASH NON REF" or "CASH NONREF" (also applies to "CA", "CHECK", "CHEQUE", or you may simply use "NON REF")
  • Agency/Agent invoice: /SpecialReqDetails/AddRemarkRQ/RemarkInfo/FOP_Remark/@Type="AGT INV" or "AGT INVOICE"

Other values are currently not accepted and will be ignored by the service. The list may be expanded in the future.

Association of the form of payment to its use type and/or trip type

You may associate a form of payment to its corresponding use type or trip type. It is possible to add a new form of payment and include its association - this requires passing a matching @temporaryId that maps a new form of payment to its use or trip type.

Each form of payment can be associated to its specific use type or trip type. You can also send multiple repetitions of .../SpecialReqDetails/AddRemarkRQ/RemarkInfo/FOP_Remark_Association/Child to indicate different types.

Note: One .../FOP_Remark_Association/Child element can contain a single use type or trip type. If you wish to associate use/trip type (Child) to an existing form of payment (Parent), you must pass both .../SpecialReqDetails/AddRemarkRQ/RemarkInfo/FOP_Remark_Association/Parent (identifies an existing payment index) and .../SpecialReqDetails/AddRemarkRQ/RemarkInfo/FOP_Remark_Association/Child (identifies use/trip type association).

Supported use types:

  • "AZ" - All
  • "AN" - Ancillary
  • "AL" - Airline
  • "BU" - Bus/Ground Transportation
  • "CR" - Car
  • "CS" - Cruise
  • "HL" - Hotel
  • "IN" - Insurance
  • "LC" - Low-Cost Carrier
  • "OT" - Other
  • "RL" - Rail
  • "SS" - Specialty Service
  • "TR" - Tour
  • "IR" - Interface Record

Supported trip types:

  • "AZ" - All
  • "CP" - Corporate/Business
  • "LS" - Leisure
  • "EM" - Emergency
  • "FM" - Family
  • "GP" - Group

For known error scenarios related to form of payment remark association, refer to the PassengerDetailsRQ help guide.

The PassengerDetailsRQ API Resources tab contains sample payloads for form of payment remark association to trip and use type.

Notes:

  • If you have already enabled TJR PNA PNR setting, we recommend migrating to the new functionality in version 2.5.0.
  • If you have not yet enabled TJR PNA PNR setting
    • you can migrate to the new functionality in version 2.5.0; but note that addition of payment card manual approval code (equivalent of 'Z' qualifier) is not supported.
    • you can stay on the old version of the API (2.4.0) until you are ready to migrate or before the sunset of the legacy functionality.

List of Create Passenger Name Record errors

Error Description
PNR has not been created successfully, see remaining messages for details The main error message is returned if the PNR could not be created. It applies to all use cases of flight bookings, hotel bookings where haltOnHotelBookError=false and vehicle bookings where haltOnVehicleBookError=false
Unable to perform hotel booking step. See below messages for details. The main error message is returned when the hotel booking failed and haltOnHotelBookError=true
Unable to perform hotel booking due to a low level service timeout The main error message is returned when the hotel booking failed due to timeout and haltOnHotelBookError=true
Unable to perform vehicle booking. Please see following messages for details The main error message is returned when the vehicle booking and haltOnVehicleBookError=true

List of Create Passenger Name Record code validation errors

Error Description
Only one form of payment is allowed at /CreatePassengerNameRecordRQ/HotelBook/PaymentInformation/FormOfPayment. Choose one out of /PaymentCard, /Agency, /Company, /Corporate or /VirtualCard Only one payment form is allowed and has to be chosen in the given options.
Details of one form of payment out of /PaymentCard, /Agency, /Company, /Corporate or /VirtualCard must be provided Details of any one payment form has to be provided.
/CreatePassengerNameRecordRQ/TravelItineraryAddInfoCustomerInfo/CreditCardData/@State cannot be used without .../CreditCardData/@City in the request State related information cannot be used in the city related request.
/CreatePassengerNameRecordRQ/TravelItineraryAddInfo/CustomerInfo/CreditCardData@Zip cannot be combined with .../CreditCardData@PostalCode Zip related information cannot be combined with Postal Code related information.
Missing Profile or TravelItineraryAddInfo in the request One of these elements is required to be present to have the booking committed.
Missing QueuePlace or EndTransaction in the request one of these elements is required to be present to have the booking committed.