Last updated
Property API is now generally available

You can use the new Property API to create, and update property details. Also, use the Contacts API to create, update or overwrite property contact details.

Create a property

Use the OTA_HotelDescriptiveContentNotif endpoint to create or update property details.

You can create or update a property's details using the following high-level elements:

  • ContactInfos: Contains details such as the property's address, contact details, and other general information.
  • HotelInfo: Contains details such as the property's category (Hotel, ApartHotel, Cruise etc...), latitude and longitude information, service details among others.
  • FacilityInfo: Contains details such as the facility details that the property supports including restaurant details.
  • Policies: Contains details such as the property's cancellation policies among others.
  • TPA-Extensions: Contains extra information.

Minimum requirements to create a property

To create a property, you must specify the following minimum details:

  • A legal entity ID - An identifier for the legal entity that owns or manages a property (such as a property management company or a hotel chain). For more information on how to retrieve your legal entity ID using Contracting API, see Retrieving the legal entity ID or partners can find it in their contract.
  • Provide the property name with only Latin characters.
  • Provide Physical location (PhysicalLocation) contact type with the following details:
    • Address line 1 - only latin characters are allowed.
    • City.
    • Postcode.
  • Provide General (general) and Invoice (invoices) contact types with the following details:
    • Contact person name (Given name and surname).
    • Email address, and
    • Phone number.
  • Provide the latitude and longitude details of the property's physical location.
  • Specify the checkin and checkout timing.
  • Specify the number of sellable units.
  • Specify the property's accommodation type.
  • Specify at least one language code for the property.

Naming convention

When naming a property, ensure that the name:

  • Has a length between 3 and 255 characters.
  • Does not contain a phone number (or no more than five consecutive numbers).
  • Only contains letters (any language), numbers, or the following symbols: ! # & ` ' " - ,
  • Is not all in uppercase.
Usage of certain words are restricted as property names

If a name is rejected, the property name could contain a restricted word. If you do not think this is the case, reach out to our Connectivity Support.

URL

POST https://supply-xml.booking.com/hotels/ota/OTA_HotelDescriptiveContentNotif
Each property must have at least one cancellation policy

When creating a property using the OTA_HotelDescriptiveContentNotif endpoint, if you do not specify the policy details, the API creates a fully-flexible policy (PolicyCode=152) as the default policy for the property.

Helpful tips

  • The latitude and longitude values should correspond to the country specified under ContactInfos ... >... Address > CountryName. Otherwise, the API returns Cannot create a hotel because UFI country (countryCode) is different from property country (countryCode).
  • Make sure the phone numbers specified under ContactInfos ... >... Phone match with the regional specification and the category specified under PhoneTechType.
  • Make sure the zip code matches with the address specified under ContactInfos ... >... Address > CountryName.

Request body parameters

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

