Managing flexible children rates

Using Flexible child rates, you can set up more advanced forms of pricing for children:

  • Prices per child or staggered pricing (within the same age range or age bucket)
  • Prices on the roomrate and roomrate-date (inventory) level
  • Fixed and percentage-based prices: Properties on the OBP (Occupancy-based pricing) or LOS (length-of-stay) model cannot make use of percentage-based children pricing.

→ To set up or update a property's children policy, see managing a children policy.
→ To see an example of how to use percentage-based pricing, see Request body example: age buckets (roomrate with percentage)

Roomrate versus roomrate-date level

You can set and update children pricing in one of the following two ways:

  • Roomrate level: This enables you to set prices for children before pushing inventory (availability).
  • Roomrate-date level: This enables you to set prices for children when you push inventory (availability).

Either support percentage-based and staggered (per-child) pricing, with roomrate-level also supporting percentage-based pricing. However, keep in mind that children prices set on the roomrate-date level overwrite the prices set on the roomrate level (if applicable).

Managing children pricing (roomrate level)

Managing children pricing on the roomrate level includes:

Sending and updating children prices

POST https://supply-xml.booking.com/hotels/ota/OTA_HotelProductNotif

The POST /ota/OTA_HotelProductNotif endpoint enables you to send children prices in the following ways:

You need to enable feature Flexible children prices from the Feature management page.

Creating or updating

When creating a roomrate you set ProductNotifType to New. If you want to update a roomrate, you set ProductNotifType to Overlay. If the roomrate already exists, you must set ProductNotifType to Overlay when setting up children prices.

Request body parameters

The following table describes what elements you must add in the request body:

Element Attribute Description Type Required/Optional Notes
OTA_HotelProductNotifRQ Contains the HotelProducts array. object required
> HotelProducts Contains the HotelProduct objects. array required
HotelCode Specifies the unique ID of the property you create roomrates for. integer required
>> HotelProduct Contains the roomrate information. object required
ProductNotifType Specifies whether the request is to create a roomrate (New) or modify an existing one (Overlay). enum required Possible values are New and Overlay. You must use New to create a roomrate.
>>> RoomTypes Contains a RoomType object. object required
>>>> RoomType Contains the room type information. object required
RoomTypeCode Specifies the room type id. integer required
>>> RatePlans Contains a RatePlan object. object required
>>>> RatePlan Contains the rate plan information. object required
RatePlanCode Specifies the rate plan id. integer required
>>> AdditionalGuestAmounts Contains the AdditionalGuestAmount elements. array required
>>>> AdditionalGuestAmount Contains the children pricing details. object required
AgeQualifyingCode Specifies that the prices are for children. integer required You must use 8 to signal that the prices are for children only. Note that you cannot set adult prices here, but only within the BaseByGuestAmts object (see example).
AgeBucketID Specifies the ID of the property-level age bucket. integer required* You must either use AgeBucketID or MinAge with MaxAge. However, the MinAge to MaxAge age range must match an existing age bucket age range.
MinAge Specifies the beginning of an age range. integer required* You must either use AgeBucketID or MinAge with MaxAge. However, the MinAge to MaxAge age range must match an existing age bucket age range.
MaxAge Specifies the end of an age range and is inclusive. integer required* You must either use AgeBucketID or MinAge with MaxAge. However, the MinAge to MaxAge age range must match an existing age bucket age range.
Amount Specifies the price for a child within a certain age bucket. integer required* The price cannot exceed the adult price for the roomrate. You must use either Amount and DecimalPlaces, or Percent alone.
DecimalPlaces Specifies the number of decimal places to apply to Amount. integer optional The default value is 0, which means the value of Amount is without a decimal point.
Amount Specifies the price for a child within a certain age bucket. integer required* The price cannot exceed the adult price for the roomrate. You must use either Amount and DecimalPlaces, or Percent alone.
Percent Specifies the price for the child as a percentage of the adult price. integer required Possible value between 0 and 100. You must use either Amount and DecimalPlaces, or Percent alone.
AdditionalGuestNumber Specifies the order of prices within the same age bucket. integer optional This means that you can set different prices per child within the same age bucket age range. For example: Price for 1 (first child) is 5000, while price for 2 (second child) is 2500, and 3 (third child) is free (0). Default value is 0, meaning all prices are the same for children in the specified age bucket.

