Developer Docs
  • Our Products
    • Channel Manager
      • Integration and Onboarding Flow
      • RG Bridge - Supply (Push)
        • Integration Overview
          • Vision of Integration
            • Commercial value and business case
          • Information Data flow
            • One way integration
            • Two Way integration – ARI Broadcast and Reservation fetch
            • Information delivery mechanism
          • Technical feasibility of integration
            • Test property setup
            • Sample reservation data
          • RG Bridge Setup
          • Contract
          • Project Plan
          • Certification
          • Monitoring and after sales support
          • Integration checklist
        • Interface Specifications – Availability and Rates Notification Service
          • RG Bridge Integration Process
          • Intended Audience
          • Typographical Conventions
          • Technical Overview
          • Operations
            • Availability Notification
              • OTA_HotelAvailNotifRQ
                • Change in Inventory count
                • Change in availability status and Restrictions
              • OTA_HotelAvailNotifRS
              • XML Usage Specification
            • Rate Change Notification
              • OTA_HotelRateAmountNotifRQ
              • XML Usage Description
              • OTA_HotelRateAmountNotifRS
              • XML Usage Specification
            • Points to remember
        • Interface Specifications – Reservation Notification Service
          • RG Bridge integration process
          • Intended audience
          • Typographical conventions
          • Technical overview
          • Operations
            • Reservation Notification
              • OTA_HotelResNotifRQ
              • XML Usage specification
              • Sample Reservation Messages
              • OTA_HotelResNotifRS
              • XML Usage specification
          • Points to remember
          • Code Lists
      • RG Bridge - Reservation Retrieval (Pull)
        • Technical overview
        • Operations
          • Reservation Retrieval
            • OTA_ReadRQ
            • XML Usage specification
            • OTA_ResRetrieveRS
            • XML Usage specification
          • Reservation Confirmation
            • OTA_NotifReportRQ
            • XML Usage specification
            • OTA_NotifReportRS
            • XML Usage specification
        • Code Lists
      • Direct Connect - Demand (Push)
        • Introduction
        • Interface Specifications – ARI Service
          • Technical Overview
          • Operation: Property List
            • HotelPropertyListGetRQ
            • HotelPropertyListGetRS
            • Test Use Cases
            • FAQ
          • Operation: Product List
            • HotelProductListGetRQ
            • HotelProductListGetRS
            • Test Use Cases
            • FAQ
          • Operation: ARI Get
            • HotelARIGetRQ
            • HotelARIGetRS
            • Test Use Cases
            • FAQ
          • Operation: ARI Update
            • HotelARIUpdateRQ
            • HotelARIUpdateRS
            • Test Use Cases
            • FAQ
          • Points to remember
          • Code Lists
        • Interface Specifications – Reservation Notification Service
          • Technical overview
            • Communication protocols
            • General design
            • Authentication
          • Operation: Reservation
            • OTA_HotelResNotifRQ
            • OTA_HotelResNotifRS
            • Test use cases
            • FAQ
    • Smart Distribution
      • Onboarding process
      • Certification - Demand
      • Authentication Method
      • Book and Cancel Reservation
        • Transaction Header Formats
        • Book API
          • Book Reservation
          • Cancel Reservation
          • Booking Reservation Request Message Format
          • Booking Reservation Response Message Format
          • Cancel Reservation Request Message Format
      • Multiavailability (Enhanced Shopping Transaction)
        • Transaction Header Formats
        • Enhanced Shopping (EST) – Detailed Rate Information
          • Requesting Specific Rates
          • UltraDirect Account Author Negotiated Rate Processing
          • Unavailable Properties
          • UltraDirect Cache Processing
          • Enhanced Shopping Transaction Request Header Format
          • Enhanced Shopping Transaction Response Message Format
      • Pre-Book
        • Transaction Header Formats
        • Pre Book API
          • Pre-Book Request message format
          • Pre-Book Response message format
      • Property list and Booking Summary
        • PropertyList API
        • Booking Summary API
  • Content
    • Integration Process
    • Certification - Demand
    • Content Retrieve
      • SOAP/HTTP
        • SOAP Envelop
        • SOAP Body
        • Date and Time
        • Specifications for Currency Amounts
      • Transaction Specifications
      • Content Retrieval Request
      • Content Retrieval Response
    • Content Update
      • Overview
      • Transaction List
      • Transaction Flow
      • Batch processing
        • File naming convention
      • Multi-lingual capabilities
      • Associating media to textual content
      • Managing images
      • GDS content updates
      • Office of Foreign Assets Control (OFAC)
      • Interface requirements
        • SOAP envelope
        • Standard element formats
      • Transaction specifications
        • Data mapping of elements
        • Area Information
        • Affiliation information
        • Media information
        • Contact information
        • TPA extensions
        • GDS information
        • Response message
      • Codes lists
        • Credit Card
        • Error and Warning codes
        • Spoken Language
        • State and Country
      • Supported language codes
      • Client application generation using WSDL tool
  • UltraDirect
    • Integration Process
    • Certification
    • Ultradirect transaction sets - XML
      • Transaction header formats
      • Booking transactions
        • Booking request message format..
        • Request message format - Cancel
        • Request message format - Commit/Rollback
        • Request message format - Modify
        • Response message format - Booking
      • Enhanced shopping (EST)
        • Requesting Specific Rates
        • Request message format
        • Response message format.
      • Rate and availability transactions
        • Standard multi-availability
          • Request & Response message format
      • Rate Rules
        • Request message format
        • Response message format
      • Reference data transactions
        • Request message format..
        • Response message format..
      • Single property availability
        • Request message format
        • Response message format
    • XML ultradirect specifications
      • Overview
        • Transaction list
      • Interface requirements
      • Transaction meta data
    • Error Codes..
    • UltraDirect Transaction Samples and Usage
      • Using UltraDirect (Seamless, a real-time transaction)
      • EST (Enhanced Shopping Transaction)
      • Rate Rules
      • Book Reservation
      • Cancellation
      • Book Reservation with session control
      • Modification
      • Booking Storage and Retrieval
      • List of Test Credit Cards
      • Test properties in UAT
      • Guarantee Type and Method Combinations
    • xml ultradirect codes
  • Get in Touch
    • Questions?
