Pricing Models for Rates & Availability

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

Ensure that all your room rates (products) are under the the correct pricing model before setting prices.

If unclear, ask Booking.com

Each pricing model has particular technical requirements. Contact our Connectivity Support team to learn more.

Retrieving Pricing Model

To retrieve pricing model for all your room rates (products), use the roomrates endpoint with the Include extra info feature on. You can find it in pricing[@type]. Values can be Standard, RLO, OBP, LOS

Changing Pricing Model

To change your pricing model per hotel, go to the Booking.com Connectivity Portal (Properties tab) and use the "Change Pricing Model" tool.
You can also use the OTA_HotelDescriptiveContentNotif endpoint and set the PricingType element.

Standard Model (also known as Default pricing)

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

  • A default price for the maximum number of adult guests.
  • A price for a single adult guest.

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

You can use 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 Standard 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 Standard 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 Standard model, but only set a price for maximum occupancy. Don't set an additional price for a single adult, like you would with the Standard 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.

Length-of-Stay (LOS)

Under the LOS model, you must specify the check-in date, the number of occupants, and most importantly the prices for a room that correspond to a particular number of nights.

You can use either the csv or OTA endpoint. Read on for examples.

CSV Example

To send a request to the /csv/los_pricing endpoint, you must use comma-separated values to specify: Check-in date Level of occupancy Room id Rate id Currency code Prices list

You can see an example below:

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

OTA Example

To send a request to the /ota/OTA_HotelRateAmountNotif endpoint, you must use: The Rate[@UnitMultiplier] field to specify the length of stay 1-2.
The BasedByGuestAmt[@NumberOfGuests] field to specify the number of occupants 1-2.
* The BasedByGuestAmt[@AmountBeforeTax] field to specify price per night for specified number of occupants.

In this example the total price for 2 guests staying for 2 nights is (length of stay) * (price per night for 2 guests for length of stay 2) = 2 * 290 = 580.

<!-- This is an excerpt and not a working sample request. -->
      <Rates>
        <Rate RateTimeUnit="Day" UnitMultiplier="1">
         <BaseByGuestAmts>
            <BaseByGuestAmt AmountBeforeTax="300" NumberOfGuests="1" />
            <BaseByGuestAmt AmountBeforeTax="310" NumberOfGuests="2" />
         </BaseByGuestAmts>
        </Rate>
        <Rate RateTimeUnit="Day" UnitMultiplier="2">
         <BaseByGuestAmts>
            <BaseByGuestAmt AmountBeforeTax="280" NumberOfGuests="1" />
            <BaseByGuestAmt AmountBeforeTax="290" NumberOfGuests="2" />
         </BaseByGuestAmts>
        </Rate>
      </Rates>
<!-- End of excerpt. -->

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