Request body example: age buckets (roomrate)

The following is an example of the request body with fixed amounts:

<OTA_HotelProductNotifRQ>
  <HotelProducts HotelCode="64231">
    <HotelProduct ProductNotifType="New">
      <RoomTypes>
        <RoomType RoomTypeCode="6423112"/>
      </RoomTypes>
      <RatePlans>
        <RatePlan RatePlanCode="12483478"/>
      </RatePlans>
      <AdditionalGuestAmounts>
        <AdditionalGuestAmount AgeQualifyingCode="8" AgeBucketID="1" Amount="0" DecimalPlaces="2"/>
        <AdditionalGuestAmount AgeQualifyingCode="8" AgeBucketID="2" Amount="2500" DecimalPlaces="2"/>
        <AdditionalGuestAmount AgeQualifyingCode="8" AgeBucketID="3" Amount="4500" DecimalPlaces="2"/>
      </AdditionalGuestAmounts>
    </HotelProduct>
  </HotelProducts>
</OTA_HotelProductNotifRQ>

Request body example: age buckets (roomrate with percentage)

The following is an example of the request body with percentage:

<OTA_HotelProductNotifRQ>
  <HotelProducts HotelCode="64231">
    <HotelProduct ProductNotifType="New">
      <RoomTypes>
        <RoomType RoomTypeCode="6423112"/>
      </RoomTypes>
      <RatePlans>
        <RatePlan RatePlanCode="12483478"/>
      </RatePlans>
      <AdditionalGuestAmounts>
        <AdditionalGuestAmount AgeQualifyingCode="8" AgeBucketID="1" Percentage="50"/>
        <AdditionalGuestAmount AgeQualifyingCode="8" AgeBucketID="2" Percentage="30"/>
        <AdditionalGuestAmount AgeQualifyingCode="8" AgeBucketID="3" Percentage="20"/>
      </AdditionalGuestAmounts>
    </HotelProduct>
  </HotelProducts>
</OTA_HotelProductNotifRQ>

Request body example: age range (roomrate)

The following is an incomplete example of the request body:

<OTA_HotelProductNotifRQ>
  <HotelProducts HotelCode="64231">
    <HotelProduct ProductNotifType="New">
      <RoomTypes>
        <RoomType RoomTypeCode="6423112"/>
      </RoomTypes>
      <RatePlans>
        <RatePlan RatePlanCode="12483478"/>
      </RatePlans>
      <AdditionalGuestAmounts>
        <AdditionalGuestAmount AgeQualifyingCode="8" MinAge="0" MaxAge="3" Amount="0" DecimalPlaces="2"/>
        <AdditionalGuestAmount AgeQualifyingCode="8" MinAge="4" MaxAge="12" Amount="2500" DecimalPlaces="2"/>
        <AdditionalGuestAmount AgeQualifyingCode="8" MinAge="13" MaxAge="17" Amount="4500" DecimalPlaces="2"/>
      </AdditionalGuestAmounts>
    </HotelProduct>
  </HotelProducts>
</OTA_HotelProductNotifRQ>

Request body example: staggered (roomrate)

The following is an incomplete example of the request body:

<OTA_HotelProductNotifRQ>
  <HotelProducts HotelCode="64231">
    <HotelProduct ProductNotifType="New">
      <RoomTypes>
        <RoomType RoomTypeCode="6423112"/>
      </RoomTypes>
      <RatePlans>
        <RatePlan RatePlanCode="12483478"/>
      </RatePlans>
      <AdditionalGuestAmounts>
        <AdditionalGuestAmount AgeQualifyingCode="8" MinAge="0" MaxAge="3" AdditionalGuestNumber="1" Amount="0" DecimalPlaces="2"/>
        <AdditionalGuestAmount AgeQualifyingCode="8" MinAge="0" MaxAge="3" AdditionalGuestNumber="2" Amount="500" DecimalPlaces="2"/>
        <AdditionalGuestAmount AgeQualifyingCode="8" MinAge="0" MaxAge="3" AdditionalGuestNumber="3" Amount="1000" DecimalPlaces="2"/>
        <AdditionalGuestAmount AgeQualifyingCode="8" MinAge="4" MaxAge="12" AdditionalGuestNumber="1" Amount="2000" DecimalPlaces="2"/>
        <AdditionalGuestAmount AgeQualifyingCode="8" MinAge="4" MaxAge="12" AdditionalGuestNumber="2" Amount="2500" DecimalPlaces="2"/>
        <AdditionalGuestAmount AgeQualifyingCode="8" MinAge="4" MaxAge="12" AdditionalGuestNumber="3" Amount="3000" DecimalPlaces="2"/>
        <AdditionalGuestAmount AgeQualifyingCode="8" MinAge="13" MaxAge="17" AdditionalGuestNumber="1" Amount="4000" DecimalPlaces="2"/>
        <AdditionalGuestAmount AgeQualifyingCode="8" MinAge="13" MaxAge="17" AdditionalGuestNumber="2" Amount="4500" DecimalPlaces="2"/>
        <AdditionalGuestAmount AgeQualifyingCode="8" MinAge="13" MaxAge="17" AdditionalGuestNumber="3" Amount="5000" DecimalPlaces="2"/>
      </AdditionalGuestAmounts>
    </HotelProduct>
  </HotelProducts>
</OTA_HotelProductNotifRQ>

Response body example

The following is a successful response body example:

<OTA_HotelProductNotifRS>
  <Success />
</OTA_HotelProductNotifRS>

Response body elements

The following table describes the response elements:

Element Description Type Notes
OTA_HotelProductNotifRS Contains the response data. object
> success Indicates the success of the request. object
ruid Specifies the unique ID of the request. string You can send this ID to Booking.com customer support if you run into an issue. This can help to understand what went wrong.

Retrieving children prices

POST https://supply-xml.booking.com/hotels/xml/roomrates

The POST /xml/roomrates endpoint enables you to retrieve existing children prices per property on the roomrate level.

You need to enable feature Flexible children prices from the Feature management page.

Request body parameters

The following table describes the body parameters that you must add.

Parameter Attribute Description Type Required/Optional Notes
request Contains the request elements. object required
> hotel_id Specifies the unique ID of the property. integer required

Request body example

<request>
  <hotel_id>6238539</hotel_id>
</request>

Response body example

The following is a successful response body example:

<rooms>
   <room id="696334301" hotel_id="6963343" hotel_name="hotel_name" max_children="0" room_name="Two-Bedroom House">
       <rates>
           <rate id="7473" fixed_occupancy="4" max_persons="4" policy="General" policy_id="104557280" rate_name="Ashling - 4NIGHTSP">
               ...
               <pricing type="RLO">
                   <additional_guests>
                       <price type="child" additional_guest_number="1" from_age="1" to_age="5" age_bucket_id="1" additional="44"/>
                       <price type="child" additional_guest_number="2" from_age="1" to_age="5" age_bucket_id="1" percentage="33"/>
                   </additional_guests>
               </pricing>
           </rate>
        </rates>
    </room>
</rooms>

Response body elements

The following table only describes the response body elements that concern children pricing.

Parameter Attribute Description Type Notes
>>>>> additional_guests Contains the price elements for children. array
>>>>>> price Contains the children pricing details. object
type Specifies that the prices are for children. string You must use child to signal that the prices are for children only.
additional_guest_number Specifies the order of prices within the same age bucket. integer This means that you can set different prices per child within the same age bucket age range. For example: Price for 1 (first child) is 5000, while price for 2 (second child) is 2500, and 3 (third child) is free (0). Default value is 0, meaning all prices are the same for children in the specified age bucket.
age_bucket_id Specifies the ID of the property-level age bucket. integer
from_age Specifies the beginning of an age range. integer
to_age Specifies the end of an age range and is inclusive. integer
additional Specifies the fixed price for a child within a certain age bucket. integer
percentage Specifies the price for the child as a percentage of the adult price. integer Possible value between 0 and 100.

Removing children prices

POST https://supply-xml.booking.com/hotels/ota/OTA_HotelProductNotif

The POST /ota/OTA_HotelProductNotif endpoint enables you to remove children prices by sending an empty AdditionalGuestAmounts object.

Request body parameters

The following table the body parameters that you must add.