Powered by GitBook
On this page
  1. UltraDirect
  2. Ultradirect transaction sets - XML
  3. Enhanced shopping (EST)

Requesting Specific Rates

The EST transaction allows specific types of rates to be requested, such as negotiated, corporate or standard rate plans. The rates associated with a requested rate plan will be identified in the response using the same rate plan code that was sent in the request, together with the status of the requested rate plan.

The following is an example of requesting two standard rate plans: “SNR” (Senior) and “PRO” (Promotional). It also includes a corporate rate plan code “CR1” and associated corporate customer number 12345678, which is only applicable to properties in the XY chain (as defined by the BrandCode attribute of the RateSearch element). The corporate rate plan code and customer number will only be included in transactions to the XY chain’s CRS (i.e. for property XY;54321 in this example).

The MatchingQualifier attribute also specifies that the response should include these and any other public rates. The request only includes one hotel for brevity.

<HotelML xmlns="
http://www.xpegs.com/v2001Q3/HotelML
">
<Head>
<Process DataPath="/HotelML/Form/MultiAvailability"  Function="TI_MultiAvailabilityV1_1" Token="1273480445698"/>
<Route Destination="00" Source="01" RequestedAccuracy="CacheOrSource"/>
</Head>
<Form>
<MultiAvailability>
<Property xml:lang="en" Code="UI;12345"/>
<Property xml:lang="en" Code="XY;54321"/>
<RateCriteria VersionCompliance="Enhanced_V1" NumberOfRooms="1"   MatchingQualifier="ExactAndPublic">
<GuestCount Type="Adult" Count="1"/>
<GuestCount Type="Child" Count="2"/>
<DateRange InDate="2011-09-01" OutDate="2011-09-04"/>
<RateSearch RatePlanCode="SNR" RatePlanType="Standard"/>
<RateSearch RatePlanCode="PRO" RatePlanType="Standard"/>
<RateSearch RatePlanCode="CR1" RatePlanType="Corporate" BrandCode="XY">
<CorpInfo Code="12345678"/>
</RateSearch>
</RateCriteria>
</MultiAvailability>
</Form>
</HotelML>

For the property UI;12345 the response below shows:

  • The “SNR” rate plan is unavailable

  • Rate plan code “T78B” matches the requested “PRO” rate plan and is available. Note that several different rate plans codes in the response may match the requested rate plan, although this example just shows one.

  • Rate plan code “013A” does not have a RequestedRatePlan attribute and so is a ‘public’ rate that was not specifically requested.

For the property XY;54321 the response below shows:

  • The “SNR” and “PRO” rate plans are unavailable

  • The corporate rate plan code CR1 is available. The same rate plan code is used in the request and the response (i.e. there is no mapping for this rate plan code in the CRS).

