Skip to content
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. This restriction does not apply to the new adult percentage.

→ 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).

Both support percentage-based and staggered (per-child) 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

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*Use either AgeBucketID or MinAge/MaxAge. The range must match an existing age bucket.
MinAgeSpecifies the beginning of an age range.integerrequired*Use either AgeBucketID or MinAge/MaxAge. The range must match an existing age bucket.
MaxAgeSpecifies the end of an age range and is inclusive.integerrequired*Use either AgeBucketID or MinAge/MaxAge. The range must match an existing age bucket.
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, Percent, or AdultPercent 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.
PercentSpecifies the price for the child as a percentage of the adult price.floatrequired*Format: ###.## (max 2 decimal places). The valid range is greater than 0.0 and up to 100.0. When you set the price for children to 100% of the adult price, there are two key consequences: first, children are charged the full adult rate; second, children are counted as adults in the availability search. As a result, if guests search for accommodations for 2 adults and 1 child, rooms that can accommodate 2 adults and 1 child might still be excluded from the search results, since children are counted as adults.
Cannot be used for OBP or LOS room rates — use AdultPercent instead. You must use either Amount and DecimalPlaces, Percent, or AdultPercent alone.
AdultPercentSpecifies the price for the child as a percentage of the adult price. Unlike Percent, this can be used for OBP and LOS room rates.floatrequired*Format: ###.## (max 2 decimal places). The valid range is greater than 0.0 and up to 100.0. You must use either Amount and DecimalPlaces, Percent, or AdultPercent alone.
AdditionalGuestNumberSpecifies the order of prices within the same age bucket.integeroptionalSet different prices per child in the same age bucket (e.g., 1st child: 5000, 2nd: 2500, 3rd: free). Default 0 = same price for all.

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

ElementDescriptionTypeNotes
OTA_HotelProductNotifRSContains the response data.object
> successIndicates the success of the request.object
ruidSpecifies the unique ID of the request.stringSend to Booking.com support to help diagnose issues.

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

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

(Children pricing fields only.)

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.integerSet different prices per child in the same age bucket (e.g., 1st child: 5000, 2nd: 2500, 3rd: free). Default 0 = same price for all.
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.floatFormat: ###.## (max 2 decimal places). Value greater than 0.0 and up to 100.0.

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

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. Use Overlay to update an existing 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

ElementDescriptionTypeNotes
OTA_HotelProductNotifRSContains the response data.object
> successIndicates the success of the request.object
ruidSpecifies the unique ID of the request.stringSend to Booking.com support to help diagnose issues.

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

Children pricing parameters only. Include adult prices in the request to avoid removing them due to 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*Use either AgeBucketID or MinAge/MaxAge. The range must match an existing age bucket.
MinAgeSpecifies the beginning of an age range.integerrequired*Use either AgeBucketID or MinAge/MaxAge. The range must match an existing age bucket.
MaxAgeSpecifies the end of an age range and is inclusive.integerrequired*Use either AgeBucketID or MinAge/MaxAge. The range must match an existing age bucket.
AmountSpecifies the fixed price for a child within a certain age bucket.integerrequired*The price cannot exceed the adult price for the roomrate. Use DecimalPlaces to set the decimal precision. You must use either Amount, Percent, or AdultPercent 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.
PercentSpecifies the price for the child as a percentage of the adult price.floatrequired*Format: ###.## (max 2 decimal places). The valid range is greater than 0.0 and up to 100.0. Cannot be used for OBP or LOS room rates — use AdultPercent instead. You must use either Amount, Percent, or AdultPercent alone.
AdultPercentSpecifies the price for the child as a percentage of the adult price. Unlike Percent, this can be used for OBP and LOS room rates.floatrequired*Format: ###.## (max 2 decimal places). The valid range is greater than 0.0 and up to 100.0. You must use either Amount, Percent, or AdultPercent alone.
AdditionalGuestNumberSpecifies the order of prices within the same age bucket.integeroptionalSet different prices per child in the same age bucket (e.g., 1st child: 5000, 2nd: 2500, 3rd: free). Default 0 = same price for all.

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

