# 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.](/connectivity/docs/flexible-children-rates/managing-a-children-policy)
→ To see an example of how to use percentage-based pricing, see [Request body example: age buckets (roomrate with percentage)](#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:](#setting-and-updating-children-pricing-roomrate-level) This enables you to set prices for children *before* pushing inventory (availability).
* [Roomrate-date level:](#setting-and-updating-children-pricing-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](#sending-and-updating-children-prices)
* [Retrieving children prices](#retrieving-children-prices)
* [Removing children prices](#removing-children-prices)


### Sending and updating children prices

```http
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](#request-body-example-age-buckets-roomrate)
* [Using age ranges (they must correspond with the age ranges of existing age buckets)](#request-body-example-age-range-roomrate)
* [Using staggered pricing (either with age buckets or age ranges)](#request-body-example-staggered-roomrate)


You need to enable feature `Flexible children prices` from the [Feature management page](https://connect.booking.com/feature_management).

### 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 | The valid range for the percentage value is between 0 and 100. 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.  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:

```xml
<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:

```xml
<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:

```xml
<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:

```xml
<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:

```xml
<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

```http
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](https://connect.booking.com/feature_management).

#### 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

```xml
<request>
  <hotel_id>6238539</hotel_id>
</request>
```

#### Response body example

The following is a successful response body example:

```xml
<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

```http
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

```xml
<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:

```xml
<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:

* [Using OTA](#sending-and-updating-children-prices-ota)
* [Using BXML](#sending-and-updating-children-prices-bxml)


### Sending and updating children prices: OTA

```http
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](#request-body-example-age-buckets-roomrate-date)
* [Using age ranges (they must correspond with the age ranges of existing age buckets)](#request-body-example-age-ranges-roomrate-date)
* [Using staggered pricing (either with age buckets or age ranges)](#request-body-example-staggered-roomrate-date)


#### 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)

```xml
<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)

```xml
<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)

```xml
<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:

```xml
<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

```http
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](#request-body-example-age-buckets-bxml-roomrate-date)
* [Using age ranges (they must correspond with the age ranges of existing age buckets)](#request-body-example-age-ranges-bxml-roomrate-date)
* [Using staggered pricing (either with age buckets or age ranges)](#request-body-example-staggered-pricing-bxml-roomrate-date)


#### 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)

```xml
<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)

```xml
<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)

```xml
<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:

```xml
<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

```http
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](https://connect.booking.com/feature_management).

#### 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

```xml
<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:

```xml
<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:

* [Using OTA](#removing-children-pricing-ota)
* [Using BXML](#removing-children-pricing-bxml)


### Removing children pricing: OTA

```http
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

```xml
<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:

```xml
<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

```http
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

```xml
<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:

```xml
<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. |


## Going live

Before you go live with your API integration, you'll need to meet certain requirements. For more information, see [Going Live.](/connectivity/docs/going_live/)