<HotelML xmlns="
http://www.xpegs.com/v2001Q3/HotelML
">
<Head>
<Route Destination="01" Source="00">
<Operation Action="Create" App="TIDispatcher" AppVer="1.12.40.2.8.1.20.4.2.7.12.1.12.2.2.1.8.1.2.6" DataPath="/HotelML" StartTime="2011-06-
07T13:28:36.475+00:00" Success="true" TotalProcessTime="5854"/>
</Route>
</Head>
<Property xml:lang="en" Code="UI;12345" AvailabilityStatus="Open" DataAge="2011-06-
07T13:28:42.325+00:00" DataOrigin="Source">
<Rate>
<RatePlan RequestedRatePlanCode="SNR" Status="Closed" ClosedReason="Unavailable">
<RatePlan Code="013A" CommissionableStatus="Commissionable" Description="BEST FLEXIBLE RATE " InDate="2011-09-01" OutDate="2011-09-04" Status="Open" TaxInformation="INCLUDED" CredentialsRequired="true">
<Amenity xml:lang="en" Code="BRKFST" Room="true"/>
<RoomType BookableRate="165.00" TaxQualifier="Unknown" Code="1DN" NativeCurrency="GBP" RateChange="true" RateFrequency="Daily" RoomDescription="1 DOUBLE BED
ENSUITE NONSMOKING " TotalRateInclusive="570.00" TotalRateInclusiveCharges="600.00"
TotalTaxes="100.00" TotalSurcharges="30.00" NumberOfPayingGuestsPerRoom="1" NumberOfChildren="2" NumberOfBeds="1" BedType="Double" RoomCategory="Superior" RateCategoryMatchType="Alternative" RoomCountMatchType="Available" AdultCountMatchType="Allowed" ChildCountMatchType="Allowed" BedMatchType="Requested" CribMatchType="Available">
<CommissionPolicy Description="COMMISSIONABLE RATE" Percentage="7.00"/>
<GuaranteePolicy LateArrivalTime="16:00:00.000" Required="true">
<GuaranteeMethod Code="5"/>
</GuaranteePolicy>
<CancelPolicy Date="2010-06-30" Time="16:00:00.000" PenaltyPercentage="50.00" PercentageQualifier="FullStay"/>
<Amenity Code="INTCMP" Description="COMPLIMENTARY INTERNET ACCESS" ExtraCharge="false"/>
<RateChange Date="2010-07-01" Charge="165.00" Currency="GBP"/>
<RateChange Date="2010-07-03" Charge="120.00" Currency="GBP"/>
<ExtraPerson Type="Child" Charge="10.00"/>
<ExtraBed Type="Crib" Charge="5.00"/>
</RoomType>
</RatePlan>
<RatePlan Code="T78B" CommissionableStatus="Commissionable" Description="ADVANCE PURCHASE NO REFUNDS " InDate="2011-09-01" OutDate="2011-09-04" RequestedRatePlanCode="PRO" Status="Open" TaxInformation="INCLUDED" NonRefundableStay="true">
<Amenity xml:lang="en" Code="BRKFST" Room="true"/>
<RoomType BookableRate="149.00" Code="1DN" NativeCurrency="GBP" RateChange="true" RateFrequency="Daily" RoomDescription="1 DOUBLE BED ENSUITE NONSMOKING " TotalRateInclusive="515.00">
<CommissionPolicy Description="Commissionable rate" Amount="105.75"/>
<DepositPolicy Required="true" Amount="596.00" IntervalUnits="Days" TimeInterval="7" IntervalOffsetType="BeforeArrival">
<GuaranteeMethod Code="5"/>
<GuaranteeMethod Code="19"/>
</DepositPolicy>
<CancelPolicy Time="16:00:00.000"/>
</RoomType>
</RatePlan>
</Rate>
</Property>
<Property xml:lang="en" Code="UI;12345" AvailabilityStatus="Open" DataAge="2011-06-
07T13:28:42.325+00:00" DataOrigin="Source">
<Rate>
<RatePlan RequestedRatePlanCode="SNR" Status="Closed" ClosedReason="Unavailable">
<RatePlan RequestedRatePlanCode="PRO" Status="Closed" ClosedReason="Unavailable">
<RatePlan Code="CR1" CommissionableStatus="Commissionable" Description="CORPORATE RATE. INCLUDES BREAKFAST" InDate="2011-09-01" OutDate="2011-09-04" RequestedRatePlanCode="CR1" Status="Open" TaxInformation="INCLUDED" NonRefundableStay="true">
<Amenity xml:lang="en" Code="BRKFST" Room="true"/>
<RoomType BookableRate="125.00" Code="C1D" NativeCurrency="GBP" RateChange="true" RateFrequency="Daily" RoomDescription="STANDARD ROOM, 1 DOUBLE BED" TotalRateInclusive="515.00">
<CommissionPolicy Description="Commissionable rate" Amount="65.05"/>
<DepositPolicy Required="true" Amount="375.00" IntervalUnits="Days" TimeInterval="7" IntervalOffsetType="BeforeArrival"/>
<CancelPolicy Time="16:00:00.000"/>
</RoomType>
</RatePlan>
</Rate>
</Property>
</HotelML>

The above messages include an example of corporate rates. There are two ways in which corporate rates can be requested, which are described below:

Option 1: Use the exact code as required by the hotel

Once the special rate has been negotiated with a chain, the hotel will tell the affiiliate which RatePlanCode to use within the request to invoke the negotiated rate. For example, for negotiated rates with Marriott (MC) the RatePlanCode may be ‘MMM”; while for negotiated rates for Best Western (BW), they may advise to use

the RatePlanCode “BWB” as well as pass the CorpInfo/@Code of “12345”. So if the request is for Marriott, the affiliate would have to pass “MMM”; if the request is for Best Western they would have to use “BWB” and “12345”. The RatePlanType is also required. This would typically be “Standard” or “Corporate” (depending on what the CRS requires) but not “Negotiated” because that is only used for Option 2, below.

And example request message is below:

<HotelML xmlns="
http://www.xpegs.com/v2001Q3/HotelML
">
<Head>
<Process DataPath="/HotelML/Form/MultiAvailability" Function="TI_MultiAvailabilityV1_1" Token="1273480445698"/>
<Route Destination="00" Source="01" RequestedAccuracy="CacheOrSource"/>
</Head>
<Form>
<MultiAvailability>
<Property xml:lang="en" Code="MC;DFWAP"/>
<Property xml:lang="en" Code="BW;44354"/>
<RateCriteria VersionCompliance="Enhanced_V1" NumberOfRooms="1" MatchingQualifier="ExactAndPublic">
<GuestCount Type="Adult" Count="1"/>
<GuestCount Type="Child" Count="2"/>
<DateRange InDate="2011-09-01" OutDate="2011-09-04"/>
<RateSearch RatePlanCode="MMM" RatePlanType="Standard"/>
<RateSearch RatePlanCode="BWB" RatePlanType="Standard">
<CorpInfo Code="12345"/>
</RateSearch>
</RateCriteria>
</MultiAvailability>
</Form>
</HotelML>

Option 2: UltraDirect Account Author Negotiated Rate Processing

RateGain will set up a 3 character negotiated rate plan code, such a “NG1”, for the affiliate to use regardless of hotel chain. The affiliate would advise the hotel chains of their negotiated rate code so that the chains can correctly configure that rates usng the RateGain Account Author tool. The chains would then load and enable access to your negotiated rates in their CRS, as well as set up access to the rates in Account Author. Account Author setup includes authorization for the affiliate to access the NG1 rate code for their brand(s) and translation of that code to their chain-specific rate plan code which will be passed in the transactions sent to them.

Using the above example for Marriott and Best Western, the RatePlanCode will be set to “NG1” and RatePlanType to “Negotiated” regardless of the chain, as shown below:

<HotelML xmlns="
http://www.xpegs.com/v2001Q3/HotelML
">
<Head>
<Process DataPath="/HotelML/Form/MultiAvailability" Function="TI_MultiAvailabilityV1_1"
Token="1273480445698"/>
<Route Destination="00" Source="01" RequestedAccuracy="CacheOrSource"/>
</Head>
<Form>
<MultiAvailability>
<Property xml:lang="en" Code="MC;DFWAP"/>
<Property xml:lang="en" Code="BW;44354"/>
<RateCriteria VersionCompliance="Enhanced_V1" NumberOfRooms="1"
MatchingQualifier="ExactAndPublic">
<GuestCount Type="Adult" Count="1"/>
<GuestCount Type="Child" Count="2"/>
<DateRange InDate="2011-09-01" OutDate="2011-09-04"/>
<RateSearch RatePlanCode="NG1" RatePlanType="Negotiated"/>
</RateCriteria>
</MultiAvailability>
</Form>
</HotelML>

Unavailable Properties

If a requested property is not available then a Property element is returned with an AvailabilityStatus set to “Closed”. It will also include the ClosedReason attribute to indicate why it is closed. An Error element will also be returned, which often provides addition information. The ResponseDataPath attribute of the Error error will include a reference to the specific property ID.

The following is an (edited) example response for a request for three properties where one is unavailable:

<HotelML xmlns="
http://www.xpegs.com/v2001Q3/HotelML
" xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance
">
<Head>
<Route Destination="01" Source="00">
<Operation Action="Create" App="TIDispatcher" AppVer="1.12.40.2.8.1"
DataPath="/HotelML" StartTime="2010-09- 07T08:13:36.688+00:00" Success="true"
TotalProcessTime="228"/>
</Route>
<Error Code="IND12" Description="CTA RESTRICTION ON IN DATE"
ResponseDataPath="Hotel/Property[@Code='XX;1111']" Type="Process"/>
</Head>
<Property xml:lang="en" AvailabilityStatus="Closed" ClosedReason="Unavailable" Code="XX;1111" />
<Property xml:lang="en" Code="XX;2222" AvailabilityStatus="Open">
... Room & Rate Details ....
</Property>
<Property xml:lang="en" Code="XX;3333" AvailabilityStatus="Open">
... Room & Rate Details ....
</Property>
</HotelML>