ElementAttributeDescriptionTypeRequired/
Optional
Notes
OTA_HotelDescriptiveContentNotifRQRoot elementobjectrequired
> HotelDescriptiveContentsContains property details.objectrequired
>> HotelDescriptiveContent
HotelDescriptiveContentNotifTypeSpecifies whether the request is meant to create a new property or overlay an existing one.enumerated stringoptionalAccepts the following values:
* New (default)
* Overlay
HotelNameSpecifies the name of the property on Booking.com.stringrequiredRequired when creating a new property. If you want to (re)name a property, ensure the name follows Booking.com naming convention.
IDSpecifies a custom property ID.stringoptionalRecommended for new properties.
LanguageCodeSpecifies the language in which the property wants their Booking.com Extranet content and communication (emails, notifications, etc.)enumerated stringrequiredFor a list of supported language codes, see Booking.com Language Code table.
CurrencyCodeSpecifies the currency code.enumerated stringoptionalBooking.com defines the currency for each property. To retrieve a list of all currency codes, use the /xml/currencies endpoint.
TargetSpecifies whether it is a test or production-ready property.enumerated stringrequiredAccepts the following values:
- Test
- Production
>>> AffiliationInfoContains star ratings and other awards.objectoptional
>>>> AwardsContains award information.objectoptionalYou can only set a star rating for properties with property class hotel, which means you cannot set a star rating for non-hotel properties. To verify whether your property's property class type is a hotel, see the property class type table.
>>>>> AwardContains award detailsobjectoptional
ProviderSpecifies the type of award.enumerated stringoptionalAccepts: Star rating
RatingSpecifies the number of stars.integeroptionalAccepts values: 05. Some countries don't use star ratings.
>>> AreaInfoContains details about attractions and amenities near the property.objectoptional
>>>> AttractionsContains details about attractions and amenities near the property.objectoptional
>>>>> AttractionContains attraction details near the property.objectoptional
AttractionCategoryCodeSpecifies the attraction Category Code.enumerated stringrequiredFor a list of supported attraction codes, see the Attraction code list.
AttractionNameSpecifies the attraction name (in LanguageCode).stringrequired-
DistanceSpecifies the distance from the property to the attraction site (in DistanceUnit).floatrequired-
DistanceUnitSpecifies the measurement unit for Distance.enumoptionalSupported values are:
* meters (default)
* kilometers
* feet
* miles
LanguageCodeSpecifies the Booking.com language code used for the attraction information.enumerated stringoptionalDefault: en. For a list of supported language codes, see Booking.com Language Code table.
>>> ContactInfosContains contact information.objectoptional
>>>> ContactInfoContains contact details of individual person/channel.objectoptional
ContactProfileTypeSpecifies the type of contact.enumerated stringrequiredSee ContactProfileType.
>>>>> HiddenAddressContains whether the property's address can be shown to the guests before they book a stay on a property.objectoptional-
ShouldHideAddressSpecifies whether to hide the address details.booleanoptional* 0 - Do not hide the full address.
* 1 - Hide the full address from the guest.
>>>>> AddressesContains the contact addresses.array of Addressrequired-
>>>>>> AddressContains the contact addresses.array of Addressrequired-
>>>>>>> LanguageSpecies the Booking.com Language code for the address details.enumerated stringrequiredDefault: en. For a list of supported language codes, see Booking.com Language Code table.
>>>>>>> AddressLineSpecies the full street name and number.stringrequiredShould not contain abbreviations (such as "Rd." for "Road") and should not exceed 255 characters.
>>>>>>> CityNameSpecies the name of the city, town, or village.stringrequired-
>>>>>>> CountryNameSpecies the two-letter country code.enumerated stringrequiredFor more information on how to retrieve the country code details, see xml/countries endpoint.
>>>>>>> HotelNameSpecifies the name of the property (in a language other than English).objectrequired-
>>>>>>> PostalCodeSpecifies the postal/zip code.stringoptional-
>>>>>>> StateProvContains the State/province details.objectoptional-
StateCodeSpecifies the code for the state or province.stringoptionalFollow the ISO 3166-2 standard to specify the state, province, or other subdivision.
>>>>> EmailsContains the email addresses.array of Emailoptional-
>>>>>> EmailContains the email address details.array of Emailoptional-
>>>>> Names Contains the contact person names.array of Nameoptional-
>>>>>> Name Contains the contact person name.array of Nameoptional-
LanguageSpecifies the contact person's preferred language of communication.stringoptional-
GenderContact person's gender.enum0..1Accepts: Male, Female. Default: null. To set as empty, omit the entire attribute (instead of specifying "").
>>>>>>> GivenName Specifies the contact person's first name.stringoptional-
>>>>>>> SurName Specifies the contact person's surname.stringoptional-
>>>>>>> JobTitleThe contact's Booking.com Job Title Code.BCJT0..1-
>>>>> PhonesContains Phone numbers.array of Phoneoptional-
>>>>>> PhoneContains Phone number information.array of Phoneoptional-
ExtensionThe extension number that must be dialled in addition to the @PhoneNumber.string0..1Only accepted when @PhoneTechType="1".
PhoneNumberSpecifies the international phone number.stringoptionalFollows the format: \+[0-9]+
PhoneTechTypeSpecifies the type of phone line/device.enumerated stringoptionalFor a list of supported values, see PTT.
>>> FacilityInfoContains property's facility details.objectoptional
>>>> GuestRoomsContains property's room details.objectoptional
>>>>> GuestRoomContains property's room details.objectoptional
>>>>>> AmenitiesContains property's amenities details.objectoptional
>>>>>>> AmenityContains property's amenity details.objectoptional
RoomAmenityCodeSpecifies a collection of room amenity type codes.enumerated stringrequiredFor a list of supported room amenity type codes, see Room Amenity Type Code.
AmenityCodeSpecifies the room amenity type code.enumerated stringrequiredSame as RoomAmenityCode, introduced for compatibility with OTA_HotelInvNotifRQ.
QuantitySpecifies the available number of amenities of this type.integeroptional-
ValueSpecifies the available number of amenities of this type.enumerated stringoptionalSame as Quantity, introduced for compatibility with OTA_HotelInvNotifRQ.
ConfigurationSpecifies whether the amenity is available in the standard or alternative room arrangement.enumerated stringoptionalAccepted only when the room amenity type code is a bed type.
Supported values are:
* 1 (standard arrangement)
* 2 (alternative arrangement)
Introduced for compatibility with OTA_HotelInvNotifRQ.
>>>> RestaurantsContains property's restaurant details.objectoptional
>>>>> RestaurantContains individual restaurant details.objectoptional
OfferBreakfastSpecifies whether the restaurant offers breakfast.integeroptionalSupports:
- 1: Offers breakfast
- 0: Does not offer breakfast (default)
OfferBrunchSpecifies whether the restaurant offers brunch.integeroptionalSupports:
- 1: Offers brunch
- 0: Does not offer brunch (default)
OfferDinnerSpecifies whether the restaurant offers dinner.integeroptionalSupports:
- 1: Offers dinner
- 0: Does not offer dinner (default)
OfferLunchSpecifies whether the restaurant offers lunch.integeroptionalSupports:
- 1: Offers lunch
- 0: Does not offer lunch (default)
RestaurantNameSpecifies the name of the restaurant.stringoptional-
>>>>>> CuisineCodesContainer for cuisine details.array of CuisineCodeoptional-
>>>>>>> CuisineCodeContainer for cuisine details.array of CuisineCodeoptional-
CodeSpecifies the main cuisine code.enumerated stringoptionalA restaurant can offer more than one cuisine.
>>>>>> OperationSchedulesContains opening/closing times.array of OperationScheduleoptional-
>>>>>>> OperationScheduleContains opening/closing times.array of OperationScheduleoptional-
>>>>>>>> OperationTimesOpening/closing times for the service offered.array of OperationTimeoptionalCurrently used for breakfast services only.
>>>>>>>>> OperationTimeOpening/closing times for a Restaurant or Service like breakfast.objectoptionalCan contain multiple OperationTime elements.
MonSpecifies whether the Start and End times apply on this day of the week.integeroptionalSupported values are:
- 1 = true.
- 0 = false. (default)
TueSpecifies whether the Start and End times apply on this day of the week.integeroptionalSupported values are:
- 1 = true.
- 0 = false. (default)
WedsSpecifies whether the Start and End times apply on this day of the week.integeroptionalSupported values are:
- 1 = true.
- 0 = false. (default)
ThurSpecifies whether the Start and End times apply on this day of the week.integeroptionalSupported values are:
- 1 = true.
- 0 = false. (default)
FriSpecifies whether the Start and End times apply on this day of the week.integeroptionalSupported values are:
- 1 = true.
- 0 = false. (default)
SatSpecifies whether the Start and End times apply on this day of the week.integeroptionalSupported values are:
- 1 = true.
- 0 = false. (default)
SunSpecifies whether the Start and End times apply on this day of the week.integeroptionalSupported values are:
- 1 = true.
- 0 = false. (default)
StartContains the opening times of the Restaurant or Service.enumerated stringrequiredFor a list of opening times, see BCIO.
EndContains the closing times of the Restaurant or Service.enumerated stringrequiredFor a list of closing times, see BCIO.
>>>>>> FeaturesContainer for special features.array of Featureoptional-
>>>>>>> FeatureContainer for special features.array of Featureoptional-
DescriptiveTextSpecifies the feature type.enumerated stringrequiredFor all supported values, see DescriptiveText.
>>>>>> TPA_ExtensionsContainer for Ambiances and DietaryOptions.objectoptional-
>>>>>>> AmbiancesContains the ambiance/mood/atmosphere for a Restaurant.objectoptionalCan contain multiple Ambiances elements.
>>>>>>>> AmbianceContains the ambiance/mood/atmosphere for a Restaurant.objectrequired
NameSpecifies the ambiance type.enumerated stringrequiredSupported values are:
* family/kids friendly
* modern
* romantic
* traditional
>>>>>>> DietaryOptionsContains dietary options in a Restaurant.objectoptionalCan contain multiple DietaryOptions elements.
>>>>>>>> DietaryOptionContains a single dietary option in a Restaurant.objectoptionalCan contain multiple DietaryOption elements.
NameSpecifies the dietary option.enumerated stringrequiredSupported values are:
* dairy free
* gluten free
* halal
* kosher
* vegan, vegetarian
>>> HotelInfoContains information about the types of rooms and services a property offers.objectrequired-
>>>> CategoryCodesContains the general property details, such as number of rooms and property type.objectoptional-
>>>>> GuestRoomInfoContains room details.objectoptional-
QuantitySpecifies the number of sellable units the property offers.integeroptionalA "sellable unit" is the smallest possible space that a guest can book at the property. In a hotel with 200 rooms, each room is a sellable unit, and the value would be 200.
In a holiday home, guests must typically book the home in its entirety, making the value 1.
>>>>> HotelCategoryContains property type details.objectoptional-
CodeSpecifies the property class type code.enumerated stringrequiredFor a list of supported property class type codes, see Property Class Type Code.
ExistsCodeSpecifies whether the property currently exists.integeroptionalSupported values are:
* 1 (yes) default
* 0 (no)
>>>> LanguagesContains the languages spoken at the property.array of Languageoptional
>>>>> LanguageContains the language spoken at a property.objectoptionalCan contain multiple Language elements.
LanguageCodeSpecifies the Booking.com Language Code.enumerated stringrequiredFor a list of supported language codes, see Booking.com Language Code table.
>>>> PositionContains the geographical coordinates of the property.objectoptional-
LatitudeSpecifies the latitude coordinates.latituderequired-
LongitudeSpecifies the longitude coordinates.longituderequired-
>>>> ServicesContains the services offered at the property.array of Serviceoptional-
>>>>> ServiceContains the details of individual services offered at the property.array of Serviceoptional-
CodeSpecifies the property amenity code for the service.enumerated stringrequiredFor a list of Booking.com supported property amenity codes, see Amenity codes.
ExistsCodeSpecifies whether the service/facility is present or missing.enumerated stringoptionalSupported values are:
* 1 = yes(present)
* 2 = no(missing).
Default: 1.
IncludedSpecifies whether the service is included in the room price or comes at an extra charge.enumerated stringoptionalSupported values are:
* true
* false
* unknown.
Default: unknown
PriceThe price for the service. Specified in the property's default currency.integeroptionalRequired if Code is 173 (breakfast), 6000 (lunch), 6001 (dinner).
CurrencyCodeSpecifies the currency code.currencycodeoptionalRequired if Code is 173 (breakfast), 6000 (lunch), 6001 (dinner). If specified, must match the property's default currency code.
>>>>>> FeaturesContains the details about service features.array of Featureoptional
>>>>>>> FeatureContains the details about service features.array of Featureoptional
DescriptiveTextSpecifies the feature type.enumerated stringrequiredFor a list of supported values, see DescriptiveText.
>>>>>> TypesContains the types of service offered.array of TypeoptionalCurrently used for breakfast services only.
>>>>>>> TypeContains the types of service offered.array of TypeoptionalCurrently used for breakfast services only.
CodeSpecifies the Booking.com breakfast type code.enumerated stringoptionalFor a list of supported breakfast type code, see Booking.com Breakfast Type Code.
>>>>>> ItemsContains a collection of items.array of ItemoptionalCurrently used for breakfast services only.
>>>>>>> ItemContains the items for the service offered.array of ItemoptionalCurrently used for breakfast services only.
CodeSpecifies the Booking.com breakfast type code.enumerated stringoptionalFor a list of supported breakfast type code, see Booking.com Breakfast Type Code.
>>>> OwnershipManagementInfosContains the information about the property's relationship to Booking.com.array of OwnershipManagementInforequired-
>>>>> OwnershipManagementInfoContains the details about the property's relationship to Booking.com.objectrequired-
>>>>>> CompanyNameContains the details of the company that owns/manages the property.objectoptional
CodeSpecifies the ID of the legal entity to which the property belongs.integeroptionalOnly allowed for new properties.
>>>> RelativePositionsContains the travel routes to and from the property.array of RelativePositionoptional-
>>>>> RelativePositionContains the details of a travel route to or from the property.objectoptionalCan contain multiple RelativePosition elements.
>>>>>> TransportationsContains an array of Transportationobjectoptional-
>>>>>>> TransportationContainer for TPA_Extensions.objectoptionalCan contain multiple Transportation elements.
>>>>>>>> TPA_ExtensionsContainer for Route.objectoptionalCan contain multiple TPA_Extensions elements.
>>>>>>>>> RouteContains the details of a travel route.objectoptional-
>>>>>>>>>> LegContains the details of the starting point, destination, and transport method.objectrequired-
>>>>>>>>>>> DepartureContains the departure times.objectoptional-
IntervalContains the departure interval in minutes, if the transportation departs multiple times a day.integeroptional-
UponArrangementSpecifies whether the transportation is available only by arrangement.integeroptionalSupported values are:
- 1 = true.
- 0 = false.
>>>>>>>>>>> JunctionContains details of the motorway/highway junction/exit to take.objectoptional-
NameSpecifies the name of the junction/exit to take, if travelling by car.stringrequiredOnly allowed when TransportType[Code="5"].
>>>>>>>>>>> LineContains the public transport line details.objectoptional-
NameSpecifies the name or number of the line to take, if travelling by shuttle or public transport.stringoptionalOnly allowed when TransportType[Code] is 3, 10, 18, 22, or 5001.
>>>>>>>>>>> MotorwayContains details of the motorway/highway details.objectoptional-
NameSpecifies the name of the motorway to take, if travelling by car.stringoptionalOnly allowed when TransportType[Code="5"] (car).
>>>>>>>>>>> StartContains the starting point details.objectoptional-
TypeSpecifies the type of starting point.enumerated stringrequiredAccepted values: airport
CodeSpecifies the 3-letter IATA code of the airport that serves as the starting location.enumerated stringrequiredFor a list of supported IATA codes, see IATA.
>>>>>>>>>>> TransportTypeContains the transportation mode.objectoptional-
CodeSpecifies the transportation code for the Leg's transportation type.integerrequiredFor a list of supported values, see Transportation code.
>>>>>>>>>> JourneyTimeContains the travel time details.objectrequired-
MinutesSpecifies the journey time in minutes.integerrequired-
>>>>>>>>>> PriceContains the travel price details.objectoptional-
AmountSpecifies the estimated price of the journey, in CurrencyCode.realoptional-
CurrencyCodeSpecifies the currency code.currencycodeoptional-
>>>> TPA_ExtensionsContainer for AcceptedPayments, and InvoiceDetails.objectoptional-
>>>>> AcceptedPaymentsContains the details of the payment methods.objectoptionalCan contain multiple AcceptedPayments elements.
>>>>>> AcceptedPaymentContains the details of a payment method.objectoptionalCan contain multiple AcceptedPayment elements.
PaymentTypeCodeSpecifies the Booking.com Payment Type Code.BCPTrequired-
>>>>> InvoiceDetailsContains the special identifying information for Brazilian properties, issued by the Brazilian tax authority. Used for invoicing.objectoptionalRequired for Brazilian properties.
>>>>>> InvoiceTaxTypeContains details useful for processing invoices.objectrequired
TypeSpecifies whether the identifying number belongs to a company or a private individual.enumerated stringrequiredAccepts: CNPJ (company), CPF (private individual).
>>>>>> InvoiceTaxNumberstringrequired
CodeThe identifying number.stringrequiredLength depends on the value of InvoiceTaxType[Type].
CNPJ = 14 digits. CPF = 11 digits.
>>>>>> InvoiceAddressstringrequired-
EmailEmail address of invoice recipient.stringrequired-
>>>>>>> CityHallInfostringrequired-
IdThe 8-digit ID for the city hall which issued the CNPJ or CPF number.stringrequired-
>>>>>>> BirthDatestringoptional
DateDate of birth of the individual providing the CPF number.stringoptionalFormat: YYYY-MM-DD. Required if InvoiceTaxType[Type="CPF"].
>>>>> PaymentPreferencesContains details such as whether properties can see guest's credit card details and collect CVC codes.objectoptionalThe default value for NoCVC is 1.
NoCVCSpecify whether properties can collect CVC for a booking.booleanoptional* 0 - Properties can collect CVC details.
* 1 - Properties cannot collect CVC details.
ViewCCDetailsSpecify whether trusted properties can view the guest's credit card details.booleanoptional* 0 - Properties cannot view credit card details.
* 1 - A trusted property can view the credit card details.
>>> PoliciesContains all policy details.objectoptional-
>>>> PolicyContains policy details.objectoptional-
>>>>> PolicyInfoContains check-in/-out times.objectoptional-
CheckInTimeThe Booking.com Check-in/Check-Out Time Code for the earliest time a guest can check in.enumerated stringoptionalFormat: HH:MM (from) or HH:MM-HH:MM (from-to). Only "from" is required; "to" is optional. 24-hour check-in can be specified using 00:00-00:00.
CheckOutTimeThe Booking.com Check-in/Check-Out Time Code for the time by which a guest should check out at the latest.enumerated stringoptionalFormat: HH:MM (from) or HH:MM-HH:MM (from-to). 24-hour check-out can be specified using 00:00-00:00.
TotalGuestCountThe total number of guests that can stay at the property at a given time.integeroptional-
AcceptedGuestTypeSpecifies whether the property admits adults and children, or only adults.enumerated stringoptionalAccepts AdultOnly and ChildrenAllowed. Default value is AdultsOnly, which means children are not allowed.
MinGuestAgeSpecifies the minimum age that children are allowed (in case ChildrenAllowed).integeroptional
>>>>> CancelPolicyPolicies around cancellations and no-shows.array of CancelPenaltyoptional-
>>>>>> CancelPenaltyContains Cancellation fee details.optionalCan contain multiple CancelPenalty elements.
PolicyCodeThe Booking.com Cancellation Policy Code.enumerated stringoptional
>>>>>>> TPA_ExtensionsContainer for NoShowPolicy.array of NoShowPolicyoptional-
>>>>>>>> NoShowPolicyNo-show policy details.objectoptionalDescendant of CancelPenalty.
PenaltySpecifies how much the property charges if the guest doesn't show up on the check-in date.enumerated stringrequiredAccepts: total_price (of stay), default (same as cancellation fee).
>>>>> PetsPoliciesPolicies around pets.array of PetsPolicyoptional-
PetsAllowedCodeSpecifies the property's policy regarding pets.enumerated stringoptionalAccepts:
- Pets Allowed
- Pets Not Allowed (default)
- Pets By Arrangements
>>>>>> PetsPolicyPets policy details.objectoptionalRequired if PetsAllowedCode is Pets Allowed, Pets By Arrangements.
NonRefundableFeeSpecifies if the property charges for having a pet stay in the room.enumerated stringAccepts:
- free (default)
- charges_may_apply
>>>>> GuaranteePaymentPolicyPolicies around refunds.array of GuaranteePaymentoptional-
>>>>>> GuaranteePaymentRefund policy details.array of GuaranteePaymentoptional-
PolicyCodeThe Booking.com Cancellation Policy Code.enumerated stringoptional
>>>>>>> TPA_ExtensionsContainer for PrepaymentPolicy.objectoptional-
>>>>>>>> PrepaymentPolicy-objectoptionalDescendant of GuaranteePayment.
EffectiveFromThe moment at which the refund policy becomes effective.enumerated stringrequiredAccepts: after_reservation_is_made, after_cancellation_fee_begins. Default: after_reservation_is_made
>>>>> TaxPoliciesPolicies around taxes.array of TaxPolicyoptional-
>>>>>> TaxPolicyTax policy details.objectoptionalCan contain multiple TaxPolicy elements.
CodeThe Fee Tax Type Code.FTTrequired-
AmountThe amount charged, in the country's local currency.priceoptionalInstead of Amount, you can also use Percent.
DecimalPlacesThe number of decimal places to apply to Amount.integeroptional-
PercentThe percentage of the room price that will be added as taxes.non-negativeoptionalOnly allowed if Amount is not provided. Required if Code="36" (VAT).
TypeSpecifies whether the tax is included in the room price or not.enumerated stringoptionalAccepts: Inclusive, Exclusive.
ChargeFrequencyThe Charge Type Code that specifies the basis for the charge (e.g. once per stay, every day).enumerated stringoptionalDefault: 21 (Per person per night)
InvCodeThe Booking.com room type ID that this fee applies to.stringoptionalA fee can only apply to one room type at a time. To apply the same fee to multiple rooms, duplicate the entire TaxPolicy element. To apply a fee to all rooms in the property, remove InvCode. Get the room type ID from OTA_HotelInvNotifRS endpoint ResponseInvCode attribute on creation of room type.
>>>>> FeePoliciesPolicies around service fees (WiFi, heating, pets, etc.).array of FeePolicyoptional-
>>>>>> FeePolicyFee policy details.objectoptionalCan contain multiple FeePolicy elements.
CodeThe Fee Tax Type Code.FTTrequired-
AmountThe amount charged, in the country's local currency.priceoptionalInstead of Amount, you can also use Percent.
DecimalPlacesThe number of decimal places to apply to Amount.integeroptionalDefault: 0
PercentThe percentage of the room price that will be added as a fee.non-negativeoptionalOnly allowed if Amount is not provided.
TypeSpecifies whether the fee is included in the room price, or is charged only under certain conditions.enumerated stringoptionalAccepts: Inclusive, Exclusive, Conditional. Conditional is only allowed when [Code="5009"] (cleaning fees).
ChargeFrequencyThe Charge Type Code that specifies the unit of time on which the charge is calculated (e.g. once per stay, every day).enumerated stringoptionalDefault: 21 (Per person per night)
MinAgeSpecifies the minimum age for the children policy to apply. In combination with MaxAge it becomes an age range.integeroptionalYou can use this attribute with Fee Tax Type (FTT) code 37, 38, or 44.
If you want to specify different prices per age range, you must create multiple FeePolicy elements within the same request. See example.
MaxAgeSpecifies the maximum age for the children policy to apply. The max value is 255 (adult).integeroptionalYou can use this attribute with Fee Tax Type (FTT) code 37, 38, or 44.
If you want to specify different prices per age range, you must create multiple FeePolicy elements within the same request. See example.
InvCodeSpecifies the Booking.com room type ID to which the fee applies.stringoptionalYou can apply one fee policy to one room type at a time. To apply the same fee policy to multiple rooms, you have to add another FeePolicy element for each additional room type. To apply a fee to all room types in the property, you must remove the InvCode attribute.
>>>>>>> TPA_ExtensionsContainer for Conditions, InternetFeePolicy or ParkingFeePolicy (depending on Type).objectoptional-
>>>>>>>> ConditionsCleaning fee conditions.objectrequired-
>>>>>>>>> ConditionCleaning fee condition details.objectrequired-
TypeSpecifies when a guest must pay the extra cleaning fee.enumerated stringrequiredAccepts: guest_brings_pet, guest_doesnt_clean_before_checkout, guest_smokes.
>>>>>>>> InternetFeePolicyInternet fee details.objectoptionalOnly allowed when FeePolicy[Type="5035"].
InternetTypeSpecifies the type of internet connection.enumerated stringoptionalAccepts: wired, wifi, none. Default: wifi
InternetCoverageSpecifies the area covered by the internet.enumerated stringoptionalAccepts: entire_property, public_areas, all_rooms, some_rooms, business_centre. Default: entire_property
>>>>>>>> ParkingFeePolicyParking fee policy details.objectoptionalYou can apply parking fee with Parking fee policy details as a FeePolicy, which will not be added to reservation price. To apply parking fee as charges which is applied to all reservations, properties must request Booking.com local support team to set it as VAT/Tax/Charges in the extranet.
ParkingTypeSpecifies the type of parking the property offers.enumerated stringoptionalAccepts: on_site, location_nearby, none. Default: on_site
ParkingReservationSpecifies whether guests can/must reserve a parking space in advance.enumerated stringoptionalAccepts: needed, not_needed, not_available. Default: not_available
ParkingPropertySpecifies whether the parking facility is publicly accessible or private.enumerated stringAccepts: private, public. Default: public
>>> TPA_ExtensionsobjectoptionalContainer for: StandardPhrases, GuestInformation, PropertyTaxInfo, PreventLikelyToBeCancelledBookings, CancellationGracePeriod, TotalNumberOfFloors, PricingType, LongStayInfo.
>>>> StandardPhrasesStandard phrases details.objectoptionalCan contain multiple StandardPhrases elements.
>>>>> StandardPhraseStandard phrase details.objectoptionalCan contain multiple StandardPhrase elements.
EnabledSpecifies whether the standard phrase is enabled.integerrequiredSupported values are:
- 1 = true.
- 0 = false.
NameSpecifies which standard phrase must be displayed.enumerated stringrequiredFor Coronavirus-related phrases, see Standard phrases during the Coronavirus.
>>>>>> Options-Contains a collection of Options.optional
>>>>>>> Option-Additional configuration for certain types of StandardPhrase.optionalRequired if Name is KeyCollection, Renovation,HotelChainBedLinen, or SecurityDeposit.
NameThe type of option.enumerated stringrequiredAccepts: KeyCollectionAddressLine, KeyCollectionCityName, KeyCollectionPostalCode, RenovationFrom, RenovationUntil, SecurityDepositAmount, SecurityDepositCollectMethod, SecurityDepositCollectWhen, SecurityDepositCollectNumDays, SecurityDepositReturnMethod, SecurityDepositReturnWhen, HotelChainBedLinenAmount.
>>>> GuestInformationContains flags that specify which information guests must provide.objectoptional-
RequireGuestAddressSpecifies whether guests must provide an address.integeroptionalAccepts: 1 (required), 0 (not required).
RequireGuestContactNumberSpecifies whether guests must provide a contact telephone number.integeroptionalAccepts: 1 (required), 0 (not required).
HasAgeRestrictionSpecifies whether there is an age limit to check-in.integeroptionalAccepts: 1 (has age restriction), 0 (does not have age restriction).
AgeRestrictionMinMinimum allowed age for guests to check-in. Only effective when HasAgeRestriction=1.integer18..99Only effective when HasAgeRestriction=1.
AgeRestrictionMaxMaximum allowed age for guests to check-in. Only effective when HasAgeRestriction=1.integer18..99Only effective when HasAgeRestriction=1.
HasCurfewSpecifies whether property has a curfew - times at which guests cannot enter/leave the property.integeroptionalAccepts: 1 (has curfew), 0 (does not have curfew).
CurfewStartCurfew start time in HH:MM format.stringoptionalOnly effective when HasCurfew=1.
CurfewEndCurfew start time in HH:MM format.stringoptionalOnly effective when HasCurfew=1.
>>>> PropertyTaxInfoObject that contains city tax-related information.objectoptional-
PropertyRegisteredInVcsAre you registered as a professional at the trade commercial register (Registre du Commerce et des Sociétés)?integerrequiredAccepts: 1 (yes), 0 (no).
PropertyHasVatDo you have a VAT registered for this activity?integerrequiredAccepts: 1 (yes), 0 (no).
PropertyDeclaresRevenueDo you declare revenues as professional for direct tax purposes (see article 155 IV du CGI)?integerrequiredAccepts: 1 (yes), 0 (no).
PropertyTaxCategoryContains a number - city tax category ID. You can retrieve available categories using the /xml/citytaxcategory call.integeroptionalIf your answer to any of the preceding questions is (yes), then you must NOT send the PropertyTaxCategory. The system sets it up automatically.
Accepts: integer value containing category ID.
PropertyNatureCategoryContains a number - nature category ID. You can retrieve available categories using /xml/citytaxcategory call.integeroptionalAccepts integer value containing category ID.
EnabledEnable/disable selling meal plans as addons through booking or not.boolean1 will enable selling meals as addons through booking, 0 will disable that.
>>>> PreventLikelyToBeCancelledBookingsFeature objectobjectoptional-
EnabledEnable/disable the feature for current property.boolean1 - opt in to the feature. 0 - opt out of the feature.
>>>> CancellationGracePeriodCancellation exceptions container object.object--
HoursAfterBookingGrace period - amount of hours after booking when free cancellation is available.integeroptionalAccepts: 0, 1, 4, 24.
WeeksBeforeCheckInAdvance cancellation - amount of weeks before check-in when free cancellation is available.integeroptionalAccepts: 0, 4, 8, 12
>>>> TotalNumberOfFloorsAllows to set the total number of floors in the building excluding underground floors.objectoptional-
NumberTotal number of floors the building has (excl. underground floors).non-negativeMax value can be 200.
>>>> PricingTypeAdditional pricing configuration for HotelProduct.objectoptional-
ValueSpecifies the pricing type for the product.enumerated stringoptionalAccepts: Standard, OBP, or LOS. Default: Standard.
Note: For length of stay pricing (LOS) and Occupancy Based pricing (OBP), you must be certified to use these pricing types. Please check with the Booking.com Connectivity support team about the certification process.
>>>> LongStayInfoLong Stay container object.objectOptional-
AcceptLongStayWhether the property accepts a stay longer than 30 nights. Defaults to No.booleanOptionalAccepts:
- 0: False
- 1: true
MaxLengthOfStayThe maximum length of stay that a guest can book.integerOptionalAccepts: 45, 60, 75, 90.
Defaults to 90.
>>>> BookingModelBooking model of the property. Supports request to book or instant booking (default value).objectoptional-
TypeSpecifies whether the property supports request to book feature.enumerated stringrequiredAccepts:
- RTB: Enables request to book
- IB: (default) Enables instant booking. Disables request to book.

