This message should be used by the Client system to post New, Modified, or Cancelled reservations to Hotel Trader. Reservation Requests received are processed synchronously and a success or failure response is returned. A success response will always return an HT Confirmation code.
The reservation request is then transmitted upstream into the CRS/PMS, as may be applicable, asynchronously.
The asynchronous confirmation from the PMS is typically done within seconds and the client will be able to view the PMS confirmation # in addition to the HT Confirmation number on their Client Portal login.
Reservation Delivery to Hotels
Every reservation request that is received by our Booking endpoint is confirmed in 2 steps.
- The request is validated and a success or failure message with the appropriate reasons for the failure is returned to the client. At this time, the hotel CRS/PMS code is not available in the client portal.
- The reservation will be sent upstream to the CRS asynchronously.
Depending upon the PMS involved, the hotel CRS/PMS codes may take up to 30 minutes to arrive. These codes will be available on the client portal immediately upon being created.
XML Description
OTA_HotelResNotifRQ
Parameter |
Data Type |
Mandatory? |
Number of occurrences |
Description |
xmlns |
URL |
Yes |
1 |
- |
ResStatus |
String |
Yes |
1 |
Possible values: BOOK, CANCEL, MODIFY (not case-sensitive) Refer to the Multi-Room Reservations article to know more about this attribute. |
EchoToken |
String |
Yes |
- |
|
TimeStamp |
- |
Yes |
1 |
- |
Version |
- |
Yes |
1 |
- |
POS |
Object |
Yes |
1 |
See below |
HotelReservations |
Object |
Yes |
1 |
Container object for the HotelReservations node. |
POS
Parameter |
Data Type |
Mandatory? |
Number of occurrences |
Description |
Source |
Object |
Yes |
1 |
Identifies information related to the eventual point of sale where the end user is making the booking. For clients selling to the end user, this would be the client reservation confirmation code. For clients selling to other agencies, this should contain the agency's client confirmation code sent to the client API. |
Source
Parameter |
Data Type |
Mandatory? |
Number of occurrences |
Description |
RequestorID |
Object |
Yes |
1 |
Contains the Demand Client code. |
BookingChannel |
Object |
- |
- |
- |
RequestorID
Parameter |
Data Type |
Mandatory? |
Number of occurrences |
Description |
Type |
Integer |
Yes |
1 |
- |
ID |
String |
Yes |
1 |
- |
BookingChannel
Parameter |
Data Type |
Mandatory? |
Number of occurrences |
Description |
CompanyName |
Object |
- |
- |
The company name is enclosed as text within this tag. |
Code |
String |
- |
- |
The company code. |
HotelReservations
The HotelReservations element contains all reservations for the hotel.
HotelReservation
Parameter |
Data Type |
Description |
CreateDateTime |
Date |
The timestamp of the Client System when the payload is sent to Hotel Trader. It is important to specify the timestamp in UTC. |
CreatorID |
String |
Required. The unique client code that Hotel Trader provides to clients to be sent in all requests. |
RoomStays |
Object |
This element contains the Room that is being booked. |
ResGuests |
Object |
Additional Guests information is expected in ResGuests Element. |
ResGlobalInfo |
Object |
Node that contains the client-specific reservation identification information and the Comments associated with the reservation that will be sent to the property PMS. |
The attribute UniqueID has been deprecated. Please see the HotelReservationID section on how to pass the Client Confirmation codes associated with the reservation.
RoomStays
RoomStay
RoomRates
Parameter |
Data Type |
Description |
RoomRate |
Object |
This element contains the details of the Rateplan and Roomtype for which the reservation will be booked. |
RoomRate
Parameter |
Data Type |
Description |
RoomTypeCode |
String |
Room Code |
RatePlanCode |
String |
RatePlan code |
NumberofUnits |
Integer |
MUST BE SET TO 1. In case of multi-room bookings, a separate RoomStay node should be sent corresponding to each room in the booking. |
Rates |
Object |
Shows all rates for the room/rate plan. |
Rates
Parameter |
Data Type |
Description |
Rate |
Object |
Shows a rate for each stay night of the reservation. |
Rate
Parameter |
Data Type |
Description |
UnitMultiplier |
Integer |
Always 1 |
RateTimeUnit |
String |
Day is the unit type |
EffectiveDate |
Date |
Start date for rates |
ExpireDate |
Date |
End date for rates. For clarification purposes. |
Base |
Object |
- |
A one night stay will have the EffectiveDate = CheckinDate and the ExpireDate = CheckoutDate.
Rules for Rate Nodes:
If consecutive dates have the exact same price, then the request can be set as follows:
EffectiveDate="2020-12-29" ExpireDate="2021-01-04".
In this example, the rate is the same for 12/29-1/3
- ALL stay dates must be included in exactly one of the Rate nodes. For example, The following is acceptable for a stay from 1/3/21 - 1/5/21 (check-in-checkout)
<Rate EffectiveDate="2021-01-03" ExpireDate="2021-01-04" RateTimeUnit="Day" UnitMultiplier="1">
<Base AmountBeforeTax="17.51" AmountAfterTax="19.85" CurrencyCode="USD"/>
</Rate>
<Rate EffectiveDate="2021-01-02" ExpireDate="2021-01-03" RateTimeUnit="Day" UnitMultiplier="1">
<Base AmountBeforeTax="51.5" AmountAfterTax="58.39" CurrencyCode="USD"/>
</Rate>
Base
Parameter |
Data Type |
Description |
AmountBeforeTax |
Decimal |
Mandatory net amount for the night. This amount MUST match the rates sent via the OTA_HotelRatePlanNotifRQ message. Any prices sent that do not match the OTA_HotelRatePlanNotifRQ price, will be ignored and Hotel Trader will confirm the booking at the rate we provided in our message. |
AmountAfterTax |
Decimal |
Mandatory gross amount (net amount + tax) for the night. This amount is used to figure out the tax per night. Please note, that the property’s tax details are provided separately via the metadata, and therefore Hotel Trader will calculate the taxes based on the AmountBeforeTax sent to us. If our calculation varies from the amount sent by the client (AmountAfterTax - AmountBeforeTax), we will book the reservation at the Hotel Trader's calculated tax. This discrepancy will be visible on your client portal and can be addressed with your Operations Contact at Hotel Trader or by contacting us at customerservice@hoteltrader.com |
CurrencyCode |
String |
MUST be set to USD. Please contact us for support for other currencies. |
TimeSpan
Parameter |
Data Type |
Description |
Start |
Date |
Check-in date for the booking. |
End |
Date |
Check-out date for the booking. |
Total
Parameter |
Data Type |
Description |
AmountBeforeTax |
String |
Mandatory net amount total for all stay nights. This amount MUST match the rates sent via the OTA_HotelRatePlanNotifRQ message. If the total of the prices sent in the nodes HotelReservation.RoomStays.RoomRates.RoomRate.Rates.Rate.Base.AmountBeforeTax does not match the amount sent in this node, then Hotel Trader will book the reservation at the rates provided in the HotelReservation.RoomStays.RoomRates.RoomRate.Rates.Rate.Base node OR the rate that was sent under OTA_RateplanNotifRQ (as specified above). |
AmountAfterTax |
Decimal |
Mandatory. Total Amount after tax. |
CurrencyCode |
String |
MUST be set to USD. Please contact us for support for other currencies. |
Taxes |
Object |
- |
Taxes
Parameter |
Data Type |
Description |
Amount |
Integer |
Total amount for taxes. |
CurrencyCode |
String |
MUST be set to USD. Please contact us for support for other currencies. |
Example:
<Total AmountBeforeTax="20.000" AmountAfterTax="33.756" CurrencyCode="USD">
<Taxes Amount="13.756" CurrencyCode="USD" />
</Total>
NOTE: Please refer to the Tax Setup section for a detailed description of the tax/fee structure supported by the Hotel Trader system.
BasicPropertyInfo
Parameter |
Data Type |
Description |
HotelCode |
String |
- |
RoomStayUniqueId
Parameter |
Data Type |
Description |
Client Confirmation code |
String |
Optional. Unique identified for the room. Hotel Trader generates this if it is not provided by the client. |
GuestCounts
Parameter |
Data Type |
Description |
IsPerRoom |
Integer |
Accepted values - 0 or 1. Shows if guest count is per room. For Hotel Trader this parameter is always set to 1. |
GuestCount |
Object |
- |
GuestCount
Parameter |
Data Type |
Description |
AgeQualifyingCode |
String |
It shows whether GuestCount refers to adults/children; 10=adults, 8=children. |
Count |
Integer |
It shows the number of adults or children. |
ResGuestRPHs
Parameter |
Data Type |
Description |
ResGuestRPH |
Object |
List of ResGuestRphs |
ResGuestRPH
Parameter |
Data Type |
Description |
RPH |
Integer |
Associates ResGuest to RoomStay |
ResGuests
Parameter |
Data Type |
Description |
ResGuest |
Object |
- |
ResGuest
Parameter |
Data Type |
Description |
PrimaryIndicator |
Boolean |
Can be True only for one guest under whose name the booking is made. The last guest with True gets picked if there is more than 1 guest with PrimaryIndicator = True. |
ResGuestRPH |
Integer |
Used to associate this roomstay with ResGuest. In case of multi-room bookings, use the same ResGuestRPH for both roomStays. |
Profiles |
Object |
- |
Profiles
ProfileInfo
Parameter |
Data Type |
Description |
Profile |
Object |
- |
Profile
Parameter |
Data Type |
Description |
ProfileType |
String |
“1” for main guest , “4” for IATA company info |
Customer |
Object |
- |
CompanyInfo |
Object |
- |
Customer
Parameter |
Data Type |
Description |
PersonName |
Object |
- |
Telephone |
Object |
- |
Email |
Object |
- |
Address |
Object |
- |
The email address of the customer is mandatory in the ResGuestRPH element
Example:
<Profiles>
<ProfileInfo>
<Profile ProfileType="1">
<!--code 1 = Customer-->
<Customer>
<PersonName>
<GivenName>James</GivenName>
<Surname>Bond</Surname>
</PersonName>
<Telephone PhoneNumber="44-69-66564100" />
<Email>james.bond@mi5.co.uk</Email>
<Address>
<AddressLine>Claretta House</AddressLine>
<AddressLine>Tower Bridge Close</AddressLine>
<CityName>London</CityName>
<PostalCode>EC1 2PG</PostalCode>
<StateProv StateCode="ENG"/>
<CountryName Code="UK"/>
</Address>
</Customer>
</Profile>
</ProfileInfo>
</Profiles>
ResGlobalInfo
Parameter |
Data Type |
Description |
HotelReservationIDs |
Object |
Node that contains the individual Client and OTA confirmation codes. |
Comments |
Object |
This is the array that contains the individual Comment nodes. |
HotelReservationIDs
HotelReservationID
Parameter |
Data Type |
Description |
ResID_Type |
String |
See below |
ResID_Value |
String |
See below |
otaClientName |
String |
See below. OTA to which the Client is selling. |
OTA Confirmation Number
Ota confirmation code should be sent as below:
- ResID_Type 14 - Client confirmation number. The attribute otaClientName is not required for this node if ResID_Type =“14”.
- ResID_Type 16 - OTA reference number (this is the entity to which you are selling). The ResID_Type with value 16. The attribute otaClientName is mandatory if ResID_Type =“16”.
Mandatory:
<HotelReservationID ForGuest="true" ResID_Type="14" ResID_Value=" CONF CODE FROM CLIENT"/>
<HotelReservationID ForGuest="true" ResID_Type="16" ResID_Value=" CONF CODE FROM OTA " otaClientName=”OTA CLIENT NAME”/>
Parameter |
Data Type |
Description |
Comment |
Object |
The Comments array can contain multiple Comment nodes. Each node corresponds to a request from the Client/OTAClient/Consumer that needs to be conveyed to the Property along with the reservation. The Comments array will be concatenated and sent to the PMS. Each Comment can only contain one Text node. |
Parameter |
Data Type |
Description |
Text |
Object |
Each Comment node can contain a single Text node which will contain the actual comment that needs to be passed to the property. |
Example: Reservation Message
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soap:Header>
<wsse:Security soap:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsse:UsernameToken>
<wsse:Username>HT_CLIENT</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">Pa55w0rdT0ken</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
</soap:Header>
<soap:Body>
<OTA_HotelResNotifRQ EchoToken="d2be47e6-e769-4da9-b155-36091722e248" ResStatus="Commit" TimeStamp="2020-11-05 20:00:47 UTC" Version="1.003" xmlns="http://www.opentravel.org/OTA/2003/05">
<POS>
<Source>
<RequestorID ID="client-unique-identifier" Type="22"/>
<BookingChannel>
<CompanyName Code="ABC">ABC TRAVEL AGENCY</CompanyName>
</BookingChannel>
</Source>
</POS>
<HotelReservations>
<HotelReservation CreateDateTime="2020-11-05 20:00:47 UTC" CreatorID="client-unique-identifier">
<UniqueID ID="ABC_12348918" Type="14"/>
<!--This field is deprecated. Please use the HotelReservationID field.-->
<RoomStays>
<RoomStay>
<RoomRates>
<RoomRate NumberOfUnits="1" RatePlanCode="HTFIT" RoomTypeCode="BTK">
<Rates>
<Rate EffectiveDate="2020-12-29" ExpireDate="2020-12-30" RateTimeUnit="Day" UnitMultiplier="1">
<Base AmountAfterTax="19.85" AmountBeforeTax="17.51" CurrencyCode="USD"/>
</Rate>
<Rate EffectiveDate="2021-01-03" ExpireDate="2021-01-04" RateTimeUnit="Day" UnitMultiplier="1">
<Base AmountAfterTax="19.85" AmountBeforeTax="17.51" CurrencyCode="USD"/>
</Rate>
<Rate EffectiveDate="2020-12-30" ExpireDate="2020-12-31" RateTimeUnit="Day" UnitMultiplier="1">
<Base AmountAfterTax="58.39" AmountBeforeTax="51.5" CurrencyCode="USD"/>
</Rate>
<Rate EffectiveDate="2020-12-31" ExpireDate="2021-01-02" RateTimeUnit="Day" UnitMultiplier="1">
<Base AmountAfterTax="125.54" AmountBeforeTax="110.72" CurrencyCode="USD"/>
</Rate>
<Rate EffectiveDate="2021-01-02" ExpireDate="2021-01-03" RateTimeUnit="Day" UnitMultiplier="1">
<Base AmountAfterTax="52.55" AmountBeforeTax="46.35" CurrencyCode="USD"/>
</Rate>
</Rates>
</RoomRate>
</RoomRates>
<GuestCounts IsPerRoom="1">
<GuestCount AgeQualifyingCode="10" Count="2"/>
<GuestCount AgeQualifyingCode="8" Count="1"/>
</GuestCounts>
<TimeSpan End="2021-01-04" Start="2020-12-29"/>
<Total AmountAfterTax="401.73" AmountBeforeTax="554.32" CurrencyCode="USD">
<Taxes Amount="47.41" CurrencyCode="USD"/>
</Total>
<BasicPropertyInfo HotelCode="SLSLV"/>
<ResGuestRPHs>
<ResGuestRPH RPH="0"/>
<ResGuestRPH RPH="1"/>
</ResGuestRPHs>
</RoomStay>
</RoomStays>
<ResGuests>
<ResGuest PrimaryIndicator="true" ResGuestRPH="0">
<Profiles>
<ProfileInfo>
<Profile ProfileType="1">
<Customer>
<PersonName>
<GivenName>Calvin</GivenName>
<Surname>Hobbes</Surname>
</PersonName>
<Email>calvin@hobbes.com</Email>
</Customer>
</Profile>
</ProfileInfo>
</Profiles>
</ResGuest>
<ResGuest PrimaryIndicator="false" ResGuestRPH="1">
<Profiles>
<ProfileInfo>
<Profile ProfileType="1">
<Customer>
<PersonName>
<GivenName>Mom</GivenName>
<Surname>Hobbes</Surname>
</PersonName>
<Email>calvinsmom@hobbes.com</Email>
</Customer>
</Profile>
</ProfileInfo>
</Profiles>
</ResGuest>
</ResGuests>
<ResGlobalInfo>
<HotelReservationIDs>
<HotelReservationID ResID_Type="14" ResID_Value="ABC_12348918"/>
<HotelReservationID ResID_Type="16" ResID_Value="BRTETGF657" otaClientName="ABC Travel Company"/>
</HotelReservationIDs>
<Comments>
<Comment>
<Text>Late check-out requested</Text>
</Comment>
<Comment>
<Text>Expected Arrival: 12:35</Text>
</Comment>
</Comments>
</ResGlobalInfo>
</HotelReservation>
</HotelReservations>
</OTA_HotelResNotifRQ>
</soap:Body>
</soap:Envelope>
Example: Cancellation of a reservation
<OTA_HotelResNotifRQ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.opentravel.org/OTA/2003/05" EchoToken="469dcb57-5b26-4848-bc71-bd0ffd919656" TimeStamp="2016-09-14T12:34:23.5731582+05:30" Version="1.003" ResStatus="Cancel">
<HotelReservations>
<HotelReservation CreateDateTime="2016-10-21T00:00:00" CreatorID="xxxx">
<UniqueID Type="14" ID=" CONF CODE FROM CLIENT"/>
<RoomStays>
<RoomStay>
<!-- Hotel code in roomstay is Mandatory -->
<BasicPropertyInfo HotelCode="RTGAIN"/>
</RoomStay>
</RoomStays>
<ResGlobalInfo>
<HotelReservationIDs>
<HotelReservationID ResID_Type="14" ResID_Value="CONF CODE FROM CLIENT"/>
</HotelReservationIDs>
</ResGlobalInfo>
</HotelReservation>
</HotelReservations>
</OTA_HotelResNotifRQ>
Sample Response
An OTA_HotelResNotifRS is returned in case of success and error. See here for more details.