UltraDirect Cache Processing

The UltraDirect Availability Cache functionality may be used to obtain the rate and availability information for properties in the EST response. Cached single property availability responses may be used by UltraDirect to generate multi-property availability responses and vice versa.

The RequestedAccuracy attribute of the Route element in the message header can be used to specify whether or not the cache should be used. In the following example, the affiliate indicates that responses can either be from the cache or the source (i.e. the hotel’s CRS).

<HotelML xmlns="
http://www.xpegs.com/v2001Q3/HotelML
" xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance
">
<Head>
<Process DataPath="/HotelML/Form/MultiAvailability" Function="TI_MultiAvailabilityV1_1"
Token="1285940187599"/>
<Route Destination="00" Source="01" RequestedAccuracy="CacheOrSource"/>
</Head>
<Form>
<MultiAvailability>
<Property Code="UI;12345"/>
<Property Code="UI;54321"/>
<RateCriteria VersionCompliance="Enhanced_V1" MatchingQualifier="ExactAndPublic"
NumberOfBeds="2" BedType="Queen" NumberOfRooms="1" RoomCategory="Standard">
<GuestCount Type="Adult" Count="1"/>
<GuestCount Type="Child" Count="1" Age="14"/>
<GuestCount Type="Child" Count="1" Age="1"/>
<ExtraBed Type="Crib" Number="1"/>
<DateRange InDate="2010-07-01" OutDate="2010-07-05"/>
<RateSearch RatePlanCode="RAC" RatePlanType="Standard"/>
<RateSearch RatePlanCode="PRO" RatePlanType="Standard"/>
</RateCriteria>
</MultiAvailability>
</Form>
</HotelML>

The response message then indicates for each property whether the information was returned from the cache or source. It also indicates the ‘age’ of the response by providing a timestamp of when the response was created. If it was returned from the cache then the age would be the timestamp for when the response was originally added to the cache. An example is shown below:

<HotelML xmlns="
http://www.xpegs.com/v2001Q3/HotelML
" xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance
">
<Head>
<Route Destination="01" Source="00">
<Operation Action="Create" App="TIDispatcher" AppVer="1.12.40.2.8.1" DataPath="/HotelML" StartTime="2010-06-07T08:13:36.688+00:00" Success="true" TotalProcessTime="228"/>
</Route>
</Head>
<Property xml:lang="en" Code="UI;12345"  DataAge="2011-06-30-02T09:27:04.173-00:00"  DataOrigin="Cache" AvailabilityStatus="Open">
... Room & Rate Details ....
</Property>
<Property xml:lang="en" Code="UI;54321" DataAge="2011-06-30-08T14:28:01.268-00:00"
DataOrigin="Source" AvailabilityStatus="Open">
... Room & Rate Details ....
</Property>
</HotelML>

If the requested accuracy is not available for a requested property then the Property element is returned with AvailabilityStatus set to “Unknown”. For example, if the previous request message was changed so that RequestedAccuracy=”CacheOnly” and there is no matching transaction in the cache for property UI;54321 then the response would be as follows:

<HotelML xmlns="
http://www.xpegs.com/v2001Q3/HotelML
" xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance
">
<Head>
<Route Destination="01" Source="00">
<Operation Action="Create" App="TIDispatcher" AppVer="1.12.40.2.8.1" DataPath="/HotelML" StartTime="2010-06-
07T08:13:36.688+00:00" Success="true" TotalProcessTime="228"/>
</Route>
<Error Code="CHE06" Description="RequestedAccuracy.CacheOnly - No cached data matching the requested criteria for
property: UI;54321" ResponseDataPath="Hotel/Property[@Code=' UI;54321']"Type="Process"/>
</Head>
<Property xml:lang="en" Code="UI;12345" Token="1275898416589" DataAge="2010-06-30-08T14:28:01.268-00:00"
DataOrigin="Cache" AvailabilityStatus="Open">
... Room & Rate Details ....
<Property xml:lang="en" Code="UI;54321"Token="1275898416589" AvailabilityStatus="Unknown" />
</HotelML>

Timeouts and Multipart Responses

Affiliates can specify their own timeout value in the MultiAvailability request, which will ensure that they do not have to wait for slow CRSs before receiving a response. The Timeout attribute of the Process element in the message is used for this purpose.

UltraDirect also has a standard timeout value that specifies the maximum time it will wait for a response from the CRS, which is currently set to 15 (fifteen) seconds. The timeout value specified by the affiliate must be less than the UltraDirect value (if it is longer, the UltraDirect value will be used instead).

