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 performs the following steps to complete a reservation:
- Adds Profile, Passenger, and Agency details – 1st call to
PassengerDetailsRQ
- Performs air booking and pricing –
EnhancedAirBookRQ
- Performs hotel booking -
EnhancedHotelBookRQ
- Performs vehicle booking -
OTA_VehResLLSRQ
- 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:
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.
- If you wish to pass any rate preferences (rate codes, customer loyalty codes), use Car Shopping - Get Vehicle Availability SOAP API
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:
- 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
totrue
and the specific booking processes failed.
- 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.
- The API always returns a single error.
- 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 specifiedhaltOn
condition such as:haltOnAirPriceError
,haltOnInvalidMCT
,haltOnHotelBookError
,haltOnVehicleBookError
,HaltOnStatus
. All of the conditions must be set totrue
.
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 legacyAddRemarkLLSRQ
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.)
- takes advantage of downline call to
- 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. |