Last updated

Managing roomrates

A roomrate (also known as a product) is the unique combination of a room type and a rate plan with conditions. These conditions can consist of:

  • Policy: Refers to a combination of a cancellation and a prepayment policy.
    • Cancellation policy: Refers to whether there is and what the penalty is for a guest if they cancel a booking within a given time frame.
    • Prepayment policy: Refers to whether and when the property takes a prepayment from the guest.
  • Override policy: Refers to a policy that you can set on certain dates to overwrite the policy already assigned to a roomrate.
  • Booking restrictions: Refers to certain restrictions you can set when it comes to booking a roomrate.
  • Meal plan: Refers to whether there is and what the meal plan is assigned to the roomrate.

You need roomrates to create and push inventory (availability) and rates (prices).

Managing policies and restrictions

It is very important to properly understand what policies and restrictions are and how to assign them to roomrates in the context of the /ota/OTA_HotelProductNotif endpoint. Read this before you start creating roomrates.

What is a policy?

You must see a policy as a combination of a cancellation policy and a prepayment policy.

To find all the available cancellation codes, see cancellation policies. You can find free and non-free cancellations. Each one specifies the time frame in which a guest can cancel (with the exception of non-refundable with code 1) and what the possible penalty is for a guest if they cancel after a specific deadline or deadlines.

A policy can also include a prepayment. If prepayment is required, it further specifies whether the prepayment must happen after a guest makes a reservation (after_reservation_is_made) or when the guest can no longer cancel for free (after_cancellation_begins).

What is an override policy?

An override policy is just a policy. However, you use it to overwrite the main policy of a roomrate for a specified date range. Let's say a property uses a flexible policy for most of the year, but they want to use a non-refundable policy for their peak season. That would be a good use case for a policy override.

What are restrictions?

Restrictions enable you to specify when a roomrate with a specific policy is and is not possible to book. You can set the following restrictions:

  • MinAdvancedBookingOffset: Refers to the minimum time duration in advance until which guests are allowed to book a date. In other words, this specifies the moment from when a guest can no longer book the roomrate. The search date is counted as one of the days in the restriction length.
  • MaxAdvancedBookingOffset: Refers to the maximum time duration in advance that guests are allowed to book a date. In other words, this specifies the moment from when a guest can start booking the roomrate. The search date is counted as one of the days in the restriction length.

You can also set the specific hours in which a roomrate is available per day, but this is not recommended.

Mapping room types and rate plans

To map your room types and rate plans to Booking.com's, you should use the retrieving roomrates endpoint. You could also use the retrieving room types and retrieving rate plans endpoints, but these contain less complete information. You could still use either to troubleshoot issues with mapping as needed.

What is the maximum number of roomrates the API supports?

You can create a maximum of 400 active roomrates for a property.

Creating a roomrate

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

The POST /ota/OTA_HotelProductNotif request enables you to create roomrates for your property.

Creating or updating

To create a roomrate you set ProductNotifType to New. If you want to update a roomrate, you set ProductNotifType to Overlay.

Elements for creating a roomrate

To create a roomrate on Booking.com, the following basic elements are required:

  • Property ID
  • Room type ID
  • Rate plan ID

To further expand a roomrate, it is recommended to also add:

  • Value add inclusions: To indicate whether there is a meal plan and if so what that meal plan is.
  • Policy: To assign an existing policy (combination of cancellation and prepayment) to a roomrate.

The following elements are optional:

  • Override policy
  • Booking rules

Assigning policies to roomrates

You can only assign existing policies using the /ota/OTA_HotelProductNotif endpoint. This means that if you want to create or update policies for a property, you must either:

How do you assign a policy?

To assign a policy to a roomrate, follow these steps:

  1. Retrieve the property's existing policies either by:

    You only need the cancellation policy code, because the prepayment policy is implicitly connected to this cancellation policy code. To know what each code represents, see the cancellation policies.

  2. Assign the policy by adding the code to the PolicyCode element (CancelPolicy > CancelPenalty > PolicyCode).

How do you assign an override policy?

To assign an override policy to a roomrate, follow these steps:

  1. Retrieve the property's existing policies either by:

    For policy overrides, you need the policy name and not the policy code. If you use the HotelDescriptiveInfo endpoint, you can use the name under PolicyName (CancelPolicy > CancelPenalty > PolicyName). If you only retrieve policies that are already assigned to existing roomrates., you must look at the name under policy (room > rates > rate > policy) and find its policy override name equivalent in the following table:

    roomrate namepolicy override name
    GeneralPTT_GENERAL
    Non-refundablePTT_NON_REFUNDABLE
    Special conditionsPTT_SPECIAL_CONDITIONS
    Special conditions 2PTT_SPECIAL_CONDITIONS_2
    Special conditions 3PTT_SPECIAL_CONDITIONS_3
    Special conditions 4PTT_SPECIAL_CONDITIONS_4
    Fully flexiblePTT_FULLY_FLEXIBLE
  2. Assign the policy by adding the policy override name to the PolicyName element (OverridePolicies > OverridePolicy > PolicyName).

→ To know what each policy name represents, find the policy code and see the cancellation policies.

Body parameters

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