Request body

The following is a request body example:

<?xml version="1.0" encoding="UTF-8"?>
<OTA_HotelDescriptiveContentNotifRQ
  xmlns="http://www.opentravel.org/OTA/2003/05"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  PrimaryLangID="en-us"
  EchoToken="GUID"
  TimeStamp="2015-06-09T09:30:47Z"
  xsi:schemaLocation="http://www.opentravel.org/2014B/OTA_HotelDescriptiveContentNotifRQ.xsd"
  id="OTA2014B"
  Version="8.0"
  Target="Production">
	<HotelDescriptiveContents>
		<HotelDescriptiveContent
      HotelName="The Best Hotel"
      LanguageCode="en"
      HotelDescriptiveContentNotifType="New">
			<ContactInfos>
				<ContactInfo ContactProfileType="PhysicalLocation">
					<Addresses>
						<Address>
							<!-- Replace the {PlaceHolders} in the following lines! -->
							<AddressLine>{AddressLine}</AddressLine>
							<CityName>{CityName}</CityName>
							<PostalCode>{PostalCode}</PostalCode>
							<CountryName>{CountryCode}</CountryName>
						</Address>
					</Addresses>
				</ContactInfo>
				<ContactInfo ContactProfileType="general">
					<Names>
						<Name Language="en">
							<GivenName>Jane</GivenName>
							<Surname>Doe</Surname>
						</Name>
					</Names>          
					<Emails>
						<Email>noreply@booking.com</Email>
					</Emails>
					<Phones>
						<Phone PhoneNumber="+31666666666" PhoneTechType="5" />
					</Phones>
				</ContactInfo>
				<ContactInfo ContactProfileType="invoices">
					<Names>
						<Name Language="en">
							<GivenName>Sam</GivenName>
							<Surname>Xu</Surname>
						</Name>
					</Names>
					<Addresses>
						<Address>
							<AddressLine>Herengracht 597</AddressLine>
							<CityName>Amsterdam</CityName>
							<PostalCode>1017 CE</PostalCode>
							<StateProv StateCode="NH" />
							<CountryName>NL</CountryName>
						</Address>
					</Addresses>          
					<Phones>
						<Phone PhoneNumber="+31207777777" PhoneTechType="1" Extension="30" />
					</Phones>
				</ContactInfo>
			</ContactInfos>
			<HotelInfo>
				<CategoryCodes>
					<GuestRoomInfo Quantity="100" />
					<!-- Replace the {PlaceHolder} in the following line! -->
					<HotelCategory ExistsCode="1" Code="{PropertyClassTypeCode}" />
				</CategoryCodes>
				<!-- Replace the {PlaceHolder} in the following line! -->
				<Position Latitude="{Latitude}" Longitude="{Longitude}" />
				<OwnershipManagementInfos>
					<OwnershipManagementInfo>
						<!-- Replace the {PlaceHolder} in the following line! -->
						<CompanyName Code="{LegalEntityID}" />
					</OwnershipManagementInfo>
				</OwnershipManagementInfos>
			</HotelInfo>     
			<FacilityInfo>
				<GuestRooms>
					<GuestRoom>
						<Amenities>
							<Amenity RoomAmenityCode="228" />
						</Amenities>
					</GuestRoom>
				</GuestRooms>
				<Restaurants>
					<Restaurant RestaurantName='Antekoje' OfferLunch='1' OfferDinner='1'>
						<CuisineCodes>
							<CuisineCode Code='51'/>
							<CuisineCode Code='49'/>
						</CuisineCodes>
						<OperationSchedules>
							<OperationSchedule>
								<OperationTimes>
									<OperationTime Mon='1' Tue='1' Weds='1' Thur='1' Fri='1' Sat='1' Sun='1' Start='17:30' End='22:00' />
									<OperationTime Sat='1' Sun='1' Start='11:00' End='14:30' />
								</OperationTimes>
							</OperationSchedule>
						</OperationSchedules>
						<Features>
							<Feature DescriptiveText='a la carte'/>
							<Feature DescriptiveText='buffet'/>
							<Feature DescriptiveText='accepts reservations'/>
							<Feature DescriptiveText='outdoor seating'/>
						</Features>
						<TPA_Extensions>
							<Ambiances>
								<Ambiance Name='modern'/>
							</Ambiances>
							<DietaryOptions>
								<DietaryOption Name='gluten free'/>
								<DietaryOption Name='vegan'/>
							</DietaryOptions>
						</TPA_Extensions>
					</Restaurant>
				</Restaurants>
			</FacilityInfo>	  
			<Policies>
				<Policy>
					<PolicyInfo CheckInTime="16:00" CheckOutTime="11:00"/>
					<PetsPolicies PetsAllowedCode="Pets By Arrangements">
						<PetsPolicy NonRefundableFee="free" />
					</PetsPolicies>
					<CancelPolicy>
						<CancelPenalty PolicyCode="43" />
						<CancelPenalty PolicyCode="1" />
					</CancelPolicy>
					<GuaranteePaymentPolicy>
						<GuaranteePayment PolicyCode="43" />
						<GuaranteePayment PolicyCode="1" />
					</GuaranteePaymentPolicy>
					<TaxPolicies>
						<TaxPolicy Code="36" Percent="1800" DecimalPlaces="2" Type="Inclusive" ChargeFrequency="12" />
						<TaxPolicy Code="3" Percent="350" DecimalPlaces="2" Type="Exclusive" ChargeFrequency="21" />
					</TaxPolicies>
					<FeePolicies>
						<FeePolicy Code="5012" Amount="1600" DecimalPlaces="2" Type="Exclusive" ChargeFrequency="12" />
						<FeePolicy Code="5013" Amount="1800" DecimalPlaces="2" Type="Exclusive" ChargeFrequency="12" />
						<FeePolicy Code="5035" Amount="500" DecimalPlaces="2" Type="Exclusive" ChargeFrequency="1" >
							<TPA_Extensions>
								<InternetFeePolicy InternetType="wifi" InternetCoverage="public_areas" />
							</TPA_Extensions>
						</FeePolicy>
						<FeePolicy Code="5036" Amount="350" DecimalPlaces="2" Type="Exclusive" ChargeFrequency="2" >
							<TPA_Extensions>
								<ParkingFeePolicy ParkingType="location_nearby" ParkingReservation="needed" ParkingProperty="private"/>
							</TPA_Extensions>
						</FeePolicy>
					</FeePolicies>
				</Policy>
			</Policies>
		</HotelDescriptiveContent>
	</HotelDescriptiveContents>
