Last updated

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:

ElementAttributeDescriptionTypeRequired/OptionalNotes
OTA_HotelProductNotifRQContains the HotelProducts array.objectrequired
> HotelProductsContains the HotelProduct objects.arrayrequired
HotelCodeSpecifies the unique ID of the property you create roomrates for.integerrequired
>> HotelProductContains the roomrate information.objectrequired
ProductNotifTypeSpecifies whether the request is to create a roomrate (New) or modify an existing one (Overlay).enumrequiredPossible values are New and Overlay. You must use New to create a roomrate.
>>> RoomTypesContains a RoomType object.objectrequired
>>>> RoomTypeContains the room type information.objectrequired
RoomTypeCodeSpecifies the room type id.integerrequired
>>> RatePlansContains a RatePlan object.objectrequired
>>>> RatePlanContains the rate plan information.objectrequired
RatePlanCodeSpecifies the rate plan id.integerrequired
>>> AdditionalGuestAmountsContains the AdditionalGuestAmount elements.arrayrequired
>>>> AdditionalGuestAmountContains the children pricing details.objectrequired
AgeQualifyingCodeSpecifies that the prices are for children.integerrequiredYou 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).
AgeBucketIDSpecifies the ID of the property-level age bucket.integerrequired*You must either use AgeBucketID or MinAge with MaxAge. However, the MinAge to MaxAge age range must match an existing age bucket age range.
MinAgeSpecifies the beginning of an age range.integerrequired*You must either use AgeBucketID or MinAge with MaxAge. However, the MinAge to MaxAge age range must match an existing age bucket age range.
MaxAgeSpecifies the end of an age range and is inclusive.integerrequired*You must either use AgeBucketID or MinAge with MaxAge. However, the MinAge to MaxAge age range must match an existing age bucket age range.
AmountSpecifies the price for a child within a certain age bucket.integerrequired*The price cannot exceed the adult price for the roomrate. You must use either Amount and DecimalPlaces, or Percent alone.
DecimalPlacesSpecifies the number of decimal places to apply to Amount.integeroptionalThe default value is 0, which means the value of Amount is without a decimal point.
AmountSpecifies the price for a child within a certain age bucket.integerrequired*The price cannot exceed the adult price for the roomrate. You must use either Amount and DecimalPlaces, or Percent alone.
PercentSpecifies the price for the child as a percentage of the adult price.integerrequiredPossible value between 0 and 100. You must use either Amount and DecimalPlaces, or Percent alone.
AdditionalGuestNumberSpecifies the order of prices within the same age bucket.integeroptionalThis 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:

ElementDescriptionTypeNotes
OTA_HotelProductNotifRSContains the response data.object
> successIndicates the success of the request.object
ruidSpecifies the unique ID of the request.stringYou 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.

ParameterAttributeDescriptionTypeRequired/OptionalNotes
requestContains the request elements.objectrequired
> hotel_idSpecifies the unique ID of the property.integerrequired

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.

ParameterAttributeDescriptionTypeNotes
>>>>> additional_guestsContains the price elements for children.array
>>>>>> priceContains the children pricing details.object
typeSpecifies that the prices are for children.stringYou must use child to signal that the prices are for children only.
additional_guest_numberSpecifies the order of prices within the same age bucket.integerThis 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_idSpecifies the ID of the property-level age bucket.integer
from_ageSpecifies the beginning of an age range.integer
to_ageSpecifies the end of an age range and is inclusive.integer
additionalSpecifies the fixed price for a child within a certain age bucket.integer
percentageSpecifies the price for the child as a percentage of the adult price.integerPossible 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.

ElementAttributeDescriptionTypeRequired/OptionalNotes
OTA_HotelProductNotifRQContains the HotelProducts array.objectrequired
> HotelProductsContains the HotelProduct objects.arrayrequired
HotelCodeSpecifies the unique ID of the property you create roomrates for.integerrequired
>> HotelProductContains the roomrate information.objectrequired
ProductNotifTypeSpecifies whether the request is to create a roomrate (New) or modify an existing one (Overlay).enumrequiredPossible values are New and Overlay. You must use New to create a roomrate.
>>> RoomTypesContains a RoomType object.objectrequired
>>>> RoomTypeContains the room type information.objectrequired
RoomTypeCodeSpecifies the room type id.integerrequired
>>> RatePlansContains a RatePlan object.objectrequired
>>>> RatePlanContains the rate plan information.objectrequired
RatePlanCodeSpecifies the rate plan id.integerrequired
>>> AdditionalGuestAmountsContains the AdditionalGuestAmount elements.arrayrequired

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:

ElementDescriptionTypeNotes
OTA_HotelProductNotifRSContains the response data.object
> successIndicates the success of the request.object
ruidSpecifies the unique ID of the request.stringYou 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.

ParameterAttributeDescriptionTypeRequired/OptionalNotes
>>> AdditionalGuestAmountsContains the AdditionalGuestAmount elements.arrayrequired
>>>> AdditionalGuestAmountContains the children pricing details.objectrequired
AgeQualifyingCodeSpecifies that the prices are for children.integerrequiredYou 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).
AgeBucketIDSpecifies the ID of the property-level age bucket.integerrequired*You must either use AgeBucketID or MinAge with MaxAge. However, the MinAge to MaxAge age range must match an existing age bucket age range.
MinAgeSpecifies the beginning of an age range.integerrequired*You must either use AgeBucketID or MinAge with MaxAge. However, the MinAge to MaxAge age range must match an existing age bucket age range.
MaxAgeSpecifies the end of an age range and is inclusive.integerrequired*You must either use AgeBucketID or MinAge with MaxAge. However, the MinAge to MaxAge age range must match an existing age bucket age range.
AmountSpecifies the price for a child within a certain age bucket.integerrequired*The price cannot exceed the adult price for the roomrate. You must use either Amount and DecimalPlaces, or Percent alone.
DecimalPlacesSpecifies the number of decimal places to apply to Amount.integeroptionalThe default value is 0, which means the value of Amount is without a decimal point.
AdditionalGuestNumberSpecifies the order of prices within the same age bucket.integeroptionalThis 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:

ElementDescriptionTypeNotes
OTA_HotelRateAmountNotifRSContains the response data.object
> successIndicates whether the request was successful.string
ruidSpecifies the unique ID of the request.stringYou 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.

ParameterAttributeDescriptionTypeRequired/OptionalNotes
>>> additional_guestsContains the price elements for children.arrayrequired
>>>> priceContains the children pricing details.objectrequired
typeSpecifies that the prices are for children.stringrequiredYou 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_numberSpecifies the order of prices within the same age bucket.integeroptionalThis 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_bucketSpecifies the ID of the property-level age bucket.integerrequired*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_ageSpecifies the beginning of an age range.integerrequired*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_ageSpecifies the end of an age range and is inclusive.integerrequired*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.
additionalSpecifies the fixed price for a child within a certain age bucket.integerrequired*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:

ElementDescriptionTypeNotes
okIndicates whether the request was successful.string
ruidSpecifies the unique ID of the request.stringYou 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.

ParameterAttributeDescriptionTypeRequired/OptionalNotes
requestContains the request elements.objectrequired
> hotel_idSpecifies the unique ID of the property.integerrequired
> start_dateSpecifies the starting point (date) from when you want to retrieve inventory details.daterequired
> number_of_daysSpecifies the amount of days, starting from start_date, for which you want to retrieve inventory details.integerrequired
> room_levelIndicates whether you want to retrieve inventory on the room level or rate level.booleanoptionalDefault value is 0, with 0 being rate level and 1 being room level.
> room_idSpecifies the room type ID if you want to filter by room type.integeroptional

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.

ElementAttributeDescriptionTypeNotes
>>>> additional_guestsContains the price elements for children.array
>>>>> priceContains the children pricing details.object
typeSpecifies that the prices are for children.string
additional_guest_numberSpecifies the order of prices within the same age bucket.integerFor 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_idSpecifies the ID of the property-level age bucket.integer
from_ageSpecifies the beginning of an age range.integer
to_ageSpecifies the end of an age range and is inclusive.integer
additionalSpecifies the fixed price for a child within a certain age bucket.integer
percentageSpecifies the price for the child as a percentage of the adult price.integerPossible 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.

ParameterAttributeDescriptionTypeRequired/OptionalNotes
>>> AdditionalGuestAmountsMust be empty to remove existing children prices.arrayrequired

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:

ElementDescriptionTypeNotes
OTA_HotelRateAmountNotifRSContains the response data.object
> successIndicates whether the request was successful.string
ruidSpecifies the unique ID of the request.stringYou 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.

ParameterAttributeDescriptionTypeRequired/OptionalNotes
>>> additional_guestsMust be empty to remove existing children prices.arrayrequired

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:

ElementDescriptionTypeNotes
okIndicates whether the request was successful.string
ruidSpecifies the unique ID of the request.stringYou can send this ID to Booking.com customer support if you run into an issue. This can help to understand what went wrong.