The affiliate can also specify whether they accept multipart responses from UltraDirect by setting HotelML/Head/Process/AcceptMultipartResponse=”true”. If this is set, UltraDirect may return the response in two parts – the first contains properties for which results have been obtained when the affiliate-specified timeout expires and the second part contains results for the remaining properties. These two responses are implemented using the ‘chunked’ transfer encoding mechanism in HTTP/1.1.

The timeout and multipart response functionality is only available when enhanced MultiAvailability is requested (i.e. by setting RateCriteria/@VersionCompliance=” Enhanced_V1”).

The following flowchart specifies the logic that is used to decide whether one or two responses are returned:

The following example request message specifies that the affiliate requires a response within 2 seconds and it will accept multiple responses (i.e. chunked HTTP transfer encoding).

<HotelML xmlns="
http://www.xpegs.com/v2001Q3/HotelML
">
<Head>
<Process DataPath="/HotelML/Form/MultiAvailability" Function="TI_MultiAvailabilityV1_1"
Token="1273480445698" Timeout="2000"  AcceptMultipartResponse="true"/>
<Route Destination="00" Source="01"/>
</Head>
<Form>
<MultiAvailability>
<Property xml:lang="en" Code="XX;1111"/>
<Property xml:lang="en" Code="XX;2222"/>
<Property xml:lang="en" Code="XX;3333"/>
<Property xml:lang="en" Code="YY;4444"/>
<Property xml:lang="en" Code="ZZ;5555"/>
<RateCriteria VersionCompliance="Enhanced_V1" CalculationMethod="Average" MatchingQualifier="ExactAndPublic" NumberOfAdults="2" NumberOfRooms="1">
<DateRange InDate="2010-10-01" OutDate="2010-10-03"/>
<RateSearch RatePlanCode="RAC" RatePlanType="Standard"/>
<RateSearch RatePlanCode="PRO" RatePlanType="Standard"/>
</RateCriteria>
</MultiAvailability>
</Form>
</HotelML>

In this scenario, assume that only the first 3 properties have responded within 2 seconds. The HTTP/1.1 response will include the following header to denote that this is a multi-part response:

Transfer-Encoding: chunked

The first part (chunk) will contain the following complete HotelML message:

<HotelML xmlns="
http://www.xpegs.com/v2001Q3/HotelML
" xmlns:xsi="
http://www.w3.org/2001/XMLSchema-
 instance">
<Head>
<Route Destination="01" Source="00">
<Operation Action="Create" App="TIDispatcher" AppVer="1.12.40.2.8.1" DataPath="/HotelML" StartTime="2010-09-07T08:13:36.688+00:00" Success="true" TotalProcessTime="228"/>
</Route>
</Head>
<Property xml:lang="en" Code="XX;1111" Token="1275898416589" AvailabilityStatus="Open">
... Room & Rate Details ....
</Property>
<Property xml:lang="en" Code="XX;2222" Token="1275898416589" AvailabilityStatus="Open">
... Room & Rate Details ....
</Property>
<Property xml:lang="en" Code="XX;3333" Token="1275898416589" AvailabilityStatus="Open">
... Room & Rate Details ....
</Property>
</HotelML>

Now assume that results are subsequently obtained for YY;4444 but there was no response from the CRS of brand ZZ by the time the standard UltraDirect timeout expired (13 seconds after the first response; 15 seconds in total). Therefore the second chunk would contain the following:

<HotelML xmlns="
http://www.xpegs.com/v2001Q3/HotelML
" xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance
">
<Head>
<Route Destination="01" Source="00">
<Operation Action="Create" App="TIDispatcher" AppVer="1.12.40.2.8.1" DataPath="/HotelML" StartTime="2010-09- 07T08:13:41.688+00:00" Success="true" TotalProcessTime="525"/>
</Route>
</Head>
<Property xml:lang="en" Code="YY;4444" Token="1275898416589" AvailabilityStatus="Open">
... Room & Rate Details ....
</Property>
<Property xml:lang="en" Code="ZZ;5555" Token="1275898416589" AvailabilityStatus="Unknown"/>
</HotelML>

Note that the StartTime attribute of Operation for the two responses are the same (i.e. the start time of the transaction) but the TotalProcessTime for the second response is the time to process the second response, not the total processing time for the whole transaction.

Finally, a zero content-length third chunk will be returned to denote the end of the HTTP response. Another example is shown below. In this scenario, the affiliate has specified a timeout of 5 seconds but they only want a single response (AcceptMultipartResponse="false").