</OTA_HotelDescriptiveContentNotifRQ>

DescriptiveText

The Feature[DescriptiveText] accepts the following values. Each value corresponds with a similarly named setting on the Facilities & Services page on our Extranet. Some options appear only when the Restaurant checkbox is selected.

ValueDescription
a la carteThe restaurant offers à la carte dining.
buffetThe restaurant has a buffet.
guests onlyThe restaurant only serves guests of the property.
accepts reservationsCustomers can reserve a table at the restaurant.
outdoor seatingThe restaurant offers outdoor seating.

ContactProfileType

ContactInfo[ContactProfileType] accepts the following values. Each value corresponds with a similarly named heading on the Contacts page in our extranet.

A property must have all the required contact profiles before you can open it.

ValueDescriptionRequired
generalPrimary point of contact for the property.Required
contractContact for contract matters.Optional
reservationsContact for reservations.Optional
invoicesContact for accounts payable.Required
availabilityContact for questions about availability.Optional
site_contentContact for photos, descriptions, and other website content.Optional
parityContact for pricing and rate matters.Optional
requestsContact for special requests.Optional
central_reservationsContact for central reservations. Applies to properties that manage reservations from another location.Optional
PhysicalLocationAddress details for the property's physical location.Required

Response body example

The following is a successful response body example:

<?xml version="1.0" encoding="UTF-8"?>
<OTA_HotelDescriptiveContentNotifRS 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_HotelDescriptiveContentNotifRS.xsd" TimeStamp="2015-07-31T12:36:23-00:00" Target="Test" Version="3.000">
  <UniqueID Type="10" ID="{PropertyID}" />
  <Success />
</OTA_HotelDescriptiveContentNotifRS>
<!-- RUID: [XXXXXXXXXXXXXXXXXXXXXXXXXXX==] -->

Response body parameters

The following table describes the response elements:

ElementDescriptionTypeNotes
OTA_HotelDescriptiveContentNotifRSContains the response data.object
> warningsContains potential warnings. These can help you improve your requests.array
> errorsContains potential errors. These can help you understand what went wrong with your request.array
> successIndicates the success of the request.object
ruidSpecifies the unique ID of the request.stringYou can send this ID to Booking.com's Connectivity support team if you run into an issue. This can help to understand what went wrong.

Copying fees forward

When a property has set up a tax or fee change at a future moment in time in the extranet, Booking.com systems automatically copy the other existing fees to the future period. Looking at the table below, this means that at the future moment in time the updated fees will become effective.

FeeNowFuture moment in time (for example, 01/01/2023)
VAT8%9%
Cleaning fee€50 per stay€50 per stay
City Tax€5 per day€5 per day