Element Attribute Description Type Required/Optional Notes
OTA_HotelProductNotifRQ Contains the HotelProducts array. object required
> HotelProducts Contains the HotelProduct objects. array required
HotelCode Specifies the unique ID of the property you create roomrates for. integer required
>> HotelProduct Contains the roomrate information. object required
ProductNotifType Specifies whether the request is to create a roomrate (New) or modify an existing one (Overlay). enum required Possible values are New and Overlay. You must use New to create a roomrate.
>>> RoomTypes Contains a RoomType object. object required
>>>> RoomType Contains the room type information. object required
RoomTypeCode Specifies the room type id. integer required
>>> RatePlans Contains a RatePlan object. object required
>>>> RatePlan Contains the rate plan information. object required
RatePlanCode Specifies the rate plan id. integer required
>>> AdditionalGuestAmounts Contains the AdditionalGuestAmount elements. array required

Request body example

<OTA_HotelProductNotifRQ>
  <HotelProducts HotelCode="64231">
    <HotelProduct ProductNotifType="New">
      <RoomTypes>
        <RoomType RoomTypeCode="6423112"/>
      </RoomTypes>
      <RatePlans>
        <RatePlan RatePlanCode="12483478"/>
      </RatePlans>
      <AdditionalGuestAmounts>
      </AdditionalGuestAmounts>
    </HotelProduct>
  </HotelProducts>
</OTA_HotelProductNotifRQ>

Response body example

The following is a successful response body example:

<ok></ok>

Response body elements

The following table describes the response elements:

Element Description Type Notes
OTA_HotelProductNotifRS Contains the response data. object
> success Indicates the success of the request. object
ruid Specifies the unique ID of the request. string You can send this ID to Booking.com customer support if you run into an issue. This can help to understand what went wrong.

Managing children pricing (roomrate-date level)

OTA or BXML

You can send and update children prices on the roomrate-date level:

Sending and updating children prices: OTA

POST https://supply-xml.booking.com/hotels/ota/OTA_HotelRateAmountNotif

The POST /ota/OTA_HotelRateAmountNotif enables you to send children prices in the following ways:

Request body parameters

The following table only describes the body parameters that concern children pricing. Ensure that you include adult prices for the roomrate in the request body to not remove other existing information because of overlay logic.

Parameter Attribute Description Type Required/Optional Notes
>>> AdditionalGuestAmounts Contains the AdditionalGuestAmount elements. array required
>>>> AdditionalGuestAmount Contains the children pricing details. object required
AgeQualifyingCode Specifies that the prices are for children. integer required You must use 8 to signal that the prices are for children only. Note that you cannot set adult prices here, but only within the BaseByGuestAmts object (see example).
AgeBucketID Specifies the ID of the property-level age bucket. integer required* You must either use AgeBucketID or MinAge with MaxAge. However, the MinAge to MaxAge age range must match an existing age bucket age range.
MinAge Specifies the beginning of an age range. integer required* You must either use AgeBucketID or MinAge with MaxAge. However, the MinAge to MaxAge age range must match an existing age bucket age range.
MaxAge Specifies the end of an age range and is inclusive. integer required* You must either use AgeBucketID or MinAge with MaxAge. However, the MinAge to MaxAge age range must match an existing age bucket age range.
Amount Specifies the price for a child within a certain age bucket. integer required* The price cannot exceed the adult price for the roomrate. You must use either Amount and DecimalPlaces, or Percent alone.
DecimalPlaces Specifies the number of decimal places to apply to Amount. integer optional The default value is 0, which means the value of Amount is without a decimal point.
AdditionalGuestNumber Specifies the order of prices within the same age bucket. integer optional This means that you can set different prices per child within the same age bucket age range. For example: Price for 1 (first child) is 5000, while price for 2 (second child) is 2500, and 3 (third child) is free (0). Default value is 0, meaning all prices are the same for children in the specified age bucket.

Request body example: age buckets (roomrate-date)