ElementDescriptionTypeNotes
OTA_HotelRateAmountNotifRSContains the response data.object
> successIndicates whether the request was successful.object
ruidSpecifies the unique ID of the request.stringSend to Booking.com support to help diagnose issues.

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

Children pricing parameters only. Include adult prices in the request to avoid removing them due to 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.integeroptionalSet different prices per child in the same age bucket (e.g., 1st child: 5000, 2nd: 2500, 3rd: free). Default 0 = same price for all.
age_bucket_idSpecifies the ID of the property-level age bucket.integerrequired*Use either age_bucket_id or from_age/to_age. The range must match an existing age bucket.
from_ageSpecifies the beginning of an age range.integerrequired*Use either age_bucket_id or from_age/to_age. The range must match an existing age bucket.
to_ageSpecifies the end of an age range and is inclusive.integerrequired*Use either age_bucket_id or from_age/to_age. The range must match an existing age bucket.
additionalSpecifies the fixed price for a child within a certain age bucket.floatrequired*Format: ###.## (max 2 decimal places). The price cannot exceed the adult price for the roomrate. You must use either additional, percentage, or adult_percentage.
percentageSpecifies the price for the child as a percentage of the adult price.floatrequired*Format: ###.## (max 2 decimal places). The valid range is greater than 0.0 and up to 100.0. Cannot be used for OBP or LOS room rates — use adult_percentage instead. You must use either additional, percentage, or adult_percentage.
adult_percentageSpecifies the price for the child as a percentage of the adult price. Unlike percentage, this can be used for OBP and LOS room rates.floatrequired*Format: ###.## (max 2 decimal places). The valid range is greater than 0.0 and up to 100.0. You must use either additional, percentage, or adult_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

ElementDescriptionTypeNotes
okIndicates whether the request was successful.object
ruidSpecifies the unique ID of the request.stringSend to Booking.com support to help diagnose issues.

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

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

(Children pricing fields only.)

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.integerSet different prices per child in the same age bucket (e.g., 1st child: 5000, 2nd: 2500, 3rd: free). Default 0 = same price for all.
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.floatFormat: ###.## (max 2 decimal places). Value greater than 0.0 and up to 100.0.

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

Children pricing parameters only. Include adult prices in the request to avoid removing them due to 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

ElementDescriptionTypeNotes
OTA_HotelRateAmountNotifRSContains the response data.object
> successIndicates whether the request was successful.object
ruidSpecifies the unique ID of the request.stringSend to Booking.com support to help diagnose issues.

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 additional_guests object.

Request body parameters

Children pricing parameters only. Include adult prices in the request to avoid removing them due to 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

ElementDescriptionTypeNotes
okIndicates whether the request was successful.object
ruidSpecifies the unique ID of the request.stringSend to Booking.com support to help diagnose issues.

Error codes

The following tables list errors related to children pricing. Errors returned by OTA_HotelProductNotif use a numeric Code attribute in the response (OTA error code); the ShortText attribute contains the error message. Errors returned by OTA_HotelRateAmountNotif and /xml/availability use a named Code attribute.

OTA_HotelProductNotif