However, if you make changes via the Content API (/ota/OTA_HotelDescriptiveContentNotif endpoint) after the future fee change was set up, Booking.com systems did not automatically copy the updated fees to the future period. Looking at the table, you can see that when you change the cleaning fee value via the Content API, it does not get copied forward to the future moment in time.

FeeNowFuture moment in time (for example, 01/01/2023)
VAT8%9%
Cleaning fee€70 per stay€50 per stay
City Tax€5 per day€5 per day

To mitigate this behavior, the Content API now has a setting (TPA_Extensions > OverwriteFutureFees) with a default setting (1) to copy any fee changes to the future moment in time. If you want to turn off this behavior, you can send a request by setting the value to 0.

Partial example

<?xml version="1.0" encoding="UTF-8"?>
<OTA_HotelDescriptiveContentNotifRQ Target="Production">
    <HotelDescriptiveContents>
        <HotelDescriptiveContent
      HotelName="The Best Hotel"
      LanguageCode="en"
      HotelDescriptiveContentNotifType="Overlay">
            <Policies>
                <Policy>
                    <PolicyInfo CheckInTime="16:00" CheckOutTime="11:00"/>
                    <PetsPolicies PetsAllowedCode="Pets By Arrangements">
                        <PetsPolicy NonRefundableFee="free" />
                    </PetsPolicies>
                    <CancelPolicy>
                        <CancelPenalty PolicyCode="43" />
                        <CancelPenalty PolicyCode="1" />
                    </CancelPolicy>
                    <GuaranteePaymentPolicy>
                        <GuaranteePayment PolicyCode="43" />
                        <GuaranteePayment PolicyCode="1" />
                    </GuaranteePaymentPolicy>
                    <TaxPolicies>
                        <TaxPolicy Code="36" Percent="900" DecimalPlaces="2" Type="Inclusive" ChargeFrequency="12" />
                    </TaxPolicies>
                    <FeePolicies>
                        <FeePolicy Code="5009" Amount="7000" DecimalPlaces="2" Type="Exclusive" ChargeFrequency="12" />
                        <FeePolicy Code="3" Amount="500" DecimalPlaces="2" Type="Exclusive" ChargeFrequency="1" />
                        <FeePolicy Code="5036" Amount="350" DecimalPlaces="2" Type="Exclusive" ChargeFrequency="2" />
                    </FeePolicies>
					<TPA_Extensions OverwriteFutureFees='1' />
                </Policy>
            </Policies>
        </HotelDescriptiveContent>
    </HotelDescriptiveContents>
