# Migrating to new versions

At Booking.com, we want to continuously improve the Connectivity Partner experience.
This means we try to build better products and deprecate the older versions.
When Booking.com plans to deprecate a feature or a product, you can no longer use it after the communicated date of deprecation.
To help facilitate the potential changes you must make, the migration guide tables on this page aim to help you understand what is deprecated and what its (improved) alternative is.



## Introducing v1.3 of POST OTA_HotelProductNotif

We have rolled out a few improvements to the `POST OTA_HotelProductNotif` endpoint in version `1.3`.

This section covers:

- The deprecation timeline of the v1.0 `POST OTA_HotelProductNotif` endpoint
- Comparison between the v1.0 and v1.3 `POST OTA_HotelProductNotif` endpoint


To use these improvements, specify v1.3 in the header parameter as outlined in the [Header parameters section](#header-parameters).

This section covers only the difference between v1.0 and v1.3 of the `POST OTA_HotelProductNotif` endpoint. For more information on the complete functionality of the `POST OTA_HotelProductNotif` endpoint, see [Managing roomrates](/connectivity/docs/room-type-and-rate-plan-management/managing-roomrates).

## Why the version upgrade from v1.0 to v1.3?

The `GET OTA_HotelProductNotif` endpoint is soon to launch v1.3. To maintain consistency between GET and POST endpoints, the POST endpoint version was aligned to v1.3.

The following is the expected behaviour when using the different version numbers:

- When calling v1.0, v1.1, or v1.2, the API routes to the v1.0 functionality until the sunset date.
- When calling v1.3, the API routes to the v1.3 functionality.


### Deprecation timeline for v1.0 POST endpoint

With the launch of v1.3 `OTA_HotelProductNotif` endpoint, we plan to deprecate and sunset v1.0 `POST OTA_HotelProductNotif` endpoint by the following timeline.

| Upcoming events | When |
|  --- | --- |
| Launch v1.3 `POST OTA_HotelProductNotif` endpoint | 28 April 2026 |
| Deprecation v1.0 `POST OTA_HotelProductNotif` endpoint | 15 May 2026 |
| Sunset v1.0 `POST OTA_HotelProductNotif` endpoint | 01 September 2026 |


#### What to expect after the deprecation and sunset date

- After the deprecation date, Booking.com will start sending deprecation warnings in the API response for v1.0 `POST OTA_HotelProductNotif` API calls.
- After the sunset date, Booking.com will automatically route `POST OTA_HotelProductNotif` API calls to v1.3 endpoint.


#### Header parameters

| Header | Description | Type | Required | Notes |
|  --- | --- | --- | --- | --- |
| `Accept-Version` | Specify the version number to get the API functionality specific to that version. | string | Required | Supports the following values:- 1.0: Current version (default) - 1.3: New version  If you specify v1.1 or v1.2, the API routes to the v1.0 functionality until the sunset date. |
| `Content-Type` | Request content type | string | Required | Must be `application/xml` |


### Comparison between v1.0 and v1.3

| What changed? | Old behaviour | New behaviour | Notes |
|  --- | --- | --- | --- |
| Removed `target` attribute | v1.0 supported `target` attribute. | v1.3 doesn't support `target` attribute. | Used to specify whether the request was for testing or production. Instead use test property IDs for testing and production property IDs for production. |
| Removed Value adds v1 support | v1.0 supported [Value adds](/connectivity/docs/room-type-and-rate-plan-management/implementing-value-adds-catalog-api) v1 and v2. | v1.3 only supports Value adds v2. |  |
| Supports removing mealplans | v1.0 didn't support overlaying mealplans. | v1.3 supports removing mealplans using the syntax `<Mealplan/>` or `<Mealplan MealPlanCode="0">`. |  |
| Specifying Property-level policies is required | Specifying Property-level policy was optional in v1.0. | Specifying property-level policies is required. | Create policies using the [Policies API](/connectivity/docs/policies-api/managing-policies) before attaching them to roomrates. |
| Flexible children prices always processed | v1.0 processed `<AdditionalGuestAmounts>` only if the `include_flexible_children_prices` [feature](https://connect.booking.com/feature_management) was enabled. | v1.3 processes `<AdditionalGuestAmounts>` regardless of the feature status. |  |


### New validations

`POST OTA_HotelProductNotif` v1.3 includes the following new validations:

- `ReleaseTimeOfDayStart` must be less than `ReleaseTimeOfDayEnd` and cannot be equal.
- Property must have the correct pricing model enabled before using Length of Stay (LOS) or Occupancy-Based Pricing (OBP) for roomrates. For more information, see [Pricing models](/connectivity/docs/pricing-models).


### What we expect from Connectivity Partners

Connectivity Partners should:

- Migrate to v1.3 before the sunset date.
- Use the `Accept-Version` header parameter and specify `1.3` when calling the `POST OTA_HotelProductNotif` endpoint.
- After the sunset date, calls without a version default to v1.3.
- Calling v1.0 `POST OTA_HotelProductNotif` endpoint explicitly after the sunset date returns an `HTTP 400 Version is not supported` error response.


### Error response format


```xml
<?xml version='1.0' encoding='UTF-8'?>
<OTA_HotelProductNotifRS xmlns="http://www.opentravel.org/OTA/2003/05" 
                         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                         xsi:schemaLocation="http://www.opentravel.org/OTA/2003/05 OTA_HotelProductNotifRS.xsd" 
                         Version="3.000">
  <Errors>
    <Error Code="497" 
           ShortText="CancelPenalty: conflicting PolicyID, PolicyName attributes defined" 
           Details="hotel_ids: 99748; room_ids: 123; rate_ids: 121112"/>
  </Errors>
</OTA_HotelProductNotifRS>
<!-- RUID: [UmFuZG9tSVetc] -->
```

# Troubleshooting error responses

This section lists the possible errors you might encounter while using the v1.3 `OTA_HotelProductNotif` endpoint.

## Error codes

The following table summarises the error codes for the `OTA_HotelProductNotif` v1.3 endpoint.

| Error code | Error message | Notes |
|  --- | --- | --- |
| 400 | Room ID is missing | Room ID is required for the request. |
| 497 | Room ID '%s' does not belong to the property | The room ID specified does not exist for this property. Retrieve valid room IDs using the `rooms` endpoint. |
| 403 | Request for forbidden hotel id(s) | Check the property ID and either provide the correct property ID or make sure the machine account credentials have enough permissions. |
| 500 | Internal server error | Booking.com service failed. |
| 400 | RatePlanCode: Attribute is required | The `RatePlanCode` attribute must be provided in the request. |
| 400 | RoomTypeCode: Attribute is required | The `RoomTypeCode` attribute must be provided in the request. |
| 400 | ProductNotifType: Attribute is required | The `ProductNotifType` attribute must be provided in the request. |
| 400 | MealPlanCode: Value should be one of xxfound xx | The `MealPlanCode` value is invalid. Provide a valid meal plan code. |
| 400 | CancelPenalty: PolicyCode, PolicyId, or PolicyName attribute is required | At least one of `PolicyCode`, `PolicyId`, or `PolicyName` must be specified for the cancellation penalty. |
| 400 | CancelPenalty: missing PolicyName or PolicyId attribute | Either `PolicyName` or `PolicyId` must be provided for the cancellation penalty. |
| 400 | PolicyName: cannot be empty. You need to provide either policyName or policyId | The `PolicyName` cannot be empty. Provide a valid policy name or policy ID. |
| 400 | BookDate: Start attribute is required | The `Start` attribute is required for the `BookDate` element. |
| 400 | BookDate: End attribute is required | The `End` attribute is required for the `BookDate` element. |
| 400 | Start date should be less than or equal to end date for BookDate element | The `Start` date must be less than or equal to the `End` date in the `BookDate` element. |
| 400 | Value is not a date (ISO 8601 date format: yyyy-mm-dd), found xx | The date format is invalid. Use ISO 8601 format: `yyyy-mm-dd`. |
| 400 | ActiveWeekday: Day attribute is required | The `Day` attribute is required for the `ActiveWeekday` element. |
| 400 | Day: Value is not a dayofweek (Full day of week name), found 'xx' | The `Day` value must be a valid full day of week name (e.g., MONDAY, TUESDAY). |
| 400 | FCR: You need to set additional guest Amount, Percent or AdultPercent | For Flexible Children Rates (FCR), you must specify one of: `Amount`, `Percent`, or `AdultPercent`. |
| 400 | Time: Invalid format, expected HH:MM or HH | The time format is invalid. Use `HH:MM` or `HH` format. |
| 400 | Time: Hour must be 0-23, minute must be 0-59 | Time values must be valid: hours between 0-23 and minutes between 0-59. |
| 400 | Duration: Invalid ISO-8601 duration format | The duration must be in valid ISO-8601 format. |
| 400 | TargetChannel: Value should be one of [ domestic, public, mobile_only, app_only, mobile_app ] | The `TargetChannel` value is invalid. Use one of the allowed values: `domestic`, `public`, `mobile_only`, `app_only`, or `mobile_app`. |
| 400 | PricingType: Value should be one of [ UNSPECIFIED, STANDARD, OBP, LOS, RLO ] | The `PricingType` value is invalid. Use one of the allowed values: `UNSPECIFIED`, `STANDARD`, `OBP`, `LOS`, or `RLO`. |
| 400 | ProductNotifType: Value should be one of [ NEW, OVERLAY, REMOVE ] | The `ProductNotifType` value is invalid. Use one of the allowed values: `NEW`, `OVERLAY`, or `REMOVE`. |
| 400 | NoShowPolicy Penalty: Value should be one of [ DEFAULT, TOTAL_PRICE ] | The `NoShowPolicy Penalty` value is invalid. Use one of the allowed values: `DEFAULT` or `TOTAL_PRICE`. |
| 400 | ProductStatusType: Value should be one of [ Active, Deactivated ] | The `ProductStatusType` value is invalid. Use one of the allowed values: `Active` or `Deactivated`. |
| 400 | EffectiveFrom: Value should be one of [ AFTER_CANCELLATION_FEE_BEGINS, AFTER_RESERVATION_IS_MADE ] | The `EffectiveFrom` value is invalid. Use one of the allowed values: `AFTER_CANCELLATION_FEE_BEGINS` or `AFTER_RESERVATION_IS_MADE`. |
| 400 | Day: Value should be one of [ MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY ] | The `Day` value is invalid. Use one of the allowed values: `MONDAY`, `TUESDAY`, `WEDNESDAY`, `THURSDAY`, `FRIDAY`, `SATURDAY`, or `SUNDAY`. |
| 733 | Hotel is not eligible to create Mobile Rate Plans | The property does not meet the requirements to create mobile rate plans. Contact Booking.com to verify eligibility. |
| 497 | CancelPenalty: conflicting PolicyID, PolicyName attributes defined | You cannot specify both `PolicyID` and `PolicyName` attributes in the same request. Use only one attribute to define the cancellation policy. |
| 733 | Defined policy id is not available for this hotel: %s | The policy ID specified does not exist for this property. Verify the policy ID using the policies endpoint. |
| 497 | PolicyName value is not correct: %s | The policy name provided is invalid. Check the correct policy name format. |
| 733 | Defined policy name is not available for this hotel: %s | The policy name specified does not exist for this property. Verify available policy names for the property. |
| 733 | Defined policy code is not available for this hotel: %s | The policy code specified does not exist for this property. Verify available policy codes for the property. |
| 497 | Channel setup is not allowed for net rate products | Net rate products cannot have channel configurations. Remove channel setup from the request. |
| 733 | Net rates must have a non-refundable policy | All net rate products require a non-refundable cancellation policy. Add a non-refundable policy to the request. |
| 497 | Policy overrides are not allowed for net rates | Net rate products do not support policy overrides. Remove policy override configurations from the request. |
| 497 | Value Added Services are not allowed for net rates | Net rate products cannot include value-added services or bundles. Remove bundle configurations from the request. |
| 320 | Bundle validation failed | The bundle configuration provided is invalid. Verify bundle settings and requirements. |
| 733 | MaxOccupancy is not supported for products with LOS (Length of Stay) or OBP (Occupancy-Based Pricing) models | Cannot set RLO (Rate per Length of Occupancy) pricing model when using LOS or OBP pricing. Choose a compatible pricing model. |
| 733 | Cannot set Length of Stay pricing model. Property does not have LOS enabled. Enable LOS at property level using the `Change pricing model` tool | The property must have LOS pricing enabled at the property level before creating LOS rate plans. Enable LOS pricing via the extranet or contact Booking.com. |
| 733 | Cannot set Occupancy-Based pricing model. Property does not have OBP enabled. Enable OBP at property level using the `Change pricing model` tool | The property must have OBP pricing enabled at the property level before creating OBP rate plans. Enable OBP pricing via the extranet or contact Booking.com. |
| 497 | Room ID '%s' does not belong to hotel ID '%s' | The room ID specified does not belong to the property ID in the request. Verify the correct room ID for the property. |
| 497 | Request for forbidden hotel id(s) | You don't have access to the requested hotel ID. Verify the correct hotel ID for the property. |
| 44 | Either Percent, Adult Percent or Amount should exist, and only one should be defined | Additional guest pricing must specify exactly one pricing type: `Percent`, `AdultPercent`, or `Amount`. Do not mix multiple pricing types. |
| 44 | Cannot use percentage when setting children prices for OBP or LOS room rates | When setting children prices for OBP or LOS pricing models, use fixed amounts only. Percentage-based pricing is not supported for these models. |
| 497 | Rate ID does not belong to the property. Room ID: %s, Rate Id: %s | The rate ID specified does not exist for this property. Retrieve valid rate IDs using the `roomrates` endpoint. |
| 733 | Invalid Maximum Advanced res, Minimum value is one hour and maximum is 365 days. Room ID: %s, Rate Id: %s | The maximum advance reservation window must be between 1 hour and 365 days. Adjust the value to be within the allowed range. |
| 733 | Invalid Minimum Advanced res, Minimum value is one hour and maximum is 365 days. Room ID: %s, Rate Id: %s | The minimum advance reservation window must be between 1 hour and 365 days. Adjust the value to be within the allowed range. |
| 733 | Invalid Minimum/Maximum Advanced res, Value of Minimum advanced res should be lower than maximum advanced res. Room ID: %s, Rate Id: %s | The minimum advance reservation value must be less than the maximum advance reservation value. Verify the booking window configuration. |
| 733 | Invalid release time start, the value must represent a quarter hour of the day. Allowed "range" for Time.hours [0, 23] both inclusive. Allowed "values" for Time.minutes {0, 15, 30, 45}. Room ID: %s, Rate Id: %s | Release time start must be in quarter-hour increments. Hours must be 0-23, and minutes must be 0, 15, 30, or 45. |
| 733 | Invalid release time end, the value must represent a quarter hour of the day. Allowed "range" for Time.hours [0, 23] both inclusive. Allowed "values" for Time.minutes {0, 15, 30, 45}. Room ID: %s, Rate Id: %s | Release time end must be in quarter-hour increments. Hours must be 0-23, and minutes must be 0, 15, 30, or 45. |
| 733 | Invalid release time start/end, Value of release time start should be less than release time end. Room ID: %s, Rate Id: %s | The release time start must be earlier than the release time end. Verify the time window configuration. |
| 119 | Occupancy exceeds room capacity. Room ID: %s, Rate Id: %s | The occupancy value specified exceeds the maximum occupancy configured for the room. Reduce the occupancy or update the room's maximum occupancy setting. |
| 119 | Leading occupancy should be a positive number. Room ID: %s, Rate Id: %s | The leading occupancy value must be a positive number greater than zero. |
| 733 | Cannot set pricing model. There are rate relations for the same rate with different pricing models. Room ID: %s, Rate Id: %s | All related rates must use the same pricing model. Verify that parent and child rates have matching pricing models. |
| 150 | Cannot preform action, currency switch is in progress. Please try again later. | A currency change is currently being processed for this property. Wait until the currency switch is complete before making updates. |
| 497 | Invalid HotelProduct RoomType: %s and RatePlan: %s | The combination of room type and rate plan is invalid. Verify that the rate plan is configured for the specified room type. |


## Changes to the OTA_HotelRatePlanNotif endpoint

We rolled out the following changes to the v1.1 `OTA_HotelRatePlanNotif` endpoint:

- Supports creating a maximum of 200 active rate plans for a property.
- Doesn’t support Target attribute in the request body.
- Updated error description when a request tries to create a duplicate rate plan name.


For a detailed explanation of the `OTA_HotelRatePlanNotif` endpoint, see [Managing rate plans.](/connectivity/docs/room-type-and-rate-plan-management/managing-rate-plans#managing-rate-plans)

## Changes to the Messaging API

The Messaging API now supports two versions. To understand the key changes and implications when migrating to version 1.2, please refer to the [Version 1.2](/connectivity/docs/messaging-api/version-history#version-1.2) documentation.

## Using Property management APIs along with Content API

The following section lists the recommended migration approach when using any of the following Property management APIs along with the Content API (HDCN endpoint):

- Property Details API
- Property Settings API
- Contacts API
- Property Facilities API
- Charges API
- Cancellation Policies


The Content API's default overlay behavior treats missing data in updates as intentional omissions.
This can accidentally remove data you've set through the Property management APIs if you don't include the same data in subsequent HDCN requests.

To prevent this issue and maintain your new API's data even when it's not included in HDCN updates, Booking.com is introducing a set of `domain_update_lock_<api_name>` features.

The following table lists the Property management APIs and their corresponding feature names.

| API | Feature name |
|  --- | --- |
| Property Details | [domain_update_lock_property_general_info](#using-property-details-api-along-with-content-api) |
| Property Settings API | [domain_update_lock_settings_general](#feature-domain_update_lock_settings_general)[domain_update_lock_settings_pets](#feature-domain_update_lock_settings_pets)[domain_update_lock_settings_sp](#feature-domain_update_lock_settings_sp)[domain_update_lock_settings_accepted_pt](#feature-domain_update_lock_settings_accepted_pt) [domain_update_lock_settings_cancel_ex](#feature-domain_update_lock_settings_cancel_ex)[domain_update_lock_settings_age_buckets](#feature-domain_update_lock_settings_age_buckets)[domain_update_lock_settings_cp](#feature-domain_update_lock_settings_cp)[domain_update_lock_settings_invoice](#feature-domain_update_lock_settings_invoice)[domain_update_lock_settings_french_taxes](#feature-domain_update_lock_settings_french_taxes)[domain_update_lock_settings_rtb](#feature-domain_update_lock_settings_rtb)  |
| Contacts API | [domain_update_lock_contacts](#using-contacts-api-along-with-content-api) |
| Facilities API | [domain_update_lock_facilities](#using-facilities-api-along-with-content-api) |
| Charges API | [domain_update_lock_charges](#using-charges-api-along-with-content-api) |
| Policies API | [domain_update_lock_cancellation_policies](#using-policies-api-along-with-content-api) |


#### Using Rooms API along with OTA_HotelInvNotif API

If you are migrating from [OTA_HotelInvNotif](/connectivity/docs/tsk-modify-room-amenities) endpoint to Rooms API endpoints, Booking.com currently doesn't support a feature. We therefore recommend you to migrate to [Rooms API](/connectivity/docs/rooms-api/introduction-to-rooms-api) and the Room facilities and Bathroom within the [Facilities API](/connectivity/docs/content-api-modules/facilities-api/introduction-to-facilities-api) in one go.

### How to use the new domain update lock feature?

This section provides guidance on how to enable the domain update lock feature if you continue to use the Content API (`OTA_HotelDescriptiveContentNotif`) endpoint along with the Property management APIs.

1. Keep your existing HDCN request unchanged and continue to send the full HDCN request without omitting any details. When the feature is on we ignore the related updates in HDCN. Note that the request must be valid and pass existing validations.
2. Test the feature on a per-request basis. For example, when sending the request, attach to your HTTP Header `Features` value `domain_update_lock_charges`. You can specify multiple feature names separated by a comma to include multiple features at the same time. For more information, see [Testing the features.](#testing-the-features)
3. Once satisfied with the responses from both the `OTA_HotelDescriptiveContentNotif` and the Property management API, switch the feature on for all your requests using the Provider Portal.
a. Navigate to the [Provider Portal](https://connect.booking.com/feature_management?lang=en). Log in with your credentials. Click Administration -> Feature Management.
b. Enable the features and click Save.


### Using Property Details API along with Content API

To prevent your Property Details API related data from being accidentally updated via HDCN updates, Booking.com has introduced the `domain_update_lock_property_general_info` feature. This feature only applies to connectivity partners who have implemented the Property Details API.

Continue sending the full HDCN payload without omitting any information and enable the feature `domain_update_lock_property_general_info` after you have tested and implemented the Property Details API.

If you enable the feature `domain_update_lock_property_general_info`, subsequent HDCN calls will not make updates to the following fields.

| Ignored root parameter in HDCN | Notes |
|  --- | --- |
| [>> HotelDescriptiveContent > ID](/connectivity/docs/tsk-create-property) | Specifies a custom property ID. |
| [**>>** HotelDescriptiveContent.HotelName](/connectivity/docs/tsk-create-property/#hoteldescriptivecontent) |  |
| [>> HotelDescriptiveContent > LanguageCode](/connectivity/docs/tsk-create-property/#hoteldescriptivecontent) |  |
| [>> HotelDescriptiveContent > CurrencyCode](/connectivity/docs/tsk-create-property/#hoteldescriptivecontent) |  |
| [**>>>>>** HotelCategory](/connectivity/docs/tsk-create-property/#hotelcategory) |  |
| [**>>>** ContactInfos](/connectivity/docs/tsk-create-property/#contactinfos) | Where `ContactProfileType=PhysicalLocation` |
| [**>>>>** Position](/connectivity/docs/tsk-create-property/#position) |  |
| [**>>>>>** PolicyInfo.CheckInTime](/connectivity/docs/tsk-create-property/#policyinfo) |  |
| [**>>>>>** PolicyInfo.CheckOutTime](/connectivity/docs/tsk-create-property/#policyinfo) |  |
| [**>>>** AffiliationInfo > Awards > Award.Rating](/connectivity/docs/tsk-create-property/#affiliationinfo) |  |
| [**>>>** HotelInfo.Languages](/connectivity/docs/tsk-create-property/#hotelinfo) | Contains the language(s) spoken at the property. |
| [ >> OwnershipManagementInfo > CompanyName.Code](/connectivity/docs/properties#ownershipmanagementinfo) |  |
| [**>>>>** TotalNumberOfFloors.Number](/connectivity/docs/tsk-create-property/#totalnumberoffloors) |  |
| [**>>>>>** GuestRoomInfo.Quantity](/connectivity/docs/tsk-create-property/#guestroominfo) |  |


For testing the features per-request basis before enabling the feature using the Provider Portal, see [Testing the features](#testing-the-features) section.

### Using Property Settings API along with Content API

Enable the following features once you have tested and implemented the related sections in the Property Settings API. With the features enabled, you can continue to send the full HDCN payload without omitting any information.

Once you have tested and implemented the full functionality of the Property Settings API, you can enable all the `domain_update_lock_settings_*` features.

##### Feature `domain_update_lock_settings_general`

If you enable the feature `domain_update_lock_settings_general`, subsequent HDCN calls will not make updates to the following fields.

| Ignored root parameter in HDCN | Notes |
|  --- | --- |
| [HotelInfo > TPA_Extensions > PaymentPreferences](/connectivity/docs/collecting-cvc#implementing-or-disabling-cvc-collection) |  |
| [TPA_Extensions > GuestInformation](/connectivity/docs/api-reference/guestinformation#guestinformation) | Affecting data related to booker address, curfew, age restrictions |
| [TPA_Extensions > LongStayInfo](/connectivity/docs/api-reference/longstayinfo#longstayinfo) |  |
| [TPA_Extensions > PricingType](/connectivity/docs/api-reference/pricingtype#ota_hoteldescriptivecontentnotif) |  |


##### Feature `domain_update_lock_settings_pets`

If you enable the feature `domain_update_lock_settings_pets`, subsequent HDCN calls will not make updates to the following fields.

| Ignored root parameter in HDCN |
|  --- |
| [Policies > Policy > PetsPolicies](/connectivity/docs/api-reference/petspolicy#fields) |


##### Feature `domain_update_lock_settings_sp`

If you enable the feature `domain_update_lock_settings_sp`, subsequent HDCN calls will not make updates to the following fields.

| Ignored root parameter in HDCN | Notes |
|  --- | --- |
| [TPA_Extensions > StandardPhrases](/connectivity/docs/fine-print) | Including `HotelChainBedLinen`, `SecurityDeposit` and `Renovation` with the rest of all Standard Phrases. |


##### Feature `domain_update_lock_settings_accepted_pt`

If you enable the feature `domain_update_lock_settings_accepted_pt`, subsequent HDCN calls will not make updates to the following fields.

| Ignored root parameter in HDCN |
|  --- |
| [TPA_Extensions > AcceptedPayments](/connectivity/docs/api-reference/acceptedpayments) |


##### Feature `domain_update_lock_settings_cancel_ex`

If you enable the feature `domain_update_lock_settings_cancel_ex`, subsequent HDCN calls will not make updates to the following fields.

| Ignored root parameter in HDCN |
|  --- |
| [TPA_Extensions > CancellationGracePeriod > HoursAfterBooking](/connectivity/docs/api-reference/cancellationgraceperiod) |
| [TPA_Extensions > CancellationGracePeriod > WeeksBeforeCheckIn](/connectivity/docs/api-reference/cancellationgraceperiod) |


##### Feature `domain_update_lock_settings_age_buckets`

If you enable the feature `domain_update_lock_settings_age_buckets`, subsequent HDCN calls will not make updates to the following fields.

| Ignored root parameter in HDCN | Notes |
|  --- | --- |
| [TPA_Extensions > AgeBuckets](/connectivity/docs/flexible-children-rates/managing-a-children-policy#what-are-age-buckets) | Affecting only `AgeBuckets` in the Policy. |


##### Feature `domain_update_lock_settings_cp`

If you enable the feature `domain_update_lock_settings_cp`, subsequent HDCN calls will not make updates to the following fields.

| Ignored root parameter in HDCN | Notes |
|  --- | --- |
| [Policies > Policy > PolicyInfo](/connectivity/docs/setting-up-children-policies-and-pricing#setting-up-children-policies-and-child-rates-pricing-1) | Affecting only `AcceptedGuestType` and `MinGuestAge` |
| [Policies > Policy > FeePolicies](/connectivity/docs/setting-up-children-policies-and-pricing#setting-up-children-policies-and-child-rates-pricing-1) | Affecting only Fee Policies with `Code` that has values:  37, 38, 44 |


##### Feature `domain_update_lock_settings_invoice`

If you enable the feature `domain_update_lock_settings_invoice`, subsequent HDCN calls will not make updates to the following fields.

| Ignored root parameter in HDCN | Notes |
|  --- | --- |
| [ContactInfos > ContactInfo](/connectivity/docs/api-reference/contactinfo) | In HDCN, the contact where `ContactProfileType=invoices` is used to update invoice details. In the new APIs, this is updated in [Property Settings API](/connectivity/docs/content-api-modules/property-details-api/implementing-property-api-settings) and invoice contact in [Contacts API](/connectivity/docs/contacts-api/implementing-contacts-api-ga). |
| [TPA_Extensions > InvoiceDetails](/connectivity/docs/api-reference/invoicedetails) | Brazil tax info |


##### Feature `domain_update_lock_settings_french_taxes`

If you enable the feature `domain_update_lock_settings_french_taxes`, subsequent HDCN calls will not make updates to the following fields.

| Ignored root parameter in HDCN |
|  --- |
| [TPA_Extensions > PropertyTaxInfo](/connectivity/docs/api-reference/propertytaxinfo) |


##### Feature `domain_update_lock_settings_rtb`

If you enable the feature `domain_update_lock_settings_rtb`, subsequent HDCN calls will not make updates to the following fields.

| Ignored root parameter in HDCN |
|  --- |
| [TPA_Extensions > RTB](/connectivity/docs/tsk-create-property#enabling-request-to-book) |


For testing the features per-request basis before enabling the feature using the Provider Portal, see [Testing the features](#testing-the-features) section.

### Using Contacts API along with Content API

After fully migrating to Contacts API, you can enable the `domain_update_lock_contacts` feature to prevent HDCN updating data related to Contacts API. Subsequent HDCN calls will not make updates to the following fields.

| Ignored root parameter in HDCN | Notes |
|  --- | --- |
| [**>>>** ContactInfos](/connectivity/docs/tsk-create-property/#contactinfos) | - Where `ContactProfileType` is not `PhysicalLocation`. - Invoice contact (`ContactProfileType=invoices`), has double purpose in HDCN: to update invoice contact itself and update invoice details. This feature will only lock updating the contact itself. To prevent invoice details from being updated please check [`domain_update_lock_settings_invoice_settings`](/connectivity/docs/property-content-management/property-content-management-overview#feature-domain_update_lock_settings_invoice_settings) |


For testing the feature per-request basis before enabling the feature using the Provider Portal, see [Testing the features](#testing-the-features) section.

### Using Facilities API along with Content API

Facilities API consists of 3 endpoints (Property Facilities, Room Facilities, Bathrooms).

Property Facilities are part of [HDCN](/connectivity/docs/tsk-create-property) endpoint and can be locked using `domain_update_lock_facilities` feature.

Room facilities and Bathrooms are part of [HIN](/connectivity/docs/ota-hotelinvnotif) endpoint, therefore, is not affected by this feature.

Once you start managing property facilities in Facilities API, you can choose to enable the feature for locking property facilities data domain updates in [HDCN](/connectivity/docs/tsk-create-property).

Once you enable the feature, subsequent HDCN calls will not make updates to the following fields.

| Ignored root parameter in HDCN | Notes |
|  --- | --- |
| [FacilityInfo -> Restaurants](/connectivity/docs/api-reference/restaurant) |  |
| [HotelInfo -> Services](/connectivity/docs/api-reference/services) |  |
| [Policies -> FeePolicies -> TPA_Extensions -> InternetFeePolicy](/connectivity/docs/api-reference/internetfeepolicy) | `FeePolicy[@Code=5035]` |
| [Policies -> FeePolicies -> TPA_Extensions -> ParkingFeePolicy](/connectivity/docs/api-reference/parkingfeepolicy) | `FeePolicy[@Code=5036]` |


For testing the feature per-request basis before enabling the feature using the Provider Portal, see [Testing the features](#testing-the-features) section.

For more information on Facilities API, see [Facilities API overview.](/connectivity/docs/content-api-modules/facilities-api/introduction-to-facilities-api)

### Using Charges API along with Content API

To prevent your Charges data from being accidentally deleted when it's not included in HDCN updates, Booking.com has introduced the `domain_update_lock_charges` feature.

If you enable the feature `domain_update_lock_charges`, subsequent HDCN calls will not make updates to the following fields.

| Ignored root parameter in HDCN | Notes |
|  --- | --- |
| [Policies - > FeePolices](/connectivity/docs/api-reference/feepolicies) | Excluding: - ChildrenPolicy-related FeePolicies: 37, 38, 44- Parking FeePolicy: 5035- Internet policy: 5036 |
| [Policies - > TaxPolicies](/connectivity/docs/api-reference/taxpolicies) |  |


For testing the feature per-request basis before enabling the feature using the Provider Portal, see [Testing the features](#testing-the-features) section.

For more information on Charges API, see [Charges API overview.](/connectivity/docs/charges-api/charges-api-overview)

### Using Policies API along with Content API

To prevent your Policy data from being accidentally deleted when it's not included in HDCN updates, Booking.com has introduced the `domain_update_lock_cancellation_policies` feature.

If you enable the feature `domain_update_lock_cancellation_policies`, subsequent HDCN calls will not make updates to the following fields.

| Ignored root parameter in HDCN |
|  --- |
| [Policies - > GuaranteePaymentPolicy](/connectivity/docs/api-reference/guaranteepayment) |
| [Policies - > CancelPolicy](/connectivity/docs/api-reference/cancelpenalty) |


For testing the feature per-request basis before enabling the feature using the Provider Portal, see [Testing the features](#testing-the-features) section.

For more information on Policy API, see [Policy API overview.](/connectivity/docs/policies-api/managing-policies)

### Testing the features

Enabling the feature impacts all the properties that you manage. Before doing so, to test whether the HDCN call works as intended, pass the feature name in the Header of your HDCN request on a per-request basis.

For example:


```cURL
curl --location 'https://supply-xml.booking.com/hotels/ota/OTA_HotelDescriptiveContentNotif' \
--header 'Content-Type: text/plain' \
--header 'Authorization: ••••••' \
--header 'Features: domain_update_lock_charges,domain_update_lock_facilities'
```

If you are satisfied with the feature behaviour, then enable it to omit/ignore any Charges and Facilities related data updates provided in subsequent HDCN calls.

## Changes to the Derived Prices endpoint

When using v1.1 of the `derivedprices` endpoint, you can see the following change in the API behaviour:

- Setting the same value for both occupancy (in the `persons` attribute) and the `leading_occupancy` returns an `OCCUPANCY_INVALID` error with the following message: `Occupancy should be positive, different than leading_occupancy, and lower than the room's capacity`.  Make sure to specify an occupancy value which is different from the `leading_occupancy` value.


For a detailed explanation of the `/hotels/xml/derivedprices` endpoint, see [Create or update derived pricing rates.](/connectivity/docs/b_xml-derivedprices#create-or-update-derived-pricing-rates)

## Migrating to a new promotion ID prefix

The Promotions API, as of March 27, 2024, returns the new prefix `TB` instead of the previously used `VR` prefix whenever you create or update a promotion.
We plan to automatically change the ID of promotions prefixed with `VR` to a new ID using the `getpromotions` endpoint, effective from January 31st, 2025. After the change, those promotions will get a new ID prefixed with `TB`, followed by a unique string.

### What we expect from Connectivity Partners

To ensure all your promotions use the new prefix, complete the following actions before January 31st, 2025:

1. Retrieve all existing promotions for a property using the [`getpromotions` endpoint](/connectivity/docs/b_xml-getpromotions#retrieving-promotion-details) and note down the promotions with prefix `VR`. Make sure to specify the `hotel_id` and `active` parameters.


**Request example**

The following example shows how to retrieve all active promotions including those with prefix `VR` of an existing property using the `POST /hotels/xml/getpromotions` endpoint.


```xml
<request>
    <hotel_id>12312</hotel_id>
    <active>1</active>
 </request>
```

1. For each promotion still using the `VR` prefix, generate a new promotion ID with the `TB` prefix. Use the [`POST /promotions` endpoint](/connectivity/docs/b_xml-promotions#updating-a-promotion) and send only the existing promotion ID in the request body. This will return a new promotion ID with the `TB` prefix.


**Request example**

The following example shows how to update the ID of an existing promotion with a `VR` prefix to get a new promotion ID with a `TB` prefix using the `POST /hotels/xml/promotions` endpoint.


```xml
<request>
    <hotel_id>12312</hotel_id>
     <promotion 
         id="VR123456789">
     </promotion>
 </request>
```

**Sample response**


```xml
<promotions>
    <id>TB437287097257498474</id>
</promotions>
<!-- RUID: [...] -->
```

## Changes to the Reservations API response

We have rolled out changes to the way the Reservations API calculates and displays the breakdown of the total price for each booking.
You can get the changed Reservations API response by enabling the feature: *Payments Clarity Package v2* (`payment_clarity_package_v2`).

For more information, see the table below:

| Schema | More information |
|  --- | --- |
| When using the OTA schema | See [Implementing Payments Clarity Package v2.](/connectivity/docs/reservations-api/implementing-payments-clarity-package-v2-ota)  Also, see [Include Payments Clarity Package v2](/connectivity/docs/reservations-api/retrieving-new-reservations-ota#include-payments-clarity-package-v2) section in the Retrieving new reservations topic. |
| When using the B.XML schema | See [Implementing Payments Clarity Package V2 using B.XML.](/connectivity/docs/reservations-api/implementation-guide-pcpv2-bxml) Also, see [Include Payments Clarity Package V2.](/connectivity/docs/reservations-api/managing-reservations-bxml#include-payments-clarity-package-v2) section in the Retrieving reservations using B.XML topic. |


## Changes to the Market insights API error handling

We are changing how we return error code responses in the Market insights API.
To follow the new Online Travel Agency(OTA) standards in processing error codes, the Market Insights API will return OTA error codes in place of error strings.

Instead of a string value in the  `[Old] Error Code` column, the API returns a numeric value as specified in the `[New] OTA Error Code` column.
The API returns the old `message` values in the `Description` field.

| HTTP Error Code | [Old] Error Code | [New] OTA Error Code | Message | Description | Reason and Possible Fix |
|  --- | --- | --- | --- | --- | --- |
| HTTP 400 Bad Request | FORBIDDEN | 450 | Unable to process. | Can be one of the following: - The property is not eligible for retrieving demand data  - The provider is not eligible for retrieving demand data  - This account doesn't have access to this property | Can occur due to one of the following reasons:  - Incorrect endpoint URL/HTTP method or invalid JSON body. Make sure to use the correct endpoint URL/HTTP method or check if the request has a valid JSON body. |


For more information on the Market insights API, see [Analysing Booking.com guests' demand data.](/connectivity/docs/market-insights-api/managing-market-insights-demand-data)

## Changes to the LOS pricing endpoint

The following improvements are rolled out to the `/hotels/csv/los_pricing` endpoint v1.1. Version 1.0 was sunset on June 10, 2024 and is no longer available.

The following are the changes implemented in the v1.1 `hotels/csv/los_pricing` endpoint:

- The occupancy value cannot exceed the value set in the `MaxAdultOccupancy`. Specifying the maximum occupancy value (`MaxOccupancy`) in v 1.0 doesn't return a warning. Whereas, in v 1.1 the endpoint returns a warning. Make sure to specify a value not exceeding the `MaxAdultOccupancy` value.
- If the specified price per night exceeds the maximum price (€50000 or equivalent), then the API rejects the price update request.
This differs from the previous behaviour: where the API sets the price to 0 and automatically closes the room.
- While setting up pricing for an inventory using rate IDs that are configured as child rates, make sure the request doesn't set values for fields that are [configured to inherit from the parent rate plan.](/connectivity/docs/room-type-and-rate-plan-management/managing-rate-plans/#parentrate) For example, if you try to set a price for a child rate while the child rate is configured to [follow price,](/connectivity/docs/room-type-and-rate-plan-management/managing-rate-plans/#followsprice) the API returns a partial success response with an error message.
To resolve the error, specify a rate plan ID that is either configured as a parent rate, or a child rate that does not have the `FollowsPrice` restriction set.
- Accepts past date updates up to 1 day in the past (follows Central European Time (CET) timezone). Updates more than 1 day in the past returns a `NOT_A_VALID_DATE` error.
- Some existing error messages were improved for better clarity. For a list of all the error message changes see [changes to existing error messages.](#changes-to-existing-error-messages)


For a detailed explanation of the `hotels/csv/los_pricing` endpoint, see [Create or update LOS pricing rates.](/connectivity/docs/csv-los_pricing)

## Changes to the OTA_HotelRateAmountNotif endpoint

The following improvements are rolled out to the `OTA_HotelRateAmountNotif` endpoint. We plan to deprecate v1.0 of the `OTA_HotelRateAmountNotif` endpoint by 31 January 2024 11:00 am CEST
with a planned sunset date of February 14, 2024. For more information on the deprecation timeline, see the [Deprecation and sunsetting](/connectivity/docs/deprecation-policy/deprecation-and-sunsetting) topic.

The changes outlined in this section are applicable only when using the `OTA_HotelRateAmountNotif` endpoint with a special header parameter.
The following section covers only the changes available in v1.1.
For a detailed explanation of the `OTA_HotelRateAmountNotif` endpoint, see [Create or update rates.](/connectivity/docs/ota-rateamountnotif)

When migrating to the v1.1 `OTA_HotelRateAmountNotif` endpoint, you get:

- [Improved API behaviour.](#changes-to-the-ota_hotelrateamountnotif-behaviour)
- [Improved error handling and error description.](#http-error-code-behaviour-on-v11-ota_hotelrateamountnotif)
- Improved latency.


### Header parameter

| Header | Description | Type | Required/Optional | Notes |
|  --- | --- | --- | --- | --- |
| `Accept-Version` | Specify the version number to get the API functionality specific to that version. | string | optional | Supports the following values:  - 1.1: New version.  - 1.0: Previous version. |


#### Sample header


```https
POST 'https://supply-xml.booking.com/hotels/ota/OTA_HotelRateAmountNotif' \
--header 'Accept-Version: 1.1' \
--header 'Authorization: Basic THVjLVNhbXVlbMblhWTdlOCghQ29qaU9pNmxlWSpIWXU9OigvS2meQpQ12puj' \
--header 'Content-Type: application/xml'
```

#### Sample request

The following example is to set price per rate/room/date for a property using Occupancy based pricing type.
Note:  If only a few weekdays are marked as `true` then the API marks the other days as `false`.
However, if some weekdays are marked as `false`, then the API considers this as sending none as `true` and therefore marks all weekdays as `true`.


```xml
<OTA_HotelRateAmountNotifRQ>
   <RateAmountMessages>
      <RateAmountMessage LocatorID="1">
         <StatusApplicationControl Sat="true" Sun="true" Start="2023-11-19" End="2023-12-20" RatePlanCode="25278032" InvTypeCode="801185512" />
         <Rates>
            <Rate MinLOS="1" MaxLOS="1" RateTimeUnit="Day" UnitMultiplier="1" MinGuestApplicable="1" MaxGuestApplicable="4">
               <BaseByGuestAmts>
                  <BaseByGuestAmt AmountBeforeTax="3800" DecimalPlaces="2" NumberOfGuests="4" CurrencyCode="EUR" />
               </BaseByGuestAmts>
               <AdditionalGuestAmounts>
                  <AdditionalGuestAmount AgeBucketID="1" AdditionalGuestNumber="1" Amount="0.01" DecimalPlaces="0" AgeQualifyingCode="8" />
                  <AdditionalGuestAmount MinAge="2" MaxAge="5" AdditionalGuestNumber="1" Percent="5" DecimalPlaces="0" AgeQualifyingCode="8" />
               </AdditionalGuestAmounts>
            </Rate>
         </Rates>
      </RateAmountMessage>
   </RateAmountMessages>
</OTA_HotelRateAmountNotifRQ>
```

#### Sample response


```xml
<OTA_HotelRateAmountNotifRS xmlns="http://www.opentravel.org/OTA/2003/05" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opentravel.org/OTA/2003/05 OTA_HotelRateAmountNotifRS.xsd" TimeStamp="2023-10-12T11:34:06-00:00" Target="Production" Version="1.006"> 
    <Success /> 
</OTA_HotelRateAmountNotifRS>
```

#### Sample error response


```xml
<OTA_HotelRateAmountNotifRS> 
<Errors>
   <Error Code="RATE_NOT_ACTIVE_FOR_ROOM" ShortText="Rate '18858134' is not active for room '28301'" Details="rate_ids: 18134; dates: 2024-04-11,2024-04-12; hotel_ids: 2783; room_ids: 28301;"/>
</Errors>
</OTA_HotelRateAmountNotifRS>
```

### Changes to the OTA_HotelRateAmountNotif behaviour

The following are the changes implemented in the v1.1 `OTA_HotelRateAmountNotif` endpoint:

- If the specified price per night exceeds the maximum price (€50000 or equivalent), then the API rejects the price update request.
This differs from the previous behaviour: where the API sets the price to 0 and automatically closes the room.
- While setting up price per rate, room and date combination using rate IDs that are configured as child rates, make sure the request doesn't set values for fields that are [configured to inherit from the parent rate plan.](/connectivity/docs/room-type-and-rate-plan-management/managing-rate-plans/#parentrate) For example, if you try to set a price for a child rate while the child rate is configured to [follow price,](/connectivity/docs/room-type-and-rate-plan-management/managing-rate-plans/#followsprice) the API returns a partial success response with an error message.
To resolve the error, specify a rate plan ID that is either configured as a parent rate, or a child rate that does not have the `FollowsPrice` restriction set.
- When setting decimal prices, you must use the period decimal separator and not the comma separator. For example, 75.50 is a valid price definition whereas 75,50 returns an HTTP 400 status error.
- Accepts past date updates up to 1 day in the past (follows Central European Time (CET) timezone). Updates more than 1 day in the past returns a `NOT_A_VALID_DATE` error.
- It is recommended to use the `NumberOfGuests` attribute instead of the `MinGuestApplicable` and `MaxGuestApplicable` attributes.


#### Header parameter

| Header | Description | Type | Required/Optional | Notes |
|  --- | --- | --- | --- | --- |
| `Accept-Version` | Specify the version number to get the API functionality specific to that version. | string | optional | Supports the following values:  - 1.1: New version.  - 1.0: Previous version. |


#### Sample header


```https
POST 'https://supply-xml.booking.com/ota/OTA_HotelRateAmountNotif' \
--header 'Accept-Version: 1.1' \
--header 'Authorization: Basic THVjLVNhbXVlbMblmRAdlOCghQ29qaU9pNmxlWSpIWXU9OigvS2meQpQ12puj' \
--header 'Content-Type: application/xml'
```

### HTTP error code behaviour on v1.1 OTA_HotelRateAmountNotif

With the v1.1 of the `OTA_HotelRateAmountNotif` endpoint, we have standardised the treatment of the HTTP error codes.
The following table captures all the common conditions and the HTTP error codes that the v1.1 endpoint returns.

| If the endpoint encounters | The endpoint returns |
|  --- | --- |
| Incorrect username or password. | HTTP 401 |
| Schema validations such as invalid integer, date. | HTTP 400 |
| All updates with errors. | HTTP 400 |
| At least one successful update. | HTTP 200 in addition to errors or warnings, if any. |
| All updates are unauthorized. | HTTP 403 |


### New warnings on v1.1

The following table summarises the new warnings for the `OTA_HotelRateAmountNotif` endpoint.

| New error code | Error message | Notes |
|  --- | --- | --- |
| WARN_UNPROCESSED_ADDITIONAL_GUEST | Additional guest updates weren't processed. Please try again later. |  |
| WARN_DUPLICATE_DATES | Request contains duplicate dates, we have applied only the first occurrence. |  |


### New error codes on v1.1

The following table summarises the new error codes for the `OTA_HotelRateAmountNotif` endpoint.

| Error code | Error message | Notes |
|  --- | --- | --- |
| ROOM_ID_MISSING | Room ID is missing | Room ID is required for the request. |
| ROOM_ELEMENT_REQUIRED | Room is missing | The request contains an empty request body. |
| FROM_DATE_SHOULD_BE_LESS_THAN_TO_DATE | From date should be less than or equal To Date | The `From` date should be less than or equal to the `To` date. |
| LOS_PRICING_PASSED_FOR_OBP_RATE | LOS pricing format sent for OBP room-rate | The request contains pricing information in `LOS` pricing format. However, the property is set to `OBP` pricing type. |
| LOS_PRICING_PASSED_FOR_DEFAULT_RATE | LOS pricing format sent for Standard room-rate | The request contains pricing information in `LOS` pricing format. However, the property is set to `Standard` pricing type. |
| OBP_PRICING_PASSED_FOR_DEFAULT_RATE | OBP format sent for Standard room-rate | The request contains pricing information in `OBP` pricing format. However, the property is set to `Standard` pricing type. |
| CANT_SET_PERCENTAGE_FOR_OBP_LOS | Cannot set percentage for OBP/LOS room-rate | The request is trying to send percentage pricing for Flexible Children Rates (FCR) while the roomrate is in OBP or LOS pricing mode. This is not accepted. You can set a fixed amount FCR in case the roomrate is on OBP or LOS pricing model. |
| ADDITIONAL_PRICE_TYPE_CAN_BE_CHILDREN_ONLY | Additional guest type can only be child | For the `Type` attribute of `<additional_guest>` element, the only supported value is `child`. |
| INVALID_CURRENCY_CODE | Supplied currency code '%s' doesn't match the hotel's currency code '%s' for room ID '%s' and rate ID '%s' | Currency code in the request should match the property's currency code. |
| INVALID_USE_OF_SINGLE_OCCUPANCY | Cannot set price for occupancy 1. Please check the room-rate pricing model | Cannot set pricing for single occupancy as the pricing type of the property or roomrate is other than `Standard`. |
| RATE_EDITABLE_ONLY_ON_EXTRANET | Rate '%s' is only editable on Extranet | You are not allowed to edit the rate via the connectivity API. The property can edit the rate via the Booking.com extranet. |
| ROOM_EDITABLE_ONLY_ON_EXTRANET | Room '%s' is only editable on Extranet | You are not allowed to edit the room via the connectivity API. The property can edit the  room via Booking.com extranet. |
| RATE_NOT_ACTIVE_FOR_ROOM | Rate '%s' is not active for room '%s' | Rate is not activated for the selected room. Please check allowed roomrates using  the `roomrates` endpoint. |
| HOTEL_ACCESS_DENIED | Request for forbidden hotel id(s) | Check the property ID and either provide the correct property ID or make sure the machine account credentials have enough permissions. |
| NOT_A_VALID_OCCUPANCY | An occupancy may not be zero, Occupancy '%s' may not be negative, Occupancy '%s' exceeds maximum value $MAX, Occupancy '%s' does not look numeric | Make sure to send pricing information for the correct occupancy level defined in the roomrate for the specific roomtype. |
| NOT_A_VALID_DATE | INVALID_DATE | The supplied date format is invalid. The valid format is `yyyy-mm-dd`.  Or, the supplied date is more than 1 day in the past. |
| PRICE_EXCEEDS_MAX_PRICE | You are setting ‘$price’ for room ID ‘%room_id’, rate ID ‘%rate_id’ and date ‘%date’ which exceeds the maximum allowed price of ‘%max_price’ | You are setting the price for the combination of room, rate and date that exceeds the maximum price set. |
| PRICE_BELOW_MIN_PRICE | You are setting ‘$price’ for room ID ‘%room_id’, rate ID ‘%rate_id’ and date ‘%date’ which is below the minimum allowed price of ‘%min_price’ | You are setting the price for the combination of room, rate and date that goes below the minimum price set. |
| NOT_A_VALID_RELEASE_TIME | Release times should be in the expected format. This is not the case for room ID $room_id, rate ID $rate_id on date '$date' | Make sure to specify the release time in the expected format. |
| TYPE_VIOLATION |  | Generic error when provided data  type is different than specified. |
| HOTEL_HAS_MISCONFIGURED_UFI | The timezone value is missing for the Ufi  associated with hotel ID $hotel_id | Check the property's UFI configuration. |
| INVALID_GUEST_AGE_BAND | Please define a to and from ages that match an age bucket | This error is related to configurations set for flexible children rates. See also, [managing flexible children rates.] (/connectivity/docs/flexible-children-rates/managing-flexible-children-rates.md) |
| INVALID_GUEST_AGE_BAND_ID | Please define an existing age bucket ID | This error is related to configurations set for flexible children rates. See also, [managing flexible children rates.] (/connectivity/docs/flexible-children-rates/managing-flexible-children-rates.md) |
| INVALID_ADDITIONAL_PRICES | Prices length cannot be 0 | This error is related to configurations set for flexible children rates. See also, [managing flexible children rates.] (/connectivity/docs/flexible-children-rates/managing-flexible-children-rates.md) |
| ADDITIONAL_GUEST_PRICE_DATES_OVERLAP | The dates of the guest prices cannot overlap for the same roomId and rateId | This error is related to configurations set for flexible children rates. See also, [managing flexible children rates.] (/connectivity/docs/flexible-children-rates/managing-flexible-children-rates.md) |
| INVALID_GUEST_AGE_BAND_ID | ageBandId must be 1, 2 or 3 | This error is related to configurations set for flexible children rates. See also, [managing flexible children rates.] (/connectivity/docs/flexible-children-rates/managing-flexible-children-rates.md) |
| PROVIDED_DATES_OUTSIDE_ALLOWED_RANGE | Please check if date is not in the past or more than 4 years in the future | This error is related to configurations set for flexible children rates. See also, [managing flexible children rates.] (/connectivity/docs/flexible-children-rates/managing-flexible-children-rates.md) |
| INVALID_ADDITIONAL_GUEST_NUMBER | Invalid additionalGuestNumber. It should be a non negative number up to + MAX_GUEST_NUMBER | This error is related to configurations set for flexible children rates. See also, [managing flexible children rates.] (/connectivity/docs/flexible-children-rates/managing-flexible-children-rates.md) |
| PRICE_LESS_THAN_0 | There's no support for negative prices | Make sure to specify a price greater than 0.  This error is related to configurations set for flexible children rates. See also, [managing flexible children rates.] (/connectivity/docs/flexible-children-rates/managing-flexible-children-rates.md) |
| PRICE_GREATER_THAN_10_DIGITS | Max Price Value is + MAX_PRICE | This error is related to configurations set for flexible children rates. See also, [managing flexible children rates.] (/connectivity/docs/flexible-children-rates/managing-flexible-children-rates.md) |
| PRICE_PERCENTAGE_IS_BIGGER_THAN_100 | Percentage should be between [0.0, 100.0] | This error is related to configurations set for flexible children rates. See also, [managing flexible children rates.] (/connectivity/docs/flexible-children-rates/managing-flexible-children-rates.md) |
| PRICE_PERCENTAGE_IS_ZERO | There's no support for percentage price zero | This error is related to configurations set for flexible children rates. See also, [managing flexible children rates.] (/connectivity/docs/flexible-children-rates/managing-flexible-children-rates.md) |
| DATE_ELEMENT_MISSING | Date is missing | Date is required for this request. |
| RATE_ID_REQUIRED | Rate Id is required | Rate id is required for this request. |
| OBP_PRICING_PASSED_FOR_RLO_RATE | OBP format sent for RLO room-rate | Room-rate is on RLO pricing model while request is trying to set OBP prices for it. |
| ROOM_ID_INVALID | Room ID '%s' is not valid | Provide a valid Room ID. Make sure to retrieve the correct Room ID using the [`rooms` endpoint](/connectivity/docs/rooms-api/managing-units#retrieving-units). |
| RATE_IS_A_SLAVE_RATE | You cannot set $attribute for a child rate $rate_id, since they are automatically set based on Rate Relations | Cannot update a child rate. |
| CURRENCY_SWITCH_IN_PROGRESS | There is a hotel currency switch currently in progress | You need to wait until hotel switch currency. |
| EXCEEDS_MAX_RELATIVE_RELEASE_TIME | Relative release time {release_time} exceeds max allowed value. This is not the case for room id{room_id}, rate id {rate_id} on date{date} | You are setting release time that exceeds the maximum allowed value. |
| NUMBER_OF_NIGHTS_EXCEEDS_MAX_FOR_LINES | The update has too many nights and only the first 90 nights were considered | You cannot set more than 90 nights. |
| OCCUPANCY_EXCEEDS_MAX_PERSONS | Room '%s' has a maximum occupancy of '%s'. You cannot set price for higher occupancy for rate '%s' | Cannot set pricing for occupancy that is higher than the maximum occupancy. |
| AUTHENTICATION_FAILURE | Authentication failed for the request | The credentials provided in the request was not sufficient for a successful authentication check. To fix a failed authentication request, see the [Authentication page.] (/connectivity/docs/authentication/#troubleshooting) |
| INTERNAL_SERVER_ERROR | Internal server error | Booking.com service failed. |


## Changes to the roomrateavailability endpoint

We have launched v1.1 of the `roomrateavailability` endpoint.

Using v1.1 `roomrateavailability` endpoint, you can additionaly view whether a room type is closed.
For more information, see [Retrieve inventory and rate details.](/connectivity/docs/b_xml-roomrateavailability)

## Changes to the OTA_HotelAvailNotif endpoint

We rolled out the following improvements to the v1.1 `OTA_HotelAvailNotif` endpoint:

- [To close a room type on a specified date.](#closing-room-type-vs-room-and-rate-combination) Even if roomrates are open, the room type is not available for booking.
- Set past date updates up to 1 day in the past (follows Central European Time (CET) timezone). Updates more than 1 day in the past, return a `NOT_A_VALID_DATE` error.
- [Improved API behaviour.](#changes-to-existing-behaviour)
- [Improved error handling and error description.](#http-error-code-behaviour-on-v11)
- Improved latency.


For a detailed explanation of the `OTA_HotelAvailNotif` endpoint, see [Create or update inventory, restrictions.](/connectivity/docs/ota-hotelavailnotif)

## Changes to the availability endpoint

We rolled out few improvements to the B.XML `availability` endpoint in version 1.1. Version 1.0 was sunset on January 15, 2024 and is no longer available.

Using the v1.1 B.XML `availability` endpoint, you get:

- [To close a room type on a specified date.](#closing-room-type-vs-room-and-rate-combination_1) Even if roomrates are open, the room type is not available for booking.
- To update for periods in the future and up to one day in the past, in the Central European Time (CET) timezone.
- Accepts past date updates up to 1 day in the past (follows Central European Time (CET) timezone). Updates more than 1 day in the past returns a `NOT_A_VALID_DATE` error.
- Improved error handling and error description.
- Improved latency.


For more information, see [Create or update inventory, rates and restrictions.](/connectivity/docs/b_xml-availability)

## Changes to the roomrates endpoint

We rolled out few improvements to the B.XML `roomrates` GET endpoint in version 1.1. Version 1.0 was sunset on January 15, 2024 and is no longer available.

For a detailed explanation of the v1.1 B.XML `roomrates` GET endpoint, see [Retrieving active roomrates.](/connectivity/docs/room-type-and-rate-plan-management/managing-roomrates#using-the-b.xml-endpoint)

With the v1.1 B.XML roomrates endpoint, you can:

* Query roomrate details with or without rewritten rate details.
* Retrieve additional response details like [flexible children prices](/connectivity/docs/flexible-children-rates/managing-flexible-children-rates), if they are set.
* See improved latency.


Also, in version v1.1:

* To resolve security issues and non-standard system behavior, the v1.1 `roomrates` endpoint supports the UTF-16 encoding algorithm.
* The endpoint returns all responses within the `roomrates` object.
* The endpoint doesn't return the `max_children` attribute anymore.
* The endpoint doesn't return the redundant `follows_room_rate_properties` attribute in the response while retrieving roomrates with rate relations.


## Changes to MaxChildOccupancy attribute usage

We plan to change the way you can specify child occupancy settings for a room type or a unit using the `OTA_HotelInvNotif` endpoint from 20 March 2023.

This section captures the changes to the functionality for existing providers using the `MaxChildOccupancy` attribute within the `OTA_HotelInvNotif` endpoint and for new implementations.

Currently, the `OTA_HotelInvNotif` endpoint has three fields related to occupancy:

- `MaxOccupancy`: Specifies the maximum number of guests that can physically fit in the room.
- `MaxAdultOccupancy`: Specifies the maximum number of adults that can physically fit in the room.
- `MaxChildOccupancy`: Specifies the maximum number of children that are eligible for the children rate.


We plan to introduce an additional attribute `MaxChildPayableOccupancy` under `TPA_Extensions` to capture the number of children that are eligible for the children rate.
Starting March 20, the value in the `MaxChildOccupancy` attribute no longer reflects the eligibility for children rates and instead specifies the physical child occupancy limit of the room type or unit.

### Changes to existing implementations

The following changes are expected from March 20, 2023, for providers who are already using the `MaxChildOccupancy` attribute:

- `MaxChildOccupancy`: Specifies the maximum number of children that can physically fit in the room. There is no longer a limit of 4 children per room type/unit.
However, the maximum number of children must be less than the `MaxOccupancy` value. This does not specify the number of children eligible for the children rate.
We will use the existing value as the maximum child occupancy limit.
- `MaxChildPayableOccupancy`: Specifies the maximum number of children that are eligible for the children rate. Additional children are charged as adults.
We will copy the existing value of `MaxChildOccupancy` attribute to the `MaxChildPayableOccupancy` attribute.
If you have implemented child rates, by copying the value, we can retain the value of children eligible for the child rate.


### New implementations

For all new implementations, the following behaviour is expected from March 20, 2023:

- `MaxChildOccupancy`: Specifies the maximum number of children that can physically fit in the room. There is no longer a limit of 4 children per room type/unit.
However, the maximum number of children must be less than the `MaxOccupancy` value.
- `MaxChildPayableOccupancy`: Specifies the maximum number of children that are eligible for the children rate. Additional children are charged as adults.
If you do not specify a value, the default value is set to 0 unless this value is updated in the extranet.


For more information on `OTA_HotelInvNotif` endpoint, see [Managing room types.](/connectivity/docs/room-type-and-rate-plan-management/managing-room-types)

Using the OTA HotelDescriptiveInfo endpoint to retrieve property details
In line with the planned changes to `OTA_HotelInvNotif` endpoint, when retrieving property details using the [`OTA HotelDescriptiveInfo` endpoint](/connectivity/docs/tsk-retrieve-property), the value in the `MaxChildOccupancy` attribute reflects the maximum number of children that can physically fit in the room.

### Examples

The following section shows code snippets that specify the maximum occupancy and the number of children eligible for child rates using both the existing and new implementation.

#### Existing behaviour

The following code snippet sets the maximum number of children eligible for child rates to 2.


```xml
<OTA_HotelInvNotifRQ>
	<SellableProducts HotelCode="6314570">
		<SellableProduct InvNotifType="Overlay" InvCode="631457019">
			<GuestRoom>
				<Occupancy MaxOccupancy="6" MaxAdultOccupancy="3" MaxChildOccupancy="2"/>
				<Room RoomID="12345" />
				<Description>
					<Text>Apartment with Garden View</Text>
				</Description>
			</GuestRoom>
		</SellableProduct>
	</SellableProducts>
</OTA_HotelInvNotifRQ>
```

#### New behaviour

The following code snippet sets the maximum number of children that can physically fit in the room type to 3 and the maximum number of children eligible for child rates to 2.


```xml
<OTA_HotelInvNotifRQ>
	<SellableProducts HotelCode="6314570">
		<SellableProduct InvNotifType="Overlay" InvCode="631457019">
			<GuestRoom>
				<Occupancy MaxOccupancy="6" MaxAdultOccupancy="3" MaxChildOccupancy="3" />
                <TPA_Extensions>
                  <Occupancy MaxChildPayableOccupancy="2" />
                </TPA_Extensions>
				<Room RoomID="12345" />
				<Description>
					<Text>Apartment with Garden View</Text>
				</Description>
			</GuestRoom>
		</SellableProduct>
	</SellableProducts>
</OTA_HotelInvNotifRQ>
```

## Changes to roomrateavailability endpoint

We plan to roll out the improvements made to the `roomrateavailability` endpoint soon.

The changes outlined in this section are applicable only when you use the test endpoint provided by your Connectivity account manager.
This section covers only the changes based on the test endpoint.
You can refer to the [Rates & Availability documentation](/connectivity/docs/ari) to know more about the existing functionalities.

### Changes to the `roomrateavailability` endpoint

This section captures the latest changes to `roomrateavailability` available on the test endpoint.
For a detailed explanation of the existing endpoint, see [Retrieving rate and inventory details.](/connectivity/docs/b_xml-roomrateavailability)

#### Test Endpoint


```http
POST
https://supply-xml.booking.com/v1-beta/hotel/roomrateavailability
```

| What changed? | Old behaviour | New behaviour | Notes |
|  --- | --- | --- | --- |
| Data type change for `price` and `price1` | `integer` | `double` |  |
| The number of rows returned when `number_of_days` is specified | Returns (number_of_days + 1) rows. | Returns number_of_days rows starting from the date specified in `start_date` (including). | If the start_date is not provided, then the API returns inventory information from the next day of the request till the `number_of_days` value. |
|  | For example, if you specify `number_of_days` as 2, the API returns 3 rows starting from the date provided in the `start_date`. | For example, if you specify `number_of_days` as 2, the API returns 2 rows starting from the date provided in the `start_date`. |  |


#### Request example


```
<request>
  <hotel_id>8011855</hotel_id>
  <room_id>801185502</room_id>
  <start_date>2022-11-02</start_date>
  <number_of_days>2</number_of_days>
</request>
```

### [Old behaviour] Response example


```xml
<result>
    <roomrate booked="2" cancelled="0" closed="0" date="2022-11-02" min_contracted_rooms="0" min_contracted_rooms_until="0" rate_id="25279855" room_id="801185502" rooms_to_sell="8"/>
    <roomrate booked="2" cancelled="0" closed="0" date="2022-11-03" min_contracted_rooms="0" min_contracted_rooms_until="0" rate_id="25279855" room_id="801185502" rooms_to_sell="8"/>
    <roomrate booked="2" cancelled="0" closed="0" date="2022-11-04" min_contracted_rooms="0" min_contracted_rooms_until="0" rate_id="25279855" room_id="801185502" rooms_to_sell="8"/>
</result>
```

### [New behaviour] Response example


```xml
<result>
    <roomrate booked="2" cancelled="0" closed="0" date="2022-11-02" min_contracted_rooms="0" min_contracted_rooms_until="0" rate_id="25279855" room_id="801185502" rooms_to_sell="8"/>
    <roomrate booked="2" cancelled="0" closed="0" date="2022-11-03" min_contracted_rooms="0" min_contracted_rooms_until="0" rate_id="25279855" room_id="801185502" rooms_to_sell="8"/>
</result>
```

## Licences

We plan to deprecate the old Licences API features on February 15, 2022. You can find the features we plan to deprecate next to their alternatives:

| Deprecating CAPI feature | New solution or alternative |
|  --- | --- |
| Retrieving licence requirements using the `licenses/check_requirements` endpoint or the static licences table. | Retrieving the up-to-date licence requirements using the [licenses/rules/properties/{property_id}](/connectivity/docs/licences-api/managing-licences/#retrieving-licence-requirements) endpoint.  Depending on the region of your properties, those requirements differ. |
| Sending licence information with the `LicenseInfos` element using the `/ota/OTA_HotelDescriptiveContentNotif` and `/ota/OTA_HotelInvNotif` endpoints. | Sending licence information using the [/licenses/data/properties/{property_id}](/connectivity/docs/licences-api/managing-licences/#sending-licence-information-of-a-property) endpoint for property-level licences and [the /licenses/data/properties/{property_id}/rooms/{room_id} endpoint](/connectivity/docs/licences-api/managing-licences/#sending-licence-information-of-a-room-type) for room type-level licences. |
| Retrieving existing licence information using the [ota/OTA_HotelDescriptiveInfo endpoint.](/connectivity/docs/tsk-retrieve-property) | Retrieving existing licence information per property using [the /licenses/data/properties/{property_id} endpoint](/connectivity/docs/licences-api/managing-licences/#retrieving-property-licence-information) endpoint for property-level licence information and [the /licenses/data/properties/{property_id}/rooms/{room_id} endpoint](/connectivity/docs/licences-api/managing-licences/#retrieving-room-type-licence-information) for the room type-level licence information. |


## Hotelier messages

We plan to deprecate sending hotelier messages using the Content API on February 15, 2022. You can find the features we plan to deprecate next to their alternatives:

| Deprecating CAPI feature | New solution or alternative |
|  --- | --- |
| Sending a hotelier message using the `OTA_HotelDescriptiveContentNotif` endpoint. | Sending a hotelier message using the [/properties/{property_id}/hotelier_messages](/connectivity/docs/property-profile-api/#api-documentation) endpoint. |
| Retrieving hotelier messages info using the `OTA_HotelDescriptiveInfo` endpoint. | Retrieving hotelier messages using the [/properties/{property_id}/hotelier_messages](/connectivity/docs/property-profile-api/#api-documentation)  endpoint. |


## Single property owner (SPO) flow

We plan to deprecate the SPO flow, which is creating an independent property without legal entity id, on September 15, 2021. You can find the features we plan to deprecate next to their alternatives:

| Deprecating CAPI feature | New solution or alternative |
|  --- | --- |
| Creating an independent property using the `OTA_HotelDescriptiveContentNotif` endpoint, which refers to creating a property without a legal entity ID. | Switching on the contracting feature in the [provider portal](https://connect.booking.com/feature_management) that enables you to build a property first using the `OTA_HotelDescriptiveContentNotif` endpoint  by providing a legal contact email under `<ContactInfo ContactProfileType="contract">`. For more information, see [the Contracting API.](/connectivity/docs/contracting-api/managing-contracts) |


## Photos through HotelDescriptiveContentNotif (HDCN)

We plan to deprecate sending photos using the HotelDescriptiveContentNotif endpoint on September 15, 2021. You can find the features we plan to deprecate next to their alternatives:

| Deprecating CAPI feature | New solution or alternative |
|  --- | --- |
| Sending and uploading photos using the MultimediaDescriptions element in the [the OTA_HotelDescriptiveContentNotif endpoint.](/connectivity/docs/tsk-create-property) | Using the improved [Photo API](/connectivity/docs/photo-api/understanding-the-photo-api) to manage all your photo needs. |