ElementAttributeDescriptionTypeRequired/OptionalNotes
OTA_HotelProductNotifRQContains the HotelProducts array.objectrequired
> HotelProductsContains the HotelProduct objects.arrayrequired
HotelCodeSpecifies the unique ID of the property you create roomrates for.integerrequired
>> HotelProductContains the roomrate information.objectrequired
ProductNotifTypeSpecifies whether the request is to create a roomrate (New) or modify an existing one (Overlay).enumrequiredPossible values are New and Overlay. You must use New to create a roomrate.
>>> RoomTypesContains a RoomType object.objectrequired
>>>> RoomTypeContains the room type information.objectrequired
RoomTypeCodeSpecifies the room type id.integerrequired
MaxOccupancySpecifies the maximum occupancy of the roomtype.integeroptionalNote that specifying this value overrides the value set at the time of creating or updating the roomtype. Also, the pricing type of the roomrate is changed to RLO.
>>> RatePlansContains a RatePlan object.objectrequired
>>>> RatePlanContains the rate plan information.objectrequired
RatePlanCodeSpecifies the rate plan id.integerrequired
>>> ValueAddInclusionsContains a MealPlan object.objectoptional
>>>> MealPlanContains the meal plan information.objectoptionalIf you do not include this element, the default is no meal plan included.
MealPlanCodeSpecifies the meal plan id.integeroptionalTo see the list of meal plan codes at Booking.com, see meal plan codes.
>>> PolicyInfoContains the cancellation and booking policy objects.objectoptional
>>>> CancelPolicyContains the CancelPenalty objects.objectoptional
>>>>> CancelPenaltyContains the policy information.objectoptional
PolicyCodeSpecifies the policy (cancellation and prepayment policy combination) you assign to the roomrate.integeroptionalTo see the list of cancellation and prepaymeny policy codes at Booking.com, see cancellation and prepayment polices.
>>>> OverridePoliciesContains the OverridePolicy objects.objectoptional
>>>>> OverridePolicyContains the override policy information, which overwrites other policies set for this roomrate on the dates specified within the object.objectoptional
PolicyNameSpecifies the name of the override policy.stringoptional
>>>>>> BookDatesContains the BookDate objects.objectoptional
>>>>>>> BookDateContains the book date information, which specify the dates when the override policy overwrites other policies.objectoptional
StartSpecifies the start date of the override policy.stringoptionalFollows the format: YYYY-MM-DD.
EndSpecifies the end date of the override policy.stringoptionalFollows the format: YYYY-MM-DD.
>>>>>> ActiveWeekdaysContains the ActiveWeekDay objects.objectoptional
>>>>>>> ActiveWeekdayContains the active week day information, which specify the days when the override policy overwrites other policies.objectoptional
DaySpecifies the name of the day of the week.stringoptionalPossible values are: Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, and Sunday.
>>>> BookingRulesContains the BookingRule objects.objectoptional
>>>>> BookingRuleContains the booking policy information.objectoptional
MinimumAdvancedBookingOffsetSpecifies the minimum amount of time in which a room type must be booked relative to midnight (24:00 CE(S)T) of the check-in date start.stringoptionalThis is the format used: P[0-9]+(Y,M,D,H). An example is: P5H means the room must be booked before 19:00 on the day before the check-in date.
MaximumAdvancedBookingOffsetSpecifies the maximum amount of time in which a room type can be booked relative to midnight (24:00 CE(S)T) of the check-in date start.stringoptionalThis is the format used: P[0-9]+(Y,M,D,H). An example is: P14D means the room can be booked a maximum of 14 days before the check-in date.
ReleaseTimeOfDayStartSpecifies the time of the day the room type can start being booked.HH:MMoptionalThis allows time intervals of 15 minutes starting at midnight. For example: 10:15.
ReleaseTimeOfDayEndSpecifies the time of the day the room type can no longer be booked.HH:MMoptionalThis allows time intervals of 15 minutes starting at midnight. For example: 18:00.

Request body example

The following is a request body example:

<OTA_HotelProductNotifRQ>
  <HotelProducts HotelCode="64231">
    <HotelProduct ProductNotifType="New">
      <RoomTypes>
        <RoomType RoomTypeCode="6423112" />
      </RoomTypes>
      <RatePlans>
        <RatePlan RatePlanCode="12483478" />
      </RatePlans>
      <ValueAddInclusions>
        <MealPlan MealPlanCode="19" />
      </ValueAddInclusions>
      <PolicyInfo>
        <BookingRules>
          <BookingRule MinAdvancedBookingOffset="P1D" />
          <BookingRule MaxAdvancedBookingOffset="P14D" />
        </BookingRules>
        <CancelPolicy>
          <CancelPenalty PolicyCode="15"/>
        </CancelPolicy>
        <OverridePolicies>
          <OverridePolicy PolicyName="PTT_NON_REFUNDABLE">
            <BookDates>
              <BookDate Start="2021-06-06" End="2021-06-29"/>
              <BookDate Start="2021-07-06" End="2021-07-29"/>
            </BookDates>
            <ActiveWeekdays>
              <ActiveWeekday Day="Friday"/>
              <ActiveWeekday Day="Saturday"/>
              <ActiveWeekday Day="Sunday"/>
            </ActiveWeekdays>
          </OverridePolicy>
        </OverridePolicies>
      </PolicyInfo>
    </HotelProduct>
  </HotelProducts>
</OTA_HotelProductNotifRQ>

Response body example

The following is a successful response body example:

<OTA_HotelProductNotifRS>
  <Success />
</OTA_HotelProductNotifRS>
<!-- RUID: [UmFuZG9tSVYkc2RlIyh9YUedwgregreg3/GEVjlG+mTXmB9OkyhGlAKEMxDhfrI] -->

The following is a response body example when the limit of 400 roomrates is reached:

<OTA_HotelProductNotifRS>
    <Errors>
        <Error Type="10" Code="733" Status="NotProcessed" ShortText="Limit 400 of number of Room/Rate combinations has reached for hotel 64231."/>
    </Errors>
</OTA_HotelProductNotifRS>
<!-- RUID: [UmFuZG9tSVYkc2RlIyh9YUedwgregreg3/GEVjlG+mTXmB9OkyhGlAKEMxDhfrIcesvuhxkdje8uY] -->

Response body parameters

The following table describes the response elements:

ElementDescriptionTypeNotes
OTA_HotelProductNotifRSContains the response data.object
> successIndicates the success of the request.object
ruidSpecifies the unique ID of the request.stringYou can send this ID to Booking.com customer support if you run into an issue. This can help to understand what went wrong.