</OTA_HotelDescriptiveContentNotifRQ>

Enabling request to book

Booking.com supports two types of booking flow depending on the partners choice:

  • Instant booking (IB): The existing booking flow where guests search and book a stay instantly with the option to pay immediately or at the property depending on the cancellation policy.
  • Request to book (RtB): (a.) Guests who want to stay at the partner's property send them a booking request at least three days before check-in. (b.) Partner receives a booking request notification and has 24 hours to accept or decline it. (c.) If the partner accepts the request, the guest has 24 hours to complete their booking and confirm their stay. If they don’t complete the booking in time, the request will expire and no reservation will be made.
Note

Availability for request to book are shown to guests only when the stay dates are 3 or more days in the future.

RtB can only be enabled for new properties meeting certain eligibility criteria.

RtB Provider Feature

In order to make use of the Content API to change a property's booking model to RtB, you must have the content_api_rtb_enabled feature on. You can do this in the provider portal by going to your feature management.

If RtB feature is not specified in the /ota/OTA_HotelDescriptiveContentNotif request, then the property is configured for instant booking (IB) booking flow.

Partial example

<?xml version="1.0" encoding="UTF-8"?>
<OTA_HotelDescriptiveContentNotifRQ Target="Production">
    <HotelDescriptiveContents>
        <HotelDescriptiveContent
      HotelName="The Best Hotel"
      LanguageCode="en"
      HotelDescriptiveContentNotifType="New">
          <TPA_Extensions>
            <BookingModel Type="RTB"/>
          </TPA_Extensions>
        </HotelDescriptiveContent>
    </HotelDescriptiveContents>
</OTA_HotelDescriptiveContentNotifRQ>

Error codes

BuildHotel error

If you receive the BuildHotel error, try to resend the same building request again until you receive a success response. The system excludes properties built with the BuildHotel error, which are automatically set to Closed (status). In case the BuildHotel error does not disappear, contact Connectivity Support.

Next steps