<OTA_HotelRateAmountNotifRQ>
    <RateAmountMessages>
        <RateAmountMessage LocatorID="1">
            <StatusApplicationControl End="2021-12-31" InvTypeCode="330955005" RatePlanCode="11272836" Start="2021-10-31"/>
            <Rates>
                <Rate>
                    <BaseByGuestAmts>
                        <BaseByGuestAmt AmountAfterTax="9000" CurrencyCode="EUR" DecimalPlaces="2" NumberOfGuests="1"/>
                        <BaseByGuestAmt AmountAfterTax="10000" CurrencyCode="EUR" DecimalPlaces="2" NumberOfGuests="2"/>
                        <BaseByGuestAmt AmountAfterTax="15000" CurrencyCode="EUR" DecimalPlaces="2" NumberOfGuests="3"/>
                        <BaseByGuestAmt AmountAfterTax="20000" CurrencyCode="EUR" DecimalPlaces="2" NumberOfGuests="4"/>
                    </BaseByGuestAmts>
                    <AdditionalGuestAmounts>
                        <AdditionalGuestAmount AgeQualifyingCode="8" AgeBucketID="1" Amount="0" DecimalPlaces="2"/>
                        <AdditionalGuestAmount AgeQualifyingCode="8" AgeBucketID="2" Amount="2500" DecimalPlaces="2"/>
                        <AdditionalGuestAmount AgeQualifyingCode="8" AgeBucketID="3" Amount="4500" DecimalPlaces="2"/>
                    </AdditionalGuestAmounts>
                </Rate>
            </Rates>
        </RateAmountMessage>
    </RateAmountMessages>
</OTA_HotelRateAmountNotifRQ>

Request body example: age ranges (roomrate-date)

<OTA_HotelRateAmountNotifRQ>
    <RateAmountMessages>
        <RateAmountMessage LocatorID="1">
            <StatusApplicationControl End="2021-12-31" InvTypeCode="330955005" RatePlanCode="11272836" Start="2021-10-31"/>
            <Rates>
                <Rate>
                    <BaseByGuestAmts>
                        <BaseByGuestAmt AmountAfterTax="9000" CurrencyCode="EUR" DecimalPlaces="2" NumberOfGuests="1"/>
                        <BaseByGuestAmt AmountAfterTax="10000" CurrencyCode="EUR" DecimalPlaces="2" NumberOfGuests="2"/>
                        <BaseByGuestAmt AmountAfterTax="15000" CurrencyCode="EUR" DecimalPlaces="2" NumberOfGuests="3"/>
                        <BaseByGuestAmt AmountAfterTax="20000" CurrencyCode="EUR" DecimalPlaces="2" NumberOfGuests="4"/>
                    </BaseByGuestAmts>
                    <AdditionalGuestAmounts>
                        <AdditionalGuestAmount AgeQualifyingCode="8" MinAge="0" MaxAge="3" Amount="0" DecimalPlaces="2"/>
                        <AdditionalGuestAmount AgeQualifyingCode="8" MinAge="4" MaxAge="12" Amount="2500" DecimalPlaces="2"/>
                        <AdditionalGuestAmount AgeQualifyingCode="8" MinAge="13" MaxAge="17" Amount="4500" DecimalPlaces="2"/>
                    </AdditionalGuestAmounts>
                </Rate>
            </Rates>
        </RateAmountMessage>
    </RateAmountMessages>
</OTA_HotelRateAmountNotifRQ>

Request body example: staggered (roomrate-date)

