Pricing models for Rates & Availability

If you use the Rates & Availability API, the pricing model you use determines how you must construct requests. This page gives details and examples for each pricing model.

Each pricing model has particular technical requirements. Our Connectivity Support team can tell you more about these.

Maximum/single model

Under the maximum/single model, you specify two prices for every combination of room type (except single rooms) and date:

  • a default price for when the maximum number of adult guests stay in the room;
  • a price for when a single adult guest stays in the room.

For single rooms, where single occupancy and maximum occupancy are the same, you only specify a price for maximum occupancy.

You can use either the B.XML or OTA endpoint to specify availability and prices. Below are examples for each endpoint.

Determining maximum room occupancy

You retrieve the maximum occupancy for existing rooms by making an /xml/roomrates request and checking the field room[@max_persons] in the response.

To specify the maximum number of adults that can stay in a room, send an ota/OTA_HotelProductNotif request and use the field RoomType[@MaxOccupancy].

B.XML example for maximum/single model

If you're using the /xml/availability endpoint, use price to specify the price for maximum occupancy, and price1 to specify the price for single occupancy:

<request>
  <version>1.0</version>
  <room id="1000202">
    <date value="2018-08-28">
      <rate id="12345"/>
      <price>150.00</price>
      <!-- <price> is the default price for maximum occupancy. -->
      <price1>135.00</price1>
      <!-- <price1> is the price for one adult. -->
    </date>
  </room>
</request>

For field details and more elaborate samples, see the /xml/availability page.

OTA example for maximum/single model

If you're using the /ota/OTA_HotelRateAmountNotif endpoint, specify the prices inside BaseByGuestAmt elements:

<!-- This is an excerpt and not a working sample request. -->
<Rates>
  <Rate>
    <BaseByGuestAmts>
      <BaseByGuestAmt
        AmountAfterTax="4500"
        DecimalPlaces="2"/>
        <!-- A <BaseByGuestAmt/> element without a @NumberOfGuests
             attribute specifies the default price for maximum occupancy. -->
      <BaseByGuestAmt
        AmountAfterTax="3800"
        DecimalPlaces="2"
        NumberOfGuests="1"/>
        <!-- A <BaseByGuestAmt/> element with @NumberOfGuests="1"
             specifies the price for one adult. -->
    </BaseByGuestAmts>
  </Rate>
</Rates>
<!-- End of excerpt. -->

For field details and more elaborate samples, see the /ota/OTA_HotelRateAmountNotif page.

Derived pricing model

Under the derived pricing model, you specify a price for a standard number of occupants, and one or more "offsets" to derive prices for other numbers of occupants. When the number of occupants is different than the standard number, we add or subtract the offset from the standard price. An offset can be a percentage or an amount.

With the derived pricing model, you set prices in two steps:

  1. Specify prices with /xml/availability or /ota/OTA_HotelRateAmountNotif.
  2. Specify offsets with /xml/derivedprices.

Step 1 — Specify standard price

For this step, refer to the examples under Maximum/single model, but only set a price for maximum occupancy. Don't set an additional price for a single adult, like you would with the maximum/single model.

When you have specified prices for your rooms, you can specify the desired offsets.

Step 2 — Specify offsets

The following request to /xml/derivedprices specifies that:

  • the standard price applies when 2 people stay in the room;
  • when 1 person stays in the room, the price is 20% lower;
  • when 3 people stay in the room, the price is 20% higher.
<request>
  <rooms>
    <room id="1000202">
      <rates>
        <rate id="12345" leading_occupancy="2">
          <occupancy persons="1" percentage="-20" />
          <occupancy persons="3" percentage="20" />
        </rate>
      </rates>
    </room>
  </rooms>
</request>

For details about these fields and others, see the /xml/derivedprices page.

  <!-- <Rates>
    <Rate>
      <BaseByGuestAmts>
        <BaseByGuestAmt NumberOfGuests="1" AmountBeforeTax="10000" DecimalPlaces="2" />
        <BaseByGuestAmt NumberOfGuests="2" AmountBeforeTax="12000" DecimalPlaces="2" />
        <BaseByGuestAmt NumberOfGuests="3" AmountBeforeTax="14000" DecimalPlaces="2" />
      </BaseByGuestAmts>
    </Rate>
  </Rates> -->

Length-of-stay model

Under the length-of-stay (LOS) model, you specify a room price for every possible combination of length of stay (up to 30 days), number of occupants, and check-in date. You provide all this information as comma-separated values, like this:

{check-in date},{number of occupants},{room ID},{rate ID},{price for 1 night},{price for 2 nights},{price for 3 nights},...

Learn about this on the /csv/los_pricing page.

If you use the LOS model, you cannot specify availability restrictions.