Technical Overview
Prerequisites
To ensure the successful execution of this API, the following data elements must be present in the Sabre session (“AAA”) prior to calling EnhancedHotelBookRQ:
- Traveler's name
- (Legacy booking path) Travel agency's name or Travel agency's address
- (Content Services for Lodging path) Travel agency's name and Travel agency's address
You can can achieve this by adding these data elements via PassengerDetailsRQ prior to the call to EnhancedHotelBookRQ or by retrieving an existing reservation via GetReservationRQ / TravelItineraryReadRQ.
Additionally, a valid Hotel Booking Key is required. This is the key element to trigger the hotel booking process.
Note: More details on the Hotel Booking Key can be found in the Hotel Booking Key section below.
General Booking Logic
EnhancedHotelBookingRQ performs several steps when booking a hotel room:
- Decodes and retrieves shopped rate details based on the data provided by the Hotel Booking Key.
- Depending on the data of the booking key and user input, follows one of the following three strategies to book the desired hotel rate:
- Aggregator hotel via CSL
- GDS hotel via CSL
- GDS hotel as a legacy segment
Note: Details on these booking strategies are available in the Usage of the @bookGDSviaCSL Flag section below.
- If the booking is successful, the API will validate the newly added segment statuses as returned by the hotel vendor or aggregator (
HK
/SS
/NN
/PN
/UC
/NO
):HK
/SS
/NN
are considered successful (non-error) status codesUC
/NO
are considered unsuccessful status codes and the API will return an errorPN
will always be returned for aggregator bookings and is considered a successful (non-error) status code. See the table below for more details.
- Returns the details of the newly added segment.
Status Code | Short Description | Full Description |
---|---|---|
HK |
CONFIRMED | The status code HK indicates holds confirmed status. |
NN |
ON_REQUEST | The status code NN indicates a pending request to the vendor, this is normally a temporary status code returned when the communication to a vendor is slow. If this code persists after redisplaying a reservation it likely indicates a breakdown in communication between Sabre and the vendor. |
NO |
UNCONFIRMED | The status code NO indicates the vendor denied the booking request with NO action. You must cancel the denied segment and request an alternate booking. If NO status is returned by a vendor on a previously confirmed segment, it may indicate that the Sabre PNR is out of synch with the vendor records (the records do not match). Contact the vendor to validate the PNR data. |
PN |
PENDING | PN will always be returned for aggregator bookings. The confirmation number at this time is created by Sabre and not the vendor. At time of commit (End Transaction), this status should change to either HK or UC : - If HK , the previous confirmation number will be overwritten with the one created by the vendor. - If the segment remains in PN status at time of Commit (End Transaction), this indicates something has gone wrong with the request and you will need to follow up with the aggregator manually. Segments in PN status cannot be updated by the API user. |
SS |
CONFIRMED | The status code SS indicates a successful Sabre system response. The segment sold through Sabre or a sell message was sent to the vendor. |
UC |
UNCONFIRMED | The status code UC indicates the segment is not confirmed. Cancel the segment and request an alternative booking. |
Detailed Booking Execution
Hotel Booking Key
For the booking process to commence, a Hotel Booking Key needs to be passed at /EnhancedHotelBookRQ/BookingInfo/BookingKey
.
XML snippet below:
<BookingInfo>
<BookingKey>d9e73f0d-5f90-4b43-9c86-2d88a732604f</BookingKey>
</BookingInfo>
...
A Hotel Booking Key is obtained as part of the response of the Hotel Price Check API (SOAP | REST).
Note: For additional details on general workflow usage, and the need for the Hotel Price Check API, refer to the Content Services for Lodging (CSL) Product Collection.
The Enhanced Hotel Book API will automatically decode the booking key, obtain the hotel property ID, rate details, and determine the source (GDS or Aggregator) in order to execute the booking through the appropriate vendor.
Usage of the @bookGDSviaCSL Flag
The Enhanced Hotel Book API offers the same schema for booking both traditional GDS hotel content as well as new aggregator content. The flag /EnhancedHotelBookRQ@bookGDSviaCSL
allows users to decide how to book GDS hotel content:
If the user specifies @bookGDSviaCSL=true
:
...
or does not specify this field default = true
:
<EnhancedHotelBookRQ xmlns="http://services.sabre.com/sp/enhanced/hotel/book/v2" version="2.0.0">
...
the GDS lodging content will be booked as a CSL segment.
If the user specifies @bookGDSviaCSL=false
:
<EnhancedHotelBookRQ bookGDSviaCSL="false" xmlns="http://services.sabre.com/sp/enhanced/hotel/book/v2" version="2.0.0">
...
The GDS lodging content will be booked as traditional GDS segment.
To sum it up, depending on the data of the booking key and usage of this flag, the API will follow one of the following three strategies to book the desired hotel rate:
- Book Aggregator as CSL segment
- Book GDS as CSL segment
- Book GDS as legacy segment
Booking Method (Guarantee or Deposit)
To book lodging content, a booking method needs to be specified. The two most common options are guarantee or deposit, which is indicated via the following element in the API request:
/EnhancedHotelBookRQ/PaymentInformation@Type
The API accepts two values in this attribute: GUARANTEE
or DEPOSIT
.
@Type="GUARANTEE"
and credit card form of payment is the most common method for booking lodging content, but you will need to validate specific criteria per vendor.
The list of options is listed below (each specific type may or may not be accepted per vendor):
Guarantee | Deposit | |
---|---|---|
Credit Card | Y | Y |
Agency (Name & Address) | Y | Y |
Agency IATA | Y | |
Company (Name & Address) | Y | |
Corporate Discount Code | Y | Y |
Sabre Virtual Payment | Y | Y |
A third option is available; normally referred to as late arrival (or simply “LATE”
).
This method is supported by some hotel suppliers and allows customers to make a booking without any form of payment. This can be specified by completely omitting the /EnhancedHotelBookRQ/PaymentInformation
section.
To determine which option should be used at time of booking, you can interrogate the specific guarantee conditions from the GetHotelAvailRQ response:
/GetHotelAvailRS/HotelAvailInfos/HotelRateInfo/Rooms/Room/RatePlans/RatePlan/RateInfo/Guarantee@GuaranteeType
Possible options are: GUAR
, DEP
or LATE
.
Below is an XML sample with @Type="GUARANTEE"
and a credit card form of payment:
<EnhancedHotelBookRQ xmlns="http://services.sabre.com/sp/enhanced/hotel/book/v2" version="2.0.0">
<BookingInfo>
<BookingKey>...</BookingKey>
</BookingInfo>
<Rooms>
...
</Rooms>
<PaymentInformation Type="GUARANTEE">
<FormOfPayment>
<PaymentCard>
<PaymentType>CC</PaymentType>
<CardCode>AX</CardCode>
<CardNumber>4111111111111111</CardNumber>
<ExpiryMonth>12</ExpiryMonth>
<ExpiryYear>2019</ExpiryYear>
<FullCardHolderName>
<FirstName>Max</FirstName>
<LastName>Power</LastName>
</FullCardHolderName>
<CSC>134</CSC>
<Address>
<AddressLine>Wadowicka 6</AddressLine>
<CityName>Krakow</CityName>
<StateProvince code="KR"/>
<StateProvinceCodes>
<Code>KR</Code>
</StateProvinceCodes>
<PostCode>30-415</PostCode>
<CountryCodes>
<Code>PL</Code>
</CountryCodes>
</Address>
</PaymentCard>
</FormOfPayment>
</PaymentInformation>
</EnhancedHotelBookRQ>
Special Use Case for the Sabre Virtual Payment (SVP) Payment Method
Starting with version 2.1.0 of the API, Enhanced Hotel Book provides the capability to book CSL content by means of a Sabre Virtual Payments (SVP) account details. Please check this help page to read about the prerequisites needed to enable this payment type. To successfully book a room using this booking method, pass all required values using /EnhancedHotelBookRQ/PaymentInformation/FormOfPayment/VirtualCard
. The required values are listed below:
Element / attribute | Description |
---|---|
/PaymentInformation/@Type |
Payment method. Choose “GUARANTEE” . |
CustomerAccountCode |
The customer account code for the Sabre Virtual Payments. |
Agency/@Emai l |
Agency contact 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. If the card is meant to cover the room plus all the non-complimentary services (such as: parking, Internet access, etc) do not forget to include them here as well. |
XML sample below:
<EnhancedHotelBookRQ xmlns="http://services.sabre.com/sp/enhanced/hotel/book/v2_1" version="2.1.0">
<BookingInfo>
<BookingKey>...</BookingKey>
</BookingInfo>
<Rooms>
...
</Rooms>
<PaymentInformation Type="GUARANTEE">
<FormOfPayment>
<VirtualCard>
<CustomerAccountCode>SABRECARD</CustomerAccountCode>
<Agency Email='sp.support@sabre.com'/>
<HotelInfo Fax='123456789' HotelName='Hotel Suites'/>
<RoomDescription Name='BOOK EARLY N SAVE NO REFUNDS'>
<Text>1 KING BED LEISURE NONSMOKING WITH FREE WI FI ACCESS</Text>
</RoomDescription>
<RateInfo AmountAfterTax="356.02" CurrencyCode="USD"/>
<SpecialInstructions>
<SpecialInstruction>Room Only</SpecialInstruction>
</SpecialInstructions>
</VirtualCard>
</FormOfPayment>
</PaymentInformation>
</EnhancedHotelBookRQ>
PNR Information at Segment Sell
The hotel segment will contain the VCN as the form of payment and the PNR will be updated to include the Deployment ID:
PNR Example
1 HHL HX HK1 MIA IN20SEP Q-OUT22SEP 2NT 54937 H /DCHX
AMPTON INN MIAMI 1A0DLV4 -1/ 149.00USD/CMN-C/CMT-COMMISSIONAB
LE/TAC-10.00 PCT/G*VCNSABREONE-HOTEL RES PRO1122/C72H/SI-INCLUD
E INTERNET-CF- 83814146
Agencies with PNAPNR-ON (Use Passenger Association and New FOP field)**
The VCN and Deployment ID are included in the *FOP
field. If the VCN is not present in the *FOP
field, it will be added with Use Type Hotels. If the VCN is already present in the *FOP
field, the Deployment ID will be added under the existing form of payment:
Example – Host Display
New VCN FOP
*FOP«
FORM OF PAYMENT
1. VIRTUAL CARD TYPE
*VCNSABREAIRONE
UHL
DEPLOYMENT ID: 10259127
Existing VCN FOP_
*FOP«
FORM OF PAYMENT
1. VIRTUAL CARD TYPE
*VCNSABREAIRONE
DEPLOYMENT ID: 0001122333 DOC:0012233449922
DEPLOYMENT ID: 10259127
Agencies with PNAPNR-OFF (Passenger Association is not active)
The system will add a historical remark with the Deployment ID:
Example – Host Display
*P5H«
15.H-*VCNSABREAMEX DEPLOYMENTID 10136274
PNR Information after ending/committing the transaction
- When the reservation is completed and the hotel booking is successful, the confirmation number and status of the Deployment ID will be added to the PNR.
- If the hotel booking is denied, the system will remove the Deployment ID and will send a cancel notification to Conferma.
- A pending status is not valid when using VCN FOP; the reservation must be confirmed to be able to continue. If the booking receives a pending (
PN
) status, that means that the reservation is not confirmed on the hotel side. The system will then remove the Deployment ID and will send a cancel notification to Conferma.
Storage of Confirmation Code
PNRPNR-ON
*FOP«
FORM OF PAYMENT
1. VIRTUAL CARD TYPE
*VCNSABREAIRONE
DEPLOYMENT ID: 10259127 CONF: 5899115952085
Example – GetReservationRS
<or114:FormOfPayment migrated="false">
<or114:VirtualCard>
<or114:CustomerAccountCode>VISAMULTI</or114:CustomerAccountCode>
<or114:Transactions>
<or114:Transaction index="1" paymentReferenceNumber="01411567083634295819">
<or114:LastUpdateTime>2019-08-29T08:00:39</or114:LastUpdateTime>
<or114:DeploymentId>10724395</or114:DeploymentId>
<or114:ConfirmationNumber>EAN1234</or114:ConfirmationNumber>
</or114:Transaction>
</or114:Transactions>
</or114:VirtualCard>
</or114:FormOfPayment>
PNRPNR-OFF
*P5H«
15.H-*VCNSABREAMEX DEPLOYMENTID 10136274
16.H-*VCNSABREAMEX CONF/1234567890
Example – GetReservationRS
<stl19:Remarks>
<stl19:Remark index="1" id="48" type="HS" elementId="pnr-48">
<stl19:RemarkLines>
<stl19:RemarkLine>
<stl19:Text>*VCNAMEXMULTI DEPLOYMENTID 10724532</stl19:Text>
</stl19:RemarkLine>
</stl19:RemarkLines>
</stl19:Remark>
</stl19:Remarks>
Deployment ID Status
3.H-*/SVP*01 DEPLOYMENTID 10453099 DEPLOYED ***********
4.H-*/SVP-01 HTL/2309/2609/1/00171322/2114
Where:
Example | Description |
---|---|
SVP*01 SVP-01 | Hotel Segment (first hotel segment) |
10453099 | Deployment ID |
2309 | Check-in date |
2609 | Check-out date |
00171322 | Confirmation code |
2114 | Property number |
Example – GetReservationRS
<stl19:Remarks>
<stl19:Remark index="1" id="51" type="HS" elementId="pnr-51">
<stl19:RemarkLines>
<stl19:RemarkLine>
<stl19:Text>*/SVP*01 DEPLOYMENTID 10724530 DEPLOYED ***********</stl19:Text>
</stl19:RemarkLine>
</stl19:RemarkLines>
</stl19:Remark>
<stl19:Remark index="2" id="52" type="HS" elementId="pnr-52">
<stl19:RemarkLines>
<stl19:RemarkLine>
<stl19:Text>*/SVP-01 HTL/0110/0310/1/2109054215/36848</stl19:Text>
</stl19:RemarkLine>
</stl19:RemarkLines>
</stl19:Remark>
Ignore or Cancel before ending/committing the transaction
If the sell operation is ignored, or the hotel segment is cancelled before the first COMMIT, a cancelation message will be sent to Conferma. This will cancel the Deployment ID and the information will not be stored in the PNR.
Hotel Cancelation after ending/committing the transaction
If the hotel reservation is cancelled after it is completed, the system will send a cancel notification to Conferma. The reservation will be updated to reflect the new status of the Deployment ID.
Example
*P5
REMARKS
1.H-CONFERMA-GETTHERETEST
2..UU1-1234
3..UU2-DAVE BROWN
4.H-*/SVP*01 DEPLOYMENTID 10062605 CANCELLED ***********
5.H-*/SVP-01 HTL/2309/2609/1/66659921/2114
Examples
Agency with PNAPNR-ON, reservation contains 2 hotel segments:
Deployment ID and Confirmation Numbers
*FOP«
1. VIRTUAL CARD TYPE
*VCNSABREAIRONE
DEPLOYMENT ID: 10259127 CONF: 58991159
DEPLOYMENT ID: 10259129 CONF: 58991302
*P5«
REMARKS
1.H-*/SVP*01 DEPLOYMENTID 10259127 DEPLOYED ***********
2.H-*/SVP-01 HTL/2309/2609/1/58991159/2114
9.H-*/SVP*02 DEPLOYMENTID 10259129 DEPLOYED ***********
10.H-*/SVP-02 HTL/2909/0210/1/58991302/2129
Aency with PNAPNR-OFF, reservation contains 2 hotel segments:
*P5«
REMARKS
1.H-*VCNSABREAIRONE DEPLOYMENTID 10453099
2.H-*VCNSABREAIRONE CONF/00171322
3.H-*/SVP*01 DEPLOYMENTID 10453099 DEPLOYED ***********
4.H-*/SVP-01 HTL/2309/2609/1/00171322/2114
11.H-*VCNSABREAIRONE DEPLOYMENTID 10453100
12.H-*VCNSABREAIRONE CONF/00172944
13.H-*/SVP*02 DEPLOYMENTID 10453100 DEPLOYED ***********
14.H-*/SVP-02 HTL/2309/2609/1/00172944/2114
Agency cancel hotel segment:
Original Reservation
*N*I*P5*P6«
1.1JONES/D MR
1 HHL HI HK1 LHR IN23SEP T-OUT26SEP 3NT 2114 HO /DCHI
LIDAY INN MAYFAIR 1STN013A-2/ 289.00GBP/CMN-C/CMT-COMMISSIONAB
LE/AGT99999992/G*VCNSABREONE-CONFERMA DUMMY CARD/C04P/SI-FA-CF-66659921-
REMARKS
1.H-CONFERMA-GETTHERETEST
2..UU1-1234
3..UU2-DAVE BROWN
4.H-*/SVP*01 DEPLOYMENTID 10062605 DEPLOYED ***********
5.H-*/SVP-01 HTL/2309/2609/1/66659921/2114
RECEIVED FROM - SVP ON BEHALF OF 148
Segment is cancelled
*N*I*P5*P6«
1.1JONES/D MR
NO ITIN
REMARKS
1.H-CONFERMA-GETTHERETEST
2..UU1-1234
3..UU2-DAVE BROWN
4.H-*/SVP*01 DEPLOYMENTID 10062605 CANCELLED ***********
5.H-*/SVP-01 HTL/2309/2609/1/66659921/2114
RECEIVED FROM - SVP ON BEHALF OF 148
State Management & Authentication
Enhanced Hotel Book is available in SOAP/XML and behaves in a stateful way, making it adaptable to most workflows implemented today by our current API ecosystem.
To successfully invoke a stateful API, a valid session-based token is required; these types of tokens are available upon successful execution of the SessionCreateRQ API.
If you prefer to book hotel content in a stateless way, we've expanded the capabilities of these two APIs:
- Create Passenger Name Record (to support booking of new reservations) SOAP | REST
- Update Passenger Name Record (to support adding bookings into existing reservations) SOAP | REST
Both APIs behave in a stateless way and can be consumed via session-less (ATK) tokens.
The APIs are available in both SOAP/XML & REST/JSON.
Compliance with Payment Services Directive (PSD2)
Starting with version 2.2.0 of the API, Enhanced Hotel Book provides the capability to pass or reference Strong Customer Authentication (SCA) data during a payment card transaction.
Adding strong customer authentication data to a payment card
If you wish to include SCA information, send all applicable data elements through the /EnhancedHotelBookRQ/PaymentInformation/FormOfPayment/PaymentCard/StrongCustomerAuthentication
element.
Notes:
- Booking agents are responsible for determining which authentication data needs to be passed to the merchant through Sabre
- Enhanced Hotel Book supports adding SCA data elements only for CSL hotel bookings
Referencing an existing payment card and/or strong SCA data
If you have already added a payment card (with or without SCA data) prior to a call to Enhanced Hotel Book, you may reference to it by means of sending its identifier.
Instead of passing full payment card information, use the /EnhancedHotelBookRQ/PaymentInformation/FormOfPaymentReference
element to specify the card ID and/or the SCA data.
The identifier of the payment card can be found in the Retrieve Itinerary API response in the following location: GetReservationRS/Reservation/OpenReservationElements/OpenReservationElement/@id
The identifier of the Strong Customer Authentication data can be in the Retrieve Itinerary API response in the following location: GetReservationRS/Reservation/OpenReservationElements/OpenReservationElement/FormOfPayment/PaymentCard/StrongCustomerAuthentication/@Id
Once this data is retrieved, ensure to add the card security code to the /EnhancedHotelBookRQ/PaymentInformation/FormOfPaymentReference/@cardSecurityCode
element.
Note: Enhanced Hotel Book supports referencing payment card and/or SCA data elements for both legacy GDS and CSL hotel bookings.