Updating a roomrate

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

The POST /ota/OTA_HotelProductNotif request enables you to update roomrates for your property.

When updating a roomrate, it is very important to do the following:

  • Set InvNotifType to Overlay.

  • Include all existing information: This means you send the roomrate information as if you create a new roomrate, changing the elements you want to update.
    → To retrieve most of your roomrate information, see retrieving roomrates.

    → To retrieve the policy names in the same way as you created them, see the CancelPolicy elements when retrieving property details.

Requirements for updating a roomrate

To create a roomrate on Booking.com, the following basic elements are required:

  • Property ID
  • Room type ID
  • Rate plan ID

Body parameters

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

ElementAttributeDescriptionTypeRequired/OptionalNotes
OTA_HotelProductNotifRQContains the HotelProducts array.objectrequired
> HotelProductsContains the HotelProduct objects.arrayrequired
HotelCodeSpecifies the unique ID of the property you create roomrates for.integerrequired
>> HotelProductContains the roomrate information.objectrequired
ProductNotifTypeSpecifies whether the request is to create a roomrate (New) or modify an existing one (Overlay).enumrequiredPossible values are New and Overlay. You must use New to create a roomrate.
>>> RoomTypesContains a RoomType object.objectrequired
>>>> RoomTypeContains the room type information.objectrequired
RoomTypeCodeSpecifies the room type id.integerrequired
MaxOccupancySpecifies the maximum occupancy of the roomtype.integeroptionalNote that specifying this value overrides the value set at the time of creating or updating the roomtype. Also, the pricing type of the roomrate is changed to RLO.
>>> RatePlansContains a RatePlan object.objectrequired
>>>> RatePlanContains the rate plan information.objectrequired
RatePlanCodeSpecifies the rate plan id.integerrequired
>>> ValueAddInclusionsContains a MealPlan object.objectoptional
>>>> MealPlanContains the meal plan information.objectoptionalIf you do not include this element, the default is no meal plan included.
MealPlanCodeSpecifies the meal plan id.integeroptionalTo see the list of meal plan codes at Booking.com, see meal plan codes.
>>> PolicyInfoContains the cancellation and booking policy objects.objectoptional
>>>> CancelPolicyContains the CancelPenalty objects.objectoptional
>>>>> CancelPenaltyContains the policy information.objectoptional
PolicyCodeSpecifies the policy (cancellation and prepayment policy combination) you assign to the roomrate.integeroptionalTo see the list of cancellation and prepaymeny policy codes at Booking.com, see cancellation and prepayment polices.
>>>> OverridePoliciesContains the OverridePolicy objects.objectoptional
>>>>> OverridePolicyContains the override policy information, which overwrites other policies set for this roomrate on the dates specified within the object.objectoptional
PolicyNameSpecifies the name of the override policy.stringoptional
>>>>>> BookDatesContains the BookDate objects.objectoptional
>>>>>>> BookDateContains the book date information, which specify the dates when the override policy overwrites other policies.objectoptional
StartSpecifies the start date of the override policy.stringoptionalFollows the format: YYYY-MM-DD.
EndSpecifies the end date of the override policy.stringoptionalFollows the format: YYYY-MM-DD.
>>>>>> ActiveWeekdaysContains the ActiveWeekDay objects.objectoptional
>>>>>>> ActiveWeekdayContains the active week day information, which specify the days when the override policy overwrites other policies.objectoptional
DaySpecifies the name of the day of the week.stringoptionalPossible values are: Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, and Sunday.
>>>> BookingRulesContains the BookingRule objects.objectoptional
>>>>> BookingRuleContains the booking policy information.objectoptional
MinimumAdvancedBookingOffsetSpecifies the minimum amount of time in which a room type must be booked relative to midnight (24:00 CE(S)T) of the check-in date start.stringoptionalThis is the format used: P[0-9]+(Y,M,D,H). An example is: P5H means the room must be booked before 19:00 on the day before the check-in date.
MaximumAdvancedBookingOffsetSpecifies the maximum amount of time in which a room type can be booked relative to midnight (24:00 CE(S)T) of the check-in date start.stringoptionalThis is the format used: P[0-9]+(Y,M,D,H). An example is: P14D means the room can be booked a maximum of 14 days before the check-in date.
ReleaseTimeOfDayStartSpecifies the time of the day the room type can start being booked.HH:MMoptionalThis allows time intervals of 15 minutes starting at midnight. For example: 10:15.
ReleaseTimeOfDayEndSpecifies the time of the day the room type can no longer be booked.HH:MMoptionalThis allows time intervals of 15 minutes starting at midnight. For example: 18:00.

Request body example

The following is a request body example:

<OTA_HotelProductNotifRQ>
  <HotelProducts HotelCode="64231">
    <HotelProduct ProductNotifType="Overlay">
      <RoomTypes>
        <RoomType RoomTypeCode="6423112" />
      </RoomTypes>
      <RatePlans>
        <RatePlan RatePlanCode="12483478" />
      </RatePlans>
      <ValueAddInclusions>
        <MealPlan MealPlanCode="0" />
      </ValueAddInclusions>
      <PolicyInfo>
        <BookingRules>
          <BookingRule MinAdvancedBookingOffset="P1D" />
          <BookingRule MaxAdvancedBookingOffset="P14D" />
        </BookingRules>
        <CancelPolicy>
          <CancelPenalty PolicyCode="15" />
        </CancelPolicy>
        <OverridePolicies>
          <OverridePolicy PolicyName="PTT_NON_REFUNDABLE">
            <BookDates>
              <BookDate Start="2021-06-06" End="2021-06-29"/>
              <BookDate Start="2021-07-06" End="2021-07-29"/>
            </BookDates>
            <ActiveWeekdays>
              <ActiveWeekday Day="Friday"/>
              <ActiveWeekday Day="Saturday"/>
            </ActiveWeekdays>
          </OverridePolicy>
        </OverridePolicies>
      </PolicyInfo>
    </HotelProduct>
  </HotelProducts>