<OTA_HotelRateAmountNotifRQ>
    <RateAmountMessages>
        <RateAmountMessage LocatorID="1">
            <StatusApplicationControl End="2021-12-31" InvTypeCode="330955018" RatePlanCode="11272836" Start="2021-10-31"/>
            <Rates>
                <Rate>
                    <BaseByGuestAmts>
                        <BaseByGuestAmt AmountAfterTax="9000" CurrencyCode="EUR" DecimalPlaces="2" NumberOfGuests="1"/>
                        <BaseByGuestAmt AmountAfterTax="10000" CurrencyCode="EUR" DecimalPlaces="2" NumberOfGuests="2"/>
                        <BaseByGuestAmt AmountAfterTax="15000" CurrencyCode="EUR" DecimalPlaces="2" NumberOfGuests="3"/>
                        <BaseByGuestAmt AmountAfterTax="20000" CurrencyCode="EUR" DecimalPlaces="2" NumberOfGuests="4"/>
                    </BaseByGuestAmts>
                    <AdditionalGuestAmounts>
                        <AdditionalGuestAmount AgeQualifyingCode="8" AgeBucketID="1" AdditionalGuestNumber="1" Amount="0" DecimalPlaces="2"/>
                        <AdditionalGuestAmount AgeQualifyingCode="8" AgeBucketID="1" AdditionalGuestNumber="2" Amount="500" DecimalPlaces="2"/>
                        <AdditionalGuestAmount AgeQualifyingCode="8" AgeBucketID="1" AdditionalGuestNumber="3" Amount="1000" DecimalPlaces="2"/>
                        <AdditionalGuestAmount AgeQualifyingCode="8" AgeBucketID="2" AdditionalGuestNumber="1" Amount="2000" DecimalPlaces="2"/>
                        <AdditionalGuestAmount AgeQualifyingCode="8" AgeBucketID="2" AdditionalGuestNumber="2" Amount="2500" DecimalPlaces="2"/>
                        <AdditionalGuestAmount AgeQualifyingCode="8" AgeBucketID="2" AdditionalGuestNumber="3" Amount="3000" DecimalPlaces="2"/>
                        <AdditionalGuestAmount AgeQualifyingCode="8" AgeBucketID="3" AdditionalGuestNumber="1" Amount="4000" DecimalPlaces="2"/>
                        <AdditionalGuestAmount AgeQualifyingCode="8" AgeBucketID="3" AdditionalGuestNumber="2" Amount="4500" DecimalPlaces="2"/>
                        <AdditionalGuestAmount AgeQualifyingCode="8" AgeBucketID="3" AdditionalGuestNumber="3" Amount="5000" DecimalPlaces="2"/>
                    </AdditionalGuestAmounts>
                </Rate>
            </Rates>
        </RateAmountMessage>
    </RateAmountMessages>
</OTA_HotelRateAmountNotifRQ>

Response body example

The following is a successful response body example:

<OTA_HotelRateAmountNotifRS>
  <Success />
</OTA_HotelRateAmountNotifRS>

Response body elements

The following table describes the response elements:

Element Description Type Notes
OTA_HotelRateAmountNotifRS Contains the response data. object
> success Indicates whether the request was successful. string
ruid Specifies the unique ID of the request. string You can send this ID to Booking.com customer support if you run into an issue. This can help to understand what went wrong.

Sending and updating children prices: BXML

POST https://supply-xml.booking.com/hotels/xml/availability

The POST /xml/availability enables you to send children pricing in the following ways:

Request body parameters

The following table only describes the body parameters that concern children pricing. Ensure that you include adult prices for the roomrate in the request body to not remove other existing information because of overlay logic.

Parameter Attribute Description Type Required/Optional Notes
>>> additional_guests Contains the price elements for children. array required
>>>> price Contains the children pricing details. object required
type Specifies that the prices are for children. string required You must use child to signal that the prices are for children. Note that you cannot set adult prices here, but only within the price object nested within the date object (see example).
additional_guest_number Specifies the order of prices within the same age bucket. integer optional This means that you can set different prices per child within the same age bucket age range. For example: Price for 1 (first child) is 5000, while price for 2 (second child) is 2500, and 3 (third child) is free (0). Default value is 0, meaning all prices are the same for children in the specified age bucket.
age_bucket Specifies the ID of the property-level age bucket. integer required* You must either use AgeBucket or from_age with to_age. However, the from_age to to_age age range must match an existing age bucket age range.
from_age Specifies the beginning of an age range. integer required* You must either use AgeBucket or from_age with to_age. However, the from_age to to_age age range must match an existing age bucket age range.
to_age Specifies the end of an age range and is inclusive. integer required* You must either use AgeBucket or from_age with to_age. However, the from_age to to_age age range must match an existing age bucket age range.
additional Specifies the fixed price for a child within a certain age bucket. integer required* Values must be with two decimals (100.00). The price cannot exceed the adult price for the roomrate. You must use either additional or percentage.

Request body example: age buckets (BXML roomrate-date)

<request>
    <room id="330955005">
        <date from="2021-10-31" to="2021-12-31">
            <roomstosell>5</roomstosell>
            <currencycode>EUR</currencycode>
            <rate id="11272836"/>
            <price numberofguests="1">90.00</price>
            <price numberofguests="2">100.00</price>
            <price numberofguests="3">150.00</price>
            <price numberofguests="4">200.00</price>
            <additional_guests>
                <price type="child" age_bucket_id="1" additional="0"></price>
                <price type="child" age_bucket_id="2" additional="25.00"></price>
                <price type="child" age_bucket_id="3" additional="45.00"></price>
            </additional_guests>
        </date>
    </room>