Error codeMessageNotes
400FCR: You need to set additional guest Amount, Percent or AdultPercentNone of the required price fields (Amount, Percent, or AdultPercent) are present in AdditionalGuestAmount.
44Either Percent, Adult Percent or Amount should exist, and only one should be definedMultiple price fields are set, or none are set in AdditionalGuestAmount. Only one of Amount, Percent, or AdultPercent can be used per entry.
44Cannot use percentage when setting children prices for OBP or LOS room ratesPercent is not supported for OBP or LOS room rates. Use AdultPercent instead.
497Please define a to and from ages that match an age bucketMinAge and MaxAge do not match an existing age bucket in the property's children policy.
497ageBandId must be 1, 2, 3, or 4AgeBucketID is outside the valid range.
497Prices length cannot be 0At least one price entry must be included in the request.
497The dates of the guest prices cannot overlap for the same roomId and rateIdMultiple price entries for the same room rate have overlapping date ranges.
497Please check if date is not in the past or more than 4 years in the futureThe requested date range is outside the allowed window.
497Invalid additionalGuestNumber. It should be a non negative number up to 10AdditionalGuestNumber must be between 0 and 10 (inclusive).
497There's no support for negative pricesAmount must be greater than or equal to 0.
497Max Price Value is 9999999999.9999Amount exceeds the maximum allowed value.
497Percentage should be between [0.0, 100.0]Percent or AdultPercent must be between 0 and 100 (exclusive of 0).
497There's no support for percentage price zeroPercent or AdultPercent cannot be 0.
497Price Type Adult Percentage cannot be mixed with other price types for the same [age band]AdultPercent cannot be combined with Percent or Amount entries for the same age bucket.
497Price Type Adult Percentage cannot be used with dateAdultPercent is a roomrate-level setting and cannot be used with date-range pricing.
497Price Type Adult Percentage can only be used with guest number 0When using AdultPercent, AdditionalGuestNumber must be 0.
497The dates of the prices cannot overlap for the same guestNumber and ageBucketOverlapping date ranges exist within the same age bucket and guest number combination.

OTA_HotelRateAmountNotif and /xml/availability

Error codeMessageNotes
ADDITIONAL_PRICE_TYPE_CAN_BE_CHILDREN_ONLYAdditional guest type can only be childAgeQualifyingCode must be 8 (child). Adult pricing is not supported here.
CANT_SET_PERCENTAGE_FOR_OBP_LOSCannot set percentage for OBP/LOS room-ratePercentage pricing is not supported for OBP or LOS room rates on the roomrate-date level.
INVALID_GUEST_AGE_BANDPlease define a to and from ages that match an age bucketMinAge/MaxAge range does not correspond to any existing age bucket in the property's children policy.
INVALID_GUEST_AGE_BAND_IDageBandId must be 1, 2, 3, or 4AgeBucketID is outside the valid range (1–4).
INVALID_ADDITIONAL_PRICESPrices length cannot be 0At least one price entry must be included in the request.
ADDITIONAL_GUEST_PRICE_DATES_OVERLAPThe dates of the guest prices cannot overlap for the same roomId and rateIdMultiple price entries for the same room rate have overlapping date ranges.
PROVIDED_DATES_OUTSIDE_ALLOWED_RANGEPlease check if date is not in the past or more than 4 years in the futureThe requested date range is outside the allowed window.
INVALID_ADDITIONAL_GUEST_NUMBERInvalid additionalGuestNumber. It should be a non negative number up to 10AdditionalGuestNumber must be between 0 and 10 (inclusive).
PRICE_LESS_THAN_0There's no support for negative pricesAmount must be greater than or equal to 0.
PRICE_GREATER_THAN_10_DIGITSMax Price Value is 9999999999.9999Amount exceeds the maximum allowed value.
PRICE_PERCENTAGE_IS_BIGGER_THAN_100Percentage should be between [0.0, 100.0]Percent must be between 0 and 100.
PRICE_PERCENTAGE_IS_ZEROThere's no support for percentage price zeroPercent cannot be 0.
PRICE_DATES_OVERLAPThe dates of the prices cannot overlap for the same guestNumber and ageBucketOverlapping date ranges exist within the same age bucket and guest number combination.

Warnings

Warning codeMessageNotes
WARN_UNPROCESSED_ADDITIONAL_GUESTAdditional guest updates weren't processed. Please try again laterTemporary processing failure. Retry the request.

Going live

Before you go live with your API integration, you'll need to meet certain requirements. For more information, see Going Live.