</OTA_HotelProductNotifRQ>

Response body example

The following is a successful response body example:

<OTA_HotelProductNotifRS>
  <Success />
</OTA_HotelProductNotifRS>
<!-- RUID: [UmFuZG9tSVYkc2RlIyh9YUedwgregreg3/GEVjlG+mTXmB9Owf2f+Kq=Mzyiykpi6Yx5oKzRKEMxDhfrI] -->


Response body parameters

The following table describes the response elements:

ElementDescriptionTypeNotes
OTA_HotelProductNotifRSContains the response data.object
> successIndicates the success of the request.object
ruidSpecifies the unique ID of the request.stringYou can send this ID to Booking.com customer support if you run into an issue. This can help to understand what went wrong.

Removing roomrates

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

The POST /ota/OTA_HotelProductNotif request enables you to remove a roomrate by disconnecting the room type and rate plan.

Requirements for removing a roomrate

To remove a roomrate from Booking.com, you only need the following elements:

  • Property ID
  • Room type ID
  • Rate plan ID

You must also set ProductNotifType to Remove.

Body parameters

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

ElementAttributeDescriptionTypeRequired/OptionalNotes
OTA_HotelProductNotifRQContains the HotelProducts array.objectrequired
> HotelProductsContains the HotelProduct objects.arrayrequired
HotelCodeSpecifies the unique ID of the property you create roomrates for.integerrequired
>> HotelProductContains the roomrate information.objectrequired
ProductNotifTypeSpecifies whether the request is to remove a roomrate.enumrequiredValue to remove a roomrate is remove.
>>> RoomTypesContains a RoomType object.objectrequired
>>>> RoomTypeContains the room type information.objectrequired
RatePlanCodeSpecifies the rate plan id.integerrequired
>>> RatePlansContains a RatePlan object.objectrequired
>>>> RatePlanContains the rate plan information.objectrequired

Request body example

The following is a request body example:

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

Response body example

The following is a successful response body example:

<OTA_HotelProductNotifRS>
  <Success />
</OTA_HotelProductNotifRS>
<!-- RUID: [UmFuZG9tSVYkc2RlIyh9YUedwgregreg3/GcBkCkoW0/uhiPmwiL6pcbMzyiykpi6Yx5oKzRKEMxDhfrI] -->


Response body parameters

The following table describes the response elements:

ElementDescriptionTypeNotes
OTA_HotelProductNotifRSContains the response data.object
> successIndicates the success of the request.object
ruidSpecifies the unique ID of the request.stringYou can send this ID to Booking.com customer support if you run into an issue. This can help to understand what went wrong.

Retrieving active roomrates

Booking.com provides the B.XML endpoint to retrieve active roomrates details. Note that the endpoint doesn't return roomrates that specify deactivated room type or rate plan.

Schema difference between the OTA and B.XML endpoint's response

The following table captures the high-level difference between the two endpoints' responses. However, this is not an exhaustive list.

ElementsDescriptionAvailable in OTAAvailable in B.XML
NoShowPolicyNo show policy detailsYesNo
room > hotel_nameProperty nameNoYes
room > room_nameRoomtype nameNoYes
rate > max_personsRoomtype's maximum occupancy countNoYes
rate > policyCancellation policy nameNoYes
rate > rate_nameRate plan nameNoYes
Same value but in a different nameHotelProduct > ChildRaterate > is_child_rate
Same value but in a different nameRoomType > MaxOccupancyrate > fixed_occupancy
Difference between the bothGuaranteePayment > EffectiveFrom shows effective from valueguarantee_payment > policy_code shows cancellation policy code

Using the B.XML endpoint

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

The POST /xml/roomrates request enables you to retrieve active roomrates for a property.

You can:

  • Retrieve the relevant room type and rate plan IDs.
  • Query roomrate details with or without rewritten rate details.
  • Retrieve additional response details like flexible children prices, if they are set.

You can also use this endpoint to retrieve policy override information for active roomrates. Remember to use Booking.com IDs while creating availability and not your internal IDs.

To resolve security issues and non-standard system behavior, the v1.1 roomrates endpoint supports the UTF-16 encoding algorithm.

Header parameter

HeaderDescriptionTypeRequired/
Optional
Notes
Accept-VersionSpecify the version number to get the API functionality specific to that version.stringoptionalCurrently supports the version 1.1 (default).
Version 1.0 is deprecated. If used, the endpoint returns a 406 Not acceptable error.

Body parameters

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

ElementDescriptionTypeRequired/OptionalNotes
requestContains the request information.objectrequired
> hotel_idSpecifies the unique ID of the property you want to retrieve the active rate plans for.integerrequired
> policy_override_startSpecifies the start of the date range for which you want to retrieve policy override information.stringoptional
> policy_override_endSpecifies the end of the date range for which you want to retrieve policy override information.stringrequired if policy_override_start is specified

Request body example 1

The following is a request body example:

<request>
   <hotel_id>8011855</hotel_id>
</request>

Request body example 2

The following request body example retrieves roomrates that have policy overrides defined:

<request>
    <hotel_id>8011855</hotel_id>
    <policy_override_start_date>2024-01-12</policy_override_start_date>
    <policy_override_end_date>2024-02-29</policy_override_end_date>
</request>

Response body example

The following is a successful response body example:

<?xml version='1.0' encoding='UTF-8'?>
<roomrates>
    <rooms>
        <room id="801185509" hotel_id="8011855" hotel_name="HillTop Hotel" room_name="Penthouse Apartment">
            <rates>
                <rate id="25278032" max_persons="7" policy="General" policy_id="341337682" rate_name="summer rate" fixed_occupancy="2">
                    <meal_plan meal_plan_code="10"/>
                    <policies>
                        <booking_rules>
                            <booking_rule min_advanced_booking_offset="P1D"/>
                            <booking_rule max_advanced_booking_offset="P14D"/>
                        </booking_rules>
                        <cancel_policy>
                            <cancel_penalty policy_code="62"/>
                            <policy_overrides>
                                <policy_override start_date="2024-01-16" end_date="2024-02-23" policy_code="12"/>
                            </policy_overrides>
                        </cancel_policy>
                        <guarantee_payment_policy>
                            <guarantee_payment policy_code="1" effective_from="after_reservation_is_made" required="1"/>
                            <policy_overrides>
                                <policy_override start_date="2024-01-16" end_date="2024-02-23" policy_code="after_reservation_is_made"/>
                            </policy_overrides>
                        </guarantee_payment_policy>
                    </policies>
                    <pricing type="RLO">
                        <occupancy persons="3" percentage="125.0" round="1"/>
                        <occupancy persons="4" additional="10.0" round="0"/>
                        <additional_guests>
                            <price type="child" additional_guest_number="0" from_age="0" to_age="3" age_bucket_id="1" percentage="50.0"/>
                            <price type="child" additional_guest_number="0" from_age="4" to_age="12" age_bucket_id="2" percentage="30.0"/>
                            <price type="child" additional_guest_number="0" from_age="13" to_age="17" age_bucket_id="3" percentage="20.0"/>
                        </additional_guests>
                    </pricing>
                </rate>
            </rates>
        </room>
        <room id="801185512" hotel_id="8011855" hotel_name="HillTop Hotel" room_name="Villa">
            <rates>
                <rate id="33298392" max_persons="5" policy="Special Conditions 3" policy_id="342592279" rate_name="winter break rates" is_child_rate="1">
                    <meal_plan meal_plan_code="12"/>
                    <policies>
                        <booking_rules/>
                        <cancel_policy>
                            <cancel_penalty policy_code="166"/>
                        </cancel_policy>
                        <guarantee_payment_policy>
                            <guarantee_payment policy_code="166" effective_from="after_reservation_is_made" required="1"/>
                        </guarantee_payment_policy>
                    </policies>
                    <pricing type="Standard" price1="0"/>
                    <rate_relation follows_closed="3" follows_restrictions="1" follows_policygroup_id="1" follows_price="1" parent_rate_id="31105118" percentage="90.0"/>
                </rate>
            </rates>
        </room>
    </rooms>
</roomrates>
<!-- RUID: [f0020c39-f851-4e8d-cvd2q-98c9845a0940] -->


Response body parameters

The following table describes the response elements:

ElementAttributeDescriptionTypeNotes
roomratesContains the response details of the roomrate.object
roomsContains the room objects.object
> roomContains the room type information.object
idSpecifies the unique Booking.com ID of the room type.integer
hotel_idSpecifies the unique ID of the property.integer
hotel_nameSpecifies the name of the property.string
room_nameSpecifies the name of the room type.string
>> ratesContains the rate objects.object
>>> rateContains the rate plan information.object
idSpecifies the unique Booking.com ID of the rate plan.integer
is_child_rateSpecifies whether the rate plan has a rate relation with a parent rate plan.booleanPossible value: 1 (Yes, rate plan is a child rate plan)
fixed_occupancyOnly applicable for derived pricing types (RLO).
Shows the maximum number of occupants specified when creating or updating a roomrate.
integerThis value can be different from the max_persons value set while creating the roomtype.
max_personsSpecifies the maximum number of adults allowed in the room type.integer
policySpecifies the name of the policy.string
policy_idSpecifies the unique ID of the policy.integer
rate_nameSpecifies the name of the rate plan.string
>>>> occupanciesLists all occupancies from 1 to max_persons when pricing type is OBP.object
>>>> meal_planContains the meal plan information.object
meal_plan_codeSpecifies the meal plan ID.integerTo see the list of meal plan codes at Booking.com, see meal plan codes.
>>>> policiesContains the cancellation policy details.object
>>>>> booking_rulesContains the BookingRule objects.object
>>>>>> booking_ruleContains the booking policy information.object
min_advanced_booking_offsetSpecifies the minimum amount of time in which a room type must be booked relative to midnight (24:00 CE(S)T) of the check-in date start.stringThis is the format used: P[0-9]+(Y,M,D,H). An example is: P5H means the room must be booked before 19:00 on the day before the check-in date.
max_advanced_booking_offsetSpecifies the maximum amount of time in which a room type can be booked relative to midnight (24:00 CE(S)T) of the check-in date start.stringThis is the format used: P[0-9]+(Y,M,D,H). An example is: P14D means the room can be booked a maximum of 14 days before the check-in date.
>>>> cancel_policyContains the CancelPenalty object.object
>>>>> cancel_penaltyContains the policy information.object
policy_codeSpecifies the cancellation policy code.integerFor a full list of all the available cancellation codes, see the cancellation policy codes.
>>>>>>> policy_overridesContains the policy override elements.object
>>>>>>>> policy_overrideContains a policy override element.object
start_dateSpecifies the start date of the override policy.stringFollows the format: YYYY-MM-DD.
end_dateSpecifies the end date of the override policy.stringFollows the format: YYYY-MM-DD.
policy_codeSpecifies the cancellation policy (override) code.integerTo see the list of cancellation and prepayment policy codes at Booking.com, see cancellation and prepayment policies.
>>>> guarantee_payment_policyContains the guarantee payment details.object
>>>>> guarantee_paymentContains the guarantee payment details.object
policy_codeDeprecated. Please ignore this field. effective_from and required indicate the guarantee payment policyinteger
effective_fromSpecifies when the guarantee payment is charged.enumerated stringPossible values are:
- after_reservation_is_made - Enforces guests to make a payment immediately after reservation.
- after_cancellation_fee_begins: Enforces guests to make a payment after the free cancellation window has closed.
requiredSpecifies whether a guarantee payment is mandatory.booleanPossible values are:
- 1: Guarantee payment required
- 0: Guarantee payment is not required
>>>> pricingContains the pricing details.objectOnly available when you enable the feature: Include products extra info
(include_extra_info_room_rates) using the Provider portal.
typeSpecifies the pricing type.enumerated stringPossible values are:
- Standard
- RLO
- OBP
- LOS
price1Specifies whether the roomrate accepts a single occupancy price.booleanPossible values are:
1 - Accepts single occupancy price
0 - Does not support single occupancy price.
>>>>> additional_guestsContains the price elements for flexible child rate details (if they are already defined).array
>>>>>> priceContains the children pricing details.object
typeSpecifies that the prices are for children.string
additional_guest_numberSpecifies the order of prices within the same age bucket.integerFor example: Price for 1 (first child) is 5000, while price for 2 (second child) is 2500, and 3 (third child) is free (0). Default value is 0, meaning all prices are the same for children in the specified age bucket.
age_bucket_idSpecifies the ID of the property-level age bucket.integer
from_ageSpecifies the beginning of an age range.integer
to_ageSpecifies the end of an age range and is inclusive.integer
additionalSpecifies the fixed price for a child within a certain age bucket.integer
percentageSpecifies the price for the child as a percentage of the adult price.integerPossible value between 0 and 100.
>>>> rate_relationIf the rate plan is a child of a parent rate plan, then this object contains information on the inherited rate attributes.object
follows_closedIndicates whether the rate relation follows the status of the parent rate plan.booleanPossible values:
- 0 : Never follows parent rate plan status,
- 1 : Follows parent status when parent rate plan is open,
- 2 : Follows parent status when parent rate plan is closed, and
- 3 : Always follows parent rate plan status.
Default: 3.
follows_restrictionsIndicates whether the rate relation follows the restrictions of the parent rate plan.booleanPossible values: 0 and 1 (Follows parent rate plan). Default: 1
follows_policygroup_idIndicates whether the rate relation follows the policies of the parent rate plan.booleanPossible values: 0 and 1 (Follows parent rate plan). Default: 1
follows_priceIndicates whether the rate relation follows the price of the parent rate plan.booleanPossible values: 0 and 1 (Follows parent rate plan). Default: 1
parent_rate_idSpecifies the rate plan ID of the parent rate planstring
percentageSpecifies the percentage in relation to the price connected to the parent rate plan.integerMinimum value: 1. Maximum value: 200. For example, 80 refers to a 20% discount, while 120 refers to a 20% surplus.
>>>>> occupancyContains the occupancy details that you set using the derived pricing endpoint for multiple occupancies for a room type that has RLO pricing.
personsSpecifies the number of occupants.integer
percentage/additionalSpecifies the pricing as a percentage of the base price or as an additional amount from the base price.integerFor example, if the base price is 200 and the price for 2 occupants is specified as a percentage = 95, then the price for 2 is 90. (95% of 200).
Whereas, an additional = -15, means the price for 2 occupants is 185.
roundSpecifies whether the pricing is rounded down to two digits. Possible values are:
- 0 : not rounded down
- 1: Rounded down to two digits
enumerated string
RuidSpecifies the unique ID of the request.stringYou can send this ID to Booking.com customer support if you run into an issue. This can help to understand what went wrong.
Missing roomrates in the response?