<HotelML xmlns="
http://www.xpegs.com/v2001Q3/HotelML
">
<Head>
<Process DataPath="/HotelML/Form/MultiAvailability" Function="TI_MultiAvailabilityV1_1"
Token="1273480445698" Timeout="5000"  AcceptMultipartResponse="false"/>
<Route Destination="00" Source="01"/>
</Head>
<Form>
<MultiAvailability>
<Property xml:lang="en" Code="XX;1111"/>
<Property xml:lang="en" Code="XX;2222"/>
<Property xml:lang="en" Code="XX;3333"/>
<Property xml:lang="en" Code="YY;4444"/>
<Property xml:lang="en" Code="ZZ;5555"/>
<RateCriteria VersionCompliance="Enhanced_V1" CalculationMethod="Average" MatchingQualifier="ExactAndPublic" NumberOfAdults="2" NumberOfRooms="1">
<DateRange InDate="2010-10-01" OutDate="2010-10-03"/>
<RateSearch RatePlanCode="RAC" RatePlanType="Standard"/>
<RateSearch RatePlanCode="PRO" RatePlanType="Standard"/>
</RateCriteria>
</MultiAvailability>
</Form>
</HotelML>

In this scenario, the following response would be returned:

<HotelML xmlns="
http://www.xpegs.com/v2001Q3/HotelML
" xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance
">
<Head>
<Route Destination="01" Source="00">
<Operation Action="Create" App="TIDispatcher" AppVer="1.12.40.2.8.1" DataPath="/HotelML" StartTime="2010-09- 07T08:13:36.688+00:00" Success="true" TotalProcessTime="228"/>
</Route>
</Head>
<Property xml:lang="en" Code="XX;1111" Token="1275898416589" AvailabilityStatus="Open">
... Room & Rate Details ....
</Property>
<Property xml:lang="en" Code="XX;2222" Token="1275898416589" AvailabilityStatus="Open">
... Room & Rate Details ....
</Property>
<Property xml:lang="en" Code="XX;3333" Token="1275898416589" AvailabilityStatus="Open">
... Room & Rate Details ....
</Property>
<Property xml:lang="en" Code="YY;4444" Token="1275898416589" AvailabilityStatus="Unknown"/>
<Property xml:lang="en" Code="ZZ;5555" Token="1275898416589" AvailabilityStatus="Unknown"/>
</HotelML>

Notice that this is different from the first response in the example of a chunked response given previously i.e. it contains a Property element for every property in the request message, whereas the first chunked response only had Property elements for properties that had returned results.

Language Processing

It is possible to specify the preferred language to be used for room/rate/policy descriptive text fields in the response by using the Locale element.

An example message that requests responses in French is shown below:

<HotelML xmlns="
http://www.xpegs.com/v2001Q3/HotelML
" xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance
">
<Head>
<Process DataPath="/HotelML/Form/MultiAvailability" Function="TI_MultiAvailabilityV1_1" Token="1285940187599"/>
<Route Destination="00" Source="01" RequestedAccuracy="CacheOrSource"/>
</Head>
<Form>
<MultiAvailability>
<Locale Language="FR"/>
<Property Code="XX;1234"/>
<Property Code="UI;12345"/>
<Property Code="UA;98765"/>
<RateCriteria VersionCompliance="Enhanced_V1" MatchingQualifier="ExactAndPublic" NumberOfBeds="2" BedType="Queen" NumberOfRooms="1" RoomCategory="Standard">
<GuestCount Type="Adult" Count="1"/>
<GuestCount Type="Child" Count="1" Age="14"/>
<GuestCount Type="Child" Count="1" Age="1"/>
<ExtraBed Type="Crib" Number="1"/>
<DateRange InDate="2010-07-01" OutDate="2010-07-05"/>
<RateSearch RatePlanCode="RAC" RatePlanType="Standard"/>
<RateSearch RatePlanCode="PRO" RatePlanType="Standard"/>
</RateCriteria>
</MultiAvailability>
</Form>
</HotelML>

If the hotel’s CRS supports the requested language (as defined in the RateGain configuration details for the hotel chain) then RateGain will pass the requested language code to the CRS, which should then return the information in the requested language if available for the property; otherwise it will return it in English or the hotel’s native language.

However, if the hotel’s CRS does not support the requested language, RateGain will change the requested language code to English when sending the transaction to the hotel’s CRS.

Since a hotel’s CRS may return the response in an ‘alternate’ language which is neither the requested language nor English (e.g. the hotel’s native language), RateGain can also configure for each UltraDirect affiliate whether or not they can accept responses in an alternate language. In the following example response, the affiliate is configured to only accept responses in the requested language or English – so for property UA;98765 (which returned the response in, say, German), it returns an error and an AvailabilityStatus of “Unknown”. For property XX;1234 the response is returned in the requested language (French) and property UI;12345 is returned in English because French is not available.

<HotelML xmlns="
http://www.xpegs.com/v2001Q3/HotelML
" xmlns:xsi="
http://www.w3.org/2001/XMLSchema-
 instance">
