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:
- Using (property-level) age buckets
- Using age ranges (they must correspond with the age ranges of existing age buckets)
- Using staggered pricing (either with age buckets or age ranges)
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:
- Using (property-level) age buckets
- Using age ranges (they must correspond with the age ranges of existing age buckets)
- Using staggered pricing (either with age buckets or age ranges)
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:
- Using (property-level) age buckets
- Using age ranges (they must correspond with the age ranges of existing age buckets)
- Using staggered pricing (either with age buckets or age ranges)
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. |