The endpoint only returns active roomrates, that is, roomrates that contain active room types and/or rate plans. If you cannot see all the roomrates, it could be due to one of the following reasons:

  • The missing roomrate contains deactivated room type and/or rate plan. If you deactivate a rate plan, the endpoint does not return the roomrate created with the deactivated rate plan. Similarly the endpoint does not return roomrates that specify deactivated room type.
  • The missing roomrate is a roomrate that the property manages using the extranet. The extranet tags such roomrates as (No XML Rates) vs. roomrates that are managed using the API (XML Rates). The endpoint does not return roomrates managed by the connected partners using the extranet. If the property no longer wants to manage the rate in the extranet, they can get in touch with the Booking.com local support team for assistance in migrating the roomrate to be supported using the API.
  • You're trying to retrieve a child roomrate that specifies rate rewrite by calling the POST /xml/roomrates v.1.1 endpoint with support_rate_rewrite specified as 1 or the GET OTA_HotelProductNotif endpoint with SupportRateRewrite specified as 1. XML Res Rates are child rates that property manages the prices and restrictions in the extranet, while providers retrieve the reservations with the parent rate specified. You can change the value to 0 in the query parameter support_rate_rewrite or SupportRateRewrite in your retrieval requests to get the missing roomrates included in the response. In rare cases, you can map XML Res Rates when it is not rewritten from any parent rate. Since the rate rewrite is not complete, you should inform properties that they need to get in touch with the Booking.com local support team to complete the rate rewrite configuration of the XML Res Rates. For more information about rate rewrite and different types of rates, see What is Rate Rewrite.
To retrieve roomrates using the OTA endpoint, click here.

Using the OTA endpoint

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

The GET OTA_HotelProductNotif request enables you to retrieve active roomrates for a property. You can retrieve the relevant room type and rate plan IDs. Remember to use Booking.com IDs while creating availability and not your internal IDs.

You can also use this endpoint to retrieve policy override information for active roomrates.

Query parameters

The following table describes the elements you can add in the query:

ElementDescriptionTypeRequired/OptionalNotes
HotelCodeSpecifies the unique ID of the property you want to retrieve the active rate plans for.integerrequired
OverridePolicyStartSpecifies the start of the date range for which you want to retrieve policy override information.stringoptionalFollows the format (YYYY-MM-DD).
OverridePolicyEndSpecifies the end of the date range for which you want to retrieve policy override information.stringRequired if OverridePolicyStart is specifiedFollows the format (YYYY-MM-DD).
IncludeReadOnlyInclude roomrates that are read-only from the API. You cannot modify the read-only roomrates using the API. You can edit them only by using the Booking.com Extranet.booleanoptionalSpecify:
1 - Include read-only roomrates,
0 - Exclude read-only roomrates (default)
SupportRateRewriteIf set, then the API skips rates that have been rewritten to another rate.booleanoptionalSpecify:
1 - Skip rewritten roomrates,
0 - Include rewritten roomrates (default)