<Head>
<Route Destination="01" Source="00">
<Operation Action="Create" App="TIDispatcher" AppVer="1.12.40.2.8.1" DataPath="/HotelML" StartTime="2010- 06-07T08:13:36.688+00:00" Success="true" TotalProcessTime="228"/>
</Route>
<Error Code="RLC10" Description="The returned language code does not match the language that was originally requested for property UA;98765" Type="Process"/>
</Head>
<Property xml:lang="fr" Code="XX;1234" Token="1016730128803" AvailabilityStatus="Open">
<Rate>
<RatePlan Code="RA1" CommissionableStatus="Commissionable" Description=" Le meilleur taux sans restriction" InDate="2010-07-01" OutDate="2010-07-05">
<RoomType BookableRate="89.00" Code="ROH" NativeCurrency="EUR" RateFrequency="Daily" RoomDescription=" Pièce pour la pièce de 1 à 2 personnes seulement, Pers-NT de déjeuner : 8.00 EUR " TotalRate="89.00" TotalRateInclusive="89.00">
<CommissionPolicy Amount="8.90"/>
<DepositPolicy Required="true" Amount="596.00" IntervalUnits="Days" TimeInterval="7" IntervalOffsetType="BeforeArrival">
<!-- Credit card -->
<GuaranteeMethod Code="5"/>
<!-- Travel Agency ID -->
<GuaranteeMethod Code="19"/>
</DepositPolicy>
<CancelPolicy Time="16:00:00.000"/>
</RoomType>
</RatePlan>
</Rate>
</Property>
<Property xml:lang="en" Code="UI;12345" Token="1275898416589" DataAge="2010-06-30-08T14:28:01.268-00:00" DataOrigin="Cache"
AvailabilityStatus="Open">
<Rate>
<RatePlan Code="013A" CommissionableStatus="Commissionable" Description="BEST FLEXIBLE RATE " InDate="2010-07-01" OutDate="2010-07-05" RequestedRatePlanCode="RAC" Status="Open" TaxInformation="INCLUDED" CredentialsRequired="true">
<Amenity xml:lang="en" Code="BRKFST" Room="true"/>
<RoomType BookableRate="165.00" TaxQualifier="Unknown" Code="1DN" NativeCurrency="GBP" RateChange="true" RateFrequency="Daily" RoomDescription="1 DOUBLE BED ENSUITE NONSMOKING " TotalRateInclusive="570.00" TotalRateInclusiveCharges="600.00" TotalTaxes="100.00" TotalSurcharges="30.00" NumberOfPayingGuestsPerRoom="1" NumberOfChildren="2" NumberOfBeds="1" BedType="Double" RoomCategory="Superior" RateCategoryMatchType="Alternative" RoomCountMatchType="Available" AdultCountMatchType="Allowed" ChildCountMatchType="Allowed" BedMatchType="Requested" CribMatchType="Available">
<CommissionPolicy Description="Commissionable rate" Percentage="7.00"/>
<GuaranteePolicy LateArrivalTime="16:00:00.000" Required="true">
<!-- Credit card -->
<GuaranteeMethod Code="5"/>
</GuaranteePolicy>
<CancelPolicy Date="2010-06-30" Time="16:00:00.000" PenaltyPercentage="50.00" PercentageQualifier="FullStay"/>
</RoomType>
</RatePlan>
<RatePlan Code="T78B" CommissionableStatus="Commissionable" Description="ADVANCE PURCHASE NO REFUNDS " InDate="2010-07-01" OutDate="2010-07-05" RequestedRatePlanCode="PRO" Status="Open" TaxInformation="INCLUDED" NonRefundableStay="true">
<Amenity xml:lang="en" Code="BRKFST" Room="true"/>
<RoomType BookableRate="149.00" Code="1DN" NativeCurrency="GBP" RateChange="true" RateFrequency="Daily" RoomDescription="1 DOUBLE BED ENSUITE NONSMOKING " TotalRateInclusive="515.00">
<CommissionPolicy Description="Commissionable rate" Amount="105.75"/>
<DepositPolicy Required="true" Amount="596.00" IntervalUnits="Days" TimeInterval="7" IntervalOffsetType="BeforeArrival">
<!-- Credit card -->
<GuaranteeMethod Code="5"/>
<!-- Travel Agency ID -->
<GuaranteeMethod Code="19"/>
</DepositPolicy>
<CancelPolicy Time="16:00:00.000"/>
</RoomType>
</RatePlan>
</Rate>
</Property>
<Property xml:lang="en" Code="UA;98765" Token="1275898416589" AvailabilityStatus="Unknown" >
</HotelML>

PreviousEnhanced shopping (EST)NextRequest message format

Last updated 2 months ago