</request>

Request body example: age ranges (BXML roomrate-date)

<request>
    <room id="330955005">
        <date from="2021-10-31" to="2021-12-31">
            <roomstosell>5</roomstosell>
            <currencycode>EUR</currencycode>
            <rate id="11272836"/>
            <price numberofguests="1">90.00</price>
            <price numberofguests="2">100.00</price>
            <price numberofguests="3">150.00</price>
            <price numberofguests="4">200.00</price>
            <additional_guests>
                <price type="child" from_age="0" to_age="3" additional="0"></price>
                <price type="child" from_age="4" to_age="12" additional="25.00"></price>
                <price type="child" from_age="13" to_age="17" additional="45.00"></price>
            </additional_guests>
        </date>
    </room>
</request>

Request body example: staggered prices (BXML roomrate-date)

<request>
    <room id="330955018">
        <date from="2021-10-31" to="2021-12-31">
            <roomstosell>5</roomstosell>
            <currencycode>EUR</currencycode>
            <rate id="11272836"/>
            <price numberofguests="1">90.00</price>
            <price numberofguests="2">100.00</price>
            <price numberofguests="3">150.00</price>
            <price numberofguests="4">200.00</price>
            <additional_guests>
                <price type="child" age_bucket_id="1" additional_guest_number="1" additional="0.00"></price>
                <price type="child" age_bucket_id="1" additional_guest_number="2" additional="5.05"></price>
                <price type="child" age_bucket_id="1" additional_guest_number="3" additional="10.10"></price>
                <price type="child" age_bucket_id="2" additional_guest_number="1" additional="20.20"></price>
                <price type="child" age_bucket_id="2" additional_guest_number="2" additional="25.25"></price>
                <price type="child" age_bucket_id="2" additional_guest_number="3" additional="30.30"></price>
                <price type="child" age_bucket_id="3" additional_guest_number="1" additional="40.40"></price>
                <price type="child" age_bucket_id="3" additional_guest_number="2" additional="45.45"></price>
                <price type="child" age_bucket_id="3" additional_guest_number="3" additional="50.50"></price>
            </additional_guests>
        </date>
    </room>
</request>

Response body example

The following is a successful response body example:

<ok></ok>

Response body elements

The following table describes the response elements:

Element Description Type Notes
ok Indicates whether the request was successful. string
ruid Specifies the unique ID of the request. string You can send this ID to Booking.com customer support if you run into an issue. This can help to understand what went wrong.

Retrieving children prices

POST https://supply-xml.booking.com/hotels/xml/roomrateavailability

The POST /xml/roomrateavailability enables you to retrieve existing children prices per property on the roomrate-date (inventory) level.

You need to enable feature Flexible children prices from the Feature management page.

Request body parameters

The following table describes the body parameters that you must add.

Parameter Attribute Description Type Required/Optional Notes
request Contains the request elements. object required
> hotel_id Specifies the unique ID of the property. integer required
> start_date Specifies the starting point (date) from when you want to retrieve inventory details. date required
> number_of_days Specifies the amount of days, starting from start_date, for which you want to retrieve inventory details. integer required
> room_level Indicates whether you want to retrieve inventory on the room level or rate level. boolean optional Default value is 0, with 0 being rate level and 1 being room level.
> room_id Specifies the room type ID if you want to filter by room type. integer optional

Request body example

<request>
  <hotel_id>367456</hotel_id>
  <number_of_days>20</number_of_days>
  <start_date>2021-09-19</start_date>
  <room_level>1</room_level>
  <room_id>12302</room_id>
</request>

Response body example

The following is a successful response body example:

<result>
   <room room_id="696334301">
       <date booked="1" cancelled="0" min_contracted_rooms="0" min_contracted_rooms_until="0" rooms_to_sell="3" value="2021-08-02">
           <rate booked="1" cancelled="0" closed="0" closed_on_arrival="0" closed_on_depart="0" exact_stay_arrival="0" length_of_stay="" max_advance_res="" max_stay_arrival="0" max_stay_through="0" min_advance_res="" min_contracted_rooms="0" min_contracted_rooms_until="0" min_stay_arrival="0" min_stay_through="2" policygroup="" price="774" price_single="0" rate_id="7473">
               <additional_guests>
                   <price type="child" additional_guest_number="1" from_age="1" to_age="5" age_bucket_id="1" additional="100"/>
                   <price type="child" additional_guest_number="2" from_age="1" to_age="5" age_bucket_id="1" percentage="10"/>
               </additional_guests>
           </rate>
      </date>
   </room>
</result>

Response body elements

The following table only describes the response body elements that concern children pricing.

Element Attribute Description Type Notes
>>>> additional_guests Contains the price elements for children. array
>>>>> price Contains the children pricing details. object
type Specifies that the prices are for children. string
additional_guest_number Specifies the order of prices within the same age bucket. integer For example: Price for 1 (first child) is 5000, while price for 2 (second child) is 2500, and 3 (third child) is free (0). Default value is 0, meaning all prices are the same for children in the specified age bucket.
age_bucket_id Specifies the ID of the property-level age bucket. integer
from_age Specifies the beginning of an age range. integer
to_age Specifies the end of an age range and is inclusive. integer
additional Specifies the fixed price for a child within a certain age bucket. integer
percentage Specifies the price for the child as a percentage of the adult price. integer Possible value between 0 and 100.

Removing children pricing

OTA or BXML

You can remove children pricing in one of the following two ways:

Removing children pricing: OTA

POST https://supply-xml.booking.com/hotels/ota/OTA_HotelRateAmountNotif

The POST /ota/OTA_HotelRateAmountNotif endpoint also enables you to remove children pricing by sending an empty AdditionalGuestAmounts object.

Request body parameters

The following table only describes the body parameters that concern children pricing. Ensure that you include adult prices for the roomrate in the request body to not remove other existing information because of overlay logic.

Parameter Attribute Description Type Required/Optional Notes
>>> AdditionalGuestAmounts Must be empty to remove existing children prices. array required

Request body example

<OTA_HotelRateAmountNotifRQ>
  <RateAmountMessages> 
    <RateAmountMessage LocatorID="1">
    <StatusApplicationControl Start="2021-11-17" End="2021-12-18" RatePlanCode="7473" InvTypeCode="696334301"/>
    <Rates>
      <Rate>
        <BaseByGuestAmts>
          <BaseByGuestAmt AmountAfterTax="16900" DecimalPlaces="2" CurrencyCode="EUR"/>
          </BaseByGuestAmts>
        <AdditionalGuestAmounts>
        </AdditionalGuestAmounts>
      </Rate>
    </Rates>
    </RateAmountMessage>
  </RateAmountMessages>
</OTA_HotelRateAmountNotifRQ>

Response body example

The following is a successful response body example:

<OTA_HotelRateAmountNotifRS>
  <Success />
</OTA_HotelRateAmountNotifRS>

Response body elements

The following table describes the response elements:

Element Description Type Notes
OTA_HotelRateAmountNotifRS Contains the response data. object
> success Indicates whether the request was successful. string
ruid Specifies the unique ID of the request. string You can send this ID to Booking.com customer support if you run into an issue. This can help to understand what went wrong.

Removing children pricing: BXML

POST https://supply-xml.booking.com/hotels/xml/availability

The POST /xml/availability endpoint also enables you to remove children pricing by sending an empty additonal_guests object.

Request body parameters

The following table only describes the body parameters that concern children pricing. Ensure that you include adult prices for the roomrate in the request body to not remove other existing information because of overlay logic.

Parameter Attribute Description Type Required/Optional Notes
>>> additional_guests Must be empty to remove existing children prices. array required

Request body example

<request>
  <hotel_id>1719757</hotel_id>
  <version>1.0</version>
  <room id="696334301">
    <date from="2021-08-02" to="2021-08-10">
      <rate id="7473" />
      <price>774.00</price>
      <additional_guests>
      </additional_guests>
    </date>
  </room>
</request>

Response body example

The following is a successful response body example:

<ok></ok>

Response body elements

The following table describes the response elements:

Element Description Type Notes
ok Indicates whether the request was successful. string
ruid Specifies the unique ID of the request. string You can send this ID to Booking.com customer support if you run into an issue. This can help to understand what went wrong.