Query parameter example

The following is a query parameter example:

https://supply-xml.booking.com/hotels/ota/OTA_HotelProductNotif?HotelCode=123&IncludeReadOnly=1&OverridePolicyStart=2023-03-01&OverridePolicyEnd=2023-04-01&SupportRateRewrite=0

Response body example

The following is a successful response body example:

<?xml version="1.0" encoding="UTF-8"?>
<OTA_HotelProductNotifRS>
    <HotelProducts HotelCode="1">
        <HotelProduct ReadOnly="true" ChildRate="true">
            <RoomTypes>
                <RoomType RoomTypeCode="2" MaxOccupancy="5" />
            </RoomTypes>
            <RatePlans>
                <RatePlan RatePlanCode="11" />
            </RatePlans>
            <ValueAddInclusions>
                <MealPlan MealPlanCode="0" />
            </ValueAddInclusions>
            <PolicyInfo>
                <BookingRules>
                    <BookingRule MinAdvancedBookingOffset="P10D" />
                    <BookingRule MaxAdvancedBookingOffset="P10D1H" />
                    <BookingRule ReleaseTimeOfDayStart="1" />
                    <BookingRule ReleaseTimeOfDayEnd="2" />
                </BookingRules>
                <CancelPolicy>
                    <CancelPenalty PolicyId="325235" PolicyName="general" PolicyCode="222" />
                    <TPA_Extensions>
                        <NoShowPolicy Penalty="default"/>
                    </TPA_Extensions>
                </CancelPolicy>
                <GuaranteePaymentPolicy>
                    <GuaranteePayment EffectiveFrom="after_cancellation_fee_begins" PrePaymentRequired="true" />
                </GuaranteePaymentPolicy>
                <OverridePolicies>
                    <OverridePolicy PolicyId="333" PolicyName="override1">
                        <BookDates>
                            <BookDate Start="2023-01-01" End="2023-01-02" />
                        </BookDates>
                    </OverridePolicy>
                    <OverridePolicy PolicyId="444" PolicyName="override2">
                        <BookDates>
                            <BookDate Start="2023-01-03" End="2023-01-04" />
                        </BookDates>
                    </OverridePolicy>
                </OverridePolicies>
            </PolicyInfo>
            <TPA_Extensions>
                <PricingType Value="RLO" Price1="false">
                    <Occupancy MaxAdultOccupancy="1" Round="true" Percent="25.9" />
                    <Occupancy MaxAdultOccupancy="2" Round="false" Amount="25.0" />
                </PricingType>
                <RateRelation FollowsRestrictions="true" Percent="55.2" FollowsPolicy="true" FollowsPrice="false" ParentRatePlanCode="12" FollowsClosed="2" />
            </TPA_Extensions>
            <AdditionalGuestAmounts>
                <AdditionalGuestAmount AdditionalGuestNumber="0" MinAge="0" AgeBucketID="1" Amount="10.0" MaxAge="3" AgeQualifyingCode="8" />
                <AdditionalGuestAmount AdditionalGuestNumber="1" MinAge="4" AgeBucketID="2" Percent="50.0" MaxAge="12" AgeQualifyingCode="8" />
            </AdditionalGuestAmounts>
        </HotelProduct>
    </HotelProducts>
</OTA_HotelProductNotifRS>
<!-- RUID: [Z104215yh9YeXU9U0vxS7qEshGUqEDsuqNgPguHj+W/wiXPORW30Rmu5Qyp2=] -->



Response body parameters

The following table describes the response elements:

ElementAttributeDescriptionTypeNotes
OTA_HotelProductNotifRSContains the response data.object
> HotelProductsContains the roomrates details for a property.object
HotelCodeSpecifies the unique ID of the property.integer
>> HotelProductContains more information about the roomrate.object
ReadOnlySpecifies whether the rate plan is read only.booleanYou can set the ReadOnly property only through the Extranet.
ChildRateSpecifies whether the rate plan has a rate relation with a parent rate plan. If true then you will find a RateRelation element in the object.boolean
>>> RoomTypesContains the roomtype informationobject
RoomTypeCodeSpecifies the unique Booking.com ID of the room type.integer
MaxOccupancySpecifies the maximum number of adults allowed in the room type.integer
>>> RatePlansContains rate plan informationobject
>>>> RatePlanContains individual rate plan informationobject
RatePlanCodeSpecifies the unique Booking.com ID of the rate plan.integer
>>> ValueAddInclusionsContains meal plan detailsobject
>>>> MealPlanContains the meal plan information.object
MealPlanCodeSpecifies the meal plan ID.integerTo see the list of meal plan codes at Booking.com, see meal plan codes.
>>> PolicyInfoContains cancellation and prepayment policy detailsobject
>>>> BookingRulesContains the BookingRule objects.object
>>>>> BookingRuleContains the booking policy information.object
MinAdvancedBookingOffsetSpecifies the minimum amount of time in which a room type must be booked relative to midnight (24:00 CE(S)T) of the check-in date start.stringThis is the format used: P[0-9]+(Y,M,D,H). An example is: P5H means the room must be booked before 19:00 on the day before the check-in date.
MaxAdvancedBookingOffsetSpecifies the maximum amount of time in which a room type can be booked relative to midnight (24:00 CE(S)T) of the check-in date start.stringThis is the format used: P[0-9]+(Y,M,D,H). An example is: P14D means the room can be booked a maximum of 14 days before the check-in date.
ReleaseTimeOfDayStartstring
ReleaseTimeOfDayEndstring
>>>> CancelPenaltyContains individual cancellation and prepayment policy detailsobject
PolicyCodeSpecifies the cancellation penalty code.integer
PolicyIdSpecifies the unique ID of the policy.integer
PolicyNameSpecifies the name of the policy.string
>>>>> TPA_ExtensionsContains the no show information.object
>>>>>> NoShowPolicyContains the no show penalty details.object
PenaltySpecifies the penalty charged in case the guest does not turn up for the reservation.enumerated stringPossible values are:
- default: Use if you want the no show penalty to follow the cancellation fee.
- total_price: Use if you want the no show penalty to equal the total reservation price.
>>>> GuaranteePaymentPolicyContains the guarantee payment details.object
>>>>> GuaranteePaymentContains the guarantee payment details.object
EffectiveFromSpecifies when the guarantee payment is charged.enumerated stringPossible values are:
- after_reservation_is_made - Enforces guests to make a payment immediately after reservation.
- after_cancellation_fee_begins: Enforces guests to make a payment after the free cancellation window has closed.
PrePaymentRequiredSpecifies whether a guarantee payment is mandatory.booleanPossible values are:
- true: Guarantee payment required
- false: Guarantee payment is not required
>>>> OverridePoliciesContains the policy override elements.object
>>>>> OverridePolicyContains a policy override element.object
PolicyCodeSpecifies the cancellation policy (override) code.integerTo see the list of cancellation and prepayment policy codes at Booking.com, see cancellation and prepayment policies.
>>>>>> BookDatesContains the BookDate object.object
>>>>>> BookDateContains the overriding date.object
StartSpecifies the start date of the override policy.stringFollows the format: YYYY-MM-DD.
EndSpecifies the end date of the override policy.stringFollows the format: YYYY-MM-DD.
>>> TPA_ExtensionsContains pricing type information.object
>>>> PricingTypeContains the pricing and occupancy details.objectOnly available when you enable the feature: Include products extra info
(include_extra_info_room_rates) using the Provider portal.
ValueSpecifies the pricing type.enumerated stringPossible values are:
- Standard
- RLO
- OBP
- LOS
Price1Specifies whether the roomrate accepts a single occupancy price.booleanPossible values are:
true - Accepts single occupancy price
false - Does not support single occupancy price.
>>>>> OccupancyContains the maximum occupancy details specified while creating derived pricing.objectFor more information on how to set derived pricing, see [Create or update derived pricing rates.][b_xml-derivedprices]
MaxAdultOccupancySpecifies the maximum number of occupants allowed to stay for this rate.integer
Percent/AmountSpecifies the pricing as a percentage of the base price or as an additional amount from the base price.integerFor example, if the base price is 200 and the price for 2 occupants is specified as a percentage = 95, then the price for 2 is 90. (95% of 200).
Whereas, an additional = -15, means the price for 2 occupants is 185.
RoundSpecifies whether the pricing is rounded down to two digits. Possible values are:
- 0 : not rounded down
- 1: Rounded down to two digits
enumerated string
>>>> RateRelationIf the rate plan is a child of a parent rate plan, then this object contains information on the inherited rate attributes.object
FollowsClosedIndicates whether the rate relation follows the status of the parent rate plan.booleanPossible values:
- 0 : Never follows parent rate plan status,
- 1 : Follows parent status when parent rate plan is open,
- 2 : Follows parent status when parent rate plan is closed, and
- 3 : Always follows parent rate plan status.
Default: 3.
FollowsRestrictionsIndicates whether the rate relation follows the restrictions of the parent rate plan.booleanPossible values: true and false (Follows parent rate plan). Default: true
FollowsPolicyIndicates whether the rate relation follows the policies of the parent rate plan.booleanPossible values: true and false (Follows parent rate plan). Default: true
FollowsPriceIndicates whether the rate relation follows the price of the parent rate plan.booleanPossible values: true and false (Follows parent rate plan). Default: true
ParentRatePlanCodeSpecifies the rate plan ID of the parent rate planstring
PercentSpecifies the percentage in relation to the price connected to the parent rate plan.integerMinimum value: 1. Maximum value: 200. For example, 80 refers to a 20% discount, while 120 refers to a 20% surplus.
>>> AdditionalGuestAmountsContains the AdditionalGuestAmount elements.array
>>>> AdditionalGuestAmountContains the children pricing details.object
AgeQualifyingCodeSpecifies that the prices are for children.integerYou 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.integerYou must either use AgeBucketID or MinAge with MaxAge. However, the MinAge to MaxAge age range must match an existing age bucket age range.
MinAgeSpecifies the beginning of an age range.integerYou must either use AgeBucketID or MinAge with MaxAge. However, the MinAge to MaxAge age range must match an existing age bucket age range.
MaxAgeSpecifies the end of an age range and is inclusive.integerYou must either use AgeBucketID or MinAge with MaxAge. However, the MinAge to MaxAge age range must match an existing age bucket age range.
AmountSpecifies the price for a child within a certain age bucket.integerThe price cannot exceed the adult price for the roomrate. You must use either Amount and DecimalPlaces, or Percent alone.
DecimalPlacesSpecifies the number of decimal places to apply to Amount.integerThe default value is 0, which means the value of Amount is without a decimal point.
AmountSpecifies the price for a child within a certain age bucket.integerThe price cannot exceed the adult price for the roomrate. You must use either Amount and DecimalPlaces, or Percent alone.
PercentSpecifies the price for the child as a percentage of the adult price.integerPossible value between 0 and 100. You must use either Amount and DecimalPlaces, or Percent alone.
AdditionalGuestNumberSpecifies the order of prices within the same age bucket.integerThis means that you can set different prices per child within the same age bucket age range. For example: Price for 1 (first child) is 5000, while the 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.
RUIDSpecifies the unique ID of the request.stringYou can send this ID to Booking.com customer support if you run into an issue. This can help to understand what went wrong.