OTA_HotelResNotifRQ

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.

  1. 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.
  2. 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.

Parameter Data Type Description
HotelReservation Object -

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

Parameter Data Type Description
RoomStay Object This element contains the RoomRates node.
GuestCounts Object -
ResGuestRPHs Object -

RoomStay

Parameter Data Type Description
RoomRates Object This element contains the individual RoomRate nodes that correspond to each stay night.
TimeSpan Object Mandatory. Time span of the booking.
Total Object -
BasicPropertyInfo Object -
RoomStayUniqueId Object -

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:

  1. 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

  1. 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

Parameter Data Type Description
ProfileInfo Object -

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

Parameter Data Type Description
HotelReservationID Object -

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”/>

Comments

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.

Comment

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.