# Holidu Developer Hub Documentation — full text
> Our Holidu API allows you to connect with millions of travellers all over the world, simply by developing a few HAPI endpoints.
Index: https://developer.holidu.com/llms.txt
---
# Requirements
Source: https://developer.holidu.com/docs/certification
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
To connect to Holidu through the connectivity API, you need to fulfill all of the following requirements:
* All properties need to be instantly bookable on Holidu, meaning a confirmation needs to be sent out immediately after a booking to the customer
* All prices and availabilities need to be known upfront, so Holidu can calculate them and show them correctly to the customer
* The availability of all extra services needs to be known upfront and the information pushed to the static data
* Data quality standards - every property needs to have good photos, a description at least in English, and the basic facilities
* Apartments need to be deletable as soon as they are disabled on your side
* If the rate of not accepted bookings goes above 2%, Holidu may pause the connection until the issues are resolved
* If we see errors (non-200 HTTP statuses) on a regular basis while you push data to the Holidu API endpoints, Holidu may need to pause the connection until the issues are resolved - this is because we might be missing important data for instance about availability, prices, etc.
---
# Best practices
Source: https://developer.holidu.com/docs/best-practices
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
Here are the typical steps you will need to go through to be live on Holidu through our API. Your overall aim is to map your data to our API’s data structure so that we can display the correct information regarding your properties to the customers.
## Make sure you fit the requirements
Min data requirements, everything instant bookable, price and availability upfront\
You are able to explore all models, endpoints and the documentation without credentials
## Connect to our sandbox
After a kickoff call with one of our Technical Account Managers you will get credentials for our sandbox environment. We expect you to push valid data to all endpoints without errors.
## Implement availability, booking and cancellation endpoint on your side
Once you pushed all static data, you need to implement the availability, booking and cancellation endpoints.
## Go through the basic verification
In this phase we are testing your basic data
* do you have any errors in your pushs
* do your endpoints behave as expected and respond with the correct error messages\
Your Technical Account Manager will help you finalizing this part
## Integration to our production api
Once everything is looking good in the sandbox, you will get credentials to our production api. Here you can now start pushing real data, the behaviour matches exactly our sandbox.
## Go through the final verification
Similar to the first certification, a TAM will make sure everything behaves as expected.\
In this part of the certification is a stronger focus on the end to end testing, placing a real booking in your system, checking your emails to the customer, etc.
## Going life
If this step is done, congratulations, you are ready to go live on Holidu.\
In the first time after you went live your Technical Account Manager will closely monitor all kpis of your integration and will let you know in case they see something suspicious.
Don't forget to watch [our changelog](https://developer.holidu.com/changelog) for updates, we are working on improving the API constantly.
---
# Generating API Client Code
Source: https://developer.holidu.com/docs/generating-api-client-code
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
OpenAPI provides over fifty client generators that can help developers generate client code from any specification file. This document will provide a step-to-step guide for generating an API client library using the Connectivity OpenAPI specification. In this example, a java client will be generated, but you can choose your own programming language [here](https://openapi-generator.tech/docs/generators/).
### Requirements
1. Any suitable IDE
2. Java 1.8+
3. Maven (3.8.3+)
### Locate and download the Specs
Locate the OpenApi Specification on the top right-hand section in [Holidu Developer Hub](https://developer.holidu.com/) website for access to the latest versions of all Connectivity API specification files.


Click on the Connectivity API-v2.0 to access the spec content

Create a .json file in the resource folder of your project and copy the content of the selected spec into the created file.

### Generate client code
We will use the [openApi codegen maven pluggin.](https://github.com/OpenAPITools/openapi-generator) as a code generator in this guide (for information about other generators, visit [https://openapi-generator.tech/docs/generators](https://openapi-generator.tech/docs/generators)). Simply update the build section of your pom.xml with the code snippet specified below.
```xml
org.openapitools
openapi-generator-maven-plugin
${openapi-generator.version}
generate
${project.basedir}/src/main/resources/openapi/connectivity_api.json
java
src/gen/main/java
java8
```
A client API library will be generated during the generate phase of your build process.
For more information about configuration options associated with the openApi codegen maven pluggin visit [https://github.com/OpenAPITools/openapi-generator/blob/master/modules/openapi-generator-maven-plugin/README.md](https://github.com/OpenAPITools/openapi-generator/blob/master/modules/openapi-generator-maven-plugin/README.md)
> A compilation error might be thrown when trying to generate the client code. To resolve this, ensure your project contains the following artifacts: com.google.code.gson:gson, io.swagger:swagger-annotations, com.squareup.okhttp3:okhttp-tls, com.squareup.okhttp3:logging-interceptor and io.gsonfire:gson-fire
The generated API client can be located in the target folder.

Find a README.md file in the path indicated below for a comprehensive guide to using this generated API in your projects.

---
# Required Steps to implement Holidu Payment
Source: https://developer.holidu.com/docs/required-steps-to-implement-holidu-payment
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
Requirements:
* Cancellation endpoint on partner side: The Cancellation Notification must trigger an immediate cancellation of the Holidu Payment booking in partner system ([documentation](https://developer.holidu.com/docs/modification-cancellation-notification.md)).
* Holidu Payment partners must not be able to cancel Holidu Payment bookings in partners' systems, as this will **not** trigger a cancellation of the booking on Holidu. This functionality must therefore be blocked for Holidu Payment bookings (recognizable in the booking notification by the parameter `“paymentHandler”: “HOLIDU”`). Why? Because the complete guest processing of a Holidu Payment booking lies with Holidu.\
It is therefore also recommended to include a note partners' systems stating that Holidu Payment bookings can **only be canceled by Holidu**.
* For Holidu Payment bookings please **do not push** updates or cancelations to our endpoints ( [update bookings see here](https://developer.holidu.com/docs/update-bookings.md) and [cancel bookings see here](https://developer.holidu.com/docs/cancel-bookings.md) )
* Cancellation policies need to be pushed on apartment level.
* Also for cancellation policies set, it is necessary that you set 100% cancellation fee at least for the check-in date. Until 1 day before checkin date cancellation fee can be any percentage (from 0 to 100%).
* The partner’s booking confirmation to the guest must not contain payment request to the guest (as payment happens via Holidu).
* Payment Schedule Endpoint: Data will be ignored as we will adjust the payment rates based on your selected cancellation policy.
* Currency in LOS or Rates data needs to be sent EUR, partners' bank accounts need to be in EUR, as we pay out in EUR.
* Any extraCost that is refundable (deposit) must always be **paid on site**.
---
# HAPI version 1 to version 2 Migration Guide
Source: https://developer.holidu.com/docs/hapi-version-1-to-version-2-migration-guide
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
## Introduction:
This guide is intended to help Holidu API (HAPI) partners transition from version 1 to version 2. The new version includes a range of new features, improvements, and bug fixes, and is designed to make the API easier and more efficient to use.
## Before You Begin:
Before you begin the migration process, please make sure to read the Release Notes for version 2 of the API. This will give you a detailed overview of all changes and new features, as well as any breaking changes or deprecated functionality.
### Step 1: Review your Code
Before making any changes to your code, take a moment to review it and make sure that you understand how your current implementation uses HAPI version 1. This will help you identify any areas of your code that will need to be updated to work with version 2.
### Step 2: Update your Endpoints
In HAPI version 2, the base endpoint has changed. In HAPI version 1, the base endpoint is `/rest/public/integration/{operation}`. However, the base endpoint for HAPI version 2, will be `/v2/apartment/{operation}`.
### Step 3: Update your API operations
One of the most significant changes in this release is the addition of a granular endpoint for apartment management. This new endpoint will give you more control over your apartment listings, allowing you to manage your information in a more efficient and accurate way.
#### If you use `/apartment` endpoint to push facilities, extra costs, photos, reviews and more
Kindly make use of the granular endpoints for each operation, and do not push all those data through the apartment endpoint.
#### If you use `/facilities` endpoint to push extra costs information
Please only use the new `/extracosts` endpoint to push the information. You can still however use the `/facilities` endpoint to indicate if your facility requires additional fees, or if it is a private usage.
### Step 4: Update your code to adapt to API response
In version 2 of the API, some of the parameters and responses have changed. For example, the response format for retrieving apartment information has been updated. In HAPI version 1, when you perform `GET` operation of an apartment, you will get all the information, such as `extraCosts`, `customerReviews`, `facilities`, and many more. In HAPI version 2, the response data has been trimmed down to only include basic information, keeping a slim response.
Review the API Reference for version 2 to see the updated parameters and responses, and make any necessary changes to your code.
### Step 5: Test your Code
After making any necessary changes to your code, make sure to thoroughly test it to ensure that everything is working as expected.
### Step 6: Deploy your Changes
Once you have thoroughly tested your code, you can deploy your changes and start using HAPI version 2.
## Conclusion:
By following these steps, you can easily and smoothly transition from HAPI version 1 to version 2. If you have any questions or concerns about the migration process, please don't hesitate to reach out to our support team for assistance.
---
# Request URLs
Source: https://developer.holidu.com/docs/request-urls
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
## Apartment related calls
For all API calls related to an apartment, the apartment needs to be specified by adding the provider and the providerApartmentId as params to the request url.
Once an apartment is created, the API calls can also be made by using the holiduApartmentId as param in the request url.
| Parameter | Usage |
| :------------------ | :----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| provider | Identifier you receive from us upon your integration. In case you are a channelmanager, you are getting a different provider identifier for each connected partner |
| providerApartmentId | The id of the property in your system. The combination providerApartmentId & provider needs to be unique |
| holiduApartmentId | The id of the apartment in the holidu system, created upon first creation. All follow up call can be made using the holiduApartmentId as param |
## Special case bookings
For all API calls related to bookings, the booking needs to be specified by adding the provider and the providerBookingId. API calls can also be made using the holiduBookingId
---
# Listings
Source: https://developer.holidu.com/docs/the-apartment-object
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
## Here is where the journey begins!
The Holidu API allows you to create and synchronise your listings in an easy way. You are now able to update only parts of the listing in case it changes on your side, e.g. you can update only the photos without having to send all the data relevant to that property.
These are all the endpoints that you have to call to create and update your listings:
### Apartment
This is the first step you need to follow to create your listing, it is very important that you integrate this call first before pushing any further data points. The data you send here is crucial to avoid misunderstandings with the guests.
This object contains the core apartment data, and is defined by the following parameters:
* The latitude and longitude
* The name, address, country, city, zip code
* The contact details of the homeowner
* The capacity rules, apartment type, characteristics (size, year of construction)
* Check in/out times
* The license number, in case it is needed (depending on the region)
You can find more details in the [Apartments](https://developer.holidu.com/docs/general-static-data.md) section.
### Descriptions
The descriptions should be at least sent in English so we can translate them into all the different languages supported by Holidu. If you send descriptions only in e.g. Spanish, Holidu uses them as the fallback for every language you do not send
More details and recommendations: [Descriptions](https://developer.holidu.com/docs/localization.md)
### Photos
We are certain that up until this point you know how important are good quality images. The better the pictures, the more attractive will be your listings to the guests. For that, we collected a set of good practices that you can follow. You can find more details in the [Photos](https://developer.holidu.com/docs/photos.md) section.
### Facilities
This is perhaps one of the key elements of a listing. We offer a wide range of filters based on the facilities offered by our partners, which all the guests are using more and more to make a final decision. Make sure you follow our advice on this topic as well as follow the rules to make the best out of your listings in the [Facilities](https://developer.holidu.com/docs/facilities.md) section.
### Reviews
When in doubt... a review can leverage or discourage the final decision of a guest to book a property. At Holidu we offer a wide range of possibilities for you to share your reviews. Robust reviews, with more details and information such as guests-name, descriptions, etc generate more trust and can definitely increase the conversion of your listings. Check out our [Reviews](https://developer.holidu.com/docs/reviews-1.md) section for more details.
> **Danger: Activation and deactivation of an apartment**
>
> All the listings will be initially **deactivated** and **not visible** on Holidu by default.
>
> To activate them, you need to use our **activation endpoint**.
>
> You have to follow the same process to deactivate a listing.
>
> Check out more in the [Activation and deactivation](https://developer.holidu.com/docs/apartment-activation.md) section.
***
---
# Apartments
Source: https://developer.holidu.com/docs/general-static-data
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
## First things first - the core apartment
> **Info: Apartment basics**
>
> * To create an apartment, make an API request to this endpoint as a first step.
> * Here you will be able to add the general core data of each property.
> * To update an apartment you need to PUSH the entire apartments object, updates for single fields are not possible.
The core apartment holds all information related to the property itself. Here you will be able to configure the basic details of a property as well as the capacity rules, location and contact details of the host for communication purposes e.g. when the traveller books a property.
| Parameter | Type | Required | Usage |
| --- | --- | --- | --- |
| providerApartmentGroupId | string | | You will use this parameter **ONLY** if the apartment belongs to a <glossary:multi-unit>. If several apartments are located in one house, they'll share the same providerApartmentGroupId. |
| lat | number | YES | **Latitude:** is used to show your property on the map.
Additionally, we also use it to determine the distances to the different POIs. |
| lng | number | YES | **Longitude:** it is important to notice that the distances to the different POIs are measured **aerially** (straight-line), hence these may vary in contrast with road distances. |
| name | string | | This value will be used for communication purposes with the partner, e.g. in the booking notification email after a successful booking. This will **NOT** be the title of the property displayed on the Holidu website; that one will be taken from the descriptions endpoint. |
| apartmentAddress | **object** | | This will only be used in the communication to the guest from Holidu. This way we can share the address of the property. |
| apartmentAddress.street | string | | |
| apartmentAddress.zipCode | string | | |
| apartmentAddress.city | string | | |
| apartmentAddress.countryCode | string | | |
| contactDetails | object | | |
| contactDetails.contactName | string | | Host / agency data: Meaning the person, group, or entity that is the point of contact for checkin details and that handles anything related to helping when the stay takes place. |
| contactDetails.contactPhone | string | | Phone number of the contact |
| contactDetails.contactEmail | string | | Email of the contact |
| guestCapacityRules | **object** | YES | To define the maximum capacity of people allowed in a property, as well as children and babies. |
| guestCapacityRules.standardCapacity | int32 | YES | The max adult capacity of the property. |
| guestCapacityRules.adultsOnly | boolean | | This should be set as true in case **children and babies are not allowed.** |
| guestCapacityRules.additionalChildren | int32 | | This is the number of additional children that can be added on top of standardCapacity of the property. |
| guestCapacityRules.maxBabies | int32 | | This is the max number of babies allowed on the property. |
| numberOfBedrooms | int32 | | This is the number of bedrooms on the property. |
| numberOfLivingrooms | int32 | | This is the number of living rooms on the property. |
| numberOfBathrooms | int32 | | This is the number of bathrooms on the property. |
| sizeInSqm | number | YES | This value will be displayed on the Holidu website. |
| apartmentType | string | YES | This determines if the property is e.g. APARTMENT, LODGE, etc. You can check the complete list at the end of this page. |
| checkInCheckOutTimes | **object** | | These are the times when the guest can check in and out. |
| checkInCheckOutTimes.checkIn | **array of objects** | YES* | It is possible to define multiple check in windows, e.g. from 12:00 to 14:00 and from 16:00 to18:00 |
| checkInCheckOutTimes.checkIn.checkInFrom | string | YES* | |
| checkInCheckOutTimes.checkIn.checkInTo | string | YES* | |
| checkInCheckOutTimes.checkOutUntil | string | YES* | It is **ONLY** possible to have **one** checkout until time. |
| floor | int32 | | This is the floor on which the property is located, starting with 0 for the ground floor. |
| sizeOfPlot | number | | This is the entire area of the property accessible to the guest. This includes the garden, terraces or garages, etc. |
| buildYear | int32 | | Build year of the property |
| modernizedYear | int32 | | Year of renovation, in case there was one. |
| license | string | It depends | In certain regions, the property requires a license number to be shown, e.g. all the Balearic Islands in Spain. See below for more information where it is required. |
| regulatoryInformation | **object** | It depends | Store mandatory regulatory information for the apartment in specific regions. As an example, all rental properties in Italy must display a CIN number (Codice Identificativo Nazionale) on booking platforms. |
| regulatoryInformation.CIN_LICENSE_NUMBER | string | It depends | CIN number (Codice Identificativo Nazionale) is **REQUIRED** for properties in Italy. |
| regulatoryInformation.NRA_LICENSE_NUMBER | string | It depends | NRA number (Número de Registro de Alquiler) is **REQUIRED** for properties in Spain. |
| isTestApartment | boolean | YES | If set to true, this boolean will prevent the property from being visible on all live domains. At the same time, it will enable you to perform end-to-end testing to verify that the data is being sent correctly! |
| leadTimeHours | int32 | | Booking lead time in hours - This field defines the minimum amount of hours before check-in a booking can be generated |
| duplicateFrom | array | | Links this property to the same property in another Holidu partner's system, so we can deduplicate it. Please contact us before using. See the **duplicateFrom** section below for the expected ID formats. |
> **Danger: Be aware**
>
> * Be aware to only use the fields `guestCapacityRules.adultsOnly` and/or `guestCapacityRules.additionalChildren` under the following conditions:
> * when children and/or babies are NOT considered an adult in terms of price
> * when **guest categories on the partner level** are set to distinguish children and/or babies from adults in terms of age ranges and price
> * In doubt always make sure to consult with your Technical Account Manager before using the above fields
>
> * `guestCapacityRules.maxBabies` is currently taken into account, If not defined as "unlimited" on partner level.
>
> * If not discussed otherwise with your Technical Account Manager at Holidu, please never push the `onRequestDetails` object. The field `bookableOnRequest` and `hostEmailAddress` should only be used after close consultation with us.
>
> * The default use case is that properties pushed to use will be directly instant bookable.
***
### APARTMENTS JSON object
Scroll down inside the table to see the entire object:
```json title="json"
{
"providerApartmentGroupId": "123456",
"lat": 35.36498,
"lng": 24.49886,
"name": "Modern cosy apt, walking distance to the beach!",
"apartmentAddress": {
"street": "Test Street",
"zipCode": "741 00",
"city": "Citytest",
"countryCode": "ES"
},
"contactDetails": {
"contactName": "Jane Doe",
"contactPhone": "948927780",
"contactEmail": "email@mail.com"
},
"guestCapacityRules": {
"standardCapacity": 8,
"adultsOnly": false,
"additionalChildren": 4,
"maxBabies": 3
},
"numberOfBedrooms": 2,
"numberOfLivingrooms": 1,
"numberOfBathrooms": 1,
"sizeInSqm": 74,
"apartmentType": "APARTMENT",
"checkInCheckOutTimes": {
"checkIn": [
{
"checkInFrom": "09:00",
"checkInTo": "20:00"
}
],
"checkOutUntil": "11:00"
},
"floor": 3,
"sizeOfPlot": 100,
"buildYear": 1998,
"modernizedYear": 2020,
"license": "96541227-8",
"regulatoryInformation": {
"CIN_LICENSE_NUMBER": "XXX-123-XYZ"
},
"isTestApartment": false
}
```
***
## duplicateFrom
Use the `duplicateFrom` array on the apartment object when another Holidu partner already has the **same property** in their system. It lets us link your apartment to its counterpart in the other partner's inventory so we can deduplicate it correctly.
> **Info: Contact us first**
>
> Please reach out to your Technical Account Manager before sending `duplicateFrom` — we need to confirm the provider name and ID mapping for your case.
### Supported providers and ID formats
### Example
```json
{
"duplicateFrom": [
{
"provider": "BOOKINGCOM",
"duplicatedApartmentId": "1111111-DA1111111"
},
{
"provider": "VRBO",
"duplicatedApartmentId": "1111111"
}
]
}
```
***
### Table of apartment types with explanation
| Apartment type | Description |
| :------------------ | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| APARTMENT | |
| VACATION\_APARTMENT | Parent property type for all apartments that can be rented. |
| FISHING\_HOUSE | House that is close to a fishing area and/or comes with fishing equipment. |
| BED\_AND\_BREAKFAST | Sleeping accommodation for a night and a meal in the morning, provided in guest houses and hotels. |
| HOLIDAY\_VILLAGE | |
| TINY\_HOME | |
| APARTMENT\_HOTEL | Hotel where you can rent an independent apartment. |
| FARMHOUSE | Building that serves as the primary residence in a rural or agricultural setting. |
| COTTAGE | Typically a small house, usually modest, often cosy dwelling, typically in a rural or semi-rural location. |
| CAMPING | Every property that can be rented at a camping facility. |
| CHALET | Apartment/house in a ski area. It is not a Villa! |
| VACATION\_HOME | Parent property type for all independent houses that can be rented. |
| GUEST\_ROOM | Room for rent. Could be in a hotel or in a family house. |
| HOSTEL | Inexpensive hotel usually for younger people, it also offers stays in non-private rooms (usually with facilities such as a kitchen and laundromat). |
| HOTEL | |
| BOAT | A boat, floating house, yacht... |
| MANOR | Luxurious country house. |
| MOBILE\_HOME | House that does not have a definite structure, could potentially be moved (even though in most cases it doesn’t). |
| LODGE | A more remote accommodation for mountain sports and nature experiences. In other countries "Lodge" is originally a term for a relatively small building, often associated with a larger one. |
| HOUSE\_BOAT | Floating house. |
| PENTHOUSE | Luxurious apartment, usually on a top floor or with a terrace. It is NOT a house. |
| CASTLE | A castle. |
| STUDIO | Smaller apartment, usually for 1 or 2 persons, with open spaces and same area for sleeping & living. |
| VILLA | Luxurious country house, although not necessarily in a rural area. It is a standalone complex with its own land and building. |
| RESIDENCE | |
| ROOM | Hotel room, or room in a guest house / shared apartment. |
| BARN | Agricultural building, usually on farms, and used for various purposes. In some countries, a barn refers to structures that house livestock, including cattle and horses, as well as equipment and fodder. |
| CAVE | House excavated in stone. Or a house with a cave (some rooms are part of a cave). |
| ALLOTMENT\_GARDEN | An allotment garden (British English), often called simply an allotment, or a community garden (North America), is a plot of land made available for individual, non-commercial gardening or growing food plants. |
| ROOM\_BREAKFAST | Room with breakfast included. |
| BUNGALOW | A house, normally detached, that may contain a small loft. |
| YACHT | Glamorous houseboat (usually a boat that can reach higher speeds). |
| CAMPER | |
| CARAVAN | |
| LUXURY\_TENT | Luxurious camping tent. Also luxurious tent in a remote location (like desert, savanna, etc.). |
| TENT | |
| TIPI | |
| YURT | A traditional yurt (from the Turkic languages) or ger (Mongolian) is a portable, round tent covered with skins or felt. |
| GUEST\_HOUSE | A private house offering accommodation to paying guests; a boarding house; a bed and breakfast. |
| PENSION | Small hotel or guest house accommodation. (usually with front desk & service hours hotel-like). |
| BEACH\_HUT | A hut, a small house in a beach area / by the beach. |
| CHACARA | Small rural property (or a large urban property) with a dwelling house, animal husbandry and fruit and vegetable growing for sale |
| COUNTRY\_HOUSE | A house in the country. An English country house is a large house or mansion in the English countryside. |
| FARM | An area of land that is devoted primarily to agricultural processes with the primary objective of producing food and other crops. |
| FINCA | Holiday home in a rural setting. With rural or agricultural land. |
| GITE | A gîte is a holiday home available for rent. Gîtes are usually fully furnished and equipped for self-catering. |
| HUT | Small house typically built with local materials. |
| LIGHTHOUSE | A tower, building, or another type of structure designed to emit light from a system of lamps and lenses and to serve as a navigational aid for maritime pilots at sea or on inland waterways. |
| LOG\_CABIN | Small log house, especially a less finished or architecturally sophisticated structure. |
| MILL | House that used to be a mill or has a mill (not necessarily a windmill, it could also be for flour, or powered by water). |
| MOUNTAIN\_HUT | A house, hut or smaller house in the mountains, although not necessarily in a ski area. |
| RIAD | Traditional Moroccan house with courtyard. |
| TOWER | House that is a tower or has a tower. |
| TREE\_HOUSE | A house in a tree. |
| TRULLO | Traditional Apulian dry stone hut with a conical roof. Their style of construction is specific to the Itria Valley, in the Murge area of the Italian region of Apulia. |
| RESORT | Also a holiday village in a remote/glamorous location. |
| GLAMPING | Glamorous camping. |
| HOMESTAY | Rooms in a shared accommodation with the house owner |
***
### Array of apartment types
```json title="APARTMENT TYPE"
[ APARTMENT, VACATION_APARTMENT, FISHING_HOUSE, BED_AND_BREAKFAST,
HOLIDAY_VILLAGE, APARTMENT_HOTEL, FARMHOUSE,
COTTAGE, CAMPING, CHALET, VACATION_HOME, GUEST_ROOM, HOSTEL, HOTEL, BOAT,
MANOR, MOBILE_HOME, LODGE, HOUSE_BOAT, PENTHOUSE, CASTLE, STUDIO, VILLA,
RESIDENCE, ROOM, BARN, CAVE, ALLOTMENT_GARDEN, ROOM_BREAKFAST, BUNGALOW,
YACHT, CAMPER, CARAVAN, LUXURY_TENT, TENT, TIPI, YURT,
GUEST_HOUSE, PENSION, BEACH_HUT, CHACARA, COUNTRY_HOUSE, FARM, FINCA, GITE,
HUT, LIGHTHOUSE, LOG_CABIN, MILL, MOUNTAIN_HUT, RIAD, TOWER, TREE_HOUSE,
TRULLO, RESORT, GLAMPING, HOMESTAY, TINY_HOME ]
```
***
### Places that require License
* France (some areas)
* Germany (some areas)
* Italy
* Apulia
* Lazio
* Sardinia
* Portugal (in total)
* Spain
* Catalonia
* Balearic Islands
* Comunidad Valenciana
* Andalusia
* Madrid
* Cantabria
* Extremadura
---
# Descriptions
Source: https://developer.holidu.com/docs/localization
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
## Time to tell us more about your properties!
> **Info: Description basics**
>
> * Descriptions should be sent in at least one language so we can translate them to other languages.
> * To update the descriptions, you need to PUSH the entire descriptions object. Updates for single fields are not possible — otherwise, the data will be overwritten.
> * For all languages in which no titles are pushed, we auto-generate a title for each domain.
| Parameter | Type | Required | Usage |
| :--- | :--- | --- | --- |
| language | string | YES | Here you define the language in which you are sending the description. The following are the languages supported on Holidu: * de, dk, en, es, fr, it, nl, pl, pt, gr |
| description | string | YES | Here you will be able to send the description of the property. Partners can highlight the property's surroundings, activities, uniqueness, and extras.\ **Recommendations:** * min 400 characters * max 2k characters * include info about the neighbourhood and property |
| title | string | | This value will be used to name the property on the Holidu website. Ideally, titles should not be too long, as this negatively affects the user experience.\ **Recommendations:** * max 255 characters * min 3 characters * should not be with all letters in uppercase |
| locationDescription | string | | Description of the outside of the apartment, such as location and surroundings. |
***
## DESCRIPTIONS JSON object
```json title="DESCRIPTIONS"
[
{
"language": "de",
"description": "Die Appartamenti La Grotta befinden sich im historischen Zentrum von Bardolino...",
"title": "La Grotta"
},
{
"language": "en",
"description": "The apartment la Grotta is located in the historic center of Bardolino..",
"title": "La Grotta"
},
{
"language": "es",
"description": "El apartamento la Grotta está situado en el centro histórico de Bardolino..",
"title": "La Grotta"
}
]
```
---
# Photos
Source: https://developer.holidu.com/docs/photos
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
## Show us your property!
> **Info: Photos basics**
>
> * For a property to go live it should have **min 5 photos.** We highly recommend to have at least 10 photos for a better performance.
> * To update a photo, please push it with **a different url**, only then it will be recognized as a new photo and then it will be updated. To do so, you can include a param + the timestamp of when the photo was updated to the URL.
> * To update or delete photos, push the complete list of current photos every time: photos missing from the list are removed, and an empty list removes all photos. Pushing the same URLs again restores removed photos.
> * When pushing photos to our photos endpoint, it is important to include a filter to eliminate duplicate URLs. Duplicate URLs within a photo push request will lead to a failure of the entire request. Therefore, ensuring that each URL is unique helps maintain the integrity of the photo push process and prevents potential issues with data ingestion.
**Ideally the photos should have a size of 2MB.** To make sure everything runs smoothly, they should not be larger than 8MB.
| Parameter | Type | Required | Usage |
| :--- | :--- | --- | --- |
| `url` | string | YES | Photo URL\ **Recommendations:** * ideal resolution 2048x1536 pixels * min resolution 1024x683 pixels * ideal size: 2MB, no larger than 8MB * orientation: landscape * formats: JPG, JPEG, PNG * no photo duplications |
| `position` | int32 | YES | Position of the photo to be shown to the potential guest |
***
## PHOTOS JSON object
```json title="PHOTOS"
[
{
"url": "http://url/of/your/picture.jpg",
"position": 1
},
{
"url": "http://url/of/your/picture/2.jpg",
"position": 2
},
{
"url": "http://url/of/your/picture/3.jpg",
"position": 3
},
{
"url": "http://url/of/your/picture/4.jpg",
"position": 4
},
{
"url": "http://url/of/your/picture/5.jpg",
"position": 5
}
]
```
---
# Facilities
Source: https://developer.holidu.com/docs/facilities
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
## The more the better!
> **Info: Facilities basics**
>
> - Users choose their properties frequently by the range of facilities! Most filters on the Holidu page are based on facilities
> - To update the facilities, you need to PUSH the entire facilities object. Updates for single fields are not possible, otherwise the data will be overwritten.
> - If can cannot identify a matching `parameter:type` in the list you get from [here](https://developer.holidu.com/reference/getfacilitytypes.md), you have the option to push the raw facility names from your system without mapping to a Holidu facility type. We kindly ask you to communicate this to your technical account manager, in order for us to initiate the mapping on our end.
> - Please always push all **bed facilities**, as it is very important to the guest to know which bed types and sizes we be available in an apartment
In order to increase the performance and avoid disappointments for the users, it is crucial that you push all available facilities. The average amount of facilities per property on Holidu is 13, we strongly recommend not providing less than that.
Facilities, especially the most important ones like POOL, PETS, WIFI, ... are very important to the customers, so please make sure to provide us all the details when it comes to times they are available, extra charges or other parts that may impact the customer experience.
| Parameter | Type | Required | Usage |
| :--- | :--- | --- | --- |
| `type` | string | | Here you should map your facilities according to the list that we have [here.](https://developer.holidu.com/docs/facilities.md#List-of-facility-types-and-their-meaning) If on |
| `maxAmount` | int32 | | Max amount of this facility per property. |
| `privateUsage` | boolean | | If this value is set to `true` then it means that the facility is for private use only. |
| `additionalFeesApply` | boolean | | If this boolean is set to `true` it means that additional fees apply for the use of this facility.
This value is for us to be able to show it on the Holidu website e.g. extra costs apply.
If additional fees apply, then you **ALSO** need to send the correct data to our `"extraCosts"`endpoint to specify the fee, currency, etc. |
| `room` | **object** | | Should be used in case you want to assign a bed facility to a room |
| `roomId` | string | Yes\* | Is required, when a room object is pushed for a bed facility |
| `roomType` | string | Yes\* | Is required, when a room object is pushed for a bed facility, you may specify the room type as such: `BED_ROOM`, `LIVING_ROOM`, `BATH_ROOM`, `KITCHEN` |
| `availableTime` | **object** | | In this object you can specify if a certain facility is only available for certain periods of the year, e.g. if the POOL is not the full year available. **Please only use this in case the facility is not available the whole year.** |
| `availableTime.availableFrom` | **object** | Yes\* | This will determine **since when** in the year is the facility available. |
| `availableTime.availableFrom.pointInMonth` | string | Yes\* | The options are: - BEGINNING, MIDDLE, END |
| `availableTime.availableFrom.month` | string | Yes\* | The options are: - JANUARY, FEBRUARY, MARCH, APRIL, MAY, JUNE, JULY, AUGUST, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER |
| `availableTime.availableTo` | **object** | Yes\* | This will determine **up until when** in the year is the facility available. |
| `availableTime.availableTo.pointInMonth"` | string | Yes\* | The options are: - BEGINNING, MIDDLE, END |
| `availableTime.availableTo.month"` | string | Yes\* | The options are: - JANUARY, FEBRUARY, MARCH, APRIL, MAY, JUNE, JULY, AUGUST, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER |
> **Tip: Sustainable facilities**
>
> Holidu is fostering to offer more eco-friendly properties to our travelers!
>
> **How?:** We are awarding all sustainable vacation accommodations with an
Eco-label, so travellers can easily identify all the eco-friendly properties
at Holidu.
>
> - This badge will be granted when a property has at least 8 of our 41
sustainable facilities.
> - You may find the list [here](https://developer.holidu.com/docs/facilities.md#sustainable-facilities).
***
## FACILITIES JSON object
```json title="FACILITIES"
[
{
"type": "POOL",
"privateUsage": true,
"additionalFeesApply": false,
"availableTime": {
"availableFrom": {
"pointInMonth": "BEGINNING",
"month": "APRIL"
},
"availableTo": {
"pointInMonth": "END",
"month": "AUGUST"
}
}
},
{
"type": "CHIMNEY",
"privateUsage": true,
"additionalFeesApply": false
},
{
"type": "WASHER_DRYER_COMBO",
"privateUsage": false,
"additionalFeesApply": true
}
]
```
***
> **Info: Visibility of facilities**
>
> - If `maxAmount` is specified, every value >1 will be visible with a count. If set to 0 or 1, the facility will be visible without specified count. Therefore please do not use `maxAmount:0` in case a facility is not available!
> - If `privateUsage` is specified as `false`, the following facilities will be marked as "shared", if set to `true` set to "private"
>
> ```
> "POOL",
> "POOL_CHILDREN",
> "POOL_HEATED",
> "POOL_INFINITY",
> "POOL_ROOFTOP",
> "POOL_SEASONALLY_OPENED",
> "SAUNA",
> "WASHER",
> "DRYER",
> "WASHER_DRYER_COMBO",
> "POOL_INDOOR",
> "POOL_INDOOR_CHILDREN",
> "GARDEN",
> "POOL_OUTDOOR",
> "POOL_OUTDOOR_CHILDREN",
> "KITCHEN",
> "KITCHENETTE",
> "WASHER_DRYER_COMBO_COIN_OPERATED"
> ```
>
> - If `additionalFeesApply` is set as `true`, there will be "Additional Cost" displayed for the facility. The specific costs for the facility is then provided separately via extra cost endpoint
> - The `room` object will only be considered for bed facilities. For all other facilities we will cluster facilities in our default categories, such as for instance bathroom or kitchen.
> - An applicable season that is specified in `availableTime` object and can be visible for all facilities through a flag called "seasonal" with mouse over for the applicable time of months.
> - If `location` is set as `NEAR_BY`, this will only be shown for facility for `Parking`
> - Please note: we do not display `POOL` and `SAUNA` at all if they are marked as `NEAR_BY`. For all other facilities `location:NEAR_BY` will treat facilities available and visible without specific flag.
***
## List of facility types and their meaning {#List-of-facility-types-and-their-meaning}
You can easily make a GET call to obtain an array with all the facilities we have, [here](https://developer.holidu.com/reference/getfacilitytypes.md)
| Facility ENUM | Facility definition |
| --- | --- |
| AIRPORT_SHUTTLE | Shuttle to and from the airport is possible |
| AIR_CONDITION | Air condition in the accommodation |
| ALARM_HOUSE | There is a home alarm / security alarm system in the accommodation |
| ALLERGY_FRIENDLY | The accommodation is suitable for people with allergies |
| ANIMALS_CAT | There are cats on site; not related to bringing pets |
| ANIMALS_DOG | There are dogs on site; not related to bringing pets |
| ANIMALS_FARM | There are farm animals on site; not related to bringing pets |
| ANIMALS | There are animals on site; not related to bringing pets |
| ATM | ATM is available for use nearby, or in the building / complex |
| BALCONY_COVERED | Apartment has at least one balcony with some kind of cover over at least part of it |
| BALCONY_TERRACE | There is a balcony or terrace (depending on which level); other mappable names include patio, deck |
| BALCONY_UNCOVERED | Apartment has at least one balcony which is completely uncovered |
| BALCONY | Apartment has at least one balcony (whether it is covered or not is unknown) |
| BARRIER_FREE_NOT | Apartment is not accessible for handicapped or disabled guests |
| BARRIER_FREE | Accessible for handicapped or disabled guests; wheelchair accessible |
| BATHROBE | Bathrobe available for use |
| BATHTUB | There is at least one bathtub in the apartment |
| BEACH_CHAIR | Apartment has at least one beach chair, or there are some nearby |
| BEACH_VACATION | Beach-themed vacation |
| BEAMER | Apartment has a projector or beamer for viewing movies, projecting computer screens; or one is available upon request |
| BED_AIR_MATTRESS | Apartment has at least one air mattress, or one is available upon request |
| BED_BABY | Apartment has at least one crib / baby bed, or one is available upon request |
| BED_BUNK_1 | There is a bunk bed with only one bed up top |
| BED_BUNK_2 | There is a bunk bed with both top and bottom beds |
| BED_BUNK | There is a bunk bed of unknown dimensions, unknown if it is both top and bottom or just top bunk |
| BED_CHILDREN | Apartment has at least one children’s bed, or one is available upon request |
| BED_DOUBLE | Apartment has at least one double-sized bed |
| BED_EXTRA | Apartment has at least one extra bed, or one is available upon request |
| BED_FLOOR_MATTRESS | Apartment has at least one mattress of undefined type, or one is available upon request (can be one that is provided on the floor, not a proper bed) |
| BED_FOLDAWAY | Apartment has at least one fold-away bed |
| BED_KING | Apartment has at least one king-sized bed |
| BED_QUEEN | Apartment has at least one queen-sized bed |
| BED_SINGLE | Apartment has at least one single-sized bed |
| BED_SLEEPING_COUCH_1 | Sofa bed of single size; sleeps 1 person |
| BED_SLEEPING_COUCH_2 | Sofa bed of double size; sleeps 2 people |
| BED_SLEEPING_COUCH | Sofa bed of unknown size |
| BEDLINEN_NOT | Bedlinen is not provided in the apartment |
| BEDLINEN | Bedlinen is provided in the apartment |
| BEST_PRICE | Accommodation has a “best price guarantee” or “lowest price guarantee” |
| BICYCLE_CELLAR | Bike storage is available for use; either a bike cellar or bike room |
| BICYCLE_RACK | Bike rack is available for use |
| BIKE_PROVIDED | Bike provided for use by the property manager |
| BIKE_RENTAL | Bike rental is possible nearby, or with the property manager |
| BIKING | Biking is an activity nearby |
| BILLIARD_TABLE | There is a billiard table at or near the apartment |
| BLURAY_PLAYER | Apartment has at least one blu-ray player, or there is one nearby |
| BOAT_PROVIDED | Boat provided for use by the property manager |
| BOAT_RENTAL | Boat rental is possible nearby, or with the property manager |
| BOAT_TRIP | Boating-themed vacation |
| BREAKFAST | Breakfast is available; could be a breakfast bar, bed and breakfast, etc., but it’s not necessarily included |
| CAR_RENTAL | Car rental is possible nearby, or with the property manager |
| CD_PLAYER | Apartment has at least one CD player, or there is one nearby |
| CHILDCARE | Childcare / babysitting services are available |
| CHILDFRIENDLY | Apartment is appropriate for children, youth, other young people of undefined age, families |
| CHILDREN_ALLOWED | Property manager allows children at this unit |
| CHIMNEY | Apartment has at least one chimney |
| COFFEE_MACHINE | Apartment has at least one coffee machine, or there is access to one nearby |
| COFFEE | Complimentary coffee or coffee supplies / capsules are available on site |
| COMPUTER | Apartment has at least one computer, or there is access to one nearby |
| CONSERVATORY | Property has at least one conservatory / green house / winter garden |
| COOKTOP | Apartment has at least one cooktop / stove, or there is access to one nearby |
| CURRENCY_EXCHANGE | Currency exchange service is on site, nearby, or with the property manager directly |
| CUTLERY | Cutlery is available for use |
| DECK_CHAIR | Apartment has at least one chair for the deck / patio, or sun beds / outdoor lounge chairs |
| DISHCLOTH | A dishcloth / dishtowel is available for use |
| DISHES | Dishes are available for use |
| DISHWASHER | Apartment has at least one dishwasher, or there is access to one nearby |
| DIVING | Diving (sea, lake, etc.) is an activity nearby |
| DOORMAN | There is a doorman on site for the units in the building / complex |
| DRY_CLEANING | Dry cleaning is available nearby |
| DRYER | Apartment has a dryer, or there is one nearby |
| DVD_PLAYER | Apartment has at least one DVD player |
| ELEVATOR | There is an elevator in the building where the unit is located |
| ENERGY_SOLAR | Accommodation is powered at least in part by solar energy |
| ENERGY_WIND | Accommodation is powered at least in part by wind energy |
| ENERGY | Property has electricity / energy, which may or may not be included |
| ESPRESSO_MACHINE | Apartment has at least one espresso machine, or there is one nearby |
| FAMILY_FRIENDLY | The unit is especially well-suited for families |
| FARM_VACATION | Farm-themed vacation |
| FENCED_PROPERTY_NOT | There is no fencing at the unit |
| FENCED_PROPERTY | There is at least partial fencing at the unit |
| FIRE_ALARM | Apartment has at least one fire alarm |
| FIRE_EXTINGUISHER | Apartment has at least one fire extinguisher |
| FIRE_PIT | Apartment has at least one firepit, or there is one nearby |
| FIREPLACE | Apartment has at least one fireplace available for use by guests |
| FIRST_AID_KIT | Apartment has at least one first aid kid |
| FISHING | Fishing is available on location or nearby |
| FLAT_IRON | Clothing iron is available in the apartment, or upon request |
| FOR_EVENTS | Unit can be booked for events |
| FREEZER | Apartment has at least one freezer |
| FRIDGE_FREEZER_COMBINATION | Apartment has at least one refridgerator & freezer combination appliance |
| FRIDGE | Apartment has at least one refridgerator |
| GAME_CONSOLE_OTHER | Apartment has at least one gaming console (unspecified type) |
| GAME_CONSOLE_PS3 | Apartment has at least one Playstation 3 |
| GAME_CONSOLE_PS4 | Apartment has at least one Playstation 4 |
| GAME_CONSOLE_WII | Apartment has at least one Wii |
| GAME_CONSOLE_XBOX_360 | Apartment has at least one XBOX 360 |
| GAME_CONSOLE_XBOX_ONE | Apartment has at least one XBOX ONE |
| GARDEN_FURNITURE | There is at least some minimal furniture in the garden |
| GARDEN | The apartment has a garden / yard, or there is one at the complex accessible by the guest |
| GOLF | Golf is an activity nearby |
| GRILL_COAL | Apartment has at least one charcoal grill, or there is one nearby |
| GRILL_ELECTRIC | Apartment has at least one electric grill, or there is one nearby |
| GRILL_GAS | Apartment has at least one gas grill, or there is one nearby |
| GRILL | Apartment has at least one grill, or there is one nearby (fuel unspecified) |
| GROUPS_NOT_ALLOWED | Property manager does not allow groups to rent this unit |
| GYM | The building or complex has a gym, or there is one nearby, or the apartment may even have a private gym |
| HAIRDRYER | Hair-dryer available for use |
| HALF_BOARD | Provision of breakfast and at least one main meal available |
| HAMMOCK | Property has at least one hammock available for guest use |
| HEATING_ELECTRIC | Electric heating is available to turn on in the apartment |
| HEATING_GAS | Gas-powered heating is available to turn on in the apartment |
| HEATING_NOT | No heating is available in the apartment |
| HEATING_OIL | Oil-powered heating is available to turn on in the apartment |
| HEATING_UNDERFLOOR | Underfloor heating is available to turn on in the apartment |
| HEATING_WOOD_STOVE | A wood stove is available for heating the apartment |
| HEATING | Heating is available to turn on in the apartment (type of heating unspecified) |
| HIGHCHAIR | High chair for babies / small children is available for use |
| HIKING | Hiking is an activity nearby |
| HORSEBACK_RIDING | Horseback riding is an activity nearby |
| HOUSEOWNED_BEACH | Beachfront property; the property owner owns the beach along with the house |
| HOUSEOWNER_LIVES_ONSPOT | The property owner lives in a home which is on the same property / in the same building as the rental unit |
| INTERCOM | There is an intercom system in the building / home |
| INTERNET_LAN | Local area network (LAN) internet access is available in the apartment |
| INTERNET_NOT | No internet is available in the apartment |
| INTERNET_WIFI | Wifi is available in the apartment |
| INTERNET | Internet is available in the apartment (type unspecified) |
| IPOD_DOCK | i-Pod dock is available for use |
| IRONING_BOARD | Ironing board is available for use |
| IRONING_SERVICE | An ironing service is available |
| JUICER | Juicer available for use |
| KETTLE | Kettle (type unspecified) available for use |
| KITCHEN_NOT | Apartment has no access to a kitchen |
| KITCHEN_UTENSILS | Kitchen utensils available for use |
| KITCHEN | Apartment has a kitchen, or there is one accessible to the unit on site |
| KITCHENETTE | Apartment has a kitchenette, or there is one accessible to the unit on site |
| KITESURFING | Kitesurfing is an activity nearby |
| LANDING_STAGE | A landing stage or boat dock |
| LOCATION_GROUND_FLOOR | The rental unit is located on the ground floor |
| LOCATION_UPPER_FLOOR | The rental unit is located on an upper floor |
| LUGGAGE_STORAGE | Luggage storage is available on site, or in the apartment |
| LUNCHSERVICE_PACKED | Packed lunches for excursions are available |
| LUXURY | Luxury vacation |
| MICROWAVE | Apartment has at least one microwave, or there is access to one nearby |
| MINIBAR | Apartment has at least one minibar |
| MINIGOLF | Minigolf is an activity nearby |
| MINIMARKET | There is a mini-market nearby for grocery shopping, or a supermarket is nearby |
| MIXER | There is at least one mixer / blender for making smoothies, soups, etc.; includes mixing / blending wands |
| MOUNTAIN_BIKING | Mountain biking is an activity nearby |
| MP3_PLAYER | Apartment has at least one MP3 player available for use |
| OVEN | Apartment has at least one oven, or there is access to one nearby |
| PARASOL | Apartment has an umbrella or parasol outdoors to shade the outdoor furniture area |
| PARKING_AT_OBJECT | Parking is available directly at the rental on the property |
| PARKING_CARPORT | A carport / covered driveway parking is available on site |
| PARKING_DISABLED | Parking for handicapped guests is available |
| PARKING_GARAGE | Parking in a garage is available |
| PARKING_SECURE | Parking with security personnel that monitor the parking grounds |
| PARKING_SPOT | A parking spot is available on site, or nearby |
| PARKING_STREET | Street parking is available on site, or nearby |
| PARKING | Parking is available on site, or nearby (unspecified type) |
| PETS_ALLOWED_CAT | One or more pet cats are allowed |
| PETS_ALLOWED_DOG_MAX_10_KG | One or more pet dogs with a maximum weight of ten kilograms are allowed |
| PETS_ALLOWED_DOG_MORE_THAN_10_KG | One or more pet dogs with a weight of more than ten kilograms are allowed |
| PETS_ALLOWED_DOG | One or more pet dogs (size / weight unspecified) are allowed |
| PETS_ALLOWED_ON_REQUEST | One or more pets may be allowed, but the customer must request that this allowance be made with the property manager |
| PETS_ALLOWED_SMALL_PETS | One or more small pets are allowed |
| PETS_ALLOWED | One or more pets are allowed |
| PETS_NOT_ALLOWED | No pets are allowed |
| PLAYGROUND | A children’s playground is available at the rental unit or nearby |
| PLAYROOM | The apartment has a children’s playroom, or there is one in the building / complex |
| POOL_CHILDREN | Apartment has at least one children’s pool, or there is one nearby |
| POOL_PRIVATE | Apartment has at least one pool, private in the accomodation |
| POOL_SEASONALLY_OPENED | Apartment has at least one pool, which is seasonally opened |
| POOL_HEATED | Apartment has at least one heated pool, or there is one nearby |
| POOL_INDOOR_CHILDREN | Apartment has at least one indoor children’s pool, or there is one nearby |
| POOL_INDOOR | Apartment has at least one indoor pool, or there is one nearby |
| POOL_INFINITY | Apartment has at least one infinity pool, or there is one nearby |
| POOL_OUTDOOR_CHILDREN | Apartment has at least one outdoor children’s pool, or there is one nearby |
| POOL_OUTDOOR | Apartment has at least one outdoor pool, or there is one nearby |
| POOL | Apartment has at least one pool, or there is one nearby (type unspecified) |
| PUBLIC_TRANSPORTATION | Apartment is near public transportation connections |
| QUIET | Quiet vacation |
| RADIO | Radio is available for use |
| RECEPTION_24H | There is 24-hour reception on site |
| RENOVATED | The rental unit has been renovated |
| RESTAURANT | One or more restaurants are nearby |
| ROOF_FLAT | Unit has a flat roof |
| ROOF_THATCHED | Unit has a thatched roof |
| ROOMS_DININGROOM | The unit has at least one dining room |
| ROOMS_DOUBLE | There is at least one set of double / twin bedrooms in the home |
| ROOMS_FAMILY | There is a family room / room for family activities available |
| ROOMS_LIVINGROOM | The unit has at least one living room / sitting room |
| ROOMS_SINGLE | There is at least one single bedroom in the home |
| SAFE | Apartment has a safe / lockbox / strongbox |
| SAILING | Sailing is an activity nearby |
| SAUNA | Apartment has at least one sauna, or there is one nearby |
| SCOOTER_RENTAL | Scooter rental is possible nearby, or with the property manager |
| SEPARATE_TOILET | Apartment has a separate toilet / additional toilet / half-bathroom |
| SHOWER_OUTSIDE | Apartment has at least one outdoor shower |
| SHOWER | Apartment has at least one shower |
| SHUTTLE_SERVICE | Shuttle service to and from the airport is possible nearby, or with the property manager |
| SINK | Apartment has at least one sink |
| SKI_IN_OUT | This is a ski-in / ski-out property |
| SKI_PASS | A ski pass is available, either for purchase or included - check with property manager |
| SKI_RENTAL | Ski equipment rental is possible nearby, or with the property manager |
| SKI_STORAGE | There is storage for ski equipment in the accommodation |
| SKI_VACATION | Ski-themed vacation |
| SMOKE_DETECTOR | Apartment has at least one smoke detector |
| SMOKING_ALLOWED | Smoking is allowed in and outside of the unit |
| SMOKING_AREA | A designated smoking area is nearby the unit |
| SMOKING_NOT_ALLOWED | Smoking is not allowed in or outside of the unit |
| SOLARIUM | Aparment has a room equipped with sunlamps or sunbeds / tanning beds; if there are no artificial lights, map to CONSERVATORY |
| SOUND_SYSTEM | Sound system or stereo system for music / films |
| SPEAKERS | There are speakers available for playing music |
| SPICES | Spices are available for use with cooking |
| STEAMBATH | There is at least one steam bath available |
| STOVE_WOOD | There is a woodstove in the accommodation for heating |
| SUITABLE_CHILDREN_NO | Apartment is not suitable for children / families |
| SUITABLE_CHILDREN | Apartment is suitable for children / families |
| SUITABLE_FOR_DISABLED | Apartment is suitable for disabled guests, but may not necessarily be barrier free |
| SUITABLE_FOR_ELDERLY | Apartment is suitable for elderly guests |
| SUITABLE_YOUNG_PEOPLE | Apartment is suitable for youths / teenagers / young people / young adults |
| SURFING | Surfing is an activity nearby |
| TABLE_TENNIS | There is table tennis / ping pong table available nearby or in the apartment |
| TELEPHONE | There is a telephone available to use |
| TENNIS_COURT | There is a tennis court available to use nearby |
| TERRACE_COVERED | Apartment has at least one terrace with some kind of cover over at least part of it |
| TERRACE_UNCOVERED | Apartment has at least one terrace which is completely uncovered |
| TERRACE | Apartment has at least one terrace (whether it is covered or not is unknown) |
| TOASTER | Toaster available for use |
| TOILETRIES | Toiletries available for use |
| TOWELS_NOT | No towels available |
| TOWELS | Towels available for use |
| TOYS_BOARD_GAME | There are board games available for use |
| TOYS_BOOKS_FOR_CHILDREN | There are books for children available |
| TOYS_BOOKS | There are books available, for undefined ages |
| TOYS_DVDS_FOR_CHILDREN | There are DVDs for children available |
| TOYS_DVDS | There are DVDs available, for undefined ages |
| TOYS | There are toys available |
| TROUSERPRESS | There is a trouser press available for use |
| TV_CABLE | TV has access to cable channels |
| TV_DANISH_CHANNELS | TV has access to Danish channels |
| TV_DIGITAL | TV has access to digital channels |
| TV_DUTCH_CHANNELS | TV has access to Dutch channels |
| TV_ENGLISH_CHANNELS | TV has access to English channels |
| TV_FLAT_SCREEN | Apartment has at least one flatscreen TV |
| TV_FRENCH_CHANNELS | TV has access to French channels |
| TV_GERMAN_CHANNELS | TV has access to German channels |
| TV_INTERNATIONAL_CHANNELS | TV has access to international channels, undefined language |
| TV_ITALIAN_CHANNELS | TV has access to Italian channels |
| TV_PAY_PER_VIEW | TV has access to pay-per-view |
| TV_SATELLITE | TV has access to satellite channels |
| TV_SPANISH_CHANNELS | TV has access to Spanish channels |
| TV | Apartment has at least one TV |
| VACUUM_CLEANER | Vacuum cleaner available for use |
| VENTILATOR | There is at least one fan in the apartment, including ceiling fans |
| VIEW_BEACH | Apartment has a good view of the beach |
| VIEW_CITY | Apartment has a good view of the city |
| VIEW_GARDEN | Apartment has a good view of the garden / yard |
| VIEW_LAKE | Apartment has a good view of the lake |
| VIEW_LANDMARK | Apartment has a good view of a landmark(s) |
| VIEW_MOUNTAIN | Apartment has a good view of the mountains |
| VIEW_OCEAN | Apartment has a good view of the ocean |
| VIEW_RIVER | Apartment has a good view of the river |
| VIEW_SEA | Apartment has a good view of the sea |
| VIEW | Apartment has a good view |
| VISITED_BY_HOLIDU | Holidu employees have visited this rental unit |
| WARDROBE | Apartment has at least one wardrobe |
| WASHER_DRYER_COMBO | Apartment has at least one washing machine / washer and dryer combination appliance, or one is available nearby |
| WASHER | Apartment has at least one washing machine / washer, or there is access to one nearby |
| WATER_SPORTS | Water sports are an activity nearby |
| WATERFRONT | The home is positioned at the waterfront; the property is first-tier to the water |
| WATERPARK | A waterpark is nearby, or at the holiday complex |
| WELLNESS_AREA | There is a wellness center / wellness facility nearby; includes spas |
| WELLNESS_TREATMENTS | There are wellness, beauty, or massage treatments available at nearby facilities, or on site |
| WELLNESS | Wellness-themed vacation |
| WHIRLPOOL_INDOOR | Apartment has at least one indoor Whirlpool / hot tub, or there is access to one nearby |
| WHIRLPOOL_OUTDOOR | Apartment has at least one outdoor Whirlpool / hot tub, or there is access to one nearby |
| WHIRLPOOL | Apartment has at least one Whirlpool / hot tub, or there is access to one nearby |
| WINDSURFING | Windsurfing is an activity nearby |
| WINTER_SPORTS | Winter sports are an activity nearby |
| YOUTH_GROUPS_ALLOWED | Property manager allows youth groups to rent the unit |
| YOUTH_GROUPS_NOT_ALLOWED | Property manager does not allow youth groups to rent the unit |
> **Danger: Usage of PETS ALLOWED_ _ON REQUEST facility**
>
> Be aware that if you choose to push facility `PETS_ALLOWED_ON_REQUEST`, we expect that guest who is denied possibility to bring pet, **will be granted free-cancellation**, regardless of the cancellation policy step applicable.
***
## Sustainable facilities

In an effort to promote sustainability, Holidu will be promoting sustainable friendly properties. To be qualified as sustainable, a property needs at least 8 facilities from the list below.
| Facility ENUM | Facility description |
| --- | --- |
| RECYCLING_PAPER | Paper waste is collected to be converted into reusable material. |
| RECYCLING_PLASTIC | Plastic waste is collected to be converted into reusable material. |
| RECYCLING_ORGANIC | Organic waste is collected to be converted into organic fertiliser. |
| ENERGY_SAVING_LIGHTING | LED light bulbs are significantly more energy-efficient and have longer lifespans compared to incandescent and fluorescent light bulbs. |
| ENERGY_GREEN_ELECTRICITY_PROVIDER | Energy is obtained from renewable sources like solar and wind. |
| ENERGY_SAVING_SOLAR_PANELS | A system that converts sunlight into electricity. |
| ENERGY_SAVING_WIND_POWER | Wind turbines convert the wind's kinetic energy into electricity. |
| ENERGY_SAVING_METHANE_DIGESTER | A system that uses organic waste to produce a biogas used as energy. |
| ENERGY_SAVING_SMART_CONTROLS | A system to remotely control home appliances and activity to enable a reduction in energy consumption. |
| ENERGY_HEAT_PUMPS | A device used to optimize building heating by moving heat from one space to another. |
| ENERGY_INFRARED_HEATING_PANELS | A system that heats a space's surface area but not volume, providing a similar amount of heat with less energy compared to convection heaters. |
| ENERGY_GEOTHERMICS | Heat is obtained from natural heat generated within the earth, often in the form of hot water and steam. |
| ENERGY_MASONRY_HEATER | A device where the periodic burning of fuel enables heat to be stored and slowly released over a long period of time. |
| ENERGY_SOLAR_THERMAL_PANELS | A system that converts sunlight intro electrical energy, primarily to heat water. |
| INSULATION_GLASS | Glass that improves window insulation and increases heating and cooling efficiency to reduce energy consumption. |
| INSULATION_GREEN_COOL_ROOF | A rooftop enabling a reduction in energy consumption for heating or / or cooling by using vegetation to increase insulation or reflecting solar energy more efficiently. |
| INSULATION_ROOF | Thermal roof insulation reduces energy consumption for heating and cooling by impeding unwanted airflow. |
| INSULATION_WALL | Thermal wall insulation reduces energy consumption for heating and cooling by impeding unwanted airflow. |
| INSULATION_FLOOR | Thermal floor insulation reduces energy consumption for heating and cooling by impeding unwanted airflow. |
| INSULATION_NATURAL_MATERIALS | Thermal insulation is composed of natural fibres with limited environmental impact. |
| WATER_SAVING_SHOWER | Showers equipped with shower heads designed to reduce water waste and consequently also energy usage for heating water. |
| WATER_SAVING_TOILET | Low-flow toilets use significantly less water than traditional high-flow toilets to to be more water-efficient. |
| WATER_SAVING_TAPS | Taps equipped with low-flow heads that mix air into the water flow to reduce water waste and consequently also energy usage for heating water. |
| RAINWATER_TREATMENT | A system to collect and store rain from rooftops rather than allowing it to run off to be more water-efficient. |
| GREY_WATER_SYSTEM | A system that repurposes household wastewater for gardening or landscaping to be more water-efficient. |
| OWN_PRODUCE_JAM | Homegrown and / or homemade jam is offered. |
| OWN_PRODUCE_FRUITS | Homegrown fruits are offered. |
| OWN_PRODUCE_VEGETABLES | Homegrown vegetables are offered. |
| OWN_PRODUCE_HERBS | Homegrown herbs are offered. |
| OWN_PRODUCE_OLIVE_OIL | Homegrown and / or homemade olive oil is offered. |
| OWN_PRODUCE_HONEY | Homegrown and / or homemade honey is offered. |
| OWN_PRODUCE_EGGS | Homegrown eggs are offered. |
| OWN_PRODUCE_CHEESE | Homemade cheese is offered. |
| OWN_PRODUCE_BREAD | Homemade bread is offered. |
| OWN_PRODUCE_NUTS | Homegrown nuts are offered. |
| MOBILITY_PUBLIC_TRANSPORT | Public transportation is within walking distance of the property. |
| ELECTRIC_VEHICLE_CHARGING_STATION | A device that supplies electrical power for charging plug-in electric vehicles. |
| MOBILITY_BIKES | You are offering bikes to travellers for their usage. |
| MOBILITY_EBIKES | You are offering e-bikes to travellers for their usage. |
| ECO_CLEANING_PRODUCTS | Cleaning products free of toxic chemicals and composed of environmentally friendly ingredients. |
When doing so, Holidu will be adding the Eco badge to the property, both on list and detail pages :

---
# Reviews
Source: https://developer.holidu.com/docs/reviews-1
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
## Word of mouth is the best marketing strategy!
> **Info: Review basics**
>
> * Please notice that the rating is from 0 to 100, so it is **not** a star rating!
> * Multiple languages: please **only push it once in the original language** to Holidu. Holidu offers a automatic translation to the customer, sending the same review multiple times would lead to a wrong overall rating and lost of trust by the customers.
> * To update the reviews, you need to PUSH the entire review object. Updates for single fields are not possible.
> * Reviews is an incremental update endpoint. If you push an object it will be added to the existing reviews or if the review already exists it will be updated (to detect a review as an existing one, the fields `customerName`, `title`, `text` are taken into account)
> * Deletion of reviews is currently not supported. If you push an empty list of reviews it will be ignored.
Reviews are the best advertisement for your properties. Tests have shown that reviews are one of the most important factors travellers based their decision on. So make sure to push us all your reviews. Reviews with more information, like text, name of the traveller, travelDate have a bigger impact than pure ratings.
| Field | Type | Required | Usage |
| :--- | :--- | :--- | --- |
| `customerName` | string | | |
| `title` | string | | Summary of the content. e.g. "Beautiful stay" |
| `country` | string | | Country from where the customer is.\ The options are: * DE, ES, IT, NL, FR, GB, DK, AT, CH, BE, NO, PL, SE, PT, CA, AU, IE, BR, NZ, US |
| `travelDate` | date | | Date of arrival of the customer to the accommodation. * \*Format:\*\* `2022-07-04` |
| `reviewDateTime` | date-time | | Date when the review was given. * \*Format:\*\* `2022-07-04 20:10:10` |
| `globalRating` | int32 | YES | The overall rating of the entire stay. This ranges from 0 to 100. |
| `location` | int32 | | This ranges from 0 to 100. |
| `localService` | int32 | | This ranges from 0 to 100. |
| `furnishings` | int 32 | | This ranges from 0 to 100. |
| `cleanliness` | int32 | | This ranges from 0 to 100. |
| `valueForMoney` | int 32 | | This ranges from 0 to 100. |
| `beach` | int32 | | This ranges from 0 to 100. |
| `accommodation` | int32 | | This ranges from 0 to 100. |
| `host` | int32 | | This ranges from 0 to 100. |
| `language` | string | | The language of the review. **ONLY push it once** in the original language, we will translate it automatically. |
| `text` | string | | Example: "Great stay, very well located apartment" |
| `positiveText` | string | | Example: "Wonderful accommodation with great services" |
| `negativeText` | string | | Example: "Location far from city centre" |
***
## REVIEWS JSON object
```json title="REVIEWS"
[
{
"customerName": "John",
"title": "Beautiful stay",
"country": "DE",
"travelDate": "2017-07-31",
"reviewDateTime": "2022-08-03 11:52:41",
"globalRating": 90,
"location": 90,
"localService": 95,
"furnishings": 85,
"cleanliness": 70,
"valueForMoney": 100,
"beach": 85,
"accommodation": 80,
"host": 100,
"language": "en",
"text": "Great stay, very well located apartment. I will come back for sure, and next time I will make sure I bring my dog, the property has a huge garden so Fluffy can play and it is perfectly allowed",
"positiveText": "Wonderful accommodation with great services",
"negativeText": "Location far from city center"
}
]
```
---
# Validation
Source: https://developer.holidu.com/docs/validation
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
## A complete listing attracts endless stays!
> **Info: Validation basics**
>
> * In order to put an apartment available for booking, it must be validated by Holidu, by having a complete data, such as description, facilities, bookable dates, photos and many more.
> * To ensure that your apartment is available for booking, you can call the `validation` endpoint, and the API will return you a list of actions you need to take.
At Holidu, we prioritize the quality of the listings on our platform. To ensure that guests have a seamless and enjoyable experience, we actively validate each apartment to make sure all information, such as availability for booking, is up-to-date and complete.
If for any reason, your apartment becomes inactive, it may be due to missing some of the important information. You can know for sure the reason, by calling the `validation` API.
### Table of validation error code and its meaning
| Error Code | Explanation | How to solve it? |
| :-------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| NO\_CHANGE\_OVER\_DAYS | There is no information about possible check-in or check-out days for the apartment. | If you are using LOS, use the [los](https://developer.holidu.com/reference/upsertlos.md) endpoint to push the check-in or check-out information. Otherwise, use the [updateavailability](https://developer.holidu.com/reference/updateavailability.md) endpoint. |
| NO\_AVAILABILITY | Holidu could not load the apartment's availability when it validated it. This is a technical problem on Holidu's side, not missing data. | Check again later; if the code stays, contact your Technical Account Manager. Missing prices or availability show up as NO\_AVAILABLE\_DAYS, NO\_CHECKIN\_CHECKOUT, NO\_CHANGE\_OVER\_DAYS or AVAILABILITY\_NO\_MIN\_STAY. |
| MISSING\_RATE\_PLANS\_OR\_LOS | The same as NO\_AVAILABILITY, reported this way for accounts that use rate plans. | See NO\_AVAILABILITY. |
| NO\_AVAILABLE\_DAYS | We received the availability objects, however there are no available days. | If you are using LOS, use the [los](https://developer.holidu.com/reference/upsertlos.md) endpoint to update the availability object information with more available days. Otherwise, use the [updateavailability](https://developer.holidu.com/reference/updateavailability.md) endpoint. |
| NO\_CHECKIN\_CHECKOUT | There is no information about possible check-in or check-out days for the apartment. | If you are using LOS, use the [los](https://developer.holidu.com/reference/upsertlos.md) endpoint to push the check-in or check-out information. Otherwise, use the [updateavailability](https://developer.holidu.com/reference/updateavailability.md) endpoint. |
| AVAILABILITY\_NO\_MIN\_STAY | Due to the missing availability information, we are not able to identify minimum days of stay for your apartment. | If you are using LOS, use the [los](https://developer.holidu.com/reference/upsertlos.md) endpoint to update the availability object information with more available days. Otherwise, use the [updateavailability](https://developer.holidu.com/reference/updateavailability.md) endpoint. |
| NO\_COORDINATES | There is no coordinate information available for your apartment. | Fix the `lat` and `lng` by calling the [apartment](https://developer.holidu.com/reference/upsertapartment.md) endpoint. |
| WRONG\_COORDINATES | The provided coordinate information is invalid. The valid ranges for Latitude is from -90 to +90, whereas the valid ranges for Longitude is from -180 to + 180. | Fix the `lat` and `lng` by calling the [apartment](https://developer.holidu.com/reference/upsertapartment.md) endpoint. |
| LICENSE\_NUMBER\_REQUIRED\_BUT\_MISSING | In certain areas, it is mandatory for partners to have a registered license number. Please make sure the license number is available. | Provide the `license` information via the [apartment](https://developer.holidu.com/reference/upsertapartment.md) endpoint. |
| LAST\_UPDATE\_IS\_OLDER\_THAN\_30\_DAYS | None of the apartment's stored data has changed in the last 30 days. | Push data that has changed; pushing unchanged data or photos does not reset it. |
| LAST\_UPDATE\_IS\_OLDER\_THAN\_14\_DAYS | None of the apartment's stored data has changed in the last 14 days. | Push data that has changed; pushing unchanged data or photos does not reset it. |
| NUMBER\_OF\_BED\_ZERO | There are no information about the maximum capacity of your apartment. | When pushing the apartment information, ensure that the `guestCapacityRules` is provided ([learn more](https://developer.holidu.com/docs/general-static-data.md)). Once it is ready, push the data information using the [apartment](https://developer.holidu.com/reference/upsertapartment.md) endpoint. |
| MIN\_HEIGHT\_WIDTH | The provided photos do not meet the photo size's minimum requirements of 150px in width and 100px in height. | Push updated photos that satisfy the minimum size requirement to the [photos](https://developer.holidu.com/reference/updatephotos.md) endpoint. |
| MISSING\_HEIGHT\_WIDTH | Unable to identify the size of the photos. | Push updated photos that satisfy the minimum size requirement to the [photos](https://developer.holidu.com/reference/updatephotos.md) endpoint. |
| NOT\_ENOUGH\_VALID\_PHOTOS | There are only less than 3 photos available for the apartment. | Push more photos to the [photos](https://developer.holidu.com/reference/updatephotos.md) endpoint. |
| NO\_PHOTOS | There are no photos available for the apartment. | Push your photos to the [photos](https://developer.holidu.com/reference/updatephotos.md) endpoint. |
| URL\_MISSING | The provided photo URL is missing. | Update your photos object via the [photos](https://developer.holidu.com/reference/updatephotos.md) endpoint, and make sure that the `url` exists. |
| PHOTO\_URL\_IS\_NOT\_VALID | The provided photo URL is not valid. | Update your photos object via the [photos](https://developer.holidu.com/reference/updatephotos.md) endpoint, and make sure that the `url` is valid. |
---
# A Multi-Unit Parent Listing
Source: https://developer.holidu.com/docs/multi-unit-parent-listing
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
This endpoint creates a parent listing (compound, establishment, guest houses, or hotel) and returns a "providerGroupId" to be used with other Multi-Unit endpoints.
### Create Parent Listing Endpoint:
This endpoint is used to create a parent listing in our system. A parent listing represents an entire compound, establishment, or hotel, and serves as the root entity for all associated units.
> **Danger: Only query parameters are required, along with an empty JSON object (\{}) as the request body. No JSON body needs to be sent in this request.**
>
Once the request is successful, the system generates a parent listing with this ID.
You can then use this `providerGroupId` with all other Multi-Unit endpoints (e.g., Descriptions, Photos, Facilities) to add details and enrich the parent listing.
***
## Create Parent Listing
**Endpoint**
```
POST https://provider-api.holidu.com/v2/multi-unit
```
### Request
**Headers**
| Key | Value | Description |
| --------- | ---------------- | ------------------------------------------- |
| `api-key` | `` | Authentication key (depends on environment) |
**Query Parameters**
| Parameter | Type | Required | Description |
| ----------------- | ------ | -------- | -------------------------------------------------------- |
| `provider` | string | Yes | Your provider identifier |
| `providerGroupId` | string | Yes | A new parent listing is created, which will have this ID |
**Body**
```json
{}
```
(empty JSON object)
### Response
```http
200 OK
```
> **Note: Once the parent listing is created and all the info has been added to it, you can add child listings (apartments/units) to the group ⤵**
>
> *Enrich the parent listing with Descriptions, Photos, and Facilities using the* `providerGroupId`.
>
> * Create child apartments using the existing Apartment API.
> * Link them to the parent listing via the `providerApartmentGroupId`.
> * Push child-level information only (e.g., unit-specific details).
---
# A Multi-Unit Parent Listing Description
Source: https://developer.holidu.com/docs/multi-unit-parent-listing-description
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
The Parent Unit Description Endpoint is specifically designed to manage and update descriptive information for parent multi-unit listing, such as parks, hotels, guest houses, or similar establishments. This endpoint enables detailed descriptions that help convey the unique attributes, atmosphere, and key features of these properties to potential guests and residents.
### Time to tell us more about your establishment!
> **Info: Description basics for a parent listing**
>
> * The descriptions should be sent at least in one language so we can translate them to other languages
> * To update the descriptions you need to PUSH the entire descriptions object. Updates for single fields are not possible, otherwise the data will be overwritten.
> * For all languages in which no titles are pushed we auto-generate a title for each domain.
| Parameter | Type | Required | Usage |
| :--- | :--- | --- | --- |
| isoLanguage | string | YES | Here, you define the language in which you are sending the description. The following are the languages supported on Holidu: * de, dk, en, es, fr, it, nl, pl, pt, gr |
| description | string | YES | Here you will be able to send the description of the parent multi-unit. The partners will be able to highlight their surroundings and activities, as well as the uniqueness or extras of their compound.\ **Recommendations:** * min 400 characters * max 2k characters * include info about the neighbourhood and property |
| title | string | | This value will be used to name the property on the Holidu website. Ideally, these should not be too long, otherwise, it will not be good for the user experience.\ **Recommendations:** * max 255 characters * min 3 characters * should not be with all letters in uppercase |
***
## DESCRIPTIONS JSON object
```json title="DESCRIPTIONS"
[
{
"isoLanguage": "en",
"description": "Sunnyvale Holiday Park offers a serene escape with lush gardens, a large outdoor pool, and family-friendly activities.",
"title": "Sunnyvale Holiday Park"
},
{
"isoLanguage": "fr",
"description": "Le Parc de Vacances Sunnyvale offre une évasion sereine avec des jardins luxuriants, une grande piscine extérieure et des activités familiales.",
"title": "Parc de Vacances Sunnyvale"
},
{
"isoLanguage": "nl",
"description": "Sunnyvale Vakantiepark biedt een rustige ontsnapping met weelderige tuinen, een groot buitenzwembad en gezinsvriendelijke activiteiten.",
"title": "Sunnyvale Vakantiepark"
}
]
```
---
# A Multi-Unit Parent Listing Photos
Source: https://developer.holidu.com/docs/multi-unit-parent-listing-photos
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
The Parent Listing Photos Endpoint is designed to manage and update visual content for parent multi-unit properties, such as holiday parks, hotels, guest houses, and similar establishments. This endpoint focuses on showcasing the entire compound or establishment, including its facilities and shared amenities, rather than individual property-level details.
## Show us your compound!
> **Danger: Photos basics**
>
> * We highly recommend to have at least 10 photos for a better performance.
> * To update a photo, please push it with **a different url**, only then it will be recognized as a new photo and then it will be updated. To do so, you can include a param + the timestamp of when the photo was updated to the URL.
> * To update or delete photos, push the complete list of current photos every time: photos missing from the list are removed, and an empty list removes all photos of the parent listing, which every unit shows. Pushing the same URLs again restores removed photos.
> * When pushing photos to our photos endpoint, it is important to include a filter to eliminate duplicate URLs. Duplicate URLs within a photo push request will lead to a failure of the entire request. Therefore, ensuring that each URL is unique helps maintain the integrity of the photo push process and prevents potential issues with data ingestion.
**Ideally the photos should have a size of 2MB.** To make sure everything runs smoothly, they should not be larger than 8MB.
| Parameter | Type | Required | Usage |
| :--- | :--- | --- | --- |
| `url` | string | YES | Photo URL\ **Recommendations:** * ideal resolution 2048x1536 pixels * min resolution 1024x683 pixels * ideal size: 2MB, no larger than 8MB * orientation: landscape * formats: JPG, JPEG, PNG * no photo duplications |
| `position` | int32 ≥ 1 | YES | Position of the photo to be shown to the potential guest |
| `contentLength` | int64 ≥ 1 | No | File size of the photo in bytes |
| `localizations` | array of objects | No | Photo titles in different languages |
| `localizations.language` | string | YES | Language of the photo title |
| `localizations.title` | string | YES | Title of the photo |
***
## PHOTOS JSON object
```json title="PHOTOS"
[
{
"url": "https://example.com/photos/pool.jpg",
"position": 1,
"contentLength": 2048000,
"localizations": [
{
"language": "en",
"title": "Outdoor Pool"
},
{
"language": "de",
"title": "Außenpool"
},
{
"language": "fr",
"title": "Piscine Extérieure"
}
]
},
{
"url": "https://example.com/photos/gym.jpg",
"position": 2,
"contentLength": 3072000,
"localizations": [
{
"language": "en",
"title": "Fitness Center"
},
{
"language": "de",
"title": "Fitnesszentrum"
},
{
"language": "fr",
"title": "Centre de Fitness"
}
]
}
]
```
---
# A Multi-Unit Parent Listing Facilities
Source: https://developer.holidu.com/docs/multi-unit-parent-listing-facilities
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
The Parent Listing Facilities Endpoint is designed specifically for sending facility information related to parent multi-unit properties such as parks, hotels, guest houses, or similar establishments. These facilities are accessible to the residents of the complex and can vary in terms of accessibility, cost, and privacy.
> **Info: Parent facilities basics**
>
> * To update those parent facilities, you need to PUSH the entire object. Updates for single fields are not possible, otherwise the data will be overwritten.
> * If can cannot identify a matching `parameter:type` in the list you get from [here](https://developer.holidu.com/reference/getfacilitytypes.md), you have the option to push the raw facility names from your system without mapping to a Holidu facility type. We kindly ask you to communicate this to your technical account manager, in order for us to initiate the mapping on our end.
> * Users choose their properties frequently by the range of facilities! Most filters on the Holidu page are based on facilities
Parent facilities, particularly essential ones such as pools, saunas, and playgrounds, are crucial to enhancing the customer experience. When providing facility information for parent units like parks, hotels, or guest houses, please ensure that you include comprehensive details if possible.
| Parameter | Type | Required | Usage |
| :--- | :--- | --- | --- |
| `type` | string | | Here you should map your facilities according to the list that we have [here.](https://developer.holidu.com/docs/facilities.md#List-of-facility-types-and-their-meaning) If on |
| `maxAmount` | int32 | | Max amount of this facility per property. |
| `privateUsage` | boolean | | If this value is set to `true` then it means that the facility is for private use only. |
| `additionalFeesApply` | boolean | | If this boolean is set to `true` it means that additional fees apply for the use of this facility.\ This value is for us to be able to show it on the Holidu website e.g. extra costs apply.\ If additional fees apply, then you **ALSO** need to send the correct data to our `"extraCosts"`endpoint to specify the fee, currency, etc. |
| `availableTime` | **object** | | In this object you can specify if a certain facility is only available for certain periods of the year, e.g. if the POOL is not the full year available. **Please only use this in case the facility is not available the whole year.** |
| `availableTime.availableFrom` | **object** | Yes\* | This will determine **since when** in the year is the facility available. |
| `availableTime.availableFrom.pointInMonth` | string | Yes\* | The options are: * BEGINNING, MIDDLE, END |
| `availableTime.availableFrom.month` | string | Yes\* | The options are: * JANUARY, FEBRUARY, MARCH, APRIL, JUNE, JULY, AUGUST, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER |
| `availableTime.availableTo` | **object** | Yes\* | This will determine **up until when** in the year is the facility available. |
| `availableTime.availableTo.pointInMonth"` | string | Yes\* | The options are: * BEGINNING, MIDDLE, END |
| `availableTime.availableTo.month"` | string | Yes\* | The options are: * JANUARY, FEBRUARY, MARCH, APRIL, JUNE, JULY, AUGUST, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER |
> **Tip: Sustainable facilities**
>
> Holidu is fostering to offer more eco-friendly properties to our travelers!
>
> **How?:** We are awarding all sustainable vacation accommodations with an\
> Eco-label, so travellers can easily identify all the eco-friendly properties\
> at Holidu.
>
> * This badge will be granted when a property has at least 8 of our 41\
> sustainable facilities.
> * You may find the list [here](https://developer.holidu.com/docs/facilities.md#sustainable-facilities).
***
## FACILITIES JSON object
```json title="FACILITIES"
[
{
"type": "POOL",
"privateUsage": false,
"additionalFeesApply": false,
"availableTime": {
"availableFrom": {
"pointInMonth": "BEGINNING",
"month": "JUNE"
},
"availableTo": {
"pointInMonth": "END",
"month": "AUGUST"
}
}
},
{
"type": "TENNIS_COURT",
"privateUsage": false,
"additionalFeesApply": true,
"availableTime": {
"availableFrom": {
"pointInMonth": "MIDDLE",
"month": "APRIL"
},
"availableTo": {
"pointInMonth": "MIDDLE",
"month": "OCTOBER"
}
}
},
{
"type": "GOLF",
"privateUsage": false,
"additionalFeesApply": true,
"availableTime": {
"availableFrom": {
"pointInMonth": "MIDDLE",
"month": "MARCH"
},
"availableTo": {
"pointInMonth": "END",
"month": "OCTOBER"
}
}
},
{
"type": "GYM",
"privateUsage": false,
"additionalFeesApply": false,
"availableTime": {
"availableFrom": {
"pointInMonth": "BEGINNING",
"month": "JANUARY"
},
"availableTo": {
"pointInMonth": "END",
"month": "DECEMBER"
}
}
},
{
"type": "WELLNESS_AREA",
"privateUsage": false,
"additionalFeesApply": true,
"availableTime": {
"availableFrom": {
"pointInMonth": "BEGINNING",
"month": "FEBRUARY"
},
"availableTo": {
"pointInMonth": "END",
"month": "DECEMBER"
}
}
},
{
"type": "PLAYGROUND",
"privateUsage": false,
"additionalFeesApply": false,
"availableTime": {
"availableFrom": {
"pointInMonth": "BEGINNING",
"month": "JANUARY"
},
"availableTo": {
"pointInMonth": "END",
"month": "DECEMBER"
}
}
},
{
"type": "RESTAURANT",
"privateUsage": false,
"additionalFeesApply": false,
"availableTime": {
"availableFrom": {
"pointInMonth": "BEGINNING",
"month": "JANUARY"
},
"availableTo": {
"pointInMonth": "END",
"month": "DECEMBER"
}
}
}
]
```
***
> **Info: Visibility of facilities**
>
> * If `maxAmount` is specified, every value >1 will be visible with a count. If set to 0 or 1, the facility will be visible without specified count. Therefore please do not use `maxAmount:0` in case a facility is not available!
> * If `privateUsage` is specified as `false`, the following facilities will be marked as "shared", if set to `true` set to "private"
>
> ```
> "POOL",
> "POOL_CHILDREN",
> "POOL_HEATED",
> "POOL_INFINITY",
> "POOL_ROOFTOP",
> "POOL_SEASONALLY_OPENED",
> "SAUNA",
> "WASHER",
> "DRYER",
> "WASHER_DRYER_COMBO",
> "POOL_INDOOR",
> "POOL_INDOOR_CHILDREN",
> "GARDEN",
> "POOL_OUTDOOR",
> "POOL_OUTDOOR_CHILDREN",
> "KITCHEN",
> "KITCHENETTE",
> "WASHER_DRYER_COMBO_COIN_OPERATED"
> ```
>
> * If `additionalFeesApply` is set as `true`, there will be "Additional Cost" displayed for the facility. The specific costs for the facility is then provided separately via extra cost endpoint
> * An applicable season that is specified in `availableTime` object and can be visible for all facilities through a flag called "seasonal" with mouse over for the applicable time of months.
> * If `location` is set as `NEAR_BY`, this will only be shown for facility for `Parking`
> * Please note: we do not display `POOL` and `SAUNA` at all if they are marked as `NEAR_BY`. For all other facilities `location:NEAR_BY` will treat facilities available and visible without specific flag.
***
## List of facilities types and their meaning
You can easily make a GET call to obtain an array with all the facilities we have, [here](https://developer.holidu.com/reference/getfacilitytypes.md)
| Facility ENUM | Facility definition |
| --- | --- |
| AIRPORT_SHUTTLE | Shuttle to and from the airport is possible |
| AIR_CONDITION | Air condition in the accommodation |
| ALARM_HOUSE | There is a home alarm / security alarm system in the accommodation |
| ALLERGY_FRIENDLY | The accommodation is suitable for people with allergies |
| ANIMALS_CAT | There are cats on site; not related to bringing pets |
| ANIMALS_DOG | There are dogs on site; not related to bringing pets |
| ANIMALS_FARM | There are farm animals on site; not related to bringing pets |
| ANIMALS | There are animals on site; not related to bringing pets |
| ATM | ATM is available for use nearby, or in the building / complex |
| BALCONY_COVERED | Apartment has at least one balcony with some kind of cover over at least part of it |
| BALCONY_TERRACE | There is a balcony or terrace (depending on which level); other mappable names include patio, deck |
| BALCONY_UNCOVERED | Apartment has at least one balcony which is completely uncovered |
| BALCONY | Apartment has at least one balcony (whether it is covered or not is unknown) |
| BARRIER_FREE_NOT | Apartment is not accessible for handicapped or disabled guests |
| BARRIER_FREE | Accessible for handicapped or disabled guests; wheelchair accessible |
| BATHROBE | Bathrobe available for use |
| BATHTUB | There is at least one bathtub in the apartment |
| BEACH_CHAIR | Apartment has at least one beach chair, or there are some nearby |
| BEACH_VACATION | Beach-themed vacation |
| BEAMER | Apartment has a projector or beamer for viewing movies, projecting computer screens; or one is available upon request |
| BED_AIR_MATTRESS | Apartment has at least one air mattress, or one is available upon request |
| BED_BABY | Apartment has at least one crib / baby bed, or one is available upon request |
| BED_BUNK_1 | There is a bunk bed with only one bed up top |
| BED_BUNK_2 | There is a bunk bed with both top and bottom beds |
| BED_BUNK | There is a bunk bed of unknown dimensions, unknown if it is both top and bottom or just top bunk |
| BED_CHILDREN | Apartment has at least one children’s bed, or one is available upon request |
| BED_DOUBLE | Apartment has at least one double-sized bed |
| BED_EXTRA | Apartment has at least one extra bed, or one is available upon request |
| BED_FLOOR_MATTRESS | Apartment has at least one mattress of undefined type, or one is available upon request (can be one that is provided on the floor, not a proper bed) |
| BED_FOLDAWAY | Apartment has at least one fold-away bed |
| BED_KING | Apartment has at least one king-sized bed |
| BED_QUEEN | Apartment has at least one queen-sized bed |
| BED_SINGLE | Apartment has at least one single-sized bed |
| BED_SLEEPING_COUCH_1 | Sofa bed of single size; sleeps 1 person |
| BED_SLEEPING_COUCH_2 | Sofa bed of double size; sleeps 2 people |
| BED_SLEEPING_COUCH | Sofa bed of unknown size |
| BEDLINEN_NOT | Bedlinen is not provided in the apartment |
| BEDLINEN | Bedlinen is provided in the apartment |
| BEST_PRICE | Accommodation has a “best price guarantee” or “lowest price guarantee” |
| BICYCLE_CELLAR | Bike storage is available for use; either a bike cellar or bike room |
| BICYCLE_RACK | Bike rack is available for use |
| BIKE_PROVIDED | Bike provided for use by the property manager |
| BIKE_RENTAL | Bike rental is possible nearby, or with the property manager |
| BIKING | Biking is an activity nearby |
| BILLIARD_TABLE | There is a billiard table at or near the apartment |
| BLURAY_PLAYER | Apartment has at least one blu-ray player, or there is one nearby |
| BOAT_PROVIDED | Boat provided for use by the property manager |
| BOAT_RENTAL | Boat rental is possible nearby, or with the property manager |
| BOAT_TRIP | Boating-themed vacation |
| BREAKFAST | Breakfast is available; could be a breakfast bar, bed and breakfast, etc., but it’s not necessarily included |
| CAR_RENTAL | Car rental is possible nearby, or with the property manager |
| CD_PLAYER | Apartment has at least one CD player, or there is one nearby |
| CHILDCARE | Childcare / babysitting services are available |
| CHILDFRIENDLY | Apartment is appropriate for children, youth, other young people of undefined age, families |
| CHILDREN_ALLOWED | Property manager allows children at this unit |
| CHIMNEY | Apartment has at least one chimney |
| COFFEE_MACHINE | Apartment has at least one coffee machine, or there is access to one nearby |
| COFFEE | Complimentary coffee or coffee supplies / capsules are available on site |
| COMPUTER | Apartment has at least one computer, or there is access to one nearby |
| CONSERVATORY | Property has at least one conservatory / green house / winter garden |
| COOKTOP | Apartment has at least one cooktop / stove, or there is access to one nearby |
| CURRENCY_EXCHANGE | Currency exchange service is on site, nearby, or with the property manager directly |
| CUTLERY | Cutlery is available for use |
| DECK_CHAIR | Apartment has at least one chair for the deck / patio, or sun beds / outdoor lounge chairs |
| DISHCLOTH | A dishcloth / dishtowel is available for use |
| DISHES | Dishes are available for use |
| DISHWASHER | Apartment has at least one dishwasher, or there is access to one nearby |
| DIVING | Diving (sea, lake, etc.) is an activity nearby |
| DOORMAN | There is a doorman on site for the units in the building / complex |
| DRY_CLEANING | Dry cleaning is available nearby |
| DRYER | Apartment has a dryer, or there is one nearby |
| DVD_PLAYER | Apartment has at least one DVD player |
| ELEVATOR | There is an elevator in the building where the unit is located |
| ENERGY_SOLAR | Accommodation is powered at least in part by solar energy |
| ENERGY_WIND | Accommodation is powered at least in part by wind energy |
| ENERGY | Property has electricity / energy, which may or may not be included |
| ESPRESSO_MACHINE | Apartment has at least one espresso machine, or there is one nearby |
| FAMILY_FRIENDLY | The unit is especially well-suited for families |
| FARM_VACATION | Farm-themed vacation |
| FENCED_PROPERTY_NOT | There is no fencing at the unit |
| FENCED_PROPERTY | There is at least partial fencing at the unit |
| FIRE_ALARM | Apartment has at least one fire alarm |
| FIRE_EXTINGUISHER | Apartment has at least one fire extinguisher |
| FIRE_PIT | Apartment has at least one firepit, or there is one nearby |
| FIREPLACE | Apartment has at least one fireplace available for use by guests |
| FIRST_AID_KIT | Apartment has at least one first aid kid |
| FISHING | Fishing is available on location or nearby |
| FLAT_IRON | Clothing iron is available in the apartment, or upon request |
| FOR_EVENTS | Unit can be booked for events |
| FREEZER | Apartment has at least one freezer |
| FRIDGE_FREEZER_COMBINATION | Apartment has at least one refridgerator & freezer combination appliance |
| FRIDGE | Apartment has at least one refridgerator |
| GAME_CONSOLE_OTHER | Apartment has at least one gaming console (unspecified type) |
| GAME_CONSOLE_PS3 | Apartment has at least one Playstation 3 |
| GAME_CONSOLE_PS4 | Apartment has at least one Playstation 4 |
| GAME_CONSOLE_WII | Apartment has at least one Wii |
| GAME_CONSOLE_XBOX_360 | Apartment has at least one XBOX 360 |
| GAME_CONSOLE_XBOX_ONE | Apartment has at least one XBOX ONE |
| GARDEN_FURNITURE | There is at least some minimal furniture in the garden |
| GARDEN | The apartment has a garden / yard, or there is one at the complex accessible by the guest |
| GOLF | Golf is an activity nearby |
| GRILL_COAL | Apartment has at least one charcoal grill, or there is one nearby |
| GRILL_ELECTRIC | Apartment has at least one electric grill, or there is one nearby |
| GRILL_GAS | Apartment has at least one gas grill, or there is one nearby |
| GRILL | Apartment has at least one grill, or there is one nearby (fuel unspecified) |
| GROUPS_NOT_ALLOWED | Property manager does not allow groups to rent this unit |
| GYM | The building or complex has a gym, or there is one nearby, or the apartment may even have a private gym |
| HAIRDRYER | Hair-dryer available for use |
| HALF_BOARD | Provision of breakfast and at least one main meal available |
| HAMMOCK | Property has at least one hammock available for guest use |
| HEATING_ELECTRIC | Electric heating is available to turn on in the apartment |
| HEATING_GAS | Gas-powered heating is available to turn on in the apartment |
| HEATING_NOT | No heating is available in the apartment |
| HEATING_OIL | Oil-powered heating is available to turn on in the apartment |
| HEATING_UNDERFLOOR | Underfloor heating is available to turn on in the apartment |
| HEATING_WOOD_STOVE | A wood stove is available for heating the apartment |
| HEATING | Heating is available to turn on in the apartment (type of heating unspecified) |
| HIGHCHAIR | High chair for babies / small children is available for use |
| HIKING | Hiking is an activity nearby |
| HORSEBACK_RIDING | Horseback riding is an activity nearby |
| HOUSEOWNED_BEACH | Beachfront property; the property owner owns the beach along with the house |
| HOUSEOWNER_LIVES_ONSPOT | The property owner lives in a home which is on the same property / in the same building as the rental unit |
| INTERCOM | There is an intercom system in the building / home |
| INTERNET_LAN | Local area network (LAN) internet access is available in the apartment |
| INTERNET_NOT | No internet is available in the apartment |
| INTERNET_WIFI | Wifi is available in the apartment |
| INTERNET | Internet is available in the apartment (type unspecified) |
| IPOD_DOCK | i-Pod dock is available for use |
| IRONING_BOARD | Ironing board is available for use |
| IRONING_SERVICE | An ironing service is available |
| JUICER | Juicer available for use |
| KETTLE | Kettle (type unspecified) available for use |
| KITCHEN_NOT | Apartment has no access to a kitchen |
| KITCHEN_UTENSILS | Kitchen utensils available for use |
| KITCHEN | Apartment has a kitchen, or there is one accessible to the unit on site |
| KITCHENETTE | Apartment has a kitchenette, or there is one accessible to the unit on site |
| KITESURFING | Kitesurfing is an activity nearby |
| LANDING_STAGE | A landing stage or boat dock |
| LOCATION_GROUND_FLOOR | The rental unit is located on the ground floor |
| LOCATION_UPPER_FLOOR | The rental unit is located on an upper floor |
| LUGGAGE_STORAGE | Luggage storage is available on site, or in the apartment |
| LUNCHSERVICE_PACKED | Packed lunches for excursions are available |
| LUXURY | Luxury vacation |
| MICROWAVE | Apartment has at least one microwave, or there is access to one nearby |
| MINIBAR | Apartment has at least one minibar |
| MINIGOLF | Minigolf is an activity nearby |
| MINIMARKET | There is a mini-market nearby for grocery shopping, or a supermarket is nearby |
| MIXER | There is at least one mixer / blender for making smoothies, soups, etc.; includes mixing / blending wands |
| MOUNTAIN_BIKING | Mountain biking is an activity nearby |
| MP3_PLAYER | Apartment has at least one MP3 player available for use |
| OVEN | Apartment has at least one oven, or there is access to one nearby |
| PARASOL | Apartment has an umbrella or parasol outdoors to shade the outdoor furniture area |
| PARKING_AT_OBJECT | Parking is available directly at the rental on the property |
| PARKING_CARPORT | A carport / covered driveway parking is available on site |
| PARKING_DISABLED | Parking for handicapped guests is available |
| PARKING_GARAGE | Parking in a garage is available |
| PARKING_SECURE | Parking with security personnel that monitor the parking grounds |
| PARKING_SPOT | A parking spot is available on site, or nearby |
| PARKING_STREET | Street parking is available on site, or nearby |
| PARKING | Parking is available on site, or nearby (unspecified type) |
| PETS_ALLOWED_CAT | One or more pet cats are allowed |
| PETS_ALLOWED_DOG_MAX_10_KG | One or more pet dogs with a maximum weight of ten kilograms are allowed |
| PETS_ALLOWED_DOG_MORE_THAN_10_KG | One or more pet dogs with a weight of more than ten kilograms are allowed |
| PETS_ALLOWED_DOG | One or more pet dogs (size / weight unspecified) are allowed |
| PETS_ALLOWED_ON_REQUEST | One or more pets may be allowed, but the customer must request that this allowance be made with the property manager |
| PETS_ALLOWED_SMALL_PETS | One or more small pets are allowed |
| PETS_ALLOWED | One or more pets are allowed |
| PETS_NOT_ALLOWED | No pets are allowed |
| PLAYGROUND | A children’s playground is available at the rental unit or nearby |
| PLAYROOM | The apartment has a children’s playroom, or there is one in the building / complex |
| POOL_CHILDREN | Apartment has at least one children’s pool, or there is one nearby |
| POOL_PRIVATE | Apartment has at least one pool, private in the accomodation |
| POOL_SEASONALLY_OPENED | Apartment has at least one pool, which is seasonally opened |
| POOL_HEATED | Apartment has at least one heated pool, or there is one nearby |
| POOL_INDOOR_CHILDREN | Apartment has at least one indoor children’s pool, or there is one nearby |
| POOL_INDOOR | Apartment has at least one indoor pool, or there is one nearby |
| POOL_INFINITY | Apartment has at least one infinity pool, or there is one nearby |
| POOL_OUTDOOR_CHILDREN | Apartment has at least one outdoor children’s pool, or there is one nearby |
| POOL_OUTDOOR | Apartment has at least one outdoor pool, or there is one nearby |
| POOL | Apartment has at least one pool, or there is one nearby (type unspecified) |
| PUBLIC_TRANSPORTATION | Apartment is near public transportation connections |
| QUIET | Quiet vacation |
| RADIO | Radio is available for use |
| RECEPTION_24H | There is 24-hour reception on site |
| RENOVATED | The rental unit has been renovated |
| RESTAURANT | One or more restaurants are nearby |
| ROOF_FLAT | Unit has a flat roof |
| ROOF_THATCHED | Unit has a thatched roof |
| ROOMS_DININGROOM | The unit has at least one dining room |
| ROOMS_DOUBLE | There is at least one set of double / twin bedrooms in the home |
| ROOMS_FAMILY | There is a family room / room for family activities available |
| ROOMS_LIVINGROOM | The unit has at least one living room / sitting room |
| ROOMS_SINGLE | There is at least one single bedroom in the home |
| SAFE | Apartment has a safe / lockbox / strongbox |
| SAILING | Sailing is an activity nearby |
| SAUNA | Apartment has at least one sauna, or there is one nearby |
| SCOOTER_RENTAL | Scooter rental is possible nearby, or with the property manager |
| SEPARATE_TOILET | Apartment has a separate toilet / additional toilet / half-bathroom |
| SHOWER_OUTSIDE | Apartment has at least one outdoor shower |
| SHOWER | Apartment has at least one shower |
| SHUTTLE_SERVICE | Shuttle service to and from the airport is possible nearby, or with the property manager |
| SINK | Apartment has at least one sink |
| SKI_IN_OUT | This is a ski-in / ski-out property |
| SKI_PASS | A ski pass is available, either for purchase or included - check with property manager |
| SKI_RENTAL | Ski equipment rental is possible nearby, or with the property manager |
| SKI_STORAGE | There is storage for ski equipment in the accommodation |
| SKI_VACATION | Ski-themed vacation |
| SMOKE_DETECTOR | Apartment has at least one smoke detector |
| SMOKING_ALLOWED | Smoking is allowed in and outside of the unit |
| SMOKING_AREA | A designated smoking area is nearby the unit |
| SMOKING_NOT_ALLOWED | Smoking is not allowed in or outside of the unit |
| SOLARIUM | Aparment has a room equipped with sunlamps or sunbeds / tanning beds; if there are no artificial lights, map to CONSERVATORY |
| SOUND_SYSTEM | Sound system or stereo system for music / films |
| SPEAKERS | There are speakers available for playing music |
| SPICES | Spices are available for use with cooking |
| STEAMBATH | There is at least one steam bath available |
| STOVE_WOOD | There is a woodstove in the accommodation for heating |
| SUITABLE_CHILDREN_NO | Apartment is not suitable for children / families |
| SUITABLE_CHILDREN | Apartment is suitable for children / families |
| SUITABLE_FOR_DISABLED | Apartment is suitable for disabled guests, but may not necessarily be barrier free |
| SUITABLE_FOR_ELDERLY | Apartment is suitable for elderly guests |
| SUITABLE_YOUNG_PEOPLE | Apartment is suitable for youths / teenagers / young people / young adults |
| SURFING | Surfing is an activity nearby |
| TABLE_TENNIS | There is table tennis / ping pong table available nearby or in the apartment |
| TELEPHONE | There is a telephone available to use |
| TENNIS_COURT | There is a tennis court available to use nearby |
| TERRACE_COVERED | Apartment has at least one terrace with some kind of cover over at least part of it |
| TERRACE_UNCOVERED | Apartment has at least one terrace which is completely uncovered |
| TERRACE | Apartment has at least one terrace (whether it is covered or not is unknown) |
| TOASTER | Toaster available for use |
| TOILETRIES | Toiletries available for use |
| TOWELS_NOT | No towels available |
| TOWELS | Towels available for use |
| TOYS_BOARD_GAME | There are board games available for use |
| TOYS_BOOKS_FOR_CHILDREN | There are books for children available |
| TOYS_BOOKS | There are books available, for undefined ages |
| TOYS_DVDS_FOR_CHILDREN | There are DVDs for children available |
| TOYS_DVDS | There are DVDs available, for undefined ages |
| TOYS | There are toys available |
| TROUSERPRESS | There is a trouser press available for use |
| TV_CABLE | TV has access to cable channels |
| TV_DANISH_CHANNELS | TV has access to Danish channels |
| TV_DIGITAL | TV has access to digital channels |
| TV_DUTCH_CHANNELS | TV has access to Dutch channels |
| TV_ENGLISH_CHANNELS | TV has access to English channels |
| TV_FLAT_SCREEN | Apartment has at least one flatscreen TV |
| TV_FRENCH_CHANNELS | TV has access to French channels |
| TV_GERMAN_CHANNELS | TV has access to German channels |
| TV_INTERNATIONAL_CHANNELS | TV has access to international channels, undefined language |
| TV_ITALIAN_CHANNELS | TV has access to Italian channels |
| TV_PAY_PER_VIEW | TV has access to pay-per-view |
| TV_SATELLITE | TV has access to satellite channels |
| TV_SPANISH_CHANNELS | TV has access to Spanish channels |
| TV | Apartment has at least one TV |
| VACUUM_CLEANER | Vacuum cleaner available for use |
| VENTILATOR | There is at least one fan in the apartment, including ceiling fans |
| VIEW_BEACH | Apartment has a good view of the beach |
| VIEW_CITY | Apartment has a good view of the city |
| VIEW_GARDEN | Apartment has a good view of the garden / yard |
| VIEW_LAKE | Apartment has a good view of the lake |
| VIEW_LANDMARK | Apartment has a good view of a landmark(s) |
| VIEW_MOUNTAIN | Apartment has a good view of the mountains |
| VIEW_OCEAN | Apartment has a good view of the ocean |
| VIEW_RIVER | Apartment has a good view of the river |
| VIEW_SEA | Apartment has a good view of the sea |
| VIEW | Apartment has a good view |
| VISITED_BY_HOLIDU | Holidu employees have visited this rental unit |
| WARDROBE | Apartment has at least one wardrobe |
| WASHER_DRYER_COMBO | Apartment has at least one washing machine / washer and dryer combination appliance, or one is available nearby |
| WASHER | Apartment has at least one washing machine / washer, or there is access to one nearby |
| WATER_SPORTS | Water sports are an activity nearby |
| WATERFRONT | The home is positioned at the waterfront; the property is first-tier to the water |
| WATERPARK | A waterpark is nearby, or at the holiday complex |
| WELLNESS_AREA | There is a wellness center / wellness facility nearby; includes spas |
| WELLNESS_TREATMENTS | There are wellness, beauty, or massage treatments available at nearby facilities, or on site |
| WELLNESS | Wellness-themed vacation |
| WHIRLPOOL_INDOOR | Apartment has at least one indoor Whirlpool / hot tub, or there is access to one nearby |
| WHIRLPOOL_OUTDOOR | Apartment has at least one outdoor Whirlpool / hot tub, or there is access to one nearby |
| WHIRLPOOL | Apartment has at least one Whirlpool / hot tub, or there is access to one nearby |
| WINDSURFING | Windsurfing is an activity nearby |
| WINTER_SPORTS | Winter sports are an activity nearby |
| YOUTH_GROUPS_ALLOWED | Property manager allows youth groups to rent the unit |
| YOUTH_GROUPS_NOT_ALLOWED | Property manager does not allow youth groups to rent the unit |
***
## Sustainable facilities

In an effort to promote sustainability, Holidu will be promoting sustainable friendly properties. To be qualified as sustainable, a property needs at least 8 facilities from the list below.
When doing so, Holidu will be adding the Eco badge to the property, both on list and detail pages :

---
# Price and availability
Source: https://developer.holidu.com/docs/price-and-availability
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
## Give us your numbers
In the Holidu API you need to provide all availabilities and all prices upfront so that Holidu can calculate the prices. Prices are always calculated based on the number of guests and the number of nights a customer booked.
There is no distinction in the calculation between adults and children, they all count to the number of persons. Babies below 3 years (until the 3rd birthday) are considered to be always for free in the base price calculation. You may apply an extra cost for instance for a baby cot, high chair or similar.
There are two options to push us the base rate (meaning the price for the apartment rent excluding any extra costs) and the availability data: The length of stay (LOS) model and the availability & rates model.
We always recommend using the LOS model since the availability and rates model will be deprecated in future versions.
## Length of stay versus rate plans
| LOS | Rate plans |
| :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| The easiest and most flexible way of providing the prices for your properties is to push the length of stay rates. When daily rates are strongly dependent on the length of the stay, we can not guarantee using rateplans will work for you. | Rate plans should only to be used if you have a really easy pricing structure. Meaning the pricing is not dependent on the length of the stay and the same amount in charged every day. |
How to use LOS you can find in the [Length of stay section](https://developer.holidu.com/docs/length-of-stay-los.md). When in doubt how and if you can adapt your model to the Holidu LOS model, reach out to your Technical Account Manager, who will be happy to help you.
## Extras costs
Travelers are highly price sensitive. They do not just care how much they have to pay, but also for what. By offering [additional extras](https://developer.holidu.com/docs/extra-costs-1.md) already in the booking process, you can further increase the attractiveness of the offer.
## Discounts
Make your offers more attractive by offering [early bird or last minute discounts](https://developer.holidu.com/docs/discounts-1.md).
> **Danger: It is crucial to keep the pricing and availability information in sync with your system and accurate**
>
> Holidu is calculating the prices and showing it to the customer. Any difference to the prices in your system can lead to a huge customer frustration, failed or cancelled bookings and will therefor not be tolerated.
---
# Length of stay (LOS)
Source: https://developer.holidu.com/docs/length-of-stay-los
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
## As flexible as your prices are
With LOS you can define every possible price structure you may have defined on your side already. For every possible checkin day, for every possible stay length, you can define the price as you want.
> **Info: LOS basics**
>
> * LOS data contains prices and availabilities at the same time.
> * For every possible checkin day you push the price for every possible length of stay (up to 62 nights) and occupancy (up to the max persons of the property).
> * To update a price or availability inside a LOS, you need to push the entire LOS object; updates for a single row are not possible.
## How it works
* The general concept is that each row in the LOS represents the availability and prices for one specific checkin day.
* The LOS object contains the possible check-in days (format: `"YYYY-MM-DD"`).
* Each check-in day has an array of objects.
* Check-in days for maximum 2 years can be pushed.
* Every object contains the currency of prices, the maximum amount of guests for which the rates are applicable and the prices according to length of stay.
### the length of stay object
| Parameter | Type | Required | Usage |
| :----------------------------------- | :--------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `"los"` | object | YES | Object of check in days |
| `"los"."key"` | object | YES | Each possible check in day is represented by an array of objects. |
| `"los"."key"[i]."currency"` | string | YES | Choose from the list of supported currency parameters. |
| `"los"."key"[i]."guests"` | int | YES | The number of guests for which the prices defined in this object are valid. |
| `"los"."key"[i]."price"` | array of numbers | YES | Each row contains the price for the corresponding length of stay. When a row has value "0" this length of stay is not possible (for example, row 1 represents the length of stay of 1 night, row 7 represents the length of stay 7 nights) |
| `"los"."key"[i]."price"[i]."number"` | number | | Price for the length of stay |
## Example
3 guests can check in on the 1st of May 2024 and stay from 4 to 7 nights, while 2 guests can stay for a minimum of 7 nights.
```json title="LOS example"
{
"los": {
"2024-05-01": [
{
"currency": "EUR",
"guests": 2,
"price": [
0, // Check-out not allowed on "2024-05-02"
0, // Check-out not allowed on "2024-05-03"
0, // Check-out not allowed on "2024-05-04"
0, // Check-out not allowed on "2024-05-05"
0, // Check-out not allowed on "2024-05-06"
0, // Check-out not allowed on "2024-05-07"
900 // Check-out allowed on "2024-05-08"
]
},
{
"currency": "EUR",
"guests": 3, // Extra guest added
"price": [
0, // Check-out not allowed on "2024-05-02"
0, // Check-out not allowed on "2024-05-03"
0, // Check-out not allowed on "2024-05-04"
600, // Check-out allowed on "2024-05-05"
700, // Check-out allowed on "2024-05-06"
800, // Check-out allowed on "2024-05-07"
900 // Check-out allowed on "2024-05-08"
]
}
]
}
}
```
You can also find the recipe for a simple LOS here:
[Basic LOS](https://developer.holidu.com/recipes/basic-los.md)
> **Danger: LOS do not work together with availabilities**
>
> Be aware that if you choose LOS we will not consider data sent to the endpoints RATES and AVAILABILITIES. The LOS contains both.
## Using `rateId` with LOS (Length of Stay)
**a) Delete LOS for an apartment (DELETE `/v2/los`)**\
You can delete LOS for a specific rate by adding rateId in your DELETE request:
Example Request:
```http
DELETE /v2/los?providerApartmentId=ABC123&rateId=NON_REFUNDABLE
```
### Notes:
* If `rateId` is provided, only LOS data for that specific rate will be deleted.
* If `rateId` is omitted, the default/main LOS will be affected.
**b) Get LOS for an apartment (GET `/v2/los`)**\
You can retrieve LOS for a specific rate by including rateId:
Example Request:
```http
GET /v2/los?providerApartmentId=ABC123&rateId=NON_REFUNDABLE
```
Response:\
You'll receive LOS data filtered for the given rateId.
**c) Create or Update LOS for an apartment (POST `/v2/los`)**\
When creating or updating LOS, you can assign LOS entries to a specific rate by including rateId in the body:
Example Request Body:
```json
{
"rateId": "NON_REFUNDABLE",
"los": {
"2025-04-01": [
{
"currency": "EUR",
"guests": 2,
"price": [100, 200]
}
],
"2025-04-02": [
{
"currency": "EUR",
"guests": 3,
"price": [150]
}
]
}
}
```
> **Danger: Important:**
>
> ☑️ If no `rateId` is passed, the request operates on the **default rate**.
>
> ☑️ `rateId` must be a string of either `REFUNDABLE` or `NON_REFUNDABLE` and should be consistently used across different API calls for the same rate.
>
> ☑️ Once you decided to push multi-rates, both `rateId` with values of `REFUNDABLE` **AND** `NON_REFUNDABLE` must be pushed for the same listing as separate requests with LOS payload.
>
> ☑️ Product design is currently supporting two rates per listings, so please set-up only:
>
> * one flexible rate (with free-cancellation) - `REFUNDABLE`
> * one non-refundable rate (without free cancellation) - `NON_REFUNDABLE`
---
# Availability and rates
Source: https://developer.holidu.com/docs/availability-and-rates
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
## Still works for simple pricing
> **Info: Availabilities & rates basics**
>
> * Availabilities and rateplans need to always be used together
> * To update availabilities, you can just mark single days as available or unavailable, every push is just an update
> * To update a price, you need to always push the whole ratePlan object, updates for single rows are not possible
Keep in mind that we are deprecating this in the next version, so we recommend using LOS. When in doubt, reach out to your Technical Account Manager, she will be happy to help!
Availabilities are holding the information if an apartment is available at a certain date, rateplans are holding the information at which price and if a specific day is a possible check-in or check-out day.
Using this model, you need to provide availabilities and rates and make sure to keep them in sync. This model is only supported for very easy price structures and may cause problems if you try to implement more complex pricing models.
## The Availability object
The first part are the availabilities. The availabiliy object contains the available days and the booked days of an apartment.
| Parameter | Type | Required | Usage |
| :---------------- | :------------- | :------- | --------------------------- |
| `"availableDays"` | array of dates | YES | list of all dates available |
| `"bookedDays"` | array of dates | YES | list of all dates booked |
### Common missunderstandings
* Pushing a day multiple times in the availableDays object does not make this day more then once available.
* Pushing a day once in available and once in booked
### Example
```json title="availabilities"
{
"availableDays": [
"2022-12-02",
"2022-12-03"
],
"bookedDays": [
"2022-12-04"
]
}
```
Available days are not automaticly available for the customer to book, the day needs also to have a valid rate configured.
## The Rate Plan object
On the rates object you can define multiple information for every specific day. You need to specify the information on an individul day level.
| Parameter | Type | Required | Usage |
| :----------------------------------------------------- | :--------------- | :------- | ------------------------------------------------------------------------------- |
| `"ratePlans"` | array of objects | YES | Contains rate plans |
| `"ratePlans"[i]."ratePlanId"` | string | YES | You push an unique identifier for this rate plan |
| `"ratePlans"[i]."guests"` | int32 | YES | Number of guests for which this rate applies |
| `"ratePlans"[i]."currency"` | string | YES | Choose from the list of supported currencies |
| `"ratePlans"[i]."minimumStay"` | int32 | YES | The minimum length of stay for this rate plan to be applied |
| `"ratePlans"[i]."maximumStay"` | int32 | | The maximum length of stay for this rate plan to be applied |
| `"ratePlans"[i]."dailyRates"` | array of objects | YES | List of daily rates |
| `"ratePlans"[i]."dailyRates"[i]."date"` | date | YES | Date in format `"YYYY-MM-DD"` |
| `"ratePlans"[i]."dailyRates"[i]."price"` | number | YES | Price per night |
| `"ratePlans"[i]."dailyRates"[i]."priceForExtraPerson"` | number | | Price for any extra person between `"guests"`and the maximum apartment capacity |
| `"ratePlans"[i]."dailyRates"[i]."checkinAllowed"` | boolean | YES | Can a customer check-in on this date ? |
| `"ratePlans"[i]."dailyRates"[i]."checkoutAllowed"` | boolean | YES | Can a customer check-out on this date ? |
### Example
```json title="ratePlan"
{
"ratePlans": [
{
"ratePlanId": "SHORT_STAY_RATE",
"guests": 2,
"currency": "EUR",
"minimumStay": 1,
"maximumStay": 6,
"dailyRates": [
{
"date": "2023-05-01",
"price": 95,
"priceForExtraPerson": 20,
"checkinAllowed": true,
"checkoutAllowed": false
}
]
},
{
"ratePlanId": "MEDIUM_STAY_RATE",
"guests": 2,
"currency": "EUR",
"minimumStay": 7,
"maximumStay": 13,
"dailyRates": [
{
"date": "2023-05-01",
"price": 90,
"priceForExtraPerson": 15,
"checkinAllowed": true,
"checkoutAllowed": false
}
]
},
{
"ratePlanId": "LONG_STAY_RATE",
"guests": 2,
"currency": "EUR",
"minimumStay": 14,
"maximumStay": 30,
"dailyRates": [
{
"date": "2023-05-01",
"price":85,
"priceForExtraPerson": 10,
"checkinAllowed": true,
"checkoutAllowed": false
}
]
}
]
}
```
---
# Extra costs
Source: https://developer.holidu.com/docs/extra-costs-1
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
## The extra for your apartment
> **Info: Extra cost basics**
>
> * Extra costs are a crucial part of the booking experience of the traveler, so please make sure to follow the guidance
> * To update or delete extra costs, you need to push the entire extra cost object, updates for a single extra cost are not possible
> * To delete all extra costs you need to push an empty object
## How to use extra cost
Holidu supports a long list of possible extra costs to offer to the traveler.
You have multiple options to configure extra cost:
* Define how it should be calculated - for instance per night, per stay or per person
* Make it mandatory or selectable for the traveler
* Choose your preferred time of payment - for instance on site, on booking or with the first payment rate
### The extra cost object
| Parameter | Type | Required | Usage |
| :------------------------------------------------------ | :----- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `"id"` | string | YES | Unique identifier of the extra cost which we will send you back together with the booking. |
| `"name"` | string | YES | Name of the extra costs we show to the customer. We only allow a defined subset of names that you can see here below |
| `"basisOfCalculation"` | string | YES | Defining how the cost of the extra cost will be calculated. |
| `"maximumCount"` | int32 | No | Defining how many units of the extra is maximum available for the customer. |
| `"type"` | string | YES | Defining if the extra cost is mandatory, selectable or based on usage. |
| `"paymentTime"` | string | YES | The point in time the extra cost will be paid, which does not influence the way a extraCost will be displayed though |
| `"price"` | object | YES | The price object, consisting of the type , the amount and currency |
| `"price"."type"` | string | YES | Fixed amount or percentage of bare rental price |
| `"price"."amount"` | number | YES | Amount |
| `"price"."currency"` | string | YES\* | Currency in which the extra costs will be charged \*Required when price.type is fixed |
| `"condition"` | object | | Conditions under while extra cost should be applicable |
| `"condition"."seasonApplicable"` | object | | In which season should the extra cost be applicable. **Please be aware of possible implications when bookings overlap multiple seasons as described below.** |
| `"condition"."seasonApplicable"."onlyApplicableFrom"` | date | YES\* | Start of applicable season \*Required if `"seasonApplicable"` object is pushed |
| `"condition"."seasonApplicable"."onlyApplicableUntil"` | date | YES\* | End of applicable season \*Required if `"seasonApplicable"` object is pushed |
| `"condition"."numberOfNights"` | object | | For which range of nights should the extra cost be applicable |
| `"condition"."numberOfNights"."fromStayLengthInNights"` | date | YES\* | Minimum nights of stay for the extra cost to be applicable \*Required if `"numberOfNights"` object is pushed |
| `"condition"."numberOfNights"."toStayLengthInNights"` | date | YES\* | Maximum nights of stay for the extra cost to be applicable \*Required if `"numberOfNights"` object is pushed |
### List of allowed extra cost names
| name | Usage |
| :------------------------------ | :----------------------------------------------------------------------- |
| `"FINAL_CLEANING"` | Cost of final cleaning |
| `"EXTRA_CLEANING"` | Cost of extra cleaning (during stay) |
| `"REFUNDABLE_SECURITY_DEPOSIT"` | Security deposit which is refunded to the guest after check-out |
| `"TOURIST_OR_CITY_TAX"` | Tourist or city tax |
| `"VAT_OF_RENTAL_PRICE"` | Value-added tax applied on the rental price |
| `"BOOKING_FEE"` | Booking Fee |
| `"SERVICE_COSTS"` | Additional fees applied for services to enhance the traveler experience. |
| `"PET"` | Cost of bringing a pet |
| `"TRAVEL_INSURANCE"` | Travel Insurance |
| `"TOWEL"` | Cost of a towel |
| `"BEDLINEN"` | Cost of Bedlinen |
| `"TOWEL_BEDLINEN_PACKAGE"` | Cost of towel and bed linen |
| `"BABY_BED"` | Cost of a baby bed |
| `"BABY_CHAIR"` | Cost of a baby chair |
| `"BABY_COT"` | Cost of a baby cot |
| `"BABY_BUGGY"` | Cost of a baby buggy |
| `"HEATING"` | Heating usage cost |
| `"AIRCONDITION"` | Air conditioning usage cost |
| `"FIREWOOD"` | Cost for firewood |
| `"ELECTRICITY"` | Electricity usage cost |
| `"WATER"` | Cost for Water usage |
| `"SAUNA"` | Sauna usage cost |
| `"POOL"` | Pool usage cost |
| `"HOT_TUB"` | Additional charge for hot tub or jacuzzi usage. |
| `"WASHING_MACHINE"` | Cost of using the Washing machine |
| `"INTERNET"` | Cost of internet usage |
| `"PARKING"` | Cost for parking |
| `"AIRPORT_SHUTTLE"` | Airport shuttle cost |
| `"EXTRA_BED"` | Cost for an additional bed |
| `"GAS"` | Gas usage cost |
| `"BABY_HIGH_CHAIR"` | Cost of a baby high chair |
| `"BEACH_SERVICES"` | Cost of beach services |
| `"BEDLINEN_AND_BEDMAKING"` | Cost of bed linen including bed making |
| `"BREAKFAST"` | Cost of breakfast |
| `"CLUB_CARD"` | Cost of a club card |
| `"ECO_TAX"` | Eco tax |
| `"HYGIENE_SURCHARGE"` | Hygiene surcharge |
| `"KITCHEN_TOWELS"` | Cost of kitchen towels |
### Basis of calculation
| basisOfCalculation | Usage |
| :----------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `"PER_STAY"` | The cost will be applied once per stay |
| `"PER_PERSON_PER_NIGHT"` | The cost will be applied per person times the nights of the stay |
| `"PER_NIGHT"` | The cost will be applied per night, independent on persons |
| `"PER_PERSON"` | The cost will be applied per person, independent on the length of the stay |
| `"PER_UNIT"` | The cost will be applied to the number of units. If the type of the extra cost is marked as SELECTABLE, the traveler can select the amount of units. |
| `"PER_UNIT_PER_NIGHT"` | The cost will be applied to the number of units times the number of days of the stay. If the type of the extra cost is marked as SELECTABLE, the traveler can select the amount of units. |
### Types of extra costs
| type | Usage |
| :------------- | :-------------------------------------------------------------------------------------------------------------------------------- |
| `"MANDATORY"` | Cost of this type will always be added |
| `"SELECTABLE"` | The customer can decide if the extra cost should be applied |
| `"ON_USAGE"` | The cost will be applied base on usage for example electricity or water based on consumption, it will always to be paid "On site" |
### Payment time
| paymentTime | Usage |
| :------------- | :---------------------------------------------------------------------------------- |
| `"ON_BOOKING"` | The extra cost is paid on booking |
| `"WITH_RATES"` | DO NOT USE - will be deprecated |
| `"ONSITE"` | The extra cost is paid on spot, extra costs will be excluded from the payment rates |
## Examples
### Final Cleaning mandatory on booking
Cost to of Final Cleaning per stay paid on booking is only applied during high season
```json title="Extra Cost Example 1"
{
"name": "FINAL_CLEANING",
"basisOfCalculation": "PER_STAY",
"type": "MANDATORY",
"paymentTime": "ON_BOOKING",
"price": {
"type": "FIXED",
"amount": 100,
"currency": "EUR"
},
"condition": {
"seasonApplicable": {
"onlyApplicableFrom": "2024-05-01",
"onlyApplicableUntil": "2024-09-30"
}
},
"id": "111"
}
```
| Parameter | Usage |
| :----------------------------------------------------- | :----------------- |
| `"id"` | `"111"` |
| `"name"` | `"FINAL_CLEANING"` |
| `"basisOfCalculation"` | `"PER_STAY"` |
| `"type"` | `"MANDATORY"` |
| `"paymentTime"` | `"ON_BOOKING"` |
| `"price"."type"` | `"FIXED"` |
| `"price"."amount"` | `100` |
| `"price"."currency"` | `EUR` |
| `"condition"."seasonApplicable"."onlyApplicableFrom"` | `"2024-05-01"` |
| `"condition"."seasonApplicable"."onlyApplicableUntil"` | `"2024-09-30"` |
### Bedlinen selectable for all persons
Cost for bedlinen set is 10€ paid on booking per person and a maximum of 2 sets can be selected (for instance 1 at check-in and 1 extra set to change it half of the stay).
The cost will be applied to the number of persons present in the booking.
```json title="Extra Cost Example 2"
[
{
"id": "YYY",
"name": "BEDLINEN",
"basisOfCalculation": "PER_PERSON_PER_NIGHT",
"maximumCount": 2,
"type": "SELECTABLE",
"paymentTime": "ON_BOOKING",
"price": {
"type": "FIXED",
"amount": 10,
"currency": "EUR"
}
}
]
```
| Parameter | Usage |
| :--------------------- | :----------------------- |
| `"id"` | `"YYY"` |
| `"name"` | `"BEDLINEN"` |
| `"basisOfCalculation"` | `"PER_PERSON_PER_NIGHT"` |
| `"maximumCount"` | `2` |
| `"type"` | `"SELECTABLE"` |
| `"paymentTime"` | `"ON_BOOKING"` |
| `"price"."type"` | `"FIXED"` |
| `"price"."amount"` | `10` |
| `"price"."currency"` | `"EUR"` |
### Bedlinen selectable per unit
Cost for bedlinen set is 10€ per unit and a maximum of 2 sets can be selected (guests can select the amount of sets they need). It will be available to select only if number of nights is between 1 and 6.
```json title="Extra Cost Example 3"
{
"name": "BEDLINEN",
"basisOfCalculation": "PER_UNIT",
"type": "SELECTABLE",
"paymentTime": "ONSITE",
"price": {
"type": "FIXED",
"amount": 10,
"currency": "EUR"
},
"condition": {
"numberOfNights": {
"fromStayLengthInNights": 1,
"toStayLengthInNights": 6
}
},
"id": "222",
"maximumCount": 2
}
```
| Field | Usage |
| :------------------------------------------------------ | :------------- |
| `"id"` | `"222"` |
| `"name"` | `"BEDLINEN"` |
| `"basisOfCalculation"` | `"PER_UNIT"` |
| `"maximumCount"` | `2` |
| `"type"` | `"SELECTABLE"` |
| `"paymentTime"` | `"ONSITE"` |
| `"price"."type"` | `"FIXED"` |
| `"price"."amount"` | `10` |
| `"price"."currency"` | `"EUR"` |
| `"condition"."numberOfNights"."fromStayLengthInNights"` | `1` |
| `"condition"."numberOfNights"."toStayLengthInNights"` | `6` |
### Refundable security deposit
Cost for refundable security deposit 100€ paid on site:
```json title="Extra Cost Example 4"
[
{
"id": "ZZZ",
"name": "REFUNDABLE_SECURITY_DEPOSIT",
"basisOfCalculation": "PER_UNIT",
"maximumCount": 1,
"type": "MANDATORY",
"paymentTime": "ONSITE",
"price": {
"type": "FIXED",
"amount": 100,
"currency": "EUR"
}
}
]
```
| Field | Usage |
| :--------------------- | :------------------------------ |
| `"id"` | `"ZZZ"` |
| `"name"` | `"REFUNDABLE_SECURITY_DEPOSIT"` |
| `"basisOfCalculation"` | `"PER_UNIT"` |
| `"maximumCount"` | `1` |
| `"type"` | `"MANDATORY"` |
| `"paymentTime"` | `"ONSITE"` |
| `"price.type"` | `"FIXED"` |
| `"price"."amount"` | `100` |
| `"price"."currency"` | `"EUR"` |
> **Danger: ️ Be aware**
>
> Extras to be paid for extra guest or for a short stay are not supported by the extra cost endpoint. Our pricing model supports defining prices based on the number of persons and for different length of stay [Length of stay section](https://developer.holidu.com/docs/length-of-stay-los.md).
>
> If a `condition` object is pushed with `seasonApplicable` object, be aware that `onlyApplicableFrom` and `onlyApplicableUntil` cannot be null.
>
> If a `condition` object is pushed with `numberOfNights` object, be aware that `fromStayLengthInNights` and `toStayLengthInNights` cannot be null.
> **Warning: Special treated extra costs**
>
> There are certain extra costs that are treated special on Holidu
>
> * `"REFUNDABLE_SECURITY_DEPOSIT"`: It is always excluded from total collected price and from payment rates. Also deposit cannot be pushed with a percentage price, only with fixed price.
> * `"TOURIST_OR_CITY_TAX"`: PaymentTime should be `"ONSITE"`
> * `"VAT_OF_RENTAL_PRICE"`
>
> For the above extra costs the type will be ignored and we consider them all as `"MANDATORY"`
>
> * `SERVICE_COSTS`: This cost type should only be used in exceptional cases. Please ensure to discuss and review the usage of this type of extra costs with our technical support team, as costs under this label will draw extra attention on our side as it is often used to exploit booking costs and commissionable amounts.
> **Danger: Extra costs calculation if `seasonApplicable` condition is used**
>
> When using the `seasonApplicable` condition object to define extra costs for specific periods, it’s important to note that if a booking overlaps with multiple `seasonApplicable` periods, each relevant extra cost will be applied and summed. This means that the total extra cost for a booking is the cumulative sum of all applicable extra costs from overlapping seasons.
>
> ### Example calculation
>
> 
>
> ##### Booking 1
>
> * **Details:** 2 persons, 10 nights
> * **Applicable Extra Costs:**
> * FINAL\_CLEANING: 100 EUR
> * PET: 10 EUR per night
> * TOWEL: 7 EUR per Person
> * **Calculation:**
>
> * Final Cleaning: 100 EUR
> * Pet: 10 EUR \* 10 Nights = 100 EUR
> * Towel: 7 EUR \* 2 Persons = 14 EUR
>
> **Total for Booking 1:** 100 EUR + 100 EUR + 14 EUR = 214 EUR
>
> #### Booking 2
>
> * **Details:** 3 persons, 20 nights
> * **Applicable Extra Costs:**
> * FINAL\_CLEANING: 120 EUR + 140 EUR **(season overlap)**
> * PET: 10 EUR + 12 EUR per night **(season overlap)**
> * TOWEL: 7 EUR per Person
> * **Calculation:**
>
> * Final Cleaning: 120 EUR + 140 EUR = 260 EUR
> * Pet: 20 Nights *10 EUR + 20 Nights* 12 EUR = 440 EUR
> * Towel: 7 EUR \* 3 Persons = 21 EUR
>
> **Total for Booking 2:** 260 EUR + 440 EUR + 21 EUR = 721 EUR
---
# Discounts
Source: https://developer.holidu.com/docs/discounts-1
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
You can use the discounts endpoint to add multiple discounts per apartment. There is no possibility to push discounts for all of your properties at the same time, you will always need to add the discounts individually to every apartment.
The following discount types are supported: `"LAST_MINUTE"`, `"EARLY_BIRD"`, `"LONG_STAY"`, `"DEVICE_SPECIFIC"`, `"NEW_LISTING"`, `"LOYALTY"`, `"OFFER"`
You can always check for active discounts for a specific apartment using the [GET](https://developer.holidu.com/reference/getdiscounts.md) Discounts endpoint or [GET](https://developer.holidu.com/reference/getdiscountbyid.md) a single discount for an apartment by discount id
### The discount object
| Parameter | Type | Required | Usage |
| :--------------------------------------------------- | :--------------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `"id"` | int64 | NO | When creating a new discount, this field is empty, it will be set by Holidu in the response. When updating an existing discount push the `"id"` of this discount. |
| `"status"` | string | YES | The status indicates if a discount is active, inactive (temporary), or deleted. |
| `"name"` | string | NO | You can put a name for the discount (e.g., Early Bird Discount). |
| `"discountType"` | string | YES | Choose between the last minute, early bird, long stay, device specific, new listing, loyalty, or offer type of discount. |
| `"discountPercent"` | number | YES | Discount percentage. |
| `"conditions"` | object | YES | Conditions on which the discount is applied. |
| `"conditions"."daysBeforeCheckIn"` | int32 | YES\* | For `"LAST_MINUTE"`, it is the maximum number of days before check-in, and for `"EARLY_BIRD"`, the minimum of days before check-in during which the discount should be applied. \*Required if the discount type is `"LAST_MINUTE"` or `"EARLY_BIRD"` |
| `"conditions"."minStay"` | int32 | YES\* | Minimum length of stay required for the discount to be applied. \*Required if the discount type is `"LONG_STAY"` |
| `"conditions"."bookingSeason"` | array of objects | NO | For the discount to be applied, the booking date must be within a specific season. |
| `"conditions"."bookingSeason"."onlyApplicableFrom"` | date | YES\* | Start date of booking season. \*Required if `"bookingSeason"` object is pushed. |
| `"conditions"."bookingSeason"."onlyApplicableUntil"` | date | YES\* | End date of booking season. \*Required if `"bookingSeason"` object is pushed. |
| `"conditions"."travelSeason"` | array of objects | NO | For the discount to be applied, the travel date must be within a specific season. |
| `"conditions"."travelSeason"."onlyApplicableFrom"` | date | YES\* | Start date of travel season. \*Required if `"travelSeason" `object is pushed. |
| `"conditions".travelSeason"."onlyApplicableUntil"` | date | YES\* | End date of travel season. \*Required if `"travelSeason"` object is pushed. |
| `"conditions"."deviceType"` | string | YES\* | From which device (Mobile or Desktop) the booking needs to be made for the discount to be applied. \*Required if the discount type is `"DEVICE_SPECIFIC"` |
### Status of a discount
| status | Usage |
| :----------- | :-------------------------------------------------------- |
| `"ACTIVE"` | The discount should be active. |
| `"INACTIVE"` | The discount should be inactive (paused) but not deleted. |
| `"DELETED"` | You want to delete the discount. |
### Type of a discount
| discountType | Usage |
| :------------------ | :------------------------------------------------------------------------------------------------------------ |
| `"EARLY_BIRD"` | A discount should be applied x or more days before check-in. |
| `"LAST_MINUTE"` | A discount should be applied x or fewer days before check-in. |
| `"LONG_STAY"` | A discount should be applied if a booking has a specific minimum length of stay. |
| `"DEVICE_SPECIFIC"` | A discount should be applied if a booking is made from a specific device such as a mobile phone or a desktop. |
| `"NEW_LISTING"` | A discount should be applied only to newly published properties. |
| `"LOYALTY"` | A discount should be applied only for logged-in users. |
| `"OFFER"` | A discount should be applied for standard promotions, not fitting into any other type. |
> **Danger: Be aware**
>
> * Discounts should be properly used for actual discounts, not for missing rates in the LOS file.
> * The discount will always be applied to the whole base rate of the property if those conditions apply, not just to the specific days
> * If you push more than one discounts for each booking, only one discount object will be applied. The one leading to the highest discounted amount will be applied.
## Examples
### Create a discount for Early Birds
If a guest is an early bird and books for 5 nights or more and 90 days or more before check-in date, the price per night is discounted by 10%.
```json title="Create discount example"
{
"discountPercent": 10,
"status": "ACTIVE",
"discountType": "EARLY_BIRD",
"conditions": {
"daysBeforeCheckIn": 90,
"minStay": 5
}
}
```
### Create a discount for Last Minute guests
If a guest likes to book last minute, 7 days or less before check-in date, the price per night is discounted by 20%.
```json title="Create discount example"
{
"discountPercent": 20,
"status": "ACTIVE",
"discountType": "LAST_MINUTE",
"conditions": {
"daysBeforeCheckIn":7
}
}
```
### Create a discount for Long Stays
If a guest chooses to stay 7 or more days, the price is discounted by 20% for bookings if the guests books between 2020-08-01 and 2021-04-30.
```json title="Create discount example"
{
"discountPercent": 20,
"status": "ACTIVE",
"discountType": "LONG_STAY",
"conditions": {
"bookingSeason": [
{
"onlyApplicableFrom": "2020-08-01",
"onlyApplicableUntil": "2021-04-30"
}
],
"minStay": 7
}
}
```
### Create a discount for a device specific booking
If a guest chooses to book on a mobile device, the price is discounted by 15% if the guest's travel date is between 2020-08-01 and 2021-04-30
```json title="Create discount example"
{
"discountPercent": 15,
"status": "ACTIVE",
"discountType": "DEVICE_SPECIFIC",
"conditions": {
"travelSeason": [
{
"onlyApplicableFrom": "2020-08-01",
"onlyApplicableUntil": "2021-04-30"
}
],
"deviceType": "MOBILE"
}
}
```
### Create a discount for New Listings
If an apartment is newly listed, offer a 15% discount for bookings made between 2025-06-01 and 2025-12-31.
```json title="Create discount example"
{
"discountPercent": 15,
"status": "ACTIVE",
"discountType": "NEW_LISTING",
"conditions": {
"bookingSeason": [
{
"onlyApplicableFrom": "2025-06-01",
"onlyApplicableUntil": "2025-12-31"
}
]
}
}
```
### Create a discount for Loyalty Users
Authenticated users get a 10% discount if they book at least 30 days before check-in and stay for 3 or more nights.
```json title="Create discount example"
{
"discountPercent": 10,
"status": "ACTIVE",
"discountType": "LOYALTY",
"conditions": {
"daysBeforeCheckIn": 30,
"minStay": 3,
"userType": "USER_AUTHENTICATED"
}
}
```
### Create a discount for Special Offers
For a promotional campaign, 25% discount is applied if the stay is between 2024-07-01 and 2024-08-31, and the booking is made on mobile devices only.
```json title="Create discount example"
{
"discountPercent": 25,
"status": "ACTIVE",
"discountType": "OFFER",
"conditions": {
"travelSeason": [
{
"onlyApplicableFrom": "2024-07-01",
"onlyApplicableUntil": "2024-08-31"
}
],
"deviceType": "MOBILE"
}
}
```
### Update an existing discount to status deleted
💡 Now the `"id"` needs to be included in the request. To get all pushed discount objects, including the discount id, you can use the [GET](https://developer.holidu.com/reference/getdiscounts.md)
```json title="Update discount example"
{
"id": 123,
"discountPercent": 20,
"status": "DELETED",
"discountType": "DEVICE_SPECIFIC",
"conditions": {
"deviceType": "DESKTOP"
}
}
```
### Update an existing discount to status inactive
💡 Now the `"id"` needs to be included in the request. To get all pushed discount objects, including the discount id, you can use the [GET](https://developer.holidu.com/reference/getdiscounts.md)
```json title="Update discount example"
{
"id":456,
"discountPercent":20,
"status":"INACTIVE",
"discountType":"LONG_STAY",
"conditions":{
"minStay":14,
"travelSeason":[
{
"onlyApplicableFrom":"2024-05-01",
"onlyApplicableUntil":"2024-09-30"
}
]
}
}
```
---
# Booking terms
Source: https://developer.holidu.com/docs/apartment-configuration
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
## Define the rules
In the booking terms, you can configure how the customer has to pay the booking, how much they have to pay in case of a cancellation, and to provide your terms & conditions.
This configuration can be made per apartment through the API. In case this configuration is the same for all your apartments, this can also be configured on our side for your whole integration. Your Technical Account Manager can advise you on what makes the most sense in your situation.
## Best practices to configure payment rates and cancellation conditions:
* Charging 100% of the payment upfront has a negative impact on the booking rate. We advise you to keep it as much as possible in sync with the cancellation conditions.
* In general, more flexible cancellation conditions lead to a higher ↑ booking rate.
* Keep the terms and conditions simple, if customers do not understand them, they may harm the conversion.
---
# Payment configuration
Source: https://developer.holidu.com/docs/payment-configuration
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
## Let's talk about payment rates
> **Info: Payment Basics**
>
> * Configure payment rates and methods per apartment.
> * If you have the same rates and payment methods for each apartment, they can be configured on your account level.
> * To update the payment rates or payment methods, you need to push the entire object; partial updates are not possible.
> * If **Holidu handles the payments**, then this endpoint should not be developed!
| Field | Type | Required | Usage |
| :------------------------------------------------- | :----- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `paymentMethods` | string | | A list of supported payment methods valid for booking. |
| `paymentRates` | object | YES | |
| `paymentRates.ratePaidOnBookingInPercentage` | number | | A percentage of the total amount that must be paid on booking. Missing counts as 0. |
| `paymentRates.ratesPerDate` | object | | |
| `paymentRates.ratesPerDate.daysBeforeArrival` | number | YES | The limit of the number of days before arrival until when a specified percentage should be paid. Example: Until 7 days before arrival, 70% should be paid. |
| `paymentRates.ratesPerDate.rateAmountInPercentage` | number | YES | Percentage of booking cost that should be paid. Decimals are allowed. |
### List of Supported payment methods:
| Payment methods | | |
| :--------------- | :- | :- |
| BANK\_TRANSFER | | |
| CREDIT\_CARD | | |
| PAYPAL | | |
| CHEQUE\_VACANCES | | |
| IDEAL | | |
| INVOICE | | |
The customer expects you to handle the payments. The customer will select one of those payment methods.
### Examples
```json
{
"paymentMethods": [
"CREDIT_CARD",
"BANK_TRANSFER"
],
"paymentRates": {
"ratesPerDate": [
{
"daysBeforeArrival": 30,
"rateAmountInPercentage": 50
},
{
"daysBeforeArrival": 7,
"rateAmountInPercentage": 20
}
],
"ratePaidOnBookingInPercentage": 30
}
}
```
**In this sample code, you can see that the supported payment methods for this apartment are:**
* CREDIT\_CARD & BANK\_TRANSFER
**The payment rates in the sample code are calculated as follows:**
* At the time of booking, the amount to be paid is 30%.
* 30 days before check-in, the amount to be paid is 50%.
* 7 days before check-in, the amount to be paid is 20%.
**Use case 1:** The total amount of the booking is 1000€, and the guest booked 50 days before check-in. Then, at the time of booking, the guest has to pay 300€ (30%), 500€ (50%) 30 days before the check-in day, and the rest 200€ (20%) 7 days before the check-in day.
**Use case 2:** The total amount of the booking is 1000€, and the guest booked 14 days before check-in. Then, at the time of booking, the guest has to pay 800€ (30% + 50%), and the rest 200€ (20%) 7 days before the check-in day. Similarly, if the booking happens 5 days before check-in, then the full amount of 1000€ (30% + 50% + 20%) should be paid at the time of booking.
> **Warning: To remember:**
>
> `ratePaidOnBookingInPercentage` (missing counts as 0) plus all `ratesPerDate[].rateAmountInPercentage` must add up to exactly 100. Otherwise the request fails with 400 `paymentRates must sum up to 100 percent`. Values are compared exactly: 33.33 + 33.33 + 33.34 is accepted, 33.3 + 33.3 + 33.3 is not.
## Using optional field `rateId` with Payment Configuration **(only to be used when pushing `NON_REFUNDABLE` and `REFUNDABLE` rates in LOS)** {#using-rateid-with-payment-configuration}
**a) Get Payment Configuration (GET `/v2/apartments/payment-configuration`)**\
You can retrieve the payment configuration specific to a rate:
Example Request:
```http
GET /v2/apartments/payment-configuration?providerApartmentId=ABC123&rateId=DEFAULT
```
### Notes:
* If rateId is provided, you get payment settings for that specific rate.
* Without rateId, you get the default configuration.
**b) Delete Payment Configuration (DELETE `/v2/apartments/payment-configuration`)**\
You can delete payment configurations for a specific rate:
Example Request:
```http
DELETE /v2/apartments/payment-configuration?providerApartmentId=ABC123&rateId=NON_REFUNDABLE
```
**c) Update Payment Configuration (POST `/v2/apartments/payment-configuration`)**\
When creating or updating payment configuration, specify the rateId to target the correct rate:
Example Request Body:
```json
{
"paymentMethods": [
"BANK_TRANSFER",
"CREDIT_CARD"
],
"paymentRates": {
"ratesPerDate": [
{
"daysBeforeArrival": 30,
"rateAmountInPercentage": 50
},
{
"daysBeforeArrival": 7,
"rateAmountInPercentage": 20
}
],
"ratePaidOnBookingInPercentage": 30
},
"rateId": "NON_REFUNDABLE"
}
```
---
# Cancellation conditions
Source: https://developer.holidu.com/docs/cancellation-conditions
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
## Make it flexible
> **Info: Cancellation conditions basics**
>
> * Configure cancellation policies per apartment
> * If you have the same cancellation policies for each apartment, they can be configured on your account level.
> * To update the cancellation policies, you need to push the entire object, partially updates are not possible.
## How to use cancellation policies
* There has to be at least one cancellation policy defined with `"daysBeforeArrival":0`, which is the fee that needs to be paid in case the customer is not showing up.
* We recommend to not configure more than 3 different policies in order to keep the structure clear and understandable for the customer.
* Be aware that your payment rates and cancellation policies are configured in sync.
### The object cancellation policy
| Field | Type | Required | Usage |
| :--------------------------- | :----- | -------- | -------------------------------------------------------------------------------------------------------------------- |
| `"daysBeforeArrival"` | int32 | YES | Number of days before arrival before which this cancellation policy is valid |
| `"cancellationFeeInPercent"` | double | YES | A percentage of the booking amount that is cancellation fee, meaning this percentage need to be paid by the customer |
## Examples
### No free cancellation offered
The apartment doesn't offer a free cancellation option and the total booking amount is 1000€.
```json
[
{
"daysBeforeArrival": 30,
"cancellationFeeInPercent": 50
},
{
"daysBeforeArrival": 7,
"cancellationFeeInPercent": 80
},
{
"daysBeforeArrival": 0,
"cancellationFeeInPercent": 100
}
]
```
* If the customer cancels the booking before 30 days of check-in (from the day of booking until 31 days before check-in day) then the cancellation fee that the customer has to pay is 50% of the total booking amount (500€).
* If the customer cancels the booking before 7 days of check-in (from 30 days until 8 days before check-in day) then the cancellation fee that the customer has to pay is 80% of the total booking amount (800€).
* If the customer cancels the booking when the day to check-in is 7 days or less (from 7 days to check-in until the day of check-in) then the customer has to pay the total booking amount 100% (1000€) as the cancellation fee.
### Free cancellation offered
The apartment offeres a free cancellation option and the total booking amount is 1000€.
```json
[
{
"daysBeforeArrival": 60,
"cancellationFeeInPercent": 0
},
{
"daysBeforeArrival": 30,
"cancellationFeeInPercent": 50
},
{
"daysBeforeArrival": 7,
"cancellationFeeInPercent": 80
},
{
"daysBeforeArrival": 0,
"cancellationFeeInPercent": 100
}
]
```
* If the customer cancels the booking before 60 days to check-in (from the day of booking until 61 days before check-in day) then the cancellation fee the customer has to pay is 0% of the total booking amoung (0€).
* If the customer cancels the booking before 30 days to check-in (from 60 days until 31 days before check-in day) then the cancellation fee that the customer has to pay is 50% of the total booking amount (500€).
* If the customer cancels the booking before 7 days of check-in (from 30 days until 8 days before check-in day) then the cancellation fee that the customer has to pay is 80% of the total booking amount (800€).
* If the customer cancels the booking when the day to check-in is 7 days or less (from 7 days to check-in until the day of check-in) then the customer has to pay the total booking amount 100% (1000€) as the cancellation fee.
> **Tip: Requirements for Holidu Payment**
>
> * When you work with Holidu Payment it is necessary that you set 100% cancellation fee at least for the check-in date. Until 1 day before checkin date cancellation fee can be any percentage (from 0 to 100%).
## Using optional field`rateId` with Cancellation Conditions **(only to be used when pushing`NON_REFUNDABLE` and `REFUNDABLE` rates in LOS)** {#using-rateid-with-cancellation-conditions}
**a) Delete Cancellation Conditions for an apartment (DELETE`/v2/apartments/cancellation-policy`)**
You can delete cancellation conditions for a specific rate by adding rateId in your DELETE request:
Example Request:
```http
DELETE v2/apartments/cancellation-policy?providerApartmentId=ABC123&rateId=NON_REFUNDABLE
```
**Notes:**
* If `rateId` is provided, only cancellation conditions for that specific rate will be deleted.
* If `rateId` is omitted, the default/main cancellation conditions will be affected.
**b) Get Cancellation Conditions for an apartment (GET`v2/apartments/cancellation-policy`)**
You can retrieve cancellation conditions for a specific rate by including `rateId`:
Example Request:
```http
GET v2/apartments/cancellation-policy?providerApartmentId=ABC123&rateId=NON_REFUNDABLE
```
Response:
* You will receive cancellation conditions filtered for the provided rateId.
* If `rateId` is omitted, you will get the default/main cancellation conditions.
**c) Create or Update Cancellation Conditions for an apartment (POST`v2/apartments/cancellation-policy`)**\
When creating or updating cancellation conditions, you can assign conditions to a specific rate by including rateId in the body:
Example Request Body:
```json
[
{
"daysBeforeArrival": 30,
"cancellationFeeInPercent": 0,
"rateId": "REFUNDABLE"
},
{
"daysBeforeArrival": 15,
"cancellationFeeInPercent": 50,
"rateId": "REFUNDABLE"
},
{
"daysBeforeArrival": 1,
"cancellationFeeInPercent": 100,
"rateId": "REFUNDABLE"
},
{
"daysBeforeArrival": 0,
"cancellationFeeInPercent": 100,
"rateId": "NON_REFUNDABLE"
}
]
```
| Field | Type | Description |
| :--------------------------- | ------- | ------------------------------------------------------------------------- |
| `"rateId"` | string | Identifier of the rate (optional) |
| `"daysBeforeArrival"` | integer | Number of days before arrival for which this cancellation policy is valid |
| `"cancellationFeeInPercent"` | number | Booking percentage which is non-refundable |
✅ If you provide `rateId` → only affect that rate’s cancellation conditions.\
✅ If you omit it → affect the default/main one.
---
# Terms and conditions
Source: https://developer.holidu.com/docs/terms-and-conditions
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
## Make it official
> **Info: Terms and conditions basics**
>
> * T\&Cs are configured per apartment
> * If you have the same terms and conditions for each apartment and in each country, they can be configured on your account level.
> * To update the t\&cs, you need to push the entire object, partially updates are not possible.
## How to use terms and conditions
* You can push different terms and conditions for each country for which a Holidu domain exists, but you can also push multiple countries in a single T\&C object.
* If no countries is pushed then the url is not applied to any country.
### The T\&C object
| Parameter | Type | Required | Usage |
| :------------ | :--------------- | :------- | -------------------------------------------------------------------------- |
| `"countries"` | array of strings | | Select a country or multiple countries for which the URL should be applied |
| `"url"` | string | YES | URL of the terms and conditions |
### List of all supported countries
| countries | Usage |
| :-------- | :---------------------- |
| `"DE"` | Germany |
| `"ES"` | Spain |
| `"IT"` | Italy |
| `"NL"` | Netherlands |
| `"FR"` | France |
| `"GB"` | Great Britain |
| `"DK"` | Denmark |
| `"AT"` | Austria |
| `"CH"` | Switzerland |
| `"BE"` | Belgium |
| `"NO"` | Norway |
| `"PL"` | Poland |
| `"SE"` | Sweden |
| `"PT"` | Portugal |
| `"CA"` | Canada |
| `"AU"` | Australia |
| `"IE"` | Ireland |
| `"BR"` | Brasil |
| `"NZ"` | New Zealand |
| `"US"` | United State of America |
| `"MX"` | Mexico |
## Examples
### Different T\&Cs for different domains
Every country and the corresponding URL for the terms and conditions can be pushed as individual objects.
```json
[
{
"countries": [
"DE"
],
"url": "https://www.abc.org/xxx"
},
{
"countries": [
"ES"
],
"url": "https://www.abc.org/xyz"
}
]
```
### Same T\&C for multiple or all domains
Multiple or all countries that have the same T\&C are added in the countries array and are pushed in one object with one URL.
```json
[
{
"countries": [
"DE",
"ES",
"IT",
"FR"
],
"url": "https://www.abc.org/xxx"
},
{
"countries": [
"GB",
"DK"
],
"url": "https://www.abc.org/xyz"
}
]
```
---
# Apartment activation & deactivation
Source: https://developer.holidu.com/docs/apartment-activation
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
## Keep the control
Apartments are inactive when they are created. Once you provided all data for an apartment, the apartment needs to be activated through activation endpoint to be visible on Holidu.
If an apartment is no longer available to be booked on your side, your are responsible for deactivating these apartments through the deactivation endpoint. Not deactivated apartments are a main reason for failed availability request, leading to a bad user experience and therefor to a bad rating of your overall connection on Holidu.
If an apartment is blocked because the calendar is closed, please deactivate the apartment and not just remove all availabilities for this apartment. Removing all availabilities will also make the apartment not bookable anymore, but it is considered an error on Holidu and may hide real problems there may be with one of your apartments.
> **Danger: Inactive apartments will no longer be deleted**
>
> In the past, Holidu deleted apartments automatically for which we did not receive any update in the last 14 days. With the new api, the deactivation responsibility lies completely on the integrator, Holidu will not automaticly deactivate aparments.
---
# Booking object
Source: https://developer.holidu.com/docs/booking-object
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
Bookings made on Holidu are sent via the booking notification to your system, and all the invoices and services on Holidu are based on the copy of the booking stored in our system.
It is the responsibility of the integrator to keep the bookings in sync between their and Holidu's system.
### Best practices for the booking updates:
* Changes should be pushed immediately, don't rely on weekly cronjobs.
* Monitor the response codes and let us know if you face any issues.
> **Tip: No need in case you use Holidu Payments**
>
> In case Holidu handles the payments for you, there is no need to sync your bookings backwards to Holidu. All changes will happen on Holidu and you will be informed via notifications.
---
# Update bookings
Source: https://developer.holidu.com/docs/update-bookings
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
## Keep us informed
> **Info: Bookings basics**
>
> * You can change the dates, the number of guests and the prices of an existing booking. A booking cannot be moved to another apartment.
> * The update is synchronous: the response is Holidu's copy of the booking after the update, so compare it with what you sent. An update in a currency other than the booking's original currency is ignored and still returns 200 with the unchanged booking.
> * You only need to push an update if the booking gets changed on your side
> * If you use Holiday Payments, you do not need this endpoint, since the guest will directly approach Holidu Customer Happiness Team, which will then update you on the booking status.
Sometimes plans of travellers change: they might want to bring an extra guest or change the travel dates. A booking cannot be moved to another apartment: `providerApartmentId` must be the apartment the booking was made on, otherwise the call returns 400 `Requested apartmentId does not match booking's apartmentId`.
In order for Holidu to send you the correct invoice, you are asked to push us updates for those changes immediately with the query param in the endpoint being the id of the booking in your system, so we can update the according booking on our side.
| Parameter | Type | Required | Usage |
| :----------------------- | :----- | :------- | ------------------------------------------------------------------------------------------------- |
| providerApartmentId | string | Yes | the id of the apartment in your system. Same as the id you pushed throught the apartment endpoint |
| arrival | date | Yes | The arrival day of the traveller |
| departure | date | Yes | The departure date of the traveller |
| bareRentalPrice | Object | Yes | The cost object on which Holidu receives commission |
| bareRentalPrice.amount | number | Yes | The amount on which Holidu receives commission |
| bareRentalPrice.currency | string | Yes | The currency of the amount |
| numberOfGuests | int32 | | The number of guest present in the booking |
### Example
```json title="BookingUpdate"
{
"providerApartmentId": "123456",
"arrival": "2020-10-20",
"departure": "2020-10-30",
"bareRentalPrice": {
"amount": 100,
"currency": "EUR"
},
"numberOfGuests": 2
}
```
> **Info: Only update booking for relevant changes**
>
> You only need to push updates to Holidu if some of the for Holidu relevant fields change and not if the traveller wants to e.g. bring an additional pet or book another optional extra.
---
# Cancel bookings
Source: https://developer.holidu.com/docs/cancel-bookings
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
## This is sad - but it happens
> **Info: Cancellation basics**
>
> * This is the endpoint where you can report cancellation that happend on your side to us.
> * Please always provide a reason for the cancellation.
> * The endpoint is syncronous, so we will confirm the successful cancellation.
> * If you use **HoliduPayments**, you do not need this endpoint, since the guest will directly approach Holidu Customer Happiness Team, which will then update you on the booking status.
The best option is to cancel the booking as soon as you are informed about the cancellation on your side. This way the systems are always in sync and the customer does not get different information. It also ensures **you do not get invoices for already canceled bookings**. Holidu will invoice you based on the data present in the Holidu system.
To cancel a booking, you just need to call the endpoint with the following parameters
| Parameter | Required | Type | Usage |
| :--- | :--- | :--- | --- |
| `provider` | Yes | String | A unique identifier for every provider on our side |
| `providerBookingId` | Yes | String | Either this id or`holiduBookingId` |
| `holiduBookingId` | Yes | Int64 | Either this id or`providerBookingId` |
| `cancellationFee` | Yes | Number | The fee the customer needs to pay for this booking (absolute amount that is calculated, it will be x% of original booking amount) |
| `reason` | Yes | String | The reason for canceling this booking **• Please check the below list.** |
### Cancellattion reasons:
| Cancellation reason | Description |
| :------------------------------------------- | :------------------------------------------------------------------------------------ |
| PROVIDER\_NO\_PAYMENT | You had to cancel since the customer didn't pay during the contractual timeframe |
| PROVIDER\_OVERBOOKED | You had to cancel since the property was already booked out |
| CUSTOMER\_WRONG\_PRICE | The customer wanted to cancel because the price shown on **Holidu** was wrong |
| CUSTOMER\_WRONG\_FACILITIES | The customer wanted to cancel because the facilities were wrongly shown on **Holidu** |
| CUSTOMER\_UNKNOWN\_REASON | The customer wanted to cancel for an unknown reason |
| CUSTOMER\_REBOOKING | The customer wanted to cancel because they will rebook again or already rebooked |
| CUSTOMER\_PERSONAL | The customer wanted to cancel for a personal reason |
| CUSTOMER\_ALTERNATIVE\_HOLIDU\_PRICE | The customer wanted to cancel due to finding an alternative price on **Holidu** |
| CUSTOMER\_ALTERNATIVE\_HOLIDU\_LOCATION | The customer wanted to cancel due to finding an alternative location on **Holidu** |
| CUSTOMER\_ALTERNATIVE\_HOLIDU\_OTHER | The customer wanted to cancel due to finding an alternative property on **Holidu** |
| CUSTOMER\_ALTERNATIVE\_ELSEWHERE\_PRICE | The customer wanted to cancel due to finding an alternative price somewhere else |
| CUSTOMER\_ALTERNATIVE\_ELSEWHERE\_LOCATION | The customer wanted to cancel due to finding an alternative location somewhere else |
| CUSTOMER\_ALTERNATIVE\_ELSEWHERE\_OTHER | The customer wanted to cancel due to finding an alternative property somewhere else |
| CUSTOMER\_TRAVEL\_RESTRICTIONS\_VISA | The customer wanted to cancel due to visa restrictions |
| CUSTOMER\_TRAVEL\_RESTRICTIONS\_COVID | The customer wanted to cancel due to COVID travel resrestrictions |
| CUSTOMER\_TRAVEL\_RESTRICTIONS\_OTHER | The customer wanted to cancel due to different restrictions |
| CUSTOMER\_PROVIDER\_REQUEST\_BOOK\_ELSEWHERE | The provider asked the customer to book directly with them |
| CUSTOMER\_PROVIDER\_REQUEST\_AVAILABILITY | The provider indicated a lack of availability |
| CUSTOMER\_PROVIDER\_REQUEST\_OTHER | The provider requested to cancel due to a different reason |
| CUSTOMER\_PROPERTY\_QUALITY | The customer wanted to cancel due to the property quality |
| CUSTOMER\_OTHER | The customer didn't state the reason behind the cancellation |
| HOLIDU\_TEST\_BOOKING | **Holidu** test booking |
---
# Get booking details
Source: https://developer.holidu.com/docs/get-bookings
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
## How you get your details
> **Info: Get bookings basics**
>
> * This endpoint is a GET endpoint
> * It is useful to GET all details of a Holidu booking
> * The response is what we share via API for every Holidu booking
To get a bookings details, you just need to call the endpoint with the following parameters
| Parameter | Required | Type | Usage |
| :------------------ | :------- | :----- | -------------------------------------------------- |
| `provider` | Yes | String | A unique identifier for every provider on our side |
| `providerBookingId` | Yes | String | Either the booking id or`holiduBookingId` |
| `holiduBookingId` | Yes | Int64 | Either the Holidu booking id or`providerBookingId` |
### Example of a response body
```json title="Booking details"
{
"providerApartmentId": "string",
"arrival": "2022-09-01",
"departure": "2022-09-01",
"guests": [
{
"age": 0
}
],
"customer": {
"firstName": "string",
"lastName": "string",
"email": "string",
"gender": "MALE",
"zip": "string",
"city": "string",
"street": "string",
"country": "DE",
"phone": "string",
"language": "string"
},
"specialCustomerRequest": "string",
"guestReceipt": {
"costs": [
{
"id": "string",
"name": "string",
"basisOfCalculation": "string",
"paymentTime": "string",
"type": "string",
"pricePerUnit": {
"amount": 0,
"currency": "string"
},
"unitsSelected": 0,
"totalPrice": {
"amount": 0,
"currency": "string"
}
}
],
"discount": {
"name": "string",
"percentage": 0,
"amount": {
"amount": 0,
"currency": "string"
}
},
"bareRentalPrice": {
"amount": 0,
"currency": "string"
}
},
"paymentProcessing": {
"paymentWithBooking": {
"paymentPlanUuid": "string",
"paymentHandler": "string",
"paymentMethod": "string",
"paymentTotalWithBooking": {
"amount": 0,
"currency": "string"
},
"paymentRates": [
{
"dueDate": "2022-09-01T08:43:02.189Z",
"value": {
"amount": 0,
"currency": "string"
}
}
]
},
"paymentOnsite": [
{
"amount": 0,
"currency": "string"
}
]
},
"cancellationFees": [
{
"validUntil": "2022-09-01T08:43:02.189Z",
"feeInPercentage": 0
}
],
"metaData": {
"bookedAt": "2022-09-01T08:43:02.189Z",
"createdAt": "2022-09-01T08:43:02.189Z",
"updatedAt": "2022-09-01T08:43:02.189Z",
"status": "PENDING",
"cancelledAt": "2022-09-01T08:43:02.189Z",
"holiduBookingId": 0,
"commission": {
"percentage": 0,
"commissionToHolidu": {
"amount": 0,
"currency": "string"
}
}
}
}
```
---
# Endpoints on your side
Source: https://developer.holidu.com/docs/what-is-onsite-booking
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
The data you push to our API endpoints is static and is processed asynchronously, so updates can lag behind your system before they are reflected on Holidu. To prevent double bookings or a bad user experience, Holidu therefore needs to perform real-time requests to your system before placing bookings.
It is crucial that those endpoints always respond with the correct information in a timely manner. The SLAs and expected behavior you can find in the description of the corresponding request types.
## Currently, Holidu requires:
## Real-time availability request
Once a customer decided on a property, we are checking in this request if the property is still available based on arrival and departure date.
## Booking notification request
If the customer wants to book the property, we are collecting all required information and sending everything in a booking notification to place the booking in your system. We require a confirmation to also confirm the booking to the customer.
## Cancellation notification (for Holidu-Payments & Partner-Payments integrations)
When a customer cancels a booking through their personal page in Holidu, we notify you of the cancellation and the cancellation fee that you can charge to the guest.
---
# Real time availability request
Source: https://developer.holidu.com/docs/real-time-availability-request
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
## Availability Request
This is a **GET** request that we will send to know whether the property is available or not. It contains the following parameters:
| Field | Type | Content |
| :-------------------- | :---------------------- | :----------------------------------- |
| `providerApartmentId` | String | Apartment ID in your system |
| `arrival` | LocalDate: `YYYY-MM-DD` | Date the customer wants to check-in |
| `departure` | LocalDate: `YYYY-MM-DD` | Date the customer wants to check-out |
| `provider` | String | An identifier in our system |
| `persons` | Integer | Amount of persons |
You can provide any endpoint URL you like. The parameters will always be added in the following way.
### Example:
[\[https://your-endpoint-url.com/availability-request?providerApartmentId=123abc\&arrival=2020-12-23\&departure=2020-12-30\&persons=123\&provider=XYZ](https://your-endpoint-url.com/availability-request?providerApartmentId=123abc\&arrival=2020-12-23\&departure=2020-12-30\&persons=123\&provider=XYZ)](https://your-endpoint-url.com/availability-request?providerApartmentId=123abc\&arrival=2020-12-23\&departure=2020-12-30\&persons=123\&provider=XYZ)
In this example, [https://your-endpoint-url.com/availability-request](https://your-endpoint-url.com/availability-request) ← this will be the configurable part of the URL that you can provide us with.
The rest of the URL [?providerApartmentId=123abc\&arrival=2020-12-23\&departure=2020-12-30\&persons=123\&provider=XYZ](?apartmentId=123abc\&arrival=2020-12-23\&departure=2020-12-30\&persons=123\&provider=XYZ) will always have this fixed format.
## AvailabilityResponse
You should respond to the AvailabilityRequest with the following HTTP status codes:
| HTTP status code | Meaning | Impact |
| :--------------- | :------------------------------------------------------------------ | :--------------------------------------------------------------------------------------- |
| 200 | OK, apartment available for those dates | The apartment is shown as available |
| 404 | Not found, the apartment requested does not exist or is deactivated | The property will be immediately deactivated on Holidu |
| 409 | Conflict, the apartment is not available | The apartment is shown as not available |
| 5xx | Server error | If this error happens often in a row, we will pause your connection until it is resolved |
> **Danger: Please make sure to use the right status codes**
>
> Please make sure to only respond with a status code of **200** if the apartment is available. Independent on any error message it will be shown as available.
>
> Please make sure to keep the response time ideally under 2s in order to prevent timeouts.
> **Tip**
>
> For security measures we recommend you to whitelist our IPs so that we can only do requests to you from the following IPs:
>
> * 54.77.51.111
> * 34.249.124.33
> * 212.114.208.106
> * 99.80.89.251
> * 34.242.187.158
> * 34.250.93.237
---
# Real time booking request
Source: https://developer.holidu.com/docs/booking-notification-body
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
## Hurray, you got a booking!
**In the booking notification, you will find the following parameters:**
* Required fields will always be present.
* Optional fields will only be included if applicable to the specific booking.
> **Danger**
>
> For partners who are migrating from HAPI V1, we've removed the `bookingId` field. This is because, from our perspective, a true booking isn't generated until we receive successful confirmation to our booking notification request.
| Parameter | Type | Required | Usage |
| :--- | :--- | --- | --- |
| `providerApartmentId` | String | Yes | The id of the apartment in your system |
| `provider` | String | Yes | The provider identifier at Holidu |
| `arrival` | LocalDate: `YYYY-MM-DD` | Yes | The arrival date of the guests |
| `departure` | LocalDate: `YYYY-MM-DD` | Yes | The departure date of the guests |
| `guests` | Array of objects | Yes | List of guests' ages |
| `guest.age` | Integer | Yes | Age of the guest |
| `customer` | Object | Yes | Guest's personal information |
| `customer.gender` | String | Yes | Gender |
| `customer.firstName` | String | Yes | First name |
| `customer.lastName` | String | Yes | Last name |
| `customer.street` | String | Yes | Street name |
| `customer.zip` | String | Yes | ZIP code |
| `customer.city ` | String | Yes | City of the guest |
| `customer.country` | String | Yes | Country of the guest |
| `customer.language` | String | Yes | The language that the guest speaks |
| `customer.phone` | String | Yes | Phone number of the guest |
| `customer.email` | String | Yes | Email address of the guest |
| `specialCustomerRequest` | String | | The special requests of the guest during the booking |
| `guestReceipt` | Object | Yes | Breakdown of all the amounts paid or to be paid by the guest |
| `guestReceipt.bareRentalPrice` | Object | Yes | Price based on _LOS_ or _rates_ without extra costs |
| `guestReceipt.bareRentalPrice.amount` | Number | Yes | Price of the property |
| `guestReceipt.bareRentalPrice.currency` | String | Yes | Currency used |
| `guestReceipt.discounts` | object | Yes | Discount object as defined through the discount endpoint |
| `guestReceipt.discounts.discountId` | Integer | | Discount id in Holidu system |
| `guestReceipt.discounts.providerDiscountId` | String | | Your own discount ID for reconciliation |
| `guestReceipt.discounts.name` | String | | Name of the used discount |
| ~~`guestReceipt.discounts.discountPercent`~~ | ~~Number~~ | | ~~Percentage of the discount~~ |
| `guestReceipt.discounts.amount` | object | | The amount discounted calculated based on the base price of the property |
| `guestReceipt.discounts.amount.amount` | Number | | Amount |
| `guestReceipt.discounts.amount.currency` | String | | Currency |
| `guestReceipt.costs` | array of objects | Yes | Objects that were pushed in the extra cost endpoint and applied to the booking |
| `guestReceipt.costs.id` | String | | Unique id for every extra cost on your system, same as you pushed |
| `guestReceipt.costs.name` | String | | Name of the extra cost ( _from Holidu's list_ ) |
| `guestReceipt.costs.basisOfCalculation` | String | | Defining how the extra cost is calculated |
| `guestReceipt.costs.paymentTime` | String | | Payment time of the extra cost |
| `guestReceipt.costs.pricePerUnit` | Object | | The price of one unit |
| `guestReceipt.costs.type` | String | | Defining if the extra cost is `MANDATORY`, `SELECTABLE` or `ON_USAGE`as explained in the extra costs API |
| `guestReceipt.costs.pricePerUnit.amount` | Number | | Amount |
| `guestReceipt.costs.pricePerUnit.currency` | String | | Currency |
| `guestReceipt.costs.unitsSelected` | Integer | | Number of units selected |
| `guestReceipt.costs.totalPrice` | Object | | The total price of all the units selected |
| `guestReceipt.costs.totalPrice.amount` | Number | | Amount |
| `guestReceipt.costs.totalPrice.currency` | String | | Currency |
| `guestReceipt.deposits` | Array | Yes | |
| `guestReceipt.deposits.name` | String | | REFUNDABLE_SECURITY_DEPOSIT |
| `guestReceipt.deposits.price` | Object | | |
| `guestReceipt.deposits.price.amount` | Number | | Cost of deposit |
| `guestReceipt.deposits.price.currency` | String | | Currency |
| `guestReceipt.deposits.paymentTime` | String | | ONSITE |
| `paymentProcessing` | Object | Yes | JSON object describing payment handling/processing |
| `paymentProcessing.paymentWithBooking` | Object | Yes | JSON object describing payment handling of costs with the booking |
| `paymentProcessing.paymentWithBooking. paymentHandler` | String | Yes | The entity which is handling the payment. `HOLIDU` or `PARTNER` |
| `paymentProcessing.paymentWithBooking. paymentMethod` | String | Yes | Payment method used |
| `paymentProcessing.paymentWithBooking. creditCardData` | Object | | Only present in case of PCI integration with Holidu |
| `paymentProcessing.paymentWithBooking. paymentTotalWithBooking` | Object | Yes | JSON object describing the total amount which needs to be paid |
| `paymentProcessing.paymentWithBooking. paymentTotalWithBooking.amount` | Number | Yes | The total cost of the booking |
| `paymentProcessing.paymentWithBooking. paymentTotalWithBooking.currency` | String | Yes | The currency used |
| `paymentProcessing.paymentWithBooking. paymentRates` | Array | Yes | JSON array describing the payment setup of the booking |
| `paymentProcessing.paymentWithBooking. paymentRates.value` | Object | Yes | JSON object describing the amounts |
| `paymentProcessing.paymentWithBooking. paymentRates.value.amount` | Number | Yes | The amount which needs to be paid |
| `paymentProcessing.paymentWithBooking. paymentRates.value.currency` | String | Yes | The currency used |
| `paymentProcessing.paymentWithBooking. paymentRates.dueDate` | LocalDate: `YYYY-MM-DD` | Yes | The due date of the payment described above |
| `paymentProcessing.paymentOnsite` | Array of objects | Yes | |
| `paymentProcessing.paymentOnsite. paymentOnsite.amount` | Number | | Total amount which needs to be paid on site |
| `paymentProcessing.paymentOnsite. paymentOnsite.currency` | String | | The currency |
| `rateId` | String | Yes | The name of the rate selected |
```json title="Example Booking Notification"
{
"providerApartmentId": "externalApartmentID",
"provider:":"XXX",
"arrival": "2022-04-29",
"departure": "2022-05-04",
"guests": [
{
"age": 25
},
{
"age": 25
},
{
"age": 25
},
{
"age": 12
},
{
"age": 8
}
],
"customer": {
"gender": "MALE",
"firstName": "First Name",
"lastName": "Last Name",
"street": "Street and number",
"zip": "Zip code",
"city": "City",
"country": "Iso country code",
"language": "Language of the customer",
"phone": "phone number of customer",
"email": "email of customer"
},
"specialCustomerRequest": "special request of the guest during booking",
"guestReceipt": {
"bareRentalPrice": {
"amount": 705.88,
"currency": "EUR"
},
"discounts": {
"name": "LAST_MINUTE",
"amount": {
"discountId": 123456,
"providerDiscountId": "MyDiscountId",
"amount": 70.51,
"currency": "EUR"
}
},
"costs": [
{
"id": "46323572_781803181",
"name": "CLEANING",
"basisOfCalculation": "PER_STAY",
"paymentTime": "WITH_RATES",
"type": "MANDATORY",
"pricePerUnit": {
"amount": 60.00,
"currency": "EUR"
},
"unitsSelected": 1,
"totalPrice": {
"amount": 60.00,
"currency": "EUR"
}
},
{
"id": "46323572_781803181",
"name": "PET",
"basisOfCalculation": "PER_PET",
"paymentTime": "WITH_RATES",
"type": "SELECTABLE",
"pricePerUnit": {
"amount": 20.00,
"currency": "EUR"
},
"unitsSelected": 2,
"totalPrice": {
"amount": 40.00,
"currency": "EUR"
}
},
{
"id": "46323572_781803181",
"name": "BEDLINEN",
"basisOfCalculation": "PER_UNIT",
"paymentTime": "ONSITE",
"type": "ON_USAGE",
"pricePerUnit": {
"amount": 10.00,
"currency": "EUR"
},
"unitsSelected": null,
"totalPrice": {
"amount": 0.00,
"currency": "EUR"
}
},
{
"id": "46323572_781803181",
"name": "PARKING",
"basisOfCalculation": "PER_STAY",
"paymentTime": "ONSITE",
"type": "SELECTABLE",
"pricePerUnit": {
"amount": 50.00,
"currency": "DKK"
},
"unitsSelected": 1,
"totalPrice": {
"amount": 50.00,
"currency": "DKK"
}
},
{
"id": "243234234",
"name": "TOURIST_OR_CITY_TAX",
"basisOfCalculation": "PER_STAY",
"paymentTime": "WITH_RATES",
"type": "MANDATORY",
"pricePerUnit": {
"amount": 50.00,
"currency": "EUR"
},
"unitsSelected": 1,
"totalPrice": {
"amount": 50.00,
"currency": "EUR"
}
}
],
"deposits":[
{
"name":"REFUNDABLE_SECURITY_DEPOSIT",
"price":{
"amount":700.00,
"currency":"EUR"},
"paymentTime":"ONSITE"
}
]
},
"paymentProcessing": {
"paymentWithBooking": {
"paymentHandler": "PARTNER", // HOLIDU
"paymentMethod": "CREDIT_CARD",
"creditCardData": { // only present in booking notification with PCI
},
"paymentTotalWithBooking": {
"amount": 785.37,
"currency": "EUR"
},
"paymentRates": [
{
"value": {
"amount": 628.30,
"currency": "EUR"
},
"dueDate": "2022-01-31"
},
{
"value": {
"amount": 157.07,
"currency": "EUR"
},
"dueDate": "2022-03-25"
}
]
},
"paymentOnsite": [
{
"amount": 50.00,
"currency": "DKK"
}
]
},
"rateId": "name of the rate select"
}
```
---
# Receiving a booking
Source: https://developer.holidu.com/docs/booking-notification
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
## All you need to know
In case a customer chooses to book one of your apartments on Holidu, Holidu will send a booking notification to your defined endpoint.
The booking notification is a **JSON** objects in **POST** request which contains multiple information like booking arrival/departure dates, guest receipt, payment processing, etc..., so all data that you provided through the API to Holidu and which is relevant for you to process the booking.
**To ensure a good user experience, there are certain requirements**.
* The timeout for the whole booking flow is 30s. Every booking that takes longer than this time will be considered as declined and shown as such also to the customer.
* Every successful booking needs to contain a transactionId to identify the booking in your system, responses without transactionIds are considered as declined.
* Declined bookings need to have a clear reason why it was declined. The ratio of declined bookings should stay always below 1%.
## Successful booking
```json title="Example for a successful booking response:"
{
"transactionId": "987654321",
"status": "CONFIRMED",
"paymentUrl" : "https://PAYMENT_LINK.com" //OPTIONAL, ONLY CERTAIN CASES
}
```
## Unsuccessful Bookings:
A booking might fail due to various reasons, like apartment unavailability, difference in price from what you expect, or a payment issue. The response should have the correct **HTTP Status** and include in the body an error message, error description, and the status **FAILED**.
```json title="Example for a failed booking response:"
{
"errorMessage": "Please use one of the error messages from Holidu",
"errorDescription": "Please describe the error details",
"status": "FAILED"
}
```
### For more descriptive error handling, please follow the below guidelines:
| httpStatusCode | errorMessage | errorDescription | Result |
| :------------- | :----------------------------- | :-------------------------------------------------------------------------- | ------------------------------------------------------------------ |
| 400 | BAD\_REQUEST | e.g. param is missing/ malformed schema | If this happens too often in a row, your connection will be paused |
| 400 | ACCESS\_DENIED | e.g. username/password comination not correct, IP not whitelisted | |
| 400 | PRICE\_MISMATCH | e.g. expected 350€, price only 300€ | |
| 400 | PAYMENT\_REJECTED | e.g. credit card refused | - |
| 400 | APARTMENT\_NOT\_AVAILABLE | e.g. check-in not allowed on this day, checkout not allowed, | - |
| 400 | APARTMENT\_NOT\_ACTIVE | e.g. apartment does not exist, apartment no longer published on Holidu, ... | The apartment will be deactivated immediately on Holidu |
| 400 | EXTRA\_SERVICE\_NOT\_AVAILABLE | e.g. extra service pets not available, .... | - |
| 5xx | INTERNAL\_ERROR | - | If this happens too often in a row, your connection will be paused |
* In case of price mismatch, kindly include the expected price in the `errorDescription`.
* For payment issues, you can always send us the error message you are receiving from different entities.
* All reasons not stated above will be treated as an **API outage** from your end and we may deactivate your connection until further checks.
* Please make sure to keep the response time ideally under 2s in order to prevent timeouts.
***
## Requirements for guests communication:
After a successful booking, It's mandatory to send an email to the guest within **two hours** which includes all the booking info, payment schedule, and any further notes.
Depending on the payment integration you have with Holidu, you may need to send out further payment instructions. In any case, you are fully responsible for the check-in communication.
***
> **Danger: Caution**
>
> * Our partners should always have an acceptable error rate and we will always work on enahncing the success rate with you.
> * For security meseaures, kindly make sure to whitelist all our IPs to avoid any server errors, in case you are using our **PCI payment method**, kindly check this link [here](https://docs.pci-proxy.com/resources/ip-whitelisting#ipv4) for our PCI partner IPs.
>
> **List of our IPs**:
> ∙54.77.51.111
> ∙34.249.124.33
> ∙212.114.208.106
> ∙99.80.89.251
> ∙34.242.187.158
> ∙34.250.93.237
> * In case you want to use **Basic Access Authentication** instead of **IPs Whitelisting**, kindly refer to your technical account manager and you will be guided throughout the whole process.
> **Tip: Versioning & Adabtability:**
>
> ALWAYS try to build your system **independent** on the order of the fields. Holidu may change the order at any point in time without any notification.
>
> Be agnostic for unknown fields, so we always improve the booking notification request by adding additional data at any point without any prior notification.
---
# Credit Card Payment Through PCI
Source: https://developer.holidu.com/docs/credit-card-payment-through-pci
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
## Make the payment easier
> **Info: Requirements**
>
> In order to receive the credit card informations from customers you need to prove that your endpoint is PCI compliant. Only if you send us an AOC (Attestation of compliance) and either a letter of Acknowledgment or an extract of the terms and conditions which proves the PCI DSS compliance of your endpoint, we can add you as receiver as soon as the certifcation proccess is done.
## Booking notification with Credit Card information
The booking notification with the credit card information is similar to the booking notification explained [here](https://developer.holidu.com/docs/booking-notification-body.md), it just holds the additional `creditCardData` object.
| Parameter | Type | Required | Usage |
| :---------------------------- | :----- | :------- | ---------------- |
| credtiCardData | Object | Yes | |
| creditCardData.ccNumber | String | Yes | |
| creditCardData.cvv | String | Yes | |
| creditCardData.ccType | String | Yes | MasterCard, VISA |
| creditCardData.cardHolderName | String | Yes | |
| creditCardData.cardExpiryDate | String | Yes | MM-YYYY |
| 3DS | Object | | |
| 3DS.eci | String | | |
| 3DS.xid | String | | |
| 3DS.cavv | String | | |
| 3DS.threeDSVersion | String | | |
| 3DS.directoryResponse | String | | |
| 3DS.authenticationResponse | String | | |
```json title="Credit Card object using PCI proxy"
"creditCardData": {
"ccNumber": "4242424242424242",
"cvv": "422",
"ccType": "VISA",
"cardHolderName": "Test Card",
"cardExpiryDate": "08-2022"
}
```
### PCI Card Payments With 3Ds
As we know that some countries don't allow transacting without 3D security, we have implemented a method to have all your transactions secured with one of the latest 3Ds versions.
The customer will be redirected to their bank authentication page from **Holidu** website to finish the security checks and then redirected again to our website to show the status of the booking, everything will be handled on our end and you have to only handle the 3Ds object we will send in the booking notification request.
```json title="Credit card including 3DS"
{
"creditCardData":{
"ccNumber":"4xxxxxxxxxxxxxxxxx",
"cvv":"xxxxxxxxxxxxxx",
"ccType":"VISA",
"cardHolderName":"Test Card",
"cardExpiryDate":"xx-20xx",
"3DS":{
"eci":"xx",
"xid":"xxxxxxxxxxxxxxxxxx",
"cavv":"xxxxxxxxxxxxxxxxxx",
"threeDSVersion":"2.2.0",
"directoryResponse":"X",
"authenticationResponse":"X"
}
}
}
```
## Implementation of the PCI proxy
Holidu is PCI compliant via a partnership with **Datatrans**. From a very high level, we need to send all the booking notifications containing credit card data through a PCI proxy which adds the credit card data to the notification, before sending them over to you.
> **Danger: ️ CAUTION**
>
> **If you use IP whitelisting you need to add the following IPs to your whitelist, those are IP addresses used by our PCI proxy partner.**
>
> `193.16.220.0-255`
>
> `91.223.186.0-255`
You are still fully responsible for handling the payment with the customer and also the response to the booking needs to be the same. You need to be able to immediately give a response if the booking is either CONFIRMED or FAILED, no other status (e.g. Pending) is possible.
## Data flow

> **Warning: ️ Please note that:**
>
> You are not allowed to charge more money from the customer than written in the booking notification, since the customer books under those conditions.
>
> In case the price written in the booking notification does not match the price in your system, please reject the booking immediately.
---
# Real time booking cancellation notification
Source: https://developer.holidu.com/docs/real-time-booking-cancellation-notification
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
Receive real-time notifications when a cancellation happens through Holidu.
## Stay up-to-date on your bookings
There can be many reasons why a booking might be cancelled — from a change in travel plans to unexpected events. At Holidu, it is our responsibility to make sure that our partners are informed of booking cancellations in a timely manner.
This document covers the booking cancellation notification for both **Holidu Payment (HoPa)** and **non-Holidu Payment** partners.
***
## How It Works
### Guest Experience
1. **Guest initiates cancellation** — The guest visits their Holidu post-booking page and selects "Cancel booking"
2. **Reason selection** — Guest chooses a cancellation reason and confirms
3. **Confirmation** — Guest sees a confirmation page and receives a cancellation email
4. **Partner notification** — Holidu sends a cancellation notification to your API endpoint
***
## Before You Start
The cancellation notification is not enabled by default. As a Holidu API partner, you will need to implement a certain degree of logic on your system in order to consume the event successfully.
### Requirements
* **Dedicated endpoint** — Have an endpoint to accept booking cancellation events (and in the future, booking modification events as well)
* **Idempotency** — Ensure that your endpoint is idempotent. This guarantees that all cancellation notification requests are processed consistently and simplifies error handling
***
## Implementing Booking Cancellation Notification
### Request
**Method:** `POST`\
**Content-Type:** `application/json`
Your endpoint will receive a JSON payload with the following structure:
```json
{
"holiduBookingId": 3536882,
"providerBookingId": "test_bk-6148266",
"action": "CANCELLATION",
"cancellationFee": {
"amount": 50,
"currency": "EUR"
},
"cancellationReason": "CUSTOMER_UNKNOWN_REASON",
"paymentHandler": "HOLIDU"
}
```
### Request Fields
| Parameter | Type | Required | Description |
| -------------------------- | ------- | -------- | -------------------------------------------------------------------------- |
| `holiduBookingId` | Integer | Yes | The booking ID on the Holidu system |
| `providerBookingId` | String | Yes | The corresponding booking ID on your system |
| `action` | String | Yes | The action of the notification. Currently only `CANCELLATION` is supported |
| `cancellationFee` | Object | No | Cancellation fee details. **Only included for Holidu Payment bookings** |
| `cancellationFee.amount` | Integer | No | The cancellation fee amount |
| `cancellationFee.currency` | String | No | The cancellation fee currency (e.g., `EUR`) |
| `cancellationReason` | String | Yes | The reason for the booking cancellation |
| `paymentHandler` | String | Yes | Indicates who handles the payment: `HOLIDU` or `PARTNER` |
### Response
Holidu evaluates only the HTTP status of your response: any status below 400 counts as delivered, and the body is not read. Returning an acknowledgment body is optional:
```json
{
"status": "ACKNOWLEDGED"
}
```
**HTTP Status:** `200 OK`
| Parameter | Type | Required | Description |
| --------- | ------ | -------- | --------------------------------------------------------------------------------- |
| `status` | String | No | Confirmation that you acknowledged the request (not read by Holidu) |
***
## Holidu Payment vs Non-Holidu Payment
The cancellation notification works for both payment models, with some key differences:
| Aspect | Holidu Payment (HoPa) | Non-Holidu Payment |
| ------------------------ | -------------------------- | ----------------------- |
| `paymentHandler` value | `"HOLIDU"` | `"PARTNER"` |
| `cancellationFee` object | Included (when applicable) | Not included |
| Payment processing | Holidu handles refunds | Partner handles refunds |
### Example: Holidu Payment Request
```json
{
"holiduBookingId": 3536882,
"providerBookingId": "test_bk-6148266",
"action": "CANCELLATION",
"cancellationFee": {
"amount": 50,
"currency": "EUR"
},
"cancellationReason": "CUSTOMER_UNKNOWN_REASON",
"paymentHandler": "HOLIDU"
}
```
### Example: Non-Holidu Payment Request
```json
{
"holiduBookingId": 4930433,
"providerBookingId": "709489",
"action": "CANCELLATION",
"cancellationReason": "CUSTOMER_UNKNOWN_REASON",
"paymentHandler": "PARTNER"
}
```
***
## Testing Your Integration
You can test your endpoint using curl:
```bash
curl --location --request POST 'https://your-domain.com/booking/cancel' \
--header 'Content-Type: application/json' \
--data '{
"holiduBookingId": 4930433,
"providerBookingId": "709489",
"action": "CANCELLATION",
"cancellationReason": "CUSTOMER_UNKNOWN_REASON",
"paymentHandler": "PARTNER"
}'
```
**Expected Response:**
```
HTTP 200
{
"status": "ACKNOWLEDGED"
}
```
***
## Important Notes
> **Danger**
>
> **For Holidu Payment bookings:** The notification is initiated only after Holidu has successfully cancelled the booking. As soon as you receive the notification, mark the corresponding booking as cancelled in your system.
>
> **For non-Holidu Payment bookings:** Since payment handling remains with you, ensure you process any necessary refunds according to your cancellation policy after receiving the notification.
***
## Integration Checklist
* [ ] Implement a cancellation endpoint that accepts the request format above
* [ ] Ensure your endpoint is idempotent
* [ ] Return HTTP 200 (a `{"status": "ACKNOWLEDGED"}` body is optional)
* [ ] Process the cancellation in your system upon receiving the notification
* [ ] Provide your cancellation endpoint URL to your Holidu Technical Account Manager
---
# Real-time booking modification notification
Source: https://developer.holidu.com/docs/real-time-booking-modification-notification
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
When a booking is modified on the Holidu side, such as a change to dates, guest count, or payment schedule, Holidu can push an instant notification to your endpoint, eliminating the need to poll the [GET booking details](https://developer.holidu.com/reference/getbookingdetails.md) endpoint for updates.
This feature is available for Holidu Payments bookings only, and Holidu switches it on per provider. Holidu POSTs a payload to your endpoint; only the HTTP status of your response counts.
> **To enable this feature**, provide your modification endpoint URL to Holidu. We will configure it on our side.
***
## Request
Holidu sends an HTTP `POST` to your configured modification endpoint with the following JSON body:
| Parameter | Type | Required | Description |
| ------------------------- | ---------------------- | -------- | ---------------------------------------------------------------------------------- |
| `holiduBookingId` | Long | Yes | Holidu's internal booking ID |
| `providerBookingId` | String | Yes | Your reference for the booking (the `externalId` you returned at booking creation) |
| `action` | String | Yes | Always `"MODIFICATION"` |
| `paymentHandler` | String | Yes | Always `"HOLIDU"` |
| `checkin` | LocalDate `YYYY-MM-DD` | Yes | Updated check-in date |
| `checkout` | LocalDate `YYYY-MM-DD` | Yes | Updated check-out date |
| `adults` | Integer | Yes | Total number of adult guests |
| `children` | Integer | Yes | Total number of child guests |
| `paymentRates` | Array of objects | Yes | Updated payment schedule |
| `paymentRates[].amount` | Number | Yes | Installment amount |
| `paymentRates[].currency` | String | Yes | ISO 4217 currency code (e.g. `"EUR"`) |
| `paymentRates[].dueDate` | LocalDate `YYYY-MM-DD` | Yes | Date the installment is due |
### Example
```json
{
"holiduBookingId": 123123123,
"providerBookingId": "your-booking-ref-001",
"action": "MODIFICATION",
"paymentHandler": "HOLIDU",
"checkin": "2025-03-10",
"checkout": "2025-03-15",
"adults": 2,
"children": 1,
"paymentRates": [
{
"amount": 500,
"currency": "EUR",
"dueDate": "2025-03-01"
}
]
}
```
***
## Response
Respond with HTTP `200`. Holidu does not read the response body, so the following body is optional:
| Parameter | Type | Required | Description |
| --------- | ------ | -------- | ------------------------ |
| `status` | String | No | `"ACKNOWLEDGED"` (not read) |
### Example
```json
{
"status": "ACKNOWLEDGED"
}
```
***
## Retry and fallback behaviour
| Scenario | Behaviour |
| ----------------------------------------- | ------------------------------------------------------------------------------ |
| HTTP `5xx` or a timeout | Holidu tries up to 3 times in total, waiting 5 seconds, then 10 seconds |
| HTTP `4xx` from your endpoint | No retry. Treated as a permanent failure |
| All retries exhausted / permanent failure | Holidu falls back to sending a modification email notification |
---
# Build with AI
Source: https://developer.holidu.com/docs/build-with-ai
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
Point an AI coding assistant (Claude Code, Cursor, Codex, Copilot) at the Holidu developer hub: Markdown pages, llms.txt, the OpenAPI spec and an integration skill.
You can build your Holidu integration with an AI coding assistant. Everything on this site is also published in formats that assistants read well, so they can work from the same documentation you do.
> **Warning: Use your sandbox credentials**
>
> Develop against `https://provider-api-sandbox.holidu.com` with your **sandbox** API key. Never paste your live API key into a prompt, a chat or generated code. Calls to the live API change real listings that guests can book.
## What is available
| Resource | URL | Use it for |
| --- | --- | --- |
| Markdown version of every page | Any page URL plus `.md`, e.g. [/docs/photos.md](https://developer.holidu.com/docs/photos.md) | Reading one page without the HTML |
| Markdown by content negotiation | Any page URL with `Accept: text/markdown` | Assistants that ask for Markdown get it automatically |
| Index of all pages | [/llms.txt](https://developer.holidu.com/llms.txt) | Letting an assistant find the right page |
| All pages in one file | [/llms-full.txt](https://developer.holidu.com/llms-full.txt) | Loading the whole documentation at once |
| OpenAPI spec | [/openapi/connectivity-api.json](https://developer.holidu.com/openapi/connectivity-api.json) | Generating a typed client (see [Generating API Client Code](https://developer.holidu.com/docs/generating-api-client-code.md)) |
| Integration skill | [/.well-known/agent-skills/index.json](https://developer.holidu.com/.well-known/agent-skills/index.json) | Teaching an assistant the integration steps, the validation loop and the go-live requirements |
| API catalog | [/.well-known/api-catalog](https://developer.holidu.com/.well-known/api-catalog) | Machine-readable list of our APIs and their specs |
| MCP server | `https://developer.holidu.com/mcp` | Letting an assistant search and read these docs, look up operations and check an apartment in the sandbox |
## Give your assistant the integration skill
The skill `integrate-with-holidu-hapi-v2` is a single `SKILL.md` file in the [Agent Skills](https://agentskills.io) format. It describes the order of calls that makes an apartment bookable, how to read the validation result, and what we check before you go live. It links to the pages on this site for the details.
Assistants that support skill discovery find it through `/.well-known/agent-skills/index.json`. To add it to a project by hand, for example for Claude Code:
```bash
mkdir -p .claude/skills/integrate-with-holidu-hapi-v2
curl -sSf -o .claude/skills/integrate-with-holidu-hapi-v2/SKILL.md \
https://developer.holidu.com/.well-known/agent-skills/integrate-with-holidu-hapi-v2/SKILL.md
```
Other assistants that read `SKILL.md` files work the same way; check their documentation for the skills folder.
## Connect the MCP server
Our [Model Context Protocol](https://modelcontextprotocol.io) server gives an assistant five read-only tools:
| Tool | What it does |
| --- | --- |
| `search_docs` | Searches every page of this site |
| `read_page` | Returns one page as Markdown |
| `list_operations` | Lists the API operations, by tag |
| `get_operation` | Returns one operation: parameters, request body, responses |
For Claude Code:
```bash
claude mcp add --transport http holidu-developer-hub https://developer.holidu.com/mcp
```
Other assistants take the same URL as a remote (Streamable HTTP) MCP server. The server is read-only, needs no credentials and calls no API: it answers from this site's own Markdown.
## Point your assistant at the docs
If your assistant does not support skills, start your session with a prompt like:
```text
We are integrating with the Holidu Connectivity API (HAPI v2).
Read https://developer.holidu.com/llms.txt and the OpenAPI spec at
https://developer.holidu.com/openapi/connectivity-api.json before writing code.
Use the sandbox base URL https://provider-api-sandbox.holidu.com.
```
## Check your work
After pushing an apartment to the sandbox, call [Get validation result of apartment](https://developer.holidu.com/reference/getapartmentvalidation.md). It returns the list of actions that are still missing before the apartment can be booked; the [Validation](https://developer.holidu.com/docs/validation.md) guide explains each code. Before going live, go through the [Requirements](https://developer.holidu.com/docs/certification.md) with your Technical Account Manager.
---
# Frequently asked questions
Source: https://developer.holidu.com/docs/faq
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
Questions that come up repeatedly during onboarding. Both answers below came from the
developer forum, which is being retired — they are folded in here so they survive.
## Is there an endpoint that lists all bookings?
No. `GET /v2/bookings/details` is the only read endpoint for bookings, and it needs a
`providerBookingId` or a `holiduBookingId` you already hold. There is no collection
endpoint, no date-range filter and no pagination over bookings — nothing of the shape
`GET /v2/bookings?from=…&to=…`. There is also no backfill endpoint for historical
bookings.
The real-time booking notification is how you learn about a booking: you receive it on
your own endpoint when the booking is made, and you are expected to persist the
identifiers from it. `GET /v2/bookings/details` is then a lookup for a booking you
already know about, not a way to discover bookings.
> **Info: Worth checking before you build**
>
> This API exists so a channel manager can push inventory to Holidu as a distribution
> channel. If you are building an invoicing or reporting tool that needs to read bookings
> in bulk, the Connectivity API is probably the wrong integration point — that data lives
> in the channel manager's own API. Raise it with your technical account manager before
> you start.
*From the developer forum.*
## Can I send multiple extra costs with the same name?
Yes. A single extra cost carries exactly one `seasonApplicable` range, so you cannot
express several seasons inside one entry. You model season-dependent pricing by sending
several entries that share a `name`, each with its own `id` and its own
`seasonApplicable` range. The endpoint takes a list, and uniqueness is enforced on `id`
only — never on `name`.
A tourist tax that changes partway through the season:
```json title="Two seasons, one name"
[
{
"id": "TAX_2026_AUG_OCT",
"name": "TOURIST_OR_CITY_TAX",
"basisOfCalculation": "PER_PERSON_PER_NIGHT",
"type": "MANDATORY",
"paymentTime": "ONSITE",
"price": { "type": "FIXED", "amount": 2.5, "currency": "EUR" },
"condition": {
"seasonApplicable": {
"onlyApplicableFrom": "2026-08-01",
"onlyApplicableUntil": "2026-10-09"
}
}
},
{
"id": "TAX_2026_OCT_DEC",
"name": "TOURIST_OR_CITY_TAX",
"basisOfCalculation": "PER_PERSON_PER_NIGHT",
"type": "MANDATORY",
"paymentTime": "ONSITE",
"price": { "type": "FIXED", "amount": 3.5, "currency": "EUR" },
"condition": {
"seasonApplicable": {
"onlyApplicableFrom": "2026-10-10",
"onlyApplicableUntil": "2026-12-10"
}
}
}
]
```
Two things to get right:
- **Every entry needs a distinct `id`.** Duplicate ids in one request are rejected with
`Extra costs for apartment contains duplicate ids`.
- **Keep the ranges non-overlapping.** Ending the first range on `2026-10-09` rather
than `2026-10-10` avoids a day that matches both entries.
Note that `name` is an enum (`ExtraCostName`), not free text, so a tax maps to a value
such as `TOURIST_OR_CITY_TAX` or `ECO_TAX`. Every season variant reuses that same enum
value.
*From the developer forum.*
---
# Booking Cancellation Notification
Source: https://developer.holidu.com/docs/modification-cancellation-notification
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
## Stay up-to-date on your bookings
There can be many reasons why a booking might be cancelled. From a change in travel plans to unexpected events, booking cancellations were a part of the journey. At Holidu, it is our responsibility to make sure that our partners are informed of the cancellation of a booking made in the Holidu platform in a timely manner. Therefore, we would like to introduce you to our brand-new booking cancellation notification.
By the end of this document, you will have a clear understanding of what you need to know in order to enable the booking cancellation notification.
## Before you start
The cancellation notification is not enabled by default, and it is because as a Holidu API partner, you will need to implement a certain degree of logic on your system in order to consume the event successfully.
The requirements of implementing the cancellation notification are the following:
* Have a dedicated endpoint in order to accept the booking cancellation event, and in the future, booking modification event as well.
* **Important:** Ensure that the endpoint is idempotent. By having an idempotent endpoint, we can ensure that all the cancellation notification requests we submitted are processed consistently, as well as simplifying the entire error handling mechanism.
## Implementing booking cancellation notification
In the following table, you can find the structure of the cancellation notification request:
```text title="Booking Cancellation Notification Request"
{
"holiduBookingId": 3536882,
"providerBookingId": "test_bk-6148266",
"action": "CANCELLATION",
"cancellationFee": {
"amount": 50,
"currency": "EUR"
},
"cancellationReason": "CUSTOMER_UNKNOWN_REASON",
"paymentHandler": "HOLIDU"
}
```
Where:
| Parameter | Type | Required | Usage |
| :------------------------- | :------ | -------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
| `holiduBookingId` | Integer | Yes | The booking id on the Holidu system |
| `providerBookingId` | String | Yes | The corresponding booking id on the partner system. |
| `action` | String | Yes | The action of the notification. At the moment, only `CANCELLATION` is supported. |
| `cancellationFee` | Object | | If populated, an object which describes the cancellation fee that the customer needs to bear. Only applicable for Holidu Payment booking. |
| `cancellationFee.amount` | Integer | | If populated, indicates the amount of the cancellation fee. |
| `cancellationFee.currency` | String | | If populated, indicates the currency of the cancellation fee. |
| `cancellationReason` | String | Yes | The reason of the booking being cancelled. |
| `paymentHandler` | String | Yes | Whether partner or Holidu handles the payment. Possible values are: `PARTNER`, `HOLIDU`. |
In return, we expect the partner to respond to the call with the following JSON structure:
```text title="Booking Cancellation Notification Response"
{
"status": "ACKNOWLEDGED"
}
```
Where:
| Parameter | Type | Required | Usage |
| :-------- | :----- | -------- | -------------------------------------------------------------------------------------------------------------------------- |
| `status` | String | Yes | The confirmation that partner `ACKNOWLEDGED` the request and will perform the needed operation on the partner system side. |
> **Info: Important**
>
> For Holidu Payment bookings, the notification will be initiated only after we have cancelled the booking on Holidu successfully. Therefore, it is important that as soon as the partner receives the notification, the corresponding booking is also marked as cancelled on the partner system.
>
> ***
>
> **For non-Holidu Payment bookings, there is no cancellation notification event triggered at the moment.**
>
> **In the future** it could be possible that an event initiated by a customer request for booking cancellation is pushed. (When partners would acknowledge the request, we would then expect partners to process the cancellation in a timely manner on their own systems, as the booking would not be automatically cancelled in the Holidu system yet.)
---
# Connectivity API
Source: https://developer.holidu.com/reference/connectivity-api
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Version: 2.0
- Full spec: https://developer.holidu.com/openapi/connectivity-api.json
- Base URL: https://provider-api-sandbox.holidu.com (Sandbox Environment)
- Base URL: https://provider-api.holidu.com (Holidu Production API)
- Auth: send the API key in the `api-key` header
Please read the [API Guide](https://developer.holidu.com/) that will help you for your integration to Holidu.
You'll find there the steps you'll go through, tips and frequently asked questions.
If you need any support, please contact us at partnersupport@holidu.com.
---
# Apartment
Source: https://developer.holidu.com/reference/apartment
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
## Operations
- [Deactivate apartment for provider](https://developer.holidu.com/reference/deactivateapartment.md) — `PUT /v2/apartment/deactivate`
- [Activate apartment for provider](https://developer.holidu.com/reference/activateapartment.md) — `PUT /v2/apartment/activate`
- [Get an apartment](https://developer.holidu.com/reference/getapartment.md) — `GET /v2/apartment`
- [Create or update an apartment](https://developer.holidu.com/reference/upsertapartment.md) — `POST /v2/apartment`
- [Get basic information about all apartments](https://developer.holidu.com/reference/getallapartmentinformation.md) — `GET /v2/apartments/information`
- [Get validation result of apartment](https://developer.holidu.com/reference/getapartmentvalidation.md) — `GET /v2/apartment/validation`
---
# Availability
Source: https://developer.holidu.com/reference/availability
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
## Operations
- [Get apartment availability](https://developer.holidu.com/reference/getavailability.md) — `GET /v2/availability`
- [Update apartment availability](https://developer.holidu.com/reference/updateavailability.md) — `POST /v2/availability`
---
# Booking Terms
Source: https://developer.holidu.com/reference/booking-terms
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
## Operations
- [Get terms and conditions for apartment](https://developer.holidu.com/reference/gettermsandconditions.md) — `GET /v2/apartments/terms-and-conditions`
- [Update terms and conditions for apartment](https://developer.holidu.com/reference/updatetermsandconditions.md) — `POST /v2/apartments/terms-and-conditions`
- [Get payment configuration for apartment](https://developer.holidu.com/reference/getpaymentconfiguration.md) — `GET /v2/apartments/payment-configuration`
- [Update payment configuration for apartment](https://developer.holidu.com/reference/updatepaymentconfiguration.md) — `POST /v2/apartments/payment-configuration`
- [Delete payment configuration for apartment](https://developer.holidu.com/reference/deletepaymentconfiguration.md) — `DELETE /v2/apartments/payment-configuration`
- [Get cancellation conditions for apartment](https://developer.holidu.com/reference/getcancellationpolicy.md) — `GET /v2/apartments/cancellation-policy`
- [Update cancellation conditions for apartment](https://developer.holidu.com/reference/updatecancellationconditions.md) — `POST /v2/apartments/cancellation-policy`
- [Delete cancellation policy for apartment](https://developer.holidu.com/reference/deletecancellationpolicy.md) — `DELETE /v2/apartments/cancellation-policy`
- [Get payment configuration rateIds for apartment](https://developer.holidu.com/reference/getpaymentconfigurationrateids.md) — `GET /v2/apartments/payment-configuration/rate-ids`
- [Get cancellation policy rate Ids for apartment](https://developer.holidu.com/reference/getcancellationpolicyrateids.md) — `GET /v2/apartments/cancellation-policy/rate-ids`
---
# Bookings
Source: https://developer.holidu.com/reference/bookings
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
## Operations
- [Update booking details](https://developer.holidu.com/reference/updatebooking.md) — `PUT /v2/bookings`
- [Cancel a booking](https://developer.holidu.com/reference/cancelbooking.md) — `POST /v2/bookings/cancel`
- [Get booking details](https://developer.holidu.com/reference/getbookingdetails.md) — `GET /v2/bookings/details`
---
# Descriptions
Source: https://developer.holidu.com/reference/descriptions
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
## Operations
- [Get descriptions for an apartment](https://developer.holidu.com/reference/getapartmentdescriptions.md) — `GET /v2/description`
- [Create or update descriptions for an apartment](https://developer.holidu.com/reference/upsertapartmentdescriptions.md) — `POST /v2/description`
---
# Discounts
Source: https://developer.holidu.com/reference/discounts
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
## Operations
- [Get a single discount for an apartment by discount id](https://developer.holidu.com/reference/getdiscountbyid.md) — `GET /v2/discount`
- [Create or update a single discount for an apartment](https://developer.holidu.com/reference/upsertdiscount.md) — `POST /v2/discount`
- [Get discounts for an apartment](https://developer.holidu.com/reference/getdiscounts.md) — `GET /v2/discounts`
---
# Extra Costs
Source: https://developer.holidu.com/reference/extra-costs
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
## Operations
- [Get the extra costs of an apartment](https://developer.holidu.com/reference/getextracosts.md) — `GET /v2/apartments/extracosts`
- [Update the extra costs of an apartment](https://developer.holidu.com/reference/updateextracosts.md) — `POST /v2/apartments/extracosts`
---
# Facilities
Source: https://developer.holidu.com/reference/facilities
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
## Operations
- [Get facilities for apartment](https://developer.holidu.com/reference/getfacilities.md) — `GET /v2/facilities`
- [Update facilities for an apartment](https://developer.holidu.com/reference/updatefacilities.md) — `POST /v2/facilities`
- [Get facility types](https://developer.holidu.com/reference/getfacilitytypes.md) — `GET /v2/facilities/types`
- [Get facility locations](https://developer.holidu.com/reference/getfacilitylocations.md) — `GET /v2/facilities/locations`
---
# LOS
Source: https://developer.holidu.com/reference/los
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
## Operations
- [Get LOS for an apartment](https://developer.holidu.com/reference/getlos.md) — `GET /v2/los`
- [Create or update LOS for an apartment](https://developer.holidu.com/reference/upsertlos.md) — `POST /v2/los`
- [Delete LOS for an apartment](https://developer.holidu.com/reference/deletelos.md) — `DELETE /v2/los`
- [Get LOS rate Ids for an apartment](https://developer.holidu.com/reference/getlosrateids.md) — `GET /v2/los/rate-ids`
---
# MultiUnit Facility
Source: https://developer.holidu.com/reference/multi-unit-facility
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
## Operations
- [Get facilities for a multi-unit](https://developer.holidu.com/reference/getmultiunitfacilities.md) — `GET /v2/multi-unit/facilities`
- [Update facilities for a multi-unit](https://developer.holidu.com/reference/updatemultiunitfacilities.md) — `POST /v2/multi-unit/facilities`
---
# MultiUnit Localization
Source: https://developer.holidu.com/reference/multi-unit-localization
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
## Operations
- [Get descriptions for a multi-unit](https://developer.holidu.com/reference/getmultiunitdescriptions.md) — `GET /v2/multi-unit/description`
- [Update descriptions for a multi-unit](https://developer.holidu.com/reference/updatemultiunitdescriptions.md) — `POST /v2/multi-unit/description`
---
# MultiUnit Photo
Source: https://developer.holidu.com/reference/multi-unit-photo
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
## Operations
- [Get photos for a multi-unit](https://developer.holidu.com/reference/getmultiunitphotos.md) — `GET /v2/multi-unit/photos`
- [Update photos for a multi-unit](https://developer.holidu.com/reference/updatemultiunitphotos.md) — `POST /v2/multi-unit/photos`
---
# MultiUnit
Source: https://developer.holidu.com/reference/multi-unit
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
## Operations
- [Get parent apartment in multi-unit structure](https://developer.holidu.com/reference/getmultiunit.md) — `GET /v2/multi-unit`
- [Create or update parent apartment in multi-unit structure](https://developer.holidu.com/reference/upsertmultiunit.md) — `POST /v2/multi-unit`
---
# Photos
Source: https://developer.holidu.com/reference/photos
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
## Operations
- [Get photos for an apartment](https://developer.holidu.com/reference/getphotos.md) — `GET /v2/photos`
- [Update photos for an apartment](https://developer.holidu.com/reference/updatephotos.md) — `POST /v2/photos`
---
# Rates
Source: https://developer.holidu.com/reference/rates
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
## Operations
- [Get apartment rate plans](https://developer.holidu.com/reference/getrates.md) — `GET /v2/rates`
- [Update apartment rate plans](https://developer.holidu.com/reference/setrates.md) — `POST /v2/rates`
---
# Reviews
Source: https://developer.holidu.com/reference/reviews
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
## Operations
- [Get customer reviews for apartment](https://developer.holidu.com/reference/getcustomerreviews.md) — `GET /v2/reviews`
- [Post the customer reviews of an apartment](https://developer.holidu.com/reference/updatecustomerreviews.md) — `POST /v2/reviews`
---
# Deactivate apartment for provider
Source: https://developer.holidu.com/reference/deactivateapartment
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
`PUT /v2/apartment/deactivate`
- Operation ID: `deactivateApartment`
- Tags: Apartment
- Base URL: https://provider-api-sandbox.holidu.com (Sandbox Environment)
- Base URL: https://provider-api.holidu.com (Holidu Production API)
- Auth: send the API key in the `api-key` header
- Full spec: https://developer.holidu.com/openapi/connectivity-api.json
## Parameters
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `providerApartmentId` | query | string | no | |
| `provider` | query | string | no | |
| `holiduApartmentId` | query | integer (int64) | no | |
## Responses
### 202 — Deactivate action on apartment succeeded
Body `text/plain`, schema `string`:
### 400 — Bad Request
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Bad Request"
}
```
### 401 — Authentication error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Authentication error"
}
```
### 404 — Apartment does not exist
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Apartment does not exist"
}
```
### 500 — Internal server error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Internal server error"
}
```
## Error body: `HoliduErrorResponse`
- `error` (string) — Error Text (example: `"Invalid Json: Unexpected character"`)
---
# Activate apartment for provider
Source: https://developer.holidu.com/reference/activateapartment
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
`PUT /v2/apartment/activate`
- Operation ID: `activateApartment`
- Tags: Apartment
- Base URL: https://provider-api-sandbox.holidu.com (Sandbox Environment)
- Base URL: https://provider-api.holidu.com (Holidu Production API)
- Auth: send the API key in the `api-key` header
- Full spec: https://developer.holidu.com/openapi/connectivity-api.json
## Parameters
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `providerApartmentId` | query | string | no | |
| `provider` | query | string | no | |
| `holiduApartmentId` | query | integer (int64) | no | |
## Responses
### 202 — Activate action on apartment succeeded
Body `text/plain`, schema `string`:
### 400 — Bad Request
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Bad Request"
}
```
### 401 — Authentication error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Authentication error"
}
```
### 404 — Apartment does not exist
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Apartment does not exist"
}
```
### 500 — Internal server error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Internal server error"
}
```
## Error body: `HoliduErrorResponse`
- `error` (string) — Error Text (example: `"Invalid Json: Unexpected character"`)
---
# Get an apartment
Source: https://developer.holidu.com/reference/getapartment
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
`GET /v2/apartment`
- Operation ID: `getApartment`
- Tags: Apartment
- Base URL: https://provider-api-sandbox.holidu.com (Sandbox Environment)
- Base URL: https://provider-api.holidu.com (Holidu Production API)
- Auth: send the API key in the `api-key` header
- Full spec: https://developer.holidu.com/openapi/connectivity-api.json
## Parameters
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `providerApartmentId` | query | string | no | |
| `provider` | query | string | no | |
| `holiduApartmentId` | query | integer (int64) | no | |
## Responses
### 200 — Successful retrieval of an apartment
Body `application/json`, schema `CompleteApartmentDto`:
- `providerApartmentGroupId` (string) — ID of the house where apartment is located. If several apartments are located in one house, they'll share the same providerApartmentGroupId (example: `"house-123"`)
- `lat` (number, required) — Latitude (example: `50.9293009`)
- `lng` (number, required) — Longitude (example: `5.9779776`)
- `name` (string) — Name of the apartment (example: `"Villa Munich Center"`)
- `apartmentAddress` (ApartmentAddress) — Address of the rental property
- `street` (string) — Street (min length 0; max length 128; example: `"Karlstrasse 66"`)
- `zipCode` (string) — ZIP Code (max 20 chars) (min length 0; max length 20; example: `"76133"`)
- `city` (string) — City (min length 0; max length 128; example: `"Munich"`)
- `countryCode` (string) — Country code represented in standard ISO 3166-1 ALPHA-2 format (min length 2; max length 2; example: `"DE"`)
- `contactDetails` (ContactDetails) — Contact details
- `contactName` (string) — Contact person for this apartment (example: `"John Doe"`)
- `contactPhone` (string) — Phone number of contact person (example: `"+123(4)56789"`)
- `contactEmail` (string) — Email of contact person (example: `"john@doe.com"`)
- `guestCapacityRules` (GuestCapacityRules, required) — Guest capacity rules applicable to apartment
- `standardCapacity` (integer (int32), required) — The standard capacity of guests allowed. This includes a minimum of 1 adult and excludes babies. (min 1; example: `1`)
- `adultsOnly` (boolean) — Does apartment permit only adults (example: `false`)
- `additionalChildren` (integer (int32)) — Number of children allowed on top of standardCapacity. (min 0; example: `0`)
- `maxBabies` (integer (int32)) — Maximum number of babies allowed. (min 0; example: `2`)
- `numberOfBedrooms` (integer (int32)) (min 1; max 30; example: `2`)
- `numberOfLivingrooms` (integer (int32)) (min 1; max 30; example: `1`)
- `numberOfBathrooms` (integer (int32)) (min 1; max 30; example: `2`)
- `sizeInSqm` (number) — Size of apartment in square meters (example: `100`)
- `apartmentType` (string, required) — Type of the apartment (one of: `ALLOTMENT_GARDEN`, `APARTMENT`, `APARTMENT_HOTEL`, `BARN`, `BEACH_HUT`, `BED_AND_BREAKFAST`, `BOAT`, `BUNGALOW`, `CAMPER`, `CAMPING`, `CARAVAN`, `CASTLE`, `CAVE`, `CHACARA`, `CHALET`, `COTTAGE`, `COUNTRY_HOUSE`, `FARM`, `FARMHOUSE`, `FINCA`, `FISHING_HOUSE`, `GITE`, `GLAMPING`, `GUEST_HOUSE`, `GUEST_ROOM`, `HOLIDAY_VILLAGE`, `HOMESTAY`, `HOSTEL`, `HOTEL`, `HOUSE_BOAT`, `HUT`, `LIGHTHOUSE`, `LODGE`, `LOG_CABIN`, `LUXURY_TENT`, `MANOR`, `MILL`, `MOBILE_HOME`, `MOUNTAIN_HUT`, `PENSION`, `PENTHOUSE`, `RESIDENCE`, `RESORT`, `RIAD`, `ROOM`, `ROOM_BREAKFAST`, `STUDIO`, `TENT`, `TINY_HOME`, `TIPI`, `TOWER`, `TREE_HOUSE`, `TRULLO`, `VACATION_APARTMENT`, `VACATION_HOME`, `VILLA`, `YACHT`, `YURT`; example: `"VILLA"`)
- `checkInCheckOutTimes` (CheckInCheckOutTimes) — Check-ins and check-outs details
- `checkIn` (array of CheckInDuration, required) — List of possible check in times
- `checkInFrom` (string (time), required) — Check in from (24h format) (example: `"12:00"`)
- `checkInTo` (string (time), required) — Check in to (24h format) (example: `"21:00"`)
- `checkOutUntil` (string, required) — Check out time (24h format) (example: `"14:30"`)
- `floor` (integer (int32)) — The floor on which the property is located, starting with 0 for the ground floor (example: `0`)
- `sizeOfPlot` (number) — Total area includes the whole area of the property accessible to the guest. This includes the garden, terraces or garages (example: `140.5`)
- `buildYear` (integer (int32)) — Build year of the property (example: `2001`)
- `modernizedYear` (integer (int32)) — Year of renovation (example: `2007`)
- `license` (string) — License number of the property (the license number is required for properties in the Balearic area in Spain) (example: `"1231882"`)
- `regulatoryInformation` (map of string (regulatoryIdentifier) → string) — Registration numbers the property must display, keyed by regulatory identifier: CIN_LICENSE_NUMBER (Codice Identificativo Nazionale, required in Italy) or NRA_LICENSE_NUMBER (Numero de Registro de Alquiler, required in Spain).
- `isTestApartment` (boolean) — Mark as test apartment
- `onRequestDetails` (OnRequestDetails) — Used only for on request apartments
- `bookableOnRequest` (boolean) — is the apartment bookable on request only (not instant bookable)?
- `hostEmailAddress` (string) — the email address of the host when guest sends request to the host
- `leadTimeHours` (integer (int32)) — Booking lead time in hours
- `duplicateFrom` (array of DuplicateFrom) — Use this object if other Holidu partners also have this property in their system. Please contact us before using this.
- `provider` (string) — Name of this provider as in our system (please ask us the right name first) (example: `"HRS"`)
- `duplicatedApartmentId` (string) — Id of the duplicate apartment in the other partner system. (example: `"123654"`)
- `active` (boolean) — Should apartment be activated
- `holiduApartmentId` (integer (int64)) — Holidu Apartment Id
### 400 — Bad Request
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Bad Request"
}
```
### 401 — Authentication error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Authentication error"
}
```
### 404 — Apartment does not exist
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Apartment does not exist"
}
```
### 500 — Internal server error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Internal server error"
}
```
## Error body: `HoliduErrorResponse`
- `error` (string) — Error Text (example: `"Invalid Json: Unexpected character"`)
---
# Create or update an apartment
Source: https://developer.holidu.com/reference/upsertapartment
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
`POST /v2/apartment`
- Operation ID: `upsertApartment`
- Tags: Apartment
- Base URL: https://provider-api-sandbox.holidu.com (Sandbox Environment)
- Base URL: https://provider-api.holidu.com (Holidu Production API)
- Auth: send the API key in the `api-key` header
- Full spec: https://developer.holidu.com/openapi/connectivity-api.json
## Parameters
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `providerApartmentId` | query | string | no | |
| `provider` | query | string | no | |
| `holiduApartmentId` | query | integer (int64) | no | |
## Request body (required)
Content type `application/json`, schema `BasicApartmentDto`:
- `providerApartmentGroupId` (string) — ID of the house where apartment is located. If several apartments are located in one house, they'll share the same providerApartmentGroupId (example: `"house-123"`)
- `lat` (number, required) — Latitude (example: `50.9293009`)
- `lng` (number, required) — Longitude (example: `5.9779776`)
- `name` (string) — Name of the apartment (example: `"Villa Munich Center"`)
- `apartmentAddress` (ApartmentAddress) — Address of the rental property
- `street` (string) — Street (min length 0; max length 128; example: `"Karlstrasse 66"`)
- `zipCode` (string) — ZIP Code (max 20 chars) (min length 0; max length 20; example: `"76133"`)
- `city` (string) — City (min length 0; max length 128; example: `"Munich"`)
- `countryCode` (string) — Country code represented in standard ISO 3166-1 ALPHA-2 format (min length 2; max length 2; example: `"DE"`)
- `contactDetails` (ContactDetails) — Contact details
- `contactName` (string) — Contact person for this apartment (example: `"John Doe"`)
- `contactPhone` (string) — Phone number of contact person (example: `"+123(4)56789"`)
- `contactEmail` (string) — Email of contact person (example: `"john@doe.com"`)
- `guestCapacityRules` (GuestCapacityRules, required) — Guest capacity rules applicable to apartment
- `standardCapacity` (integer (int32), required) — The standard capacity of guests allowed. This includes a minimum of 1 adult and excludes babies. (min 1; example: `1`)
- `adultsOnly` (boolean) — Does apartment permit only adults (example: `false`)
- `additionalChildren` (integer (int32)) — Number of children allowed on top of standardCapacity. (min 0; example: `0`)
- `maxBabies` (integer (int32)) — Maximum number of babies allowed. (min 0; example: `2`)
- `numberOfBedrooms` (integer (int32)) (min 1; max 30; example: `2`)
- `numberOfLivingrooms` (integer (int32)) (min 1; max 30; example: `1`)
- `numberOfBathrooms` (integer (int32)) (min 1; max 30; example: `2`)
- `sizeInSqm` (number) — Size of apartment in square meters (example: `100`)
- `apartmentType` (string, required) — Type of the apartment (one of: `ALLOTMENT_GARDEN`, `APARTMENT`, `APARTMENT_HOTEL`, `BARN`, `BEACH_HUT`, `BED_AND_BREAKFAST`, `BOAT`, `BUNGALOW`, `CAMPER`, `CAMPING`, `CARAVAN`, `CASTLE`, `CAVE`, `CHACARA`, `CHALET`, `COTTAGE`, `COUNTRY_HOUSE`, `FARM`, `FARMHOUSE`, `FINCA`, `FISHING_HOUSE`, `GITE`, `GLAMPING`, `GUEST_HOUSE`, `GUEST_ROOM`, `HOLIDAY_VILLAGE`, `HOMESTAY`, `HOSTEL`, `HOTEL`, `HOUSE_BOAT`, `HUT`, `LIGHTHOUSE`, `LODGE`, `LOG_CABIN`, `LUXURY_TENT`, `MANOR`, `MILL`, `MOBILE_HOME`, `MOUNTAIN_HUT`, `PENSION`, `PENTHOUSE`, `RESIDENCE`, `RESORT`, `RIAD`, `ROOM`, `ROOM_BREAKFAST`, `STUDIO`, `TENT`, `TINY_HOME`, `TIPI`, `TOWER`, `TREE_HOUSE`, `TRULLO`, `VACATION_APARTMENT`, `VACATION_HOME`, `VILLA`, `YACHT`, `YURT`; example: `"VILLA"`)
- `checkInCheckOutTimes` (CheckInCheckOutTimes) — Check-ins and check-outs details
- `checkIn` (array of CheckInDuration, required) — List of possible check in times
- `checkInFrom` (string (time), required) — Check in from (24h format) (example: `"12:00"`)
- `checkInTo` (string (time), required) — Check in to (24h format) (example: `"21:00"`)
- `checkOutUntil` (string, required) — Check out time (24h format) (example: `"14:30"`)
- `floor` (integer (int32)) — The floor on which the property is located, starting with 0 for the ground floor (example: `0`)
- `sizeOfPlot` (number) — Total area includes the whole area of the property accessible to the guest. This includes the garden, terraces or garages (example: `140.5`)
- `buildYear` (integer (int32)) — Build year of the property (example: `2001`)
- `modernizedYear` (integer (int32)) — Year of renovation (example: `2007`)
- `license` (string) — License number of the property (the license number is required for properties in the Balearic area in Spain) (example: `"1231882"`)
- `regulatoryInformation` (map of string (regulatoryIdentifier) → string) — Registration numbers the property must display, keyed by regulatory identifier: CIN_LICENSE_NUMBER (Codice Identificativo Nazionale, required in Italy) or NRA_LICENSE_NUMBER (Numero de Registro de Alquiler, required in Spain).
- `isTestApartment` (boolean) — Mark as test apartment
- `onRequestDetails` (OnRequestDetails) — Used only for on request apartments
- `bookableOnRequest` (boolean) — is the apartment bookable on request only (not instant bookable)?
- `hostEmailAddress` (string) — the email address of the host when guest sends request to the host
- `leadTimeHours` (integer (int32)) — Booking lead time in hours
- `duplicateFrom` (array of DuplicateFrom) — Use this object if other Holidu partners also have this property in their system. Please contact us before using this.
- `provider` (string) — Name of this provider as in our system (please ask us the right name first) (example: `"HRS"`)
- `duplicatedApartmentId` (string) — Id of the duplicate apartment in the other partner system. (example: `"123654"`)
## Responses
### 200 — Successful creation or update of an apartment
Body `application/json`, schema `CompleteApartmentDto`:
- `providerApartmentGroupId` (string) — ID of the house where apartment is located. If several apartments are located in one house, they'll share the same providerApartmentGroupId (example: `"house-123"`)
- `lat` (number, required) — Latitude (example: `50.9293009`)
- `lng` (number, required) — Longitude (example: `5.9779776`)
- `name` (string) — Name of the apartment (example: `"Villa Munich Center"`)
- `apartmentAddress` (ApartmentAddress) — Address of the rental property
- `street` (string) — Street (min length 0; max length 128; example: `"Karlstrasse 66"`)
- `zipCode` (string) — ZIP Code (max 20 chars) (min length 0; max length 20; example: `"76133"`)
- `city` (string) — City (min length 0; max length 128; example: `"Munich"`)
- `countryCode` (string) — Country code represented in standard ISO 3166-1 ALPHA-2 format (min length 2; max length 2; example: `"DE"`)
- `contactDetails` (ContactDetails) — Contact details
- `contactName` (string) — Contact person for this apartment (example: `"John Doe"`)
- `contactPhone` (string) — Phone number of contact person (example: `"+123(4)56789"`)
- `contactEmail` (string) — Email of contact person (example: `"john@doe.com"`)
- `guestCapacityRules` (GuestCapacityRules, required) — Guest capacity rules applicable to apartment
- `standardCapacity` (integer (int32), required) — The standard capacity of guests allowed. This includes a minimum of 1 adult and excludes babies. (min 1; example: `1`)
- `adultsOnly` (boolean) — Does apartment permit only adults (example: `false`)
- `additionalChildren` (integer (int32)) — Number of children allowed on top of standardCapacity. (min 0; example: `0`)
- `maxBabies` (integer (int32)) — Maximum number of babies allowed. (min 0; example: `2`)
- `numberOfBedrooms` (integer (int32)) (min 1; max 30; example: `2`)
- `numberOfLivingrooms` (integer (int32)) (min 1; max 30; example: `1`)
- `numberOfBathrooms` (integer (int32)) (min 1; max 30; example: `2`)
- `sizeInSqm` (number) — Size of apartment in square meters (example: `100`)
- `apartmentType` (string, required) — Type of the apartment (one of: `ALLOTMENT_GARDEN`, `APARTMENT`, `APARTMENT_HOTEL`, `BARN`, `BEACH_HUT`, `BED_AND_BREAKFAST`, `BOAT`, `BUNGALOW`, `CAMPER`, `CAMPING`, `CARAVAN`, `CASTLE`, `CAVE`, `CHACARA`, `CHALET`, `COTTAGE`, `COUNTRY_HOUSE`, `FARM`, `FARMHOUSE`, `FINCA`, `FISHING_HOUSE`, `GITE`, `GLAMPING`, `GUEST_HOUSE`, `GUEST_ROOM`, `HOLIDAY_VILLAGE`, `HOMESTAY`, `HOSTEL`, `HOTEL`, `HOUSE_BOAT`, `HUT`, `LIGHTHOUSE`, `LODGE`, `LOG_CABIN`, `LUXURY_TENT`, `MANOR`, `MILL`, `MOBILE_HOME`, `MOUNTAIN_HUT`, `PENSION`, `PENTHOUSE`, `RESIDENCE`, `RESORT`, `RIAD`, `ROOM`, `ROOM_BREAKFAST`, `STUDIO`, `TENT`, `TINY_HOME`, `TIPI`, `TOWER`, `TREE_HOUSE`, `TRULLO`, `VACATION_APARTMENT`, `VACATION_HOME`, `VILLA`, `YACHT`, `YURT`; example: `"VILLA"`)
- `checkInCheckOutTimes` (CheckInCheckOutTimes) — Check-ins and check-outs details
- `checkIn` (array of CheckInDuration, required) — List of possible check in times
- `checkInFrom` (string (time), required) — Check in from (24h format) (example: `"12:00"`)
- `checkInTo` (string (time), required) — Check in to (24h format) (example: `"21:00"`)
- `checkOutUntil` (string, required) — Check out time (24h format) (example: `"14:30"`)
- `floor` (integer (int32)) — The floor on which the property is located, starting with 0 for the ground floor (example: `0`)
- `sizeOfPlot` (number) — Total area includes the whole area of the property accessible to the guest. This includes the garden, terraces or garages (example: `140.5`)
- `buildYear` (integer (int32)) — Build year of the property (example: `2001`)
- `modernizedYear` (integer (int32)) — Year of renovation (example: `2007`)
- `license` (string) — License number of the property (the license number is required for properties in the Balearic area in Spain) (example: `"1231882"`)
- `regulatoryInformation` (map of string (regulatoryIdentifier) → string) — Registration numbers the property must display, keyed by regulatory identifier: CIN_LICENSE_NUMBER (Codice Identificativo Nazionale, required in Italy) or NRA_LICENSE_NUMBER (Numero de Registro de Alquiler, required in Spain).
- `isTestApartment` (boolean) — Mark as test apartment
- `onRequestDetails` (OnRequestDetails) — Used only for on request apartments
- `bookableOnRequest` (boolean) — is the apartment bookable on request only (not instant bookable)?
- `hostEmailAddress` (string) — the email address of the host when guest sends request to the host
- `leadTimeHours` (integer (int32)) — Booking lead time in hours
- `duplicateFrom` (array of DuplicateFrom) — Use this object if other Holidu partners also have this property in their system. Please contact us before using this.
- `provider` (string) — Name of this provider as in our system (please ask us the right name first) (example: `"HRS"`)
- `duplicatedApartmentId` (string) — Id of the duplicate apartment in the other partner system. (example: `"123654"`)
- `active` (boolean) — Should apartment be activated
- `holiduApartmentId` (integer (int64)) — Holidu Apartment Id
### 400 — Bad Request
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Bad Request"
}
```
### 401 — Authentication error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Authentication error"
}
```
### 500 — Internal server error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Internal server error"
}
```
## Error body: `HoliduErrorResponse`
- `error` (string) — Error Text (example: `"Invalid Json: Unexpected character"`)
---
# Get basic information about all apartments
Source: https://developer.holidu.com/reference/getallapartmentinformation
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
`GET /v2/apartments/information`
- Operation ID: `getAllApartmentInformation`
- Tags: Apartment
- Base URL: https://provider-api-sandbox.holidu.com (Sandbox Environment)
- Base URL: https://provider-api.holidu.com (Holidu Production API)
- Auth: send the API key in the `api-key` header
- Full spec: https://developer.holidu.com/openapi/connectivity-api.json
## Parameters
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `provider` | query | string | no | |
| `pageNumber` | query | integer (int32) | no | default: `0` |
| `pageSize` | query | integer (int32) | no | default: `20` |
## Responses
### 200 — A list of basic information about all apartments
Body `application/json`, schema `ApartmentInformationPage`:
- `totalApartments` (integer (int64))
- `page` (integer (int32))
- `size` (integer (int32))
- `apartments` (array of ApartmentInformation)
- `providerApartmentId` (string)
- `holiduApartmentId` (string)
- `active` (boolean)
- `lastUpdate` (string (date-time))
### 401 — Authentication error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Authentication error"
}
```
### 500 — Internal server error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Internal server error"
}
```
## Error body: `HoliduErrorResponse`
- `error` (string) — Error Text (example: `"Invalid Json: Unexpected character"`)
---
# Get validation result of apartment
Source: https://developer.holidu.com/reference/getapartmentvalidation
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
`GET /v2/apartment/validation`
- Operation ID: `getApartmentValidation`
- Tags: Apartment
- Base URL: https://provider-api-sandbox.holidu.com (Sandbox Environment)
- Base URL: https://provider-api.holidu.com (Holidu Production API)
- Auth: send the API key in the `api-key` header
- Full spec: https://developer.holidu.com/openapi/connectivity-api.json
## Parameters
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `providerApartmentId` | query | string | no | |
| `provider` | query | string | no | |
| `holiduApartmentId` | query | integer (int64) | no | |
## Responses
### 200 — Successful retrieval of validation result of an apartment
Body `application/json`, schema `ApartmentValidation`:
- `holiduApartmentId` (integer (int64)) — Holidu Apartment Id
- `providerApartmentId` (string) — Provider Apartment Id
- `lastValidatedAt` (string (date-time)) — Last time validation ran for apartment
- `valid` (boolean) — Is apartment valid
- `validationErrorMessages` (array of ValidationErrorMessage) — Validation Error Messages
- `errorCode` (string) — Error code for which validation failed
- `message` (string) — Message for which validation failed
### 400 — Bad Request
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Bad Request"
}
```
### 401 — Authentication error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Authentication error"
}
```
### 404 — Apartment does not exist
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Apartment does not exist"
}
```
### 418 — Requested method is not available in sandbox environment
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Requested method is not available in sandbox environment"
}
```
### 500 — Internal server error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Internal server error"
}
```
## Error body: `HoliduErrorResponse`
- `error` (string) — Error Text (example: `"Invalid Json: Unexpected character"`)
---
# Get descriptions for an apartment
Source: https://developer.holidu.com/reference/getapartmentdescriptions
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
`GET /v2/description`
- Operation ID: `getApartmentDescriptions`
- Tags: Descriptions
- Base URL: https://provider-api-sandbox.holidu.com (Sandbox Environment)
- Base URL: https://provider-api.holidu.com (Holidu Production API)
- Auth: send the API key in the `api-key` header
- Full spec: https://developer.holidu.com/openapi/connectivity-api.json
## Parameters
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `providerApartmentId` | query | string | no | |
| `provider` | query | string | no | |
| `holiduApartmentId` | query | integer (int64) | no | |
## Responses
### 200 — Successfully retrieved descriptions for apartment
Body `application/json`, schema `array of ApartmentDescription`:
- `language` (string, required) — Language (min length 2; max length 2; example: `"de"`)
- `description` (string, required) — Description of the apartment translated into language above (example: `"Die Appartamenti La Grotta befinden sich im historischen Zentrum von Bardolino..."`)
- `title` (string) — Title of the apartment translated into language above (example: `"La Grotta"`)
- `locationDescription` (string) — Description of the outside of apartment like location, surroundings (example: `"The apartment is located at 730 m above sea level and just 300 m from Lake Bajer."`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
[
{
"language": "de",
"description": "Die Appartamenti La Grotta befinden sich im historischen Zentrum von Bardolino...",
"title": "La Grotta",
"locationDescription": "The apartment is located at 730 m above sea level and just 300 m from Lake Bajer."
}
]
```
### 400 — Bad Request
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Bad Request"
}
```
### 401 — Authentication error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Authentication error"
}
```
### 404 — Apartment does not exist
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Apartment does not exist"
}
```
### 500 — Internal server error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Internal server error"
}
```
## Error body: `HoliduErrorResponse`
- `error` (string) — Error Text (example: `"Invalid Json: Unexpected character"`)
---
# Create or update descriptions for an apartment
Source: https://developer.holidu.com/reference/upsertapartmentdescriptions
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
`POST /v2/description`
- Operation ID: `upsertApartmentDescriptions`
- Tags: Descriptions
- Base URL: https://provider-api-sandbox.holidu.com (Sandbox Environment)
- Base URL: https://provider-api.holidu.com (Holidu Production API)
- Auth: send the API key in the `api-key` header
- Full spec: https://developer.holidu.com/openapi/connectivity-api.json
## Parameters
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `providerApartmentId` | query | string | no | |
| `provider` | query | string | no | |
| `holiduApartmentId` | query | integer (int64) | no | |
## Request body (required)
Content type `application/json`, schema `array of ApartmentDescription`:
- `language` (string, required) — Language (min length 2; max length 2; example: `"de"`)
- `description` (string, required) — Description of the apartment translated into language above (example: `"Die Appartamenti La Grotta befinden sich im historischen Zentrum von Bardolino..."`)
- `title` (string) — Title of the apartment translated into language above (example: `"La Grotta"`)
- `locationDescription` (string) — Description of the outside of apartment like location, surroundings (example: `"The apartment is located at 730 m above sea level and just 300 m from Lake Bajer."`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
[
{
"language": "de",
"description": "Die Appartamenti La Grotta befinden sich im historischen Zentrum von Bardolino...",
"title": "La Grotta",
"locationDescription": "The apartment is located at 730 m above sea level and just 300 m from Lake Bajer."
}
]
```
## Responses
### 200 — Successfully created or updated descriptions for apartment
Body `application/json`, schema `array of ApartmentDescription`:
- `language` (string, required) — Language (min length 2; max length 2; example: `"de"`)
- `description` (string, required) — Description of the apartment translated into language above (example: `"Die Appartamenti La Grotta befinden sich im historischen Zentrum von Bardolino..."`)
- `title` (string) — Title of the apartment translated into language above (example: `"La Grotta"`)
- `locationDescription` (string) — Description of the outside of apartment like location, surroundings (example: `"The apartment is located at 730 m above sea level and just 300 m from Lake Bajer."`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
[
{
"language": "de",
"description": "Die Appartamenti La Grotta befinden sich im historischen Zentrum von Bardolino...",
"title": "La Grotta",
"locationDescription": "The apartment is located at 730 m above sea level and just 300 m from Lake Bajer."
}
]
```
### 400 — Bad Request
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Bad Request"
}
```
### 401 — Authentication error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Authentication error"
}
```
### 404 — Apartment does not exist
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Apartment does not exist"
}
```
### 500 — Internal server error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Internal server error"
}
```
## Error body: `HoliduErrorResponse`
- `error` (string) — Error Text (example: `"Invalid Json: Unexpected character"`)
---
# Get facilities for apartment
Source: https://developer.holidu.com/reference/getfacilities
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
`GET /v2/facilities`
- Operation ID: `getFacilities`
- Tags: Facilities
- Base URL: https://provider-api-sandbox.holidu.com (Sandbox Environment)
- Base URL: https://provider-api.holidu.com (Holidu Production API)
- Auth: send the API key in the `api-key` header
- Full spec: https://developer.holidu.com/openapi/connectivity-api.json
## Parameters
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `providerApartmentId` | query | string | no | |
| `provider` | query | string | no | |
| `holiduApartmentId` | query | integer (int64) | no | |
## Responses
### 200 — List of apartment facilities
Body `application/json`, schema `array of ApartmentFacility`:
- `name` (string)
- `type` (string) — Facility type. Here you should map your facilities to ours. The allowed values can be taken from GET /v2/facilities/types (one of: `SMOKING_ALLOWED`, `SMOKING_NOT_ALLOWED`, `SMOKING_AREA`, `PETS_ALLOWED`, `PETS_ALLOWED_ON_REQUEST`, `PETS_ALLOWED_SMALL_PETS`, `PETS_ALLOWED_CAT`, `PETS_ALLOWED_DOG`, `PETS_ALLOWED_DOG_MAX_10_KG`, `PETS_ALLOWED_DOG_MORE_THAN_10_KG`, `PETS_NOT_ALLOWED`, `PETS_ON_AVAILABILITY`, `VIEW`, `VIEW_OCEAN`, `VIEW_LAKE`, `VIEW_CITY`, `VIEW_GARDEN`, `VIEW_LANDMARK`, `VIEW_MOUNTAIN`, `VIEW_RIVER`, `VIEW_SEA`, `VIEW_BEACH`, `VIEW_GOLF_COURSE`, `VIEW_WATER`, `VIEW_INNER_COURTYARD`, `VIEW_POOL`, `WATERFRONT`, `BARRIER_FREE`, `SUITABLE_FOR_DISABLED`, `SUITABLE_FOR_ELDERLY`, `BARRIER_FREE_NOT`, `ENERGY`, `ENERGY_SOLAR`, `ENERGY_WIND`, `WATER_HOT`, `ROOF_FLAT`, `ENTRANCE_PRIVATE`, `ROOF_THATCHED`, `ANIMALS`, `ANIMALS_CAT`, `ANIMALS_DOG`, `ANIMALS_FARM`, `POOL`, `POOL_PRIVATE`, `POOL_CHILDREN`, `POOL_HEATED`, `POOL_INFINITY`, `POOL_TOYS`, `POOL_ROOFTOP`, `POOL_SEASONALLY_OPENED`, `POOL_FENCED`, `WHIRLPOOL`, `WHIRLPOOL_BATHTUB`, `ELEVATOR`, `INTERNET`, `INTERNET_NOT`, `INTERNET_WIFI`, `INTERNET_LAN`, `SAUNA`, `INFRARED_CABIN`, `CHIMNEY`, `STOVE_WOOD`, `FIREPLACE`, `CHILDFRIENDLY`, `RENOVATED`, `ALLERGY_FRIENDLY`, `BEST_PRICE`, `FOR_EVENTS`, `LUXURY`, `QUIET`, `VISITED_BY_HOLIDU`, `WASHER`, `DRYER`, `WASHER_DRYER_COMBO`, `FLAT_IRON`, `FLAT_IRON_AND_BOARD`, `HEATING`, `HEATING_NOT`, `HEATING_OIL`, `HEATING_GAS`, `HEATING_UNDERFLOOR`, `HEATING_WOOD_STOVE`, `HEATING_ELECTRIC`, `AIR_CONDITION`, `VENTILATOR`, `SOLARIUM`, `POOL_INDOOR`, `POOL_INDOOR_CHILDREN`, `WHIRLPOOL_INDOOR`, `TV`, `TV_CHILDREN`, `TV_LCD`, `TV_FLAT_SCREEN`, `TV_GERMAN_CHANNELS`, `TV_FRENCH_CHANNELS`, `TV_ENGLISH_CHANNELS`, `TV_SPANISH_CHANNELS`, `TV_DUTCH_CHANNELS`, `TV_DANISH_CHANNELS`, `TV_ITALIAN_CHANNELS`, `TV_INTERNATIONAL_CHANNELS`, `TV_CABLE`, `TV_SATELLITE`, `TV_DIGITAL`, `TV_PAY_PER_VIEW`, `BEAMER`, `BLURAY_PLAYER`, `DVD_PLAYER`, `CD_PLAYER`, `RADIO`, `MP3_PLAYER`, `IPOD_DOCK`, `SPEAKERS`, `SOUND_SYSTEM`, `COMPUTER`, `TELEPHONE`, `HIGHCHAIR`, `PLAYROOM`, `ROOMS_LOUNGE`, `INTERCOM`, `FIRE_PIT`, `FIRE_EXTINGUISHER`, `FIRE_ALARM`, `CARBONMONOXIDE_DETECTOR`, `ALARM_HOUSE`, `BED_KING`, `BED_QUEEN`, `BED_DOUBLE`, `BED_SINGLE`, `BED_CHILDREN`, `BED_BABY`, `BED_EXTRA`, `BED_SLEEPING_COUCH`, `BED_SLEEPING_COUCH_2`, `BED_SLEEPING_COUCH_1`, `BED_FOLDAWAY`, `BED_BUNK`, `BED_BUNK_1`, `BED_BUNK_2`, `BED_FLOOR_MATTRESS`, `BED_AIR_MATTRESS`, `ROOMS_DININGROOM`, `ROOMS_LIVINGROOM`, `ROOMS_SINGLE`, `ROOMS_DOUBLE`, `ROOMS_FAMILY`, `ROOMS_BATHROOM`, `ROOMS_BEDROOM`, `ROOMS_COMMON`, `SUITED_FOR_GROUPS`, `OUTDOOR_DINING_AREA`, `SAFE`, `BALCONY_TERRACE`, `BALCONY`, `BALCONY_COVERED`, `BALCONY_UNCOVERED`, `TERRACE`, `TERRACE_COVERED`, `TERRACE_UNCOVERED`, `TERRACE_ROOFTOP`, `GARDEN`, `HOUSEOWNED_BEACH`, `GARDEN_FURNITURE`, `HAMMOCK`, `STROLLER`, `DECK_CHAIR`, `BEACH_CHAIR`, `POOL_OUTDOOR`, `POOL_OUTDOOR_CHILDREN`, `WHIRLPOOL_OUTDOOR`, `STEAMBATH`, `FENCED_PROPERTY`, `FENCED_PROPERTY_NOT`, `TOYS`, `TOYS_BOARD_GAME`, `TOYS_BOOKS`, `TOYS_BOOKS_FOR_CHILDREN`, `TOYS_DVDS`, `TOYS_DVDS_FOR_CHILDREN`, `GAME_CONSOLE_PS3`, `GAME_CONSOLE_PS4`, `GAME_CONSOLE_XBOX_ONE`, `GAME_CONSOLE_XBOX_360`, `GAME_CONSOLE_WII`, `GAME_CONSOLE_OTHER`, `PLAYGROUND`, `GRILL`, `GRILL_GAS`, `GRILL_COAL`, `GRILL_ELECTRIC`, `PARKING`, `PARKING_SPOT`, `PARKING_AT_OBJECT`, `PARKING_GARAGE`, `PARKING_CARPORT`, `PARKING_STREET`, `PARKING_SECURE`, `PARKING_DISABLED`, `CONSERVATORY`, `BICYCLE_RACK`, `BICYCLE_CELLAR`, `BICYCLE_RENTALS_ON_SITE`, `LANDING_STAGE`, `SKI_IN_OUT`, `SKI_BUS_AT_PROPERTY`, `PARASOL`, `KITCHEN`, `KITCHEN_NOT`, `KITCHENETTE`, `OVEN`, `COOKTOP`, `MICROWAVE`, `FRIDGE`, `ICE_MAKER`, `FREEZER`, `FRIDGE_FREEZER_COMBINATION`, `DISHWASHER`, `WATER_HEATER`, `COFFEE_TEA_MACHINE`, `COFFEE_MACHINE`, `ESPRESSO_MACHINE`, `COFFEE`, `MIXER`, `TOASTER`, `JUICER`, `MINIBAR`, `KETTLE`, `SPICES`, `DISHES`, `CUTLERY`, `KITCHEN_UTENSILS`, `SHOWER`, `SHOWER_BATHTUB_COMBO`, `SHOWER_BATHTUB`, `SHOWER_OUTSIDE`, `BATHTUB`, `SEPARATE_TOILET`, `EN_SUITE_TOILET`, `HAIRDRYER`, `VACUUM_CLEANER`, `IRONING_BOARD`, `TROUSERPRESS`, `WARDROBE`, `CLOTHES_HANGERS`, `FURNITURE_DESK`, `CURTAINS_BLACKOUT`, `SMOKE_DETECTOR`, `TOWELS`, `TOWELS_BEACH_POOL`, `TOWELS_NOT`, `TOILETRIES`, `BEDLINEN`, `BEDLINEN_NOT`, `DISHCLOTH`, `BATHROBE`, `BREAKFAST`, `HALF_BOARD`, `LUNCHSERVICE_PACKED`, `CHILDCARE`, `BIKE_RENTAL`, `SKI_RENTAL`, `SKI_STORAGE`, `SKI_PASS`, `SCOOTER_RENTAL`, `CAR_RENTAL`, `BOAT_RENTAL`, `BIKE_PROVIDED`, `BOAT_PROVIDED`, `AIRPORT_SHUTTLE`, `SHUTTLE_SERVICE`, `FIRST_AID_KIT`, `DOORMAN`, `RECEPTION_24H`, `ATM`, `DRY_CLEANING`, `IRONING_SERVICE`, `LUGGAGE_STORAGE`, `CURRENCY_EXCHANGE`, `RESTAURANT`, `MINIMARKET`, `HOUSEKEEPING`, `HOUSEKEEPING_DAILY`, `HOUSEKEEPING_WEEKLY`, `BOOK_WITHOUT_CREDIT_CARD`, `CHEQUES_VACANCES`, `GROUPS_NOT_ALLOWED`, `YOUTH_GROUPS_NOT_ALLOWED`, `YOUTH_GROUPS_ALLOWED`, `SUITABLE_YOUNG_PEOPLE`, `SUITABLE_CHILDREN`, `SUITABLE_CHILDREN_NO`, `CHILDREN_NOT_ALLOWED`, `FAMILY_FRIENDLY`, `HOUSEOWNER_LIVES_ONSPOT`, `LONGTERM_STAYS_ALLOWED`, `CHECKIN_HOST`, `CHECKIN_SELF`, `KEY_CARD_ACCESS`, `LOCATION_GROUND_FLOOR`, `LOCATION_UPPER_FLOOR`, `WINTER_SPORTS`, `WATER_SPORTS`, `SKI_VACATION`, `BEACH_VACATION`, `FARM_VACATION`, `NATURE`, `WELLNESS`, `WELLNESS_TREATMENTS`, `WELLNESS_AREA`, `GYM`, `TENNIS_COURT`, `GOLF`, `MINIGOLF`, `FISHING`, `SAILING`, `HIKING`, `HORSEBACK_RIDING`, `WATERPARK`, `SURFING`, `WINDSURFING`, `KITESURFING`, `BIKING`, `DIVING`, `MOUNTAIN_BIKING`, `BOAT_TRIP`, `BILLIARD_TABLE`, `TABLE_TENNIS`, `PUBLIC_TRANSPORTATION`, `CHILDREN_ALLOWED`, `SINK`, `BASKETBALL`, `BIKE`, `BOAT`, `VOLLEY_BALL_COURT`, `GOLF_COURT`, `CROSS_COUNTRY_SKI`, `BY_THE_WATER`, `IN_THE_SKI_RESORT`, `CLOSE_TO_SKI_LIFTS`, `SKI_PASS_DISCOUNTED`, `SKI_PASS_INCLUDED`, `SKI_RENTAL_DISCOUNTED`, `SKI_RENTAL_INCLUDED`, `SKI_SCHOOL_DISCOUNTED`, `SKI_SCHOOL_INCLUDED`, `BIKE_STORAGE`, `LGBTQ_FRIENDLY`, `GREEN_PROPERTY`, `EVENT_FRIENDLY`, `PRIVATE_BEACH`, `BEACH_ACCESS`, `BEACH_FRONT`, `LAKE_FRONT`, `WATER_FRONT`, `OCEAN_FRONT`, `ELECTRIC_VEHICLE_CHARGING_STATION`, `ELECTRIC_BIKE_CHARGING_STATION`, `MOBILITY_PUBLIC_TRANSPORT`, `MOBILITY_BIKES`, `MOBILITY_EBIKES`, `RENEWABLE_ENERGY`, `RECYCLING_GLASS`, `RECYCLING_PAPER`, `RECYCLING_PLASTIC`, `RECYCLING_ORGANIC`, `ENERGY_SAVING_SOLAR_PANELS`, `ENERGY_SAVING_WIND_POWER`, `ENERGY_SAVING_METHANE_DIGESTER`, `ENERGY_SAVING_SOLAR_COLLECTOR`, `ENERGY_SAVING_LIGHTING`, `ENERGY_SAVING_SMART_CONTROLS`, `ENERGY_SOLAR_THERMAL_PANELS`, `ENERGY_HEAT_PUMPS`, `ENERGY_GREEN_ELECTRICITY_PROVIDER`, `ENERGY_BIOMASS`, `ENERGY_GEOTHERMICS`, `ENERGY_INFRARED_HEATING_PANELS`, `ENERGY_MASONRY_HEATER`, `INSULATION_GLASS`, `INSULATION_ROOF`, `INSULATION_WALL`, `INSULATION_FLOOR`, `INSULATION_NATURAL_MATERIALS`, `INSULATION_GREEN_COOL_ROOF`, `WATER_SAVING_SHOWER`, `WATER_SAVING_TOILET`, `WATER_SAVING_TAPS`, `RAINWATER_TREATMENT`, `GREY_WATER_SYSTEM`, `OWN_PRODUCE_JAM`, `OWN_PRODUCE_VEGETABLES`, `OWN_PRODUCE_HERBS`, `OWN_PRODUCE_OLIVE_OIL`, `OWN_PRODUCE_HONEY`, `OWN_PRODUCE_FRUITS`, `OWN_PRODUCE_EGGS`, `OWN_PRODUCE_CHEESE`, `OWN_PRODUCE_BREAD`, `OWN_PRODUCE_NUTS`, `ECO_CLEANING_PRODUCTS`, `SUSTAINABLE_CONSTRUCTION`, `EVENT_MEAL`, `EVENT_BIRTHDAY_CHILD`, `EVENT_BABY_SHOWER`, `EVENT_STAG_PARTY`, `EVENT_WEDDING`, `EVENT_BIRTHDAY_ADULT`, `SHOWER_ROLL_IN`, `SHOWER_GRAB_RAILS`, `TOILET_RAISED`, `WIDE_DOORS`, `STEP_FREE_ACCESS`, `BATHTUB_CHAIR`, `BATHROOM_TURNING_CYCLE_MIN_1_5_M`, `BATHROOM_EMERGENCY_CORD`, `STEP_FREE_INTERIOR`, `SHOWER_CHAIR`, `TOILET_GRAB_RAILS`, `BATHROOM_SINK_LOWERED`, `INTERNET_WIFI_FOR_VIDEO_CALLS`, `DRINKING_WATER_BOTTLED`, `DISH_DETERGENT`, `SHAMPOO`, `PARTIES_NOT_ALLOWED`, `LAUNDRY`, `LAUNDRY_SERVICE`, `WATER_PARK`, `CORONA_RULES_APPLIED`, `SOUTERRAIN`, `BOWLING`, `KEGELBAHN`, `YOGA_SCHOOL`, `UNIT_SIZE`, `PRINTER`, `PIANO`, `BABYSITTING_SERVICES`, `ROOM_SERVICE`, `HOUR_SEC`, `_24HOUR_SECURITY`, `AIR_PURIFIER`, `BABY_MONITOR`, `BED_EXTRA_LONG`, `BIDET`, `BOOT_DRIER`, `BREAD_SERVICE`, `BROADCAST_LIVE_SPORT`, `CANOEING`, `CASHLESS_PAYMENT`, `CLEANING_PRODUCTS`, `CLOTHES_DRYING_RACK`, `COFFEE_GRINDER`, `CONCIERGE`, `COOKING_CLASS`, `EXPRESS_CHECKINOUT`, `ECOTOURISM`, `FLOOR_CARPETING`, `GROCERY_DELIVERY`, `HOT_SPRINGS`, `HYPOALLERGENIC_PILLOW`, `JET_SKIING`, `KAYAKING`, `KIDS_CLUB`, `LIVE_MUSIC`, `MEAL_DELIVERY`, `MOSQUITO_NET`, `MOTORBOATING`, `NEWSPAPER`, `NO_STEP_FREE_ACCESS`, `NORDIC_WALKING`, `RECYCLING`, `SANDBOX`, `SHOPPING`, `SKI_SCHOOL`, `SKIING`, `SNORKELING`, `SUNLOUNGER`, `TOOTHBRUSH`, `TRAMPOLINE`, `TV_STREAMING`, `VISUAL_AID_BRAILLE`, `VISUAL_AID_TACTILE_SIGNS`, `WILDLIFE_VIEWING`, `WINERY`, `WING_FOIL`, `STAND_UP_PADDLING`, `CLIMBING`, `SWIMMING`, `PARAGLIDING`, `RUNNING`, `CANYONING`, `YOGA`, `PARTNER_SUSTAINABILITY_BADGE`, `GASTGEBER_MIT_HERZ`, `ALLGAEU_TOP_HOTELS`, `CERTIFICATE_4FUER3`, `CERTIFICATE_ADAC_CAMPINGPLATZ_AUSZEICHNUNG`, `CERTIFICATE_ALBCARD`, `CERTIFICATE_ALB_CROSSING`, `CERTIFICATE_ALBSTEIG`, `CERTIFICATE_BAG_OBSTHOF`, `CERTIFICATE_BAG_URLAUB_AUF_DEM_BAUERNHOF`, `CERTIFICATE_BARRIEREFREI_ERLEBEN`, `CERTIFICATE_BARRIEREFREIE_UNTERKUNFT_OKGO_CH`, `CERTIFICATE_BERGSTEIGERDOERFER_CH`, `CERTIFICATE_BETT_UND_BIKE`, `CERTIFICATE_BETT_UND_BIKE_ADFC`, `CERTIFICATE_BIKE_HOTEL_HOTTELIERSUISSE_CH`, `CERTIFICATE_BIOSPHAEREN_GASTGEBER`, `CERTIFICATE_CAUSE_WE_CARE_CH`, `CERTIFICATE_DEHOGA_UMWELTCHECK_GOLD`, `CERTIFICATE_DEHOGA_UMWELTCHECK_SILBER`, `CERTIFICATE_DLG_LANDURLAUB`, `CERTIFICATE_DLG_URLAUB_AUF_DEM_WINZERHOF`, `CERTIFICATE_ECARF_ALLERGIKERFREUNDLICH`, `CERTIFICATE_ECHTE_GASTLICHKEIT_SCHWARZWALD`, `CERTIFICATE_ECHT_NACHHALTIG`, `CERTIFICATE_ECOCAMPING`, `CERTIFICATE_EMPFOHLENES_WEINHOTEL_BADEN_WUERTTEMBERG`, `CERTIFICATE_FAMILIEN_FERIEN`, `CERTIFICATE_FAMILIEN_RESTAURANTS`, `CERTIFICATE_FIVE_STAR_CH`, `CERTIFICATE_FIVE_STAR_GASTROSUISSE_CH`, `CERTIFICATE_FIVE_STAR_HOTELLERIESUISSE_CH`, `CERTIFICATE_FIVE_STAR_SERVICED_APARTMENTS_CH`, `CERTIFICATE_FIVE_STAR_SUPERIOR_CH`, `CERTIFICATE_FIVE_STAR_SUPERIOR_HOTTELLERIESUISSE_CH`, `CERTIFICATE_FOUR_STAR_CH`, `CERTIFICATE_FOUR_STAR_GASTROSUISSE_CH`, `CERTIFICATE_FOUR_STAR_HOTELLERIESUISSE_CH`, `CERTIFICATE_FOUR_STAR_SERVICED_APARTMENTS_CH`, `CERTIFICATE_FOUR_STAR_SUPERIOR_CH`, `CERTIFICATE_FOUR_STAR_SUPERIOR_HOTTELLERIESUISSE_CH`, `CERTIFICATE_GLIDE_RESTAAURANTS_CH`, `CERTIFICATE_GREENSIGN_LEVEL_3`, `CERTIFICATE_GREENSIGN_LEVEL_4`, `CERTIFICATE_IBEX_FAIRSTAY_CH`, `CERTIFICATE_LAND_URLAUB`, `CERTIFICATE_MICHELIN_STERN`, `CERTIFICATE_MOEHNETALRADWEG`, `CERTIFICATE_MOTORBIKE_FRIENDLY`, `CERTIFICATE_NACHHALTIGE_FERIENIMMOBILIE`, `CERTIFICATE_NATURPARK_WIRTE`, `CERTIFICATE_OHNE_GLUTEN_CH`, `CERTIFICATE_ONE_STAR_CH`, `CERTIFICATE_ONE_STAR_GASTROSUISSE_CH`, `CERTIFICATE_ONE_STAR_HOTELLERIESUISSE_CH`, `CERTIFICATE_ONE_STAR_SERVICED_APARTMENTS_CH`, `CERTIFICATE_ONE_STAR_SUPERIOR_CH`, `CERTIFICATE_ONE_STAR_SUPERIOR_HOTELLERIESUISSE_CH`, `CERTIFICATE_PARTNER_NATIONALPARK_SCHWARZWALD`, `CERTIFICATE_QUALITAETSBETRIEB_ROTHAARSTEIG`, `CERTIFICATE_SAUERLAENDER_WANDERGASTHOEFE`, `CERTIFICATE_SAUERLAND_HOEHENFLUG`, `CERTIFICATE_SCHMALLENBERGER_KINDERLAND`, `CERTIFICATE_SCHMECK_DEN_SUEDEN`, `CERTIFICATE_SCHNEESPORTHOTEL_HOTELLERIESUISSE_CH`, `CERTIFICATE_SCHWARZWALD_BALANCE`, `CERTIFICATE_SCHWARZWALD_PLUS`, `CERTIFICATE_SERVICE_QUALITAET_DEUTSCHLAND`, `CERTIFICATE_STERNE_IM_SAUERLAND`, `CERTIFICATE_STV_FIVE_STARS_CH`, `CERTIFICATE_STV_FIVE_STARS_SUP_CH`, `CERTIFICATE_STV_FOUR_STARS_CH`, `CERTIFICATE_STV_FOUR_STARS_SUP_CH`, `CERTIFICATE_STV_ONE_STAR_CH`, `CERTIFICATE_STV_ONE_STAR_SUP_CH`, `CERTIFICATE_STV_THREE_STARS_CH`, `CERTIFICATE_STV_THREE_STARS_SUP_CH`, `CERTIFICATE_STV_TWO_STARS_CH`, `CERTIFICATE_STV_TWO_STARS_SUP_CH`, `CERTIFICATE_SWISS_HISTORIC_HOTELS_CH`, `CERTIFICATE_SWISS_LODGE_HOTTELIERSUISSE_CH`, `CERTIFICATE_SWISSTAINABLE_LEVEL_ONE_CH`, `CERTIFICATE_SWISSTAINABLE_LEVEL_TWO_CH`, `CERTIFICATE_SWISSTAINSABLE_LEVEL_THREE_CH`, `CERTIFICATE_THREE_STAR_CH`, `CERTIFICATE_THREE_STAR_GASTROSUISSE_CH`, `CERTIFICATE_THREE_STAR_HOTELLERIESUISSE_CH`, `CERTIFICATE_THREE_STAR_SERVICED_APARTMENTS_CH`, `CERTIFICATE_THREE_STAR_SUPERIOR_CH`, `CERTIFICATE_THREE_STAR_SUPERIOR_HOTTELLERIESUISSE_CH`, `CERTIFICATE_TRAUFGAENGE_GASTGEBER`, `CERTIFICATE_TWO_STAR_CH`, `CERTIFICATE_TWO_STAR_GASTROSUISSE_CH`, `CERTIFICATE_TWO_STAR_HOTELLERIESUISSE_CH`, `CERTIFICATE_TWO_STAR_SERVICED_APARTMENTS_CH`, `CERTIFICATE_TWO_STAR_SUPERIOR_CH`, `CERTIFICATE_TWO_STAR_SUPERIOR_HOTTELLERIESUISSE_CH`, `CERTIFICATE_URLAUB_AUF_DEM_BAUERNHOF`, `CERTIFICATE_URLAUB_AUF_DEM_BAUERNHOF_GER`, `CERTIFICATE_WANDERBARES_DEUTSCHLAND`, `CERTIFICATE_WANDERBARES_DEUTSCHLAND_GASTRONOMIE`, `CERTIFICATE_WANDER_HOTEL_HOTTELIERSUISSE_CH`, `CERTIFICATE_WELLNESS_AND_SPA_HOTTELIERSUISSE_CH`, `CERTIFICATE_WELLNESS_HOTEL_HOTTELIERSUISSE_CH`, `CERTIFICATE_WELLNESS_STARS_DEUTSCHLAND`, `CERTIFICATE_WIN_CHARTA_DES_LANDES_BADEN_WUERTTEMBERG`, `CERTIFICATE_WINTERSPORTARENA_SAUERLAND`, `DREIWELTEN_CARD`, `ECHT_BODENSEE_CARD`, `GUESTCARD`, `HOCHSCHWARZWALD_CARD`, `SAUERLAND_CARD`, `SAUERLAND_SOMMER_CARD`, `SCHMALLENBERGER_SAUERLAND_CARD`, `WILLINGEN_MEINE_CARD`, `MARKENPARTNER`, `CERTIFICATE_URLAUBS_WINZERHOF`, `CERTIFICATE_URLAUBS_REITERHOF`, `CERTIFICATE_SCHWARZWALD_`, `BALANCE`, `CERTIFICATE_VIABONO`, `CERTIFICATE_MEDICAL_WELLNESS_THREE_STARS`, `CERTIFICATE_MEDICAL_WELLNESS_FOUR_STARS`, `CERTIFICATE_MEDICAL_WELLNESS_FIVE_STARS`, `CERTIFICATE_VIA_MICHELIN_TWO_STARS`, `CERTIFICATE_VIA_MICHELIN_THREE_STARS`, `CERTIFICATE_BRONZE_DEHOGA`, `CERTIFICATE_BIKE_AREA_SAUERLAND`, `CERTIFICATE_SAUERLAND_WALDROUTE`, `CERTIFICATE_KAISERSTUEHLER_WINZERHOF`, `CERTIFICATE_WEINHOTELS_KAISERSTUHL`, `CERTIFICATE_KOSTENLOS_STORNIERBAR_GARANTIE`, `CERTIFICATE_WIR_FUER_SIE`, `CERTIFICATE_PARTNER_BIOSPHAERENGEBIET_SCHWAEBISCHE_ALB`, `CERTIFICATE_REISEN_FUER_ALLE`, `CERTIFICATE_DLG_`, `LANDURLAUB`, `CERTIFICATE_BIOSFERA_PARTNERBETRIEB_CH`, `THEMENPARTNER_KULTUR`, `THEMENPARTNER_RAD`, `THEMENPARTNER_WANDERN`, `THEMENPARTNER_FAMILIE`, `THEMENPARTNER_WELLNESS`, `TOP_GASTGEBER_BOFE`, `LUNCH`, `DINNER`; example: `"POOL"`)
- `maxAmount` (integer (int32)) — Max Amount (example: `1`)
- `privateUsage` (boolean) — Facility is in private use (example: `true`)
- `additionalFeesApply` (boolean) — Additional fees apply for the use of this facility (example: `true`)
- `room` (Room) — Room
- `roomId` (string) — A unique identifier for the room (example: `"123"`)
- `roomType` (string) — Room type (one of: `BED_ROOM`, `LIVING_ROOM`, `BATH_ROOM`, `KITCHEN`; example: `"BED_ROOM"`)
- `availableTime` (FacilityAvailabilityData)
- `availableFrom` (AvailableTime) — Time until facility would be available
- `pointInMonth` (string) — Point in the month (one of: `BEGINNING`, `MIDDLE`, `END`; example: `"MIDDLE"`)
- `month` (string) — Month (one of: `JANUARY`, `FEBRUARY`, `MARCH`, `APRIL`, `MAY`, `JUNE`, `JULY`, `AUGUST`, `SEPTEMBER`, `OCTOBER`, `NOVEMBER`, `DECEMBER`; example: `"JANUARY"`)
- `availableTo` (AvailableTime) — Time until facility would be available
- `pointInMonth` (string) — Point in the month (one of: `BEGINNING`, `MIDDLE`, `END`; example: `"MIDDLE"`)
- `month` (string) — Month (one of: `JANUARY`, `FEBRUARY`, `MARCH`, `APRIL`, `MAY`, `JUNE`, `JULY`, `AUGUST`, `SEPTEMBER`, `OCTOBER`, `NOVEMBER`, `DECEMBER`; example: `"JANUARY"`)
- `location` (string) — Location of facility (one of: `UNDEFINED`, `NEAR_BY`, `IN_APARTMENT`; example: `"NEAR_BY"`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
[
{
"type": "POOL",
"maxAmount": 1,
"privateUsage": true,
"additionalFeesApply": true,
"room": {
"roomId": "123",
"roomType": "BED_ROOM"
},
"availableTime": {
"availableFrom": {
"pointInMonth": "MIDDLE",
"month": "JANUARY"
},
"availableTo": {
"pointInMonth": "MIDDLE",
"month": "JANUARY"
}
},
"location": "NEAR_BY"
}
]
```
### 400 — Bad Request
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Bad Request"
}
```
### 401 — Authentication error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Authentication error"
}
```
### 404 — Apartment does not exist
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Apartment does not exist"
}
```
### 500 — Internal server error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Internal server error"
}
```
## Error body: `HoliduErrorResponse`
- `error` (string) — Error Text (example: `"Invalid Json: Unexpected character"`)
---
# Update facilities for an apartment
Source: https://developer.holidu.com/reference/updatefacilities
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
`POST /v2/facilities`
- Operation ID: `updateFacilities`
- Tags: Facilities
- Base URL: https://provider-api-sandbox.holidu.com (Sandbox Environment)
- Base URL: https://provider-api.holidu.com (Holidu Production API)
- Auth: send the API key in the `api-key` header
- Full spec: https://developer.holidu.com/openapi/connectivity-api.json
## Parameters
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `providerApartmentId` | query | string | no | |
| `provider` | query | string | no | |
| `holiduApartmentId` | query | integer (int64) | no | |
## Request body (required)
Content type `application/json`, schema `array of ApartmentFacility`:
- `name` (string)
- `type` (string) — Facility type. Here you should map your facilities to ours. The allowed values can be taken from GET /v2/facilities/types (one of: `SMOKING_ALLOWED`, `SMOKING_NOT_ALLOWED`, `SMOKING_AREA`, `PETS_ALLOWED`, `PETS_ALLOWED_ON_REQUEST`, `PETS_ALLOWED_SMALL_PETS`, `PETS_ALLOWED_CAT`, `PETS_ALLOWED_DOG`, `PETS_ALLOWED_DOG_MAX_10_KG`, `PETS_ALLOWED_DOG_MORE_THAN_10_KG`, `PETS_NOT_ALLOWED`, `PETS_ON_AVAILABILITY`, `VIEW`, `VIEW_OCEAN`, `VIEW_LAKE`, `VIEW_CITY`, `VIEW_GARDEN`, `VIEW_LANDMARK`, `VIEW_MOUNTAIN`, `VIEW_RIVER`, `VIEW_SEA`, `VIEW_BEACH`, `VIEW_GOLF_COURSE`, `VIEW_WATER`, `VIEW_INNER_COURTYARD`, `VIEW_POOL`, `WATERFRONT`, `BARRIER_FREE`, `SUITABLE_FOR_DISABLED`, `SUITABLE_FOR_ELDERLY`, `BARRIER_FREE_NOT`, `ENERGY`, `ENERGY_SOLAR`, `ENERGY_WIND`, `WATER_HOT`, `ROOF_FLAT`, `ENTRANCE_PRIVATE`, `ROOF_THATCHED`, `ANIMALS`, `ANIMALS_CAT`, `ANIMALS_DOG`, `ANIMALS_FARM`, `POOL`, `POOL_PRIVATE`, `POOL_CHILDREN`, `POOL_HEATED`, `POOL_INFINITY`, `POOL_TOYS`, `POOL_ROOFTOP`, `POOL_SEASONALLY_OPENED`, `POOL_FENCED`, `WHIRLPOOL`, `WHIRLPOOL_BATHTUB`, `ELEVATOR`, `INTERNET`, `INTERNET_NOT`, `INTERNET_WIFI`, `INTERNET_LAN`, `SAUNA`, `INFRARED_CABIN`, `CHIMNEY`, `STOVE_WOOD`, `FIREPLACE`, `CHILDFRIENDLY`, `RENOVATED`, `ALLERGY_FRIENDLY`, `BEST_PRICE`, `FOR_EVENTS`, `LUXURY`, `QUIET`, `VISITED_BY_HOLIDU`, `WASHER`, `DRYER`, `WASHER_DRYER_COMBO`, `FLAT_IRON`, `FLAT_IRON_AND_BOARD`, `HEATING`, `HEATING_NOT`, `HEATING_OIL`, `HEATING_GAS`, `HEATING_UNDERFLOOR`, `HEATING_WOOD_STOVE`, `HEATING_ELECTRIC`, `AIR_CONDITION`, `VENTILATOR`, `SOLARIUM`, `POOL_INDOOR`, `POOL_INDOOR_CHILDREN`, `WHIRLPOOL_INDOOR`, `TV`, `TV_CHILDREN`, `TV_LCD`, `TV_FLAT_SCREEN`, `TV_GERMAN_CHANNELS`, `TV_FRENCH_CHANNELS`, `TV_ENGLISH_CHANNELS`, `TV_SPANISH_CHANNELS`, `TV_DUTCH_CHANNELS`, `TV_DANISH_CHANNELS`, `TV_ITALIAN_CHANNELS`, `TV_INTERNATIONAL_CHANNELS`, `TV_CABLE`, `TV_SATELLITE`, `TV_DIGITAL`, `TV_PAY_PER_VIEW`, `BEAMER`, `BLURAY_PLAYER`, `DVD_PLAYER`, `CD_PLAYER`, `RADIO`, `MP3_PLAYER`, `IPOD_DOCK`, `SPEAKERS`, `SOUND_SYSTEM`, `COMPUTER`, `TELEPHONE`, `HIGHCHAIR`, `PLAYROOM`, `ROOMS_LOUNGE`, `INTERCOM`, `FIRE_PIT`, `FIRE_EXTINGUISHER`, `FIRE_ALARM`, `CARBONMONOXIDE_DETECTOR`, `ALARM_HOUSE`, `BED_KING`, `BED_QUEEN`, `BED_DOUBLE`, `BED_SINGLE`, `BED_CHILDREN`, `BED_BABY`, `BED_EXTRA`, `BED_SLEEPING_COUCH`, `BED_SLEEPING_COUCH_2`, `BED_SLEEPING_COUCH_1`, `BED_FOLDAWAY`, `BED_BUNK`, `BED_BUNK_1`, `BED_BUNK_2`, `BED_FLOOR_MATTRESS`, `BED_AIR_MATTRESS`, `ROOMS_DININGROOM`, `ROOMS_LIVINGROOM`, `ROOMS_SINGLE`, `ROOMS_DOUBLE`, `ROOMS_FAMILY`, `ROOMS_BATHROOM`, `ROOMS_BEDROOM`, `ROOMS_COMMON`, `SUITED_FOR_GROUPS`, `OUTDOOR_DINING_AREA`, `SAFE`, `BALCONY_TERRACE`, `BALCONY`, `BALCONY_COVERED`, `BALCONY_UNCOVERED`, `TERRACE`, `TERRACE_COVERED`, `TERRACE_UNCOVERED`, `TERRACE_ROOFTOP`, `GARDEN`, `HOUSEOWNED_BEACH`, `GARDEN_FURNITURE`, `HAMMOCK`, `STROLLER`, `DECK_CHAIR`, `BEACH_CHAIR`, `POOL_OUTDOOR`, `POOL_OUTDOOR_CHILDREN`, `WHIRLPOOL_OUTDOOR`, `STEAMBATH`, `FENCED_PROPERTY`, `FENCED_PROPERTY_NOT`, `TOYS`, `TOYS_BOARD_GAME`, `TOYS_BOOKS`, `TOYS_BOOKS_FOR_CHILDREN`, `TOYS_DVDS`, `TOYS_DVDS_FOR_CHILDREN`, `GAME_CONSOLE_PS3`, `GAME_CONSOLE_PS4`, `GAME_CONSOLE_XBOX_ONE`, `GAME_CONSOLE_XBOX_360`, `GAME_CONSOLE_WII`, `GAME_CONSOLE_OTHER`, `PLAYGROUND`, `GRILL`, `GRILL_GAS`, `GRILL_COAL`, `GRILL_ELECTRIC`, `PARKING`, `PARKING_SPOT`, `PARKING_AT_OBJECT`, `PARKING_GARAGE`, `PARKING_CARPORT`, `PARKING_STREET`, `PARKING_SECURE`, `PARKING_DISABLED`, `CONSERVATORY`, `BICYCLE_RACK`, `BICYCLE_CELLAR`, `BICYCLE_RENTALS_ON_SITE`, `LANDING_STAGE`, `SKI_IN_OUT`, `SKI_BUS_AT_PROPERTY`, `PARASOL`, `KITCHEN`, `KITCHEN_NOT`, `KITCHENETTE`, `OVEN`, `COOKTOP`, `MICROWAVE`, `FRIDGE`, `ICE_MAKER`, `FREEZER`, `FRIDGE_FREEZER_COMBINATION`, `DISHWASHER`, `WATER_HEATER`, `COFFEE_TEA_MACHINE`, `COFFEE_MACHINE`, `ESPRESSO_MACHINE`, `COFFEE`, `MIXER`, `TOASTER`, `JUICER`, `MINIBAR`, `KETTLE`, `SPICES`, `DISHES`, `CUTLERY`, `KITCHEN_UTENSILS`, `SHOWER`, `SHOWER_BATHTUB_COMBO`, `SHOWER_BATHTUB`, `SHOWER_OUTSIDE`, `BATHTUB`, `SEPARATE_TOILET`, `EN_SUITE_TOILET`, `HAIRDRYER`, `VACUUM_CLEANER`, `IRONING_BOARD`, `TROUSERPRESS`, `WARDROBE`, `CLOTHES_HANGERS`, `FURNITURE_DESK`, `CURTAINS_BLACKOUT`, `SMOKE_DETECTOR`, `TOWELS`, `TOWELS_BEACH_POOL`, `TOWELS_NOT`, `TOILETRIES`, `BEDLINEN`, `BEDLINEN_NOT`, `DISHCLOTH`, `BATHROBE`, `BREAKFAST`, `HALF_BOARD`, `LUNCHSERVICE_PACKED`, `CHILDCARE`, `BIKE_RENTAL`, `SKI_RENTAL`, `SKI_STORAGE`, `SKI_PASS`, `SCOOTER_RENTAL`, `CAR_RENTAL`, `BOAT_RENTAL`, `BIKE_PROVIDED`, `BOAT_PROVIDED`, `AIRPORT_SHUTTLE`, `SHUTTLE_SERVICE`, `FIRST_AID_KIT`, `DOORMAN`, `RECEPTION_24H`, `ATM`, `DRY_CLEANING`, `IRONING_SERVICE`, `LUGGAGE_STORAGE`, `CURRENCY_EXCHANGE`, `RESTAURANT`, `MINIMARKET`, `HOUSEKEEPING`, `HOUSEKEEPING_DAILY`, `HOUSEKEEPING_WEEKLY`, `BOOK_WITHOUT_CREDIT_CARD`, `CHEQUES_VACANCES`, `GROUPS_NOT_ALLOWED`, `YOUTH_GROUPS_NOT_ALLOWED`, `YOUTH_GROUPS_ALLOWED`, `SUITABLE_YOUNG_PEOPLE`, `SUITABLE_CHILDREN`, `SUITABLE_CHILDREN_NO`, `CHILDREN_NOT_ALLOWED`, `FAMILY_FRIENDLY`, `HOUSEOWNER_LIVES_ONSPOT`, `LONGTERM_STAYS_ALLOWED`, `CHECKIN_HOST`, `CHECKIN_SELF`, `KEY_CARD_ACCESS`, `LOCATION_GROUND_FLOOR`, `LOCATION_UPPER_FLOOR`, `WINTER_SPORTS`, `WATER_SPORTS`, `SKI_VACATION`, `BEACH_VACATION`, `FARM_VACATION`, `NATURE`, `WELLNESS`, `WELLNESS_TREATMENTS`, `WELLNESS_AREA`, `GYM`, `TENNIS_COURT`, `GOLF`, `MINIGOLF`, `FISHING`, `SAILING`, `HIKING`, `HORSEBACK_RIDING`, `WATERPARK`, `SURFING`, `WINDSURFING`, `KITESURFING`, `BIKING`, `DIVING`, `MOUNTAIN_BIKING`, `BOAT_TRIP`, `BILLIARD_TABLE`, `TABLE_TENNIS`, `PUBLIC_TRANSPORTATION`, `CHILDREN_ALLOWED`, `SINK`, `BASKETBALL`, `BIKE`, `BOAT`, `VOLLEY_BALL_COURT`, `GOLF_COURT`, `CROSS_COUNTRY_SKI`, `BY_THE_WATER`, `IN_THE_SKI_RESORT`, `CLOSE_TO_SKI_LIFTS`, `SKI_PASS_DISCOUNTED`, `SKI_PASS_INCLUDED`, `SKI_RENTAL_DISCOUNTED`, `SKI_RENTAL_INCLUDED`, `SKI_SCHOOL_DISCOUNTED`, `SKI_SCHOOL_INCLUDED`, `BIKE_STORAGE`, `LGBTQ_FRIENDLY`, `GREEN_PROPERTY`, `EVENT_FRIENDLY`, `PRIVATE_BEACH`, `BEACH_ACCESS`, `BEACH_FRONT`, `LAKE_FRONT`, `WATER_FRONT`, `OCEAN_FRONT`, `ELECTRIC_VEHICLE_CHARGING_STATION`, `ELECTRIC_BIKE_CHARGING_STATION`, `MOBILITY_PUBLIC_TRANSPORT`, `MOBILITY_BIKES`, `MOBILITY_EBIKES`, `RENEWABLE_ENERGY`, `RECYCLING_GLASS`, `RECYCLING_PAPER`, `RECYCLING_PLASTIC`, `RECYCLING_ORGANIC`, `ENERGY_SAVING_SOLAR_PANELS`, `ENERGY_SAVING_WIND_POWER`, `ENERGY_SAVING_METHANE_DIGESTER`, `ENERGY_SAVING_SOLAR_COLLECTOR`, `ENERGY_SAVING_LIGHTING`, `ENERGY_SAVING_SMART_CONTROLS`, `ENERGY_SOLAR_THERMAL_PANELS`, `ENERGY_HEAT_PUMPS`, `ENERGY_GREEN_ELECTRICITY_PROVIDER`, `ENERGY_BIOMASS`, `ENERGY_GEOTHERMICS`, `ENERGY_INFRARED_HEATING_PANELS`, `ENERGY_MASONRY_HEATER`, `INSULATION_GLASS`, `INSULATION_ROOF`, `INSULATION_WALL`, `INSULATION_FLOOR`, `INSULATION_NATURAL_MATERIALS`, `INSULATION_GREEN_COOL_ROOF`, `WATER_SAVING_SHOWER`, `WATER_SAVING_TOILET`, `WATER_SAVING_TAPS`, `RAINWATER_TREATMENT`, `GREY_WATER_SYSTEM`, `OWN_PRODUCE_JAM`, `OWN_PRODUCE_VEGETABLES`, `OWN_PRODUCE_HERBS`, `OWN_PRODUCE_OLIVE_OIL`, `OWN_PRODUCE_HONEY`, `OWN_PRODUCE_FRUITS`, `OWN_PRODUCE_EGGS`, `OWN_PRODUCE_CHEESE`, `OWN_PRODUCE_BREAD`, `OWN_PRODUCE_NUTS`, `ECO_CLEANING_PRODUCTS`, `SUSTAINABLE_CONSTRUCTION`, `EVENT_MEAL`, `EVENT_BIRTHDAY_CHILD`, `EVENT_BABY_SHOWER`, `EVENT_STAG_PARTY`, `EVENT_WEDDING`, `EVENT_BIRTHDAY_ADULT`, `SHOWER_ROLL_IN`, `SHOWER_GRAB_RAILS`, `TOILET_RAISED`, `WIDE_DOORS`, `STEP_FREE_ACCESS`, `BATHTUB_CHAIR`, `BATHROOM_TURNING_CYCLE_MIN_1_5_M`, `BATHROOM_EMERGENCY_CORD`, `STEP_FREE_INTERIOR`, `SHOWER_CHAIR`, `TOILET_GRAB_RAILS`, `BATHROOM_SINK_LOWERED`, `INTERNET_WIFI_FOR_VIDEO_CALLS`, `DRINKING_WATER_BOTTLED`, `DISH_DETERGENT`, `SHAMPOO`, `PARTIES_NOT_ALLOWED`, `LAUNDRY`, `LAUNDRY_SERVICE`, `WATER_PARK`, `CORONA_RULES_APPLIED`, `SOUTERRAIN`, `BOWLING`, `KEGELBAHN`, `YOGA_SCHOOL`, `UNIT_SIZE`, `PRINTER`, `PIANO`, `BABYSITTING_SERVICES`, `ROOM_SERVICE`, `HOUR_SEC`, `_24HOUR_SECURITY`, `AIR_PURIFIER`, `BABY_MONITOR`, `BED_EXTRA_LONG`, `BIDET`, `BOOT_DRIER`, `BREAD_SERVICE`, `BROADCAST_LIVE_SPORT`, `CANOEING`, `CASHLESS_PAYMENT`, `CLEANING_PRODUCTS`, `CLOTHES_DRYING_RACK`, `COFFEE_GRINDER`, `CONCIERGE`, `COOKING_CLASS`, `EXPRESS_CHECKINOUT`, `ECOTOURISM`, `FLOOR_CARPETING`, `GROCERY_DELIVERY`, `HOT_SPRINGS`, `HYPOALLERGENIC_PILLOW`, `JET_SKIING`, `KAYAKING`, `KIDS_CLUB`, `LIVE_MUSIC`, `MEAL_DELIVERY`, `MOSQUITO_NET`, `MOTORBOATING`, `NEWSPAPER`, `NO_STEP_FREE_ACCESS`, `NORDIC_WALKING`, `RECYCLING`, `SANDBOX`, `SHOPPING`, `SKI_SCHOOL`, `SKIING`, `SNORKELING`, `SUNLOUNGER`, `TOOTHBRUSH`, `TRAMPOLINE`, `TV_STREAMING`, `VISUAL_AID_BRAILLE`, `VISUAL_AID_TACTILE_SIGNS`, `WILDLIFE_VIEWING`, `WINERY`, `WING_FOIL`, `STAND_UP_PADDLING`, `CLIMBING`, `SWIMMING`, `PARAGLIDING`, `RUNNING`, `CANYONING`, `YOGA`, `PARTNER_SUSTAINABILITY_BADGE`, `GASTGEBER_MIT_HERZ`, `ALLGAEU_TOP_HOTELS`, `CERTIFICATE_4FUER3`, `CERTIFICATE_ADAC_CAMPINGPLATZ_AUSZEICHNUNG`, `CERTIFICATE_ALBCARD`, `CERTIFICATE_ALB_CROSSING`, `CERTIFICATE_ALBSTEIG`, `CERTIFICATE_BAG_OBSTHOF`, `CERTIFICATE_BAG_URLAUB_AUF_DEM_BAUERNHOF`, `CERTIFICATE_BARRIEREFREI_ERLEBEN`, `CERTIFICATE_BARRIEREFREIE_UNTERKUNFT_OKGO_CH`, `CERTIFICATE_BERGSTEIGERDOERFER_CH`, `CERTIFICATE_BETT_UND_BIKE`, `CERTIFICATE_BETT_UND_BIKE_ADFC`, `CERTIFICATE_BIKE_HOTEL_HOTTELIERSUISSE_CH`, `CERTIFICATE_BIOSPHAEREN_GASTGEBER`, `CERTIFICATE_CAUSE_WE_CARE_CH`, `CERTIFICATE_DEHOGA_UMWELTCHECK_GOLD`, `CERTIFICATE_DEHOGA_UMWELTCHECK_SILBER`, `CERTIFICATE_DLG_LANDURLAUB`, `CERTIFICATE_DLG_URLAUB_AUF_DEM_WINZERHOF`, `CERTIFICATE_ECARF_ALLERGIKERFREUNDLICH`, `CERTIFICATE_ECHTE_GASTLICHKEIT_SCHWARZWALD`, `CERTIFICATE_ECHT_NACHHALTIG`, `CERTIFICATE_ECOCAMPING`, `CERTIFICATE_EMPFOHLENES_WEINHOTEL_BADEN_WUERTTEMBERG`, `CERTIFICATE_FAMILIEN_FERIEN`, `CERTIFICATE_FAMILIEN_RESTAURANTS`, `CERTIFICATE_FIVE_STAR_CH`, `CERTIFICATE_FIVE_STAR_GASTROSUISSE_CH`, `CERTIFICATE_FIVE_STAR_HOTELLERIESUISSE_CH`, `CERTIFICATE_FIVE_STAR_SERVICED_APARTMENTS_CH`, `CERTIFICATE_FIVE_STAR_SUPERIOR_CH`, `CERTIFICATE_FIVE_STAR_SUPERIOR_HOTTELLERIESUISSE_CH`, `CERTIFICATE_FOUR_STAR_CH`, `CERTIFICATE_FOUR_STAR_GASTROSUISSE_CH`, `CERTIFICATE_FOUR_STAR_HOTELLERIESUISSE_CH`, `CERTIFICATE_FOUR_STAR_SERVICED_APARTMENTS_CH`, `CERTIFICATE_FOUR_STAR_SUPERIOR_CH`, `CERTIFICATE_FOUR_STAR_SUPERIOR_HOTTELLERIESUISSE_CH`, `CERTIFICATE_GLIDE_RESTAAURANTS_CH`, `CERTIFICATE_GREENSIGN_LEVEL_3`, `CERTIFICATE_GREENSIGN_LEVEL_4`, `CERTIFICATE_IBEX_FAIRSTAY_CH`, `CERTIFICATE_LAND_URLAUB`, `CERTIFICATE_MICHELIN_STERN`, `CERTIFICATE_MOEHNETALRADWEG`, `CERTIFICATE_MOTORBIKE_FRIENDLY`, `CERTIFICATE_NACHHALTIGE_FERIENIMMOBILIE`, `CERTIFICATE_NATURPARK_WIRTE`, `CERTIFICATE_OHNE_GLUTEN_CH`, `CERTIFICATE_ONE_STAR_CH`, `CERTIFICATE_ONE_STAR_GASTROSUISSE_CH`, `CERTIFICATE_ONE_STAR_HOTELLERIESUISSE_CH`, `CERTIFICATE_ONE_STAR_SERVICED_APARTMENTS_CH`, `CERTIFICATE_ONE_STAR_SUPERIOR_CH`, `CERTIFICATE_ONE_STAR_SUPERIOR_HOTELLERIESUISSE_CH`, `CERTIFICATE_PARTNER_NATIONALPARK_SCHWARZWALD`, `CERTIFICATE_QUALITAETSBETRIEB_ROTHAARSTEIG`, `CERTIFICATE_SAUERLAENDER_WANDERGASTHOEFE`, `CERTIFICATE_SAUERLAND_HOEHENFLUG`, `CERTIFICATE_SCHMALLENBERGER_KINDERLAND`, `CERTIFICATE_SCHMECK_DEN_SUEDEN`, `CERTIFICATE_SCHNEESPORTHOTEL_HOTELLERIESUISSE_CH`, `CERTIFICATE_SCHWARZWALD_BALANCE`, `CERTIFICATE_SCHWARZWALD_PLUS`, `CERTIFICATE_SERVICE_QUALITAET_DEUTSCHLAND`, `CERTIFICATE_STERNE_IM_SAUERLAND`, `CERTIFICATE_STV_FIVE_STARS_CH`, `CERTIFICATE_STV_FIVE_STARS_SUP_CH`, `CERTIFICATE_STV_FOUR_STARS_CH`, `CERTIFICATE_STV_FOUR_STARS_SUP_CH`, `CERTIFICATE_STV_ONE_STAR_CH`, `CERTIFICATE_STV_ONE_STAR_SUP_CH`, `CERTIFICATE_STV_THREE_STARS_CH`, `CERTIFICATE_STV_THREE_STARS_SUP_CH`, `CERTIFICATE_STV_TWO_STARS_CH`, `CERTIFICATE_STV_TWO_STARS_SUP_CH`, `CERTIFICATE_SWISS_HISTORIC_HOTELS_CH`, `CERTIFICATE_SWISS_LODGE_HOTTELIERSUISSE_CH`, `CERTIFICATE_SWISSTAINABLE_LEVEL_ONE_CH`, `CERTIFICATE_SWISSTAINABLE_LEVEL_TWO_CH`, `CERTIFICATE_SWISSTAINSABLE_LEVEL_THREE_CH`, `CERTIFICATE_THREE_STAR_CH`, `CERTIFICATE_THREE_STAR_GASTROSUISSE_CH`, `CERTIFICATE_THREE_STAR_HOTELLERIESUISSE_CH`, `CERTIFICATE_THREE_STAR_SERVICED_APARTMENTS_CH`, `CERTIFICATE_THREE_STAR_SUPERIOR_CH`, `CERTIFICATE_THREE_STAR_SUPERIOR_HOTTELLERIESUISSE_CH`, `CERTIFICATE_TRAUFGAENGE_GASTGEBER`, `CERTIFICATE_TWO_STAR_CH`, `CERTIFICATE_TWO_STAR_GASTROSUISSE_CH`, `CERTIFICATE_TWO_STAR_HOTELLERIESUISSE_CH`, `CERTIFICATE_TWO_STAR_SERVICED_APARTMENTS_CH`, `CERTIFICATE_TWO_STAR_SUPERIOR_CH`, `CERTIFICATE_TWO_STAR_SUPERIOR_HOTTELLERIESUISSE_CH`, `CERTIFICATE_URLAUB_AUF_DEM_BAUERNHOF`, `CERTIFICATE_URLAUB_AUF_DEM_BAUERNHOF_GER`, `CERTIFICATE_WANDERBARES_DEUTSCHLAND`, `CERTIFICATE_WANDERBARES_DEUTSCHLAND_GASTRONOMIE`, `CERTIFICATE_WANDER_HOTEL_HOTTELIERSUISSE_CH`, `CERTIFICATE_WELLNESS_AND_SPA_HOTTELIERSUISSE_CH`, `CERTIFICATE_WELLNESS_HOTEL_HOTTELIERSUISSE_CH`, `CERTIFICATE_WELLNESS_STARS_DEUTSCHLAND`, `CERTIFICATE_WIN_CHARTA_DES_LANDES_BADEN_WUERTTEMBERG`, `CERTIFICATE_WINTERSPORTARENA_SAUERLAND`, `DREIWELTEN_CARD`, `ECHT_BODENSEE_CARD`, `GUESTCARD`, `HOCHSCHWARZWALD_CARD`, `SAUERLAND_CARD`, `SAUERLAND_SOMMER_CARD`, `SCHMALLENBERGER_SAUERLAND_CARD`, `WILLINGEN_MEINE_CARD`, `MARKENPARTNER`, `CERTIFICATE_URLAUBS_WINZERHOF`, `CERTIFICATE_URLAUBS_REITERHOF`, `CERTIFICATE_SCHWARZWALD_`, `BALANCE`, `CERTIFICATE_VIABONO`, `CERTIFICATE_MEDICAL_WELLNESS_THREE_STARS`, `CERTIFICATE_MEDICAL_WELLNESS_FOUR_STARS`, `CERTIFICATE_MEDICAL_WELLNESS_FIVE_STARS`, `CERTIFICATE_VIA_MICHELIN_TWO_STARS`, `CERTIFICATE_VIA_MICHELIN_THREE_STARS`, `CERTIFICATE_BRONZE_DEHOGA`, `CERTIFICATE_BIKE_AREA_SAUERLAND`, `CERTIFICATE_SAUERLAND_WALDROUTE`, `CERTIFICATE_KAISERSTUEHLER_WINZERHOF`, `CERTIFICATE_WEINHOTELS_KAISERSTUHL`, `CERTIFICATE_KOSTENLOS_STORNIERBAR_GARANTIE`, `CERTIFICATE_WIR_FUER_SIE`, `CERTIFICATE_PARTNER_BIOSPHAERENGEBIET_SCHWAEBISCHE_ALB`, `CERTIFICATE_REISEN_FUER_ALLE`, `CERTIFICATE_DLG_`, `LANDURLAUB`, `CERTIFICATE_BIOSFERA_PARTNERBETRIEB_CH`, `THEMENPARTNER_KULTUR`, `THEMENPARTNER_RAD`, `THEMENPARTNER_WANDERN`, `THEMENPARTNER_FAMILIE`, `THEMENPARTNER_WELLNESS`, `TOP_GASTGEBER_BOFE`, `LUNCH`, `DINNER`; example: `"POOL"`)
- `maxAmount` (integer (int32)) — Max Amount (example: `1`)
- `privateUsage` (boolean) — Facility is in private use (example: `true`)
- `additionalFeesApply` (boolean) — Additional fees apply for the use of this facility (example: `true`)
- `room` (Room) — Room
- `roomId` (string) — A unique identifier for the room (example: `"123"`)
- `roomType` (string) — Room type (one of: `BED_ROOM`, `LIVING_ROOM`, `BATH_ROOM`, `KITCHEN`; example: `"BED_ROOM"`)
- `availableTime` (FacilityAvailabilityData)
- `availableFrom` (AvailableTime) — Time until facility would be available
- `pointInMonth` (string) — Point in the month (one of: `BEGINNING`, `MIDDLE`, `END`; example: `"MIDDLE"`)
- `month` (string) — Month (one of: `JANUARY`, `FEBRUARY`, `MARCH`, `APRIL`, `MAY`, `JUNE`, `JULY`, `AUGUST`, `SEPTEMBER`, `OCTOBER`, `NOVEMBER`, `DECEMBER`; example: `"JANUARY"`)
- `availableTo` (AvailableTime) — Time until facility would be available
- `pointInMonth` (string) — Point in the month (one of: `BEGINNING`, `MIDDLE`, `END`; example: `"MIDDLE"`)
- `month` (string) — Month (one of: `JANUARY`, `FEBRUARY`, `MARCH`, `APRIL`, `MAY`, `JUNE`, `JULY`, `AUGUST`, `SEPTEMBER`, `OCTOBER`, `NOVEMBER`, `DECEMBER`; example: `"JANUARY"`)
- `location` (string) — Location of facility (one of: `UNDEFINED`, `NEAR_BY`, `IN_APARTMENT`; example: `"NEAR_BY"`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
[
{
"type": "POOL",
"maxAmount": 1,
"privateUsage": true,
"additionalFeesApply": true,
"room": {
"roomId": "123",
"roomType": "BED_ROOM"
},
"availableTime": {
"availableFrom": {
"pointInMonth": "MIDDLE",
"month": "JANUARY"
},
"availableTo": {
"pointInMonth": "MIDDLE",
"month": "JANUARY"
}
},
"location": "NEAR_BY"
}
]
```
## Responses
### 200 — Updated list of apartment facilities
Body `application/json`, schema `array of ApartmentFacility`:
- `name` (string)
- `type` (string) — Facility type. Here you should map your facilities to ours. The allowed values can be taken from GET /v2/facilities/types (one of: `SMOKING_ALLOWED`, `SMOKING_NOT_ALLOWED`, `SMOKING_AREA`, `PETS_ALLOWED`, `PETS_ALLOWED_ON_REQUEST`, `PETS_ALLOWED_SMALL_PETS`, `PETS_ALLOWED_CAT`, `PETS_ALLOWED_DOG`, `PETS_ALLOWED_DOG_MAX_10_KG`, `PETS_ALLOWED_DOG_MORE_THAN_10_KG`, `PETS_NOT_ALLOWED`, `PETS_ON_AVAILABILITY`, `VIEW`, `VIEW_OCEAN`, `VIEW_LAKE`, `VIEW_CITY`, `VIEW_GARDEN`, `VIEW_LANDMARK`, `VIEW_MOUNTAIN`, `VIEW_RIVER`, `VIEW_SEA`, `VIEW_BEACH`, `VIEW_GOLF_COURSE`, `VIEW_WATER`, `VIEW_INNER_COURTYARD`, `VIEW_POOL`, `WATERFRONT`, `BARRIER_FREE`, `SUITABLE_FOR_DISABLED`, `SUITABLE_FOR_ELDERLY`, `BARRIER_FREE_NOT`, `ENERGY`, `ENERGY_SOLAR`, `ENERGY_WIND`, `WATER_HOT`, `ROOF_FLAT`, `ENTRANCE_PRIVATE`, `ROOF_THATCHED`, `ANIMALS`, `ANIMALS_CAT`, `ANIMALS_DOG`, `ANIMALS_FARM`, `POOL`, `POOL_PRIVATE`, `POOL_CHILDREN`, `POOL_HEATED`, `POOL_INFINITY`, `POOL_TOYS`, `POOL_ROOFTOP`, `POOL_SEASONALLY_OPENED`, `POOL_FENCED`, `WHIRLPOOL`, `WHIRLPOOL_BATHTUB`, `ELEVATOR`, `INTERNET`, `INTERNET_NOT`, `INTERNET_WIFI`, `INTERNET_LAN`, `SAUNA`, `INFRARED_CABIN`, `CHIMNEY`, `STOVE_WOOD`, `FIREPLACE`, `CHILDFRIENDLY`, `RENOVATED`, `ALLERGY_FRIENDLY`, `BEST_PRICE`, `FOR_EVENTS`, `LUXURY`, `QUIET`, `VISITED_BY_HOLIDU`, `WASHER`, `DRYER`, `WASHER_DRYER_COMBO`, `FLAT_IRON`, `FLAT_IRON_AND_BOARD`, `HEATING`, `HEATING_NOT`, `HEATING_OIL`, `HEATING_GAS`, `HEATING_UNDERFLOOR`, `HEATING_WOOD_STOVE`, `HEATING_ELECTRIC`, `AIR_CONDITION`, `VENTILATOR`, `SOLARIUM`, `POOL_INDOOR`, `POOL_INDOOR_CHILDREN`, `WHIRLPOOL_INDOOR`, `TV`, `TV_CHILDREN`, `TV_LCD`, `TV_FLAT_SCREEN`, `TV_GERMAN_CHANNELS`, `TV_FRENCH_CHANNELS`, `TV_ENGLISH_CHANNELS`, `TV_SPANISH_CHANNELS`, `TV_DUTCH_CHANNELS`, `TV_DANISH_CHANNELS`, `TV_ITALIAN_CHANNELS`, `TV_INTERNATIONAL_CHANNELS`, `TV_CABLE`, `TV_SATELLITE`, `TV_DIGITAL`, `TV_PAY_PER_VIEW`, `BEAMER`, `BLURAY_PLAYER`, `DVD_PLAYER`, `CD_PLAYER`, `RADIO`, `MP3_PLAYER`, `IPOD_DOCK`, `SPEAKERS`, `SOUND_SYSTEM`, `COMPUTER`, `TELEPHONE`, `HIGHCHAIR`, `PLAYROOM`, `ROOMS_LOUNGE`, `INTERCOM`, `FIRE_PIT`, `FIRE_EXTINGUISHER`, `FIRE_ALARM`, `CARBONMONOXIDE_DETECTOR`, `ALARM_HOUSE`, `BED_KING`, `BED_QUEEN`, `BED_DOUBLE`, `BED_SINGLE`, `BED_CHILDREN`, `BED_BABY`, `BED_EXTRA`, `BED_SLEEPING_COUCH`, `BED_SLEEPING_COUCH_2`, `BED_SLEEPING_COUCH_1`, `BED_FOLDAWAY`, `BED_BUNK`, `BED_BUNK_1`, `BED_BUNK_2`, `BED_FLOOR_MATTRESS`, `BED_AIR_MATTRESS`, `ROOMS_DININGROOM`, `ROOMS_LIVINGROOM`, `ROOMS_SINGLE`, `ROOMS_DOUBLE`, `ROOMS_FAMILY`, `ROOMS_BATHROOM`, `ROOMS_BEDROOM`, `ROOMS_COMMON`, `SUITED_FOR_GROUPS`, `OUTDOOR_DINING_AREA`, `SAFE`, `BALCONY_TERRACE`, `BALCONY`, `BALCONY_COVERED`, `BALCONY_UNCOVERED`, `TERRACE`, `TERRACE_COVERED`, `TERRACE_UNCOVERED`, `TERRACE_ROOFTOP`, `GARDEN`, `HOUSEOWNED_BEACH`, `GARDEN_FURNITURE`, `HAMMOCK`, `STROLLER`, `DECK_CHAIR`, `BEACH_CHAIR`, `POOL_OUTDOOR`, `POOL_OUTDOOR_CHILDREN`, `WHIRLPOOL_OUTDOOR`, `STEAMBATH`, `FENCED_PROPERTY`, `FENCED_PROPERTY_NOT`, `TOYS`, `TOYS_BOARD_GAME`, `TOYS_BOOKS`, `TOYS_BOOKS_FOR_CHILDREN`, `TOYS_DVDS`, `TOYS_DVDS_FOR_CHILDREN`, `GAME_CONSOLE_PS3`, `GAME_CONSOLE_PS4`, `GAME_CONSOLE_XBOX_ONE`, `GAME_CONSOLE_XBOX_360`, `GAME_CONSOLE_WII`, `GAME_CONSOLE_OTHER`, `PLAYGROUND`, `GRILL`, `GRILL_GAS`, `GRILL_COAL`, `GRILL_ELECTRIC`, `PARKING`, `PARKING_SPOT`, `PARKING_AT_OBJECT`, `PARKING_GARAGE`, `PARKING_CARPORT`, `PARKING_STREET`, `PARKING_SECURE`, `PARKING_DISABLED`, `CONSERVATORY`, `BICYCLE_RACK`, `BICYCLE_CELLAR`, `BICYCLE_RENTALS_ON_SITE`, `LANDING_STAGE`, `SKI_IN_OUT`, `SKI_BUS_AT_PROPERTY`, `PARASOL`, `KITCHEN`, `KITCHEN_NOT`, `KITCHENETTE`, `OVEN`, `COOKTOP`, `MICROWAVE`, `FRIDGE`, `ICE_MAKER`, `FREEZER`, `FRIDGE_FREEZER_COMBINATION`, `DISHWASHER`, `WATER_HEATER`, `COFFEE_TEA_MACHINE`, `COFFEE_MACHINE`, `ESPRESSO_MACHINE`, `COFFEE`, `MIXER`, `TOASTER`, `JUICER`, `MINIBAR`, `KETTLE`, `SPICES`, `DISHES`, `CUTLERY`, `KITCHEN_UTENSILS`, `SHOWER`, `SHOWER_BATHTUB_COMBO`, `SHOWER_BATHTUB`, `SHOWER_OUTSIDE`, `BATHTUB`, `SEPARATE_TOILET`, `EN_SUITE_TOILET`, `HAIRDRYER`, `VACUUM_CLEANER`, `IRONING_BOARD`, `TROUSERPRESS`, `WARDROBE`, `CLOTHES_HANGERS`, `FURNITURE_DESK`, `CURTAINS_BLACKOUT`, `SMOKE_DETECTOR`, `TOWELS`, `TOWELS_BEACH_POOL`, `TOWELS_NOT`, `TOILETRIES`, `BEDLINEN`, `BEDLINEN_NOT`, `DISHCLOTH`, `BATHROBE`, `BREAKFAST`, `HALF_BOARD`, `LUNCHSERVICE_PACKED`, `CHILDCARE`, `BIKE_RENTAL`, `SKI_RENTAL`, `SKI_STORAGE`, `SKI_PASS`, `SCOOTER_RENTAL`, `CAR_RENTAL`, `BOAT_RENTAL`, `BIKE_PROVIDED`, `BOAT_PROVIDED`, `AIRPORT_SHUTTLE`, `SHUTTLE_SERVICE`, `FIRST_AID_KIT`, `DOORMAN`, `RECEPTION_24H`, `ATM`, `DRY_CLEANING`, `IRONING_SERVICE`, `LUGGAGE_STORAGE`, `CURRENCY_EXCHANGE`, `RESTAURANT`, `MINIMARKET`, `HOUSEKEEPING`, `HOUSEKEEPING_DAILY`, `HOUSEKEEPING_WEEKLY`, `BOOK_WITHOUT_CREDIT_CARD`, `CHEQUES_VACANCES`, `GROUPS_NOT_ALLOWED`, `YOUTH_GROUPS_NOT_ALLOWED`, `YOUTH_GROUPS_ALLOWED`, `SUITABLE_YOUNG_PEOPLE`, `SUITABLE_CHILDREN`, `SUITABLE_CHILDREN_NO`, `CHILDREN_NOT_ALLOWED`, `FAMILY_FRIENDLY`, `HOUSEOWNER_LIVES_ONSPOT`, `LONGTERM_STAYS_ALLOWED`, `CHECKIN_HOST`, `CHECKIN_SELF`, `KEY_CARD_ACCESS`, `LOCATION_GROUND_FLOOR`, `LOCATION_UPPER_FLOOR`, `WINTER_SPORTS`, `WATER_SPORTS`, `SKI_VACATION`, `BEACH_VACATION`, `FARM_VACATION`, `NATURE`, `WELLNESS`, `WELLNESS_TREATMENTS`, `WELLNESS_AREA`, `GYM`, `TENNIS_COURT`, `GOLF`, `MINIGOLF`, `FISHING`, `SAILING`, `HIKING`, `HORSEBACK_RIDING`, `WATERPARK`, `SURFING`, `WINDSURFING`, `KITESURFING`, `BIKING`, `DIVING`, `MOUNTAIN_BIKING`, `BOAT_TRIP`, `BILLIARD_TABLE`, `TABLE_TENNIS`, `PUBLIC_TRANSPORTATION`, `CHILDREN_ALLOWED`, `SINK`, `BASKETBALL`, `BIKE`, `BOAT`, `VOLLEY_BALL_COURT`, `GOLF_COURT`, `CROSS_COUNTRY_SKI`, `BY_THE_WATER`, `IN_THE_SKI_RESORT`, `CLOSE_TO_SKI_LIFTS`, `SKI_PASS_DISCOUNTED`, `SKI_PASS_INCLUDED`, `SKI_RENTAL_DISCOUNTED`, `SKI_RENTAL_INCLUDED`, `SKI_SCHOOL_DISCOUNTED`, `SKI_SCHOOL_INCLUDED`, `BIKE_STORAGE`, `LGBTQ_FRIENDLY`, `GREEN_PROPERTY`, `EVENT_FRIENDLY`, `PRIVATE_BEACH`, `BEACH_ACCESS`, `BEACH_FRONT`, `LAKE_FRONT`, `WATER_FRONT`, `OCEAN_FRONT`, `ELECTRIC_VEHICLE_CHARGING_STATION`, `ELECTRIC_BIKE_CHARGING_STATION`, `MOBILITY_PUBLIC_TRANSPORT`, `MOBILITY_BIKES`, `MOBILITY_EBIKES`, `RENEWABLE_ENERGY`, `RECYCLING_GLASS`, `RECYCLING_PAPER`, `RECYCLING_PLASTIC`, `RECYCLING_ORGANIC`, `ENERGY_SAVING_SOLAR_PANELS`, `ENERGY_SAVING_WIND_POWER`, `ENERGY_SAVING_METHANE_DIGESTER`, `ENERGY_SAVING_SOLAR_COLLECTOR`, `ENERGY_SAVING_LIGHTING`, `ENERGY_SAVING_SMART_CONTROLS`, `ENERGY_SOLAR_THERMAL_PANELS`, `ENERGY_HEAT_PUMPS`, `ENERGY_GREEN_ELECTRICITY_PROVIDER`, `ENERGY_BIOMASS`, `ENERGY_GEOTHERMICS`, `ENERGY_INFRARED_HEATING_PANELS`, `ENERGY_MASONRY_HEATER`, `INSULATION_GLASS`, `INSULATION_ROOF`, `INSULATION_WALL`, `INSULATION_FLOOR`, `INSULATION_NATURAL_MATERIALS`, `INSULATION_GREEN_COOL_ROOF`, `WATER_SAVING_SHOWER`, `WATER_SAVING_TOILET`, `WATER_SAVING_TAPS`, `RAINWATER_TREATMENT`, `GREY_WATER_SYSTEM`, `OWN_PRODUCE_JAM`, `OWN_PRODUCE_VEGETABLES`, `OWN_PRODUCE_HERBS`, `OWN_PRODUCE_OLIVE_OIL`, `OWN_PRODUCE_HONEY`, `OWN_PRODUCE_FRUITS`, `OWN_PRODUCE_EGGS`, `OWN_PRODUCE_CHEESE`, `OWN_PRODUCE_BREAD`, `OWN_PRODUCE_NUTS`, `ECO_CLEANING_PRODUCTS`, `SUSTAINABLE_CONSTRUCTION`, `EVENT_MEAL`, `EVENT_BIRTHDAY_CHILD`, `EVENT_BABY_SHOWER`, `EVENT_STAG_PARTY`, `EVENT_WEDDING`, `EVENT_BIRTHDAY_ADULT`, `SHOWER_ROLL_IN`, `SHOWER_GRAB_RAILS`, `TOILET_RAISED`, `WIDE_DOORS`, `STEP_FREE_ACCESS`, `BATHTUB_CHAIR`, `BATHROOM_TURNING_CYCLE_MIN_1_5_M`, `BATHROOM_EMERGENCY_CORD`, `STEP_FREE_INTERIOR`, `SHOWER_CHAIR`, `TOILET_GRAB_RAILS`, `BATHROOM_SINK_LOWERED`, `INTERNET_WIFI_FOR_VIDEO_CALLS`, `DRINKING_WATER_BOTTLED`, `DISH_DETERGENT`, `SHAMPOO`, `PARTIES_NOT_ALLOWED`, `LAUNDRY`, `LAUNDRY_SERVICE`, `WATER_PARK`, `CORONA_RULES_APPLIED`, `SOUTERRAIN`, `BOWLING`, `KEGELBAHN`, `YOGA_SCHOOL`, `UNIT_SIZE`, `PRINTER`, `PIANO`, `BABYSITTING_SERVICES`, `ROOM_SERVICE`, `HOUR_SEC`, `_24HOUR_SECURITY`, `AIR_PURIFIER`, `BABY_MONITOR`, `BED_EXTRA_LONG`, `BIDET`, `BOOT_DRIER`, `BREAD_SERVICE`, `BROADCAST_LIVE_SPORT`, `CANOEING`, `CASHLESS_PAYMENT`, `CLEANING_PRODUCTS`, `CLOTHES_DRYING_RACK`, `COFFEE_GRINDER`, `CONCIERGE`, `COOKING_CLASS`, `EXPRESS_CHECKINOUT`, `ECOTOURISM`, `FLOOR_CARPETING`, `GROCERY_DELIVERY`, `HOT_SPRINGS`, `HYPOALLERGENIC_PILLOW`, `JET_SKIING`, `KAYAKING`, `KIDS_CLUB`, `LIVE_MUSIC`, `MEAL_DELIVERY`, `MOSQUITO_NET`, `MOTORBOATING`, `NEWSPAPER`, `NO_STEP_FREE_ACCESS`, `NORDIC_WALKING`, `RECYCLING`, `SANDBOX`, `SHOPPING`, `SKI_SCHOOL`, `SKIING`, `SNORKELING`, `SUNLOUNGER`, `TOOTHBRUSH`, `TRAMPOLINE`, `TV_STREAMING`, `VISUAL_AID_BRAILLE`, `VISUAL_AID_TACTILE_SIGNS`, `WILDLIFE_VIEWING`, `WINERY`, `WING_FOIL`, `STAND_UP_PADDLING`, `CLIMBING`, `SWIMMING`, `PARAGLIDING`, `RUNNING`, `CANYONING`, `YOGA`, `PARTNER_SUSTAINABILITY_BADGE`, `GASTGEBER_MIT_HERZ`, `ALLGAEU_TOP_HOTELS`, `CERTIFICATE_4FUER3`, `CERTIFICATE_ADAC_CAMPINGPLATZ_AUSZEICHNUNG`, `CERTIFICATE_ALBCARD`, `CERTIFICATE_ALB_CROSSING`, `CERTIFICATE_ALBSTEIG`, `CERTIFICATE_BAG_OBSTHOF`, `CERTIFICATE_BAG_URLAUB_AUF_DEM_BAUERNHOF`, `CERTIFICATE_BARRIEREFREI_ERLEBEN`, `CERTIFICATE_BARRIEREFREIE_UNTERKUNFT_OKGO_CH`, `CERTIFICATE_BERGSTEIGERDOERFER_CH`, `CERTIFICATE_BETT_UND_BIKE`, `CERTIFICATE_BETT_UND_BIKE_ADFC`, `CERTIFICATE_BIKE_HOTEL_HOTTELIERSUISSE_CH`, `CERTIFICATE_BIOSPHAEREN_GASTGEBER`, `CERTIFICATE_CAUSE_WE_CARE_CH`, `CERTIFICATE_DEHOGA_UMWELTCHECK_GOLD`, `CERTIFICATE_DEHOGA_UMWELTCHECK_SILBER`, `CERTIFICATE_DLG_LANDURLAUB`, `CERTIFICATE_DLG_URLAUB_AUF_DEM_WINZERHOF`, `CERTIFICATE_ECARF_ALLERGIKERFREUNDLICH`, `CERTIFICATE_ECHTE_GASTLICHKEIT_SCHWARZWALD`, `CERTIFICATE_ECHT_NACHHALTIG`, `CERTIFICATE_ECOCAMPING`, `CERTIFICATE_EMPFOHLENES_WEINHOTEL_BADEN_WUERTTEMBERG`, `CERTIFICATE_FAMILIEN_FERIEN`, `CERTIFICATE_FAMILIEN_RESTAURANTS`, `CERTIFICATE_FIVE_STAR_CH`, `CERTIFICATE_FIVE_STAR_GASTROSUISSE_CH`, `CERTIFICATE_FIVE_STAR_HOTELLERIESUISSE_CH`, `CERTIFICATE_FIVE_STAR_SERVICED_APARTMENTS_CH`, `CERTIFICATE_FIVE_STAR_SUPERIOR_CH`, `CERTIFICATE_FIVE_STAR_SUPERIOR_HOTTELLERIESUISSE_CH`, `CERTIFICATE_FOUR_STAR_CH`, `CERTIFICATE_FOUR_STAR_GASTROSUISSE_CH`, `CERTIFICATE_FOUR_STAR_HOTELLERIESUISSE_CH`, `CERTIFICATE_FOUR_STAR_SERVICED_APARTMENTS_CH`, `CERTIFICATE_FOUR_STAR_SUPERIOR_CH`, `CERTIFICATE_FOUR_STAR_SUPERIOR_HOTTELLERIESUISSE_CH`, `CERTIFICATE_GLIDE_RESTAAURANTS_CH`, `CERTIFICATE_GREENSIGN_LEVEL_3`, `CERTIFICATE_GREENSIGN_LEVEL_4`, `CERTIFICATE_IBEX_FAIRSTAY_CH`, `CERTIFICATE_LAND_URLAUB`, `CERTIFICATE_MICHELIN_STERN`, `CERTIFICATE_MOEHNETALRADWEG`, `CERTIFICATE_MOTORBIKE_FRIENDLY`, `CERTIFICATE_NACHHALTIGE_FERIENIMMOBILIE`, `CERTIFICATE_NATURPARK_WIRTE`, `CERTIFICATE_OHNE_GLUTEN_CH`, `CERTIFICATE_ONE_STAR_CH`, `CERTIFICATE_ONE_STAR_GASTROSUISSE_CH`, `CERTIFICATE_ONE_STAR_HOTELLERIESUISSE_CH`, `CERTIFICATE_ONE_STAR_SERVICED_APARTMENTS_CH`, `CERTIFICATE_ONE_STAR_SUPERIOR_CH`, `CERTIFICATE_ONE_STAR_SUPERIOR_HOTELLERIESUISSE_CH`, `CERTIFICATE_PARTNER_NATIONALPARK_SCHWARZWALD`, `CERTIFICATE_QUALITAETSBETRIEB_ROTHAARSTEIG`, `CERTIFICATE_SAUERLAENDER_WANDERGASTHOEFE`, `CERTIFICATE_SAUERLAND_HOEHENFLUG`, `CERTIFICATE_SCHMALLENBERGER_KINDERLAND`, `CERTIFICATE_SCHMECK_DEN_SUEDEN`, `CERTIFICATE_SCHNEESPORTHOTEL_HOTELLERIESUISSE_CH`, `CERTIFICATE_SCHWARZWALD_BALANCE`, `CERTIFICATE_SCHWARZWALD_PLUS`, `CERTIFICATE_SERVICE_QUALITAET_DEUTSCHLAND`, `CERTIFICATE_STERNE_IM_SAUERLAND`, `CERTIFICATE_STV_FIVE_STARS_CH`, `CERTIFICATE_STV_FIVE_STARS_SUP_CH`, `CERTIFICATE_STV_FOUR_STARS_CH`, `CERTIFICATE_STV_FOUR_STARS_SUP_CH`, `CERTIFICATE_STV_ONE_STAR_CH`, `CERTIFICATE_STV_ONE_STAR_SUP_CH`, `CERTIFICATE_STV_THREE_STARS_CH`, `CERTIFICATE_STV_THREE_STARS_SUP_CH`, `CERTIFICATE_STV_TWO_STARS_CH`, `CERTIFICATE_STV_TWO_STARS_SUP_CH`, `CERTIFICATE_SWISS_HISTORIC_HOTELS_CH`, `CERTIFICATE_SWISS_LODGE_HOTTELIERSUISSE_CH`, `CERTIFICATE_SWISSTAINABLE_LEVEL_ONE_CH`, `CERTIFICATE_SWISSTAINABLE_LEVEL_TWO_CH`, `CERTIFICATE_SWISSTAINSABLE_LEVEL_THREE_CH`, `CERTIFICATE_THREE_STAR_CH`, `CERTIFICATE_THREE_STAR_GASTROSUISSE_CH`, `CERTIFICATE_THREE_STAR_HOTELLERIESUISSE_CH`, `CERTIFICATE_THREE_STAR_SERVICED_APARTMENTS_CH`, `CERTIFICATE_THREE_STAR_SUPERIOR_CH`, `CERTIFICATE_THREE_STAR_SUPERIOR_HOTTELLERIESUISSE_CH`, `CERTIFICATE_TRAUFGAENGE_GASTGEBER`, `CERTIFICATE_TWO_STAR_CH`, `CERTIFICATE_TWO_STAR_GASTROSUISSE_CH`, `CERTIFICATE_TWO_STAR_HOTELLERIESUISSE_CH`, `CERTIFICATE_TWO_STAR_SERVICED_APARTMENTS_CH`, `CERTIFICATE_TWO_STAR_SUPERIOR_CH`, `CERTIFICATE_TWO_STAR_SUPERIOR_HOTTELLERIESUISSE_CH`, `CERTIFICATE_URLAUB_AUF_DEM_BAUERNHOF`, `CERTIFICATE_URLAUB_AUF_DEM_BAUERNHOF_GER`, `CERTIFICATE_WANDERBARES_DEUTSCHLAND`, `CERTIFICATE_WANDERBARES_DEUTSCHLAND_GASTRONOMIE`, `CERTIFICATE_WANDER_HOTEL_HOTTELIERSUISSE_CH`, `CERTIFICATE_WELLNESS_AND_SPA_HOTTELIERSUISSE_CH`, `CERTIFICATE_WELLNESS_HOTEL_HOTTELIERSUISSE_CH`, `CERTIFICATE_WELLNESS_STARS_DEUTSCHLAND`, `CERTIFICATE_WIN_CHARTA_DES_LANDES_BADEN_WUERTTEMBERG`, `CERTIFICATE_WINTERSPORTARENA_SAUERLAND`, `DREIWELTEN_CARD`, `ECHT_BODENSEE_CARD`, `GUESTCARD`, `HOCHSCHWARZWALD_CARD`, `SAUERLAND_CARD`, `SAUERLAND_SOMMER_CARD`, `SCHMALLENBERGER_SAUERLAND_CARD`, `WILLINGEN_MEINE_CARD`, `MARKENPARTNER`, `CERTIFICATE_URLAUBS_WINZERHOF`, `CERTIFICATE_URLAUBS_REITERHOF`, `CERTIFICATE_SCHWARZWALD_`, `BALANCE`, `CERTIFICATE_VIABONO`, `CERTIFICATE_MEDICAL_WELLNESS_THREE_STARS`, `CERTIFICATE_MEDICAL_WELLNESS_FOUR_STARS`, `CERTIFICATE_MEDICAL_WELLNESS_FIVE_STARS`, `CERTIFICATE_VIA_MICHELIN_TWO_STARS`, `CERTIFICATE_VIA_MICHELIN_THREE_STARS`, `CERTIFICATE_BRONZE_DEHOGA`, `CERTIFICATE_BIKE_AREA_SAUERLAND`, `CERTIFICATE_SAUERLAND_WALDROUTE`, `CERTIFICATE_KAISERSTUEHLER_WINZERHOF`, `CERTIFICATE_WEINHOTELS_KAISERSTUHL`, `CERTIFICATE_KOSTENLOS_STORNIERBAR_GARANTIE`, `CERTIFICATE_WIR_FUER_SIE`, `CERTIFICATE_PARTNER_BIOSPHAERENGEBIET_SCHWAEBISCHE_ALB`, `CERTIFICATE_REISEN_FUER_ALLE`, `CERTIFICATE_DLG_`, `LANDURLAUB`, `CERTIFICATE_BIOSFERA_PARTNERBETRIEB_CH`, `THEMENPARTNER_KULTUR`, `THEMENPARTNER_RAD`, `THEMENPARTNER_WANDERN`, `THEMENPARTNER_FAMILIE`, `THEMENPARTNER_WELLNESS`, `TOP_GASTGEBER_BOFE`, `LUNCH`, `DINNER`; example: `"POOL"`)
- `maxAmount` (integer (int32)) — Max Amount (example: `1`)
- `privateUsage` (boolean) — Facility is in private use (example: `true`)
- `additionalFeesApply` (boolean) — Additional fees apply for the use of this facility (example: `true`)
- `room` (Room) — Room
- `roomId` (string) — A unique identifier for the room (example: `"123"`)
- `roomType` (string) — Room type (one of: `BED_ROOM`, `LIVING_ROOM`, `BATH_ROOM`, `KITCHEN`; example: `"BED_ROOM"`)
- `availableTime` (FacilityAvailabilityData)
- `availableFrom` (AvailableTime) — Time until facility would be available
- `pointInMonth` (string) — Point in the month (one of: `BEGINNING`, `MIDDLE`, `END`; example: `"MIDDLE"`)
- `month` (string) — Month (one of: `JANUARY`, `FEBRUARY`, `MARCH`, `APRIL`, `MAY`, `JUNE`, `JULY`, `AUGUST`, `SEPTEMBER`, `OCTOBER`, `NOVEMBER`, `DECEMBER`; example: `"JANUARY"`)
- `availableTo` (AvailableTime) — Time until facility would be available
- `pointInMonth` (string) — Point in the month (one of: `BEGINNING`, `MIDDLE`, `END`; example: `"MIDDLE"`)
- `month` (string) — Month (one of: `JANUARY`, `FEBRUARY`, `MARCH`, `APRIL`, `MAY`, `JUNE`, `JULY`, `AUGUST`, `SEPTEMBER`, `OCTOBER`, `NOVEMBER`, `DECEMBER`; example: `"JANUARY"`)
- `location` (string) — Location of facility (one of: `UNDEFINED`, `NEAR_BY`, `IN_APARTMENT`; example: `"NEAR_BY"`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
[
{
"type": "POOL",
"maxAmount": 1,
"privateUsage": true,
"additionalFeesApply": true,
"room": {
"roomId": "123",
"roomType": "BED_ROOM"
},
"availableTime": {
"availableFrom": {
"pointInMonth": "MIDDLE",
"month": "JANUARY"
},
"availableTo": {
"pointInMonth": "MIDDLE",
"month": "JANUARY"
}
},
"location": "NEAR_BY"
}
]
```
### 400 — Bad Request
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Bad Request"
}
```
### 401 — Authentication error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Authentication error"
}
```
### 404 — Apartment does not exist
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Apartment does not exist"
}
```
### 500 — Internal server error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Internal server error"
}
```
## Error body: `HoliduErrorResponse`
- `error` (string) — Error Text (example: `"Invalid Json: Unexpected character"`)
---
# Get facility types
Source: https://developer.holidu.com/reference/getfacilitytypes
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
`GET /v2/facilities/types`
- Operation ID: `getFacilityTypes`
- Tags: Facilities
- Base URL: https://provider-api-sandbox.holidu.com (Sandbox Environment)
- Base URL: https://provider-api.holidu.com (Holidu Production API)
- Auth: send the API key in the `api-key` header
- Full spec: https://developer.holidu.com/openapi/connectivity-api.json
## Responses
### 200 — List of facility types
Body `application/json`, schema `array of string`:
Example (assembled from the per-field examples in the spec, not an official sample):
```json
[
"SMOKING_ALLOWED"
]
```
### 400 — Bad Request
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Bad Request"
}
```
### 401 — Authentication error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Authentication error"
}
```
### 500 — Internal server error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Internal server error"
}
```
## Error body: `HoliduErrorResponse`
- `error` (string) — Error Text (example: `"Invalid Json: Unexpected character"`)
---
# Get facility locations
Source: https://developer.holidu.com/reference/getfacilitylocations
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
`GET /v2/facilities/locations`
- Operation ID: `getFacilityLocations`
- Tags: Facilities
- Base URL: https://provider-api-sandbox.holidu.com (Sandbox Environment)
- Base URL: https://provider-api.holidu.com (Holidu Production API)
- Auth: send the API key in the `api-key` header
- Full spec: https://developer.holidu.com/openapi/connectivity-api.json
## Responses
### 200 — List of possible facility Locations
Body `application/json`, schema `array of string`:
Example (assembled from the per-field examples in the spec, not an official sample):
```json
[
"UNDEFINED"
]
```
### 400 — Bad Request
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Bad Request"
}
```
### 401 — Authentication error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Authentication error"
}
```
### 500 — Internal server error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Internal server error"
}
```
## Error body: `HoliduErrorResponse`
- `error` (string) — Error Text (example: `"Invalid Json: Unexpected character"`)
---
# Get photos for an apartment
Source: https://developer.holidu.com/reference/getphotos
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
`GET /v2/photos`
- Operation ID: `getPhotos`
- Tags: Photos
- Base URL: https://provider-api-sandbox.holidu.com (Sandbox Environment)
- Base URL: https://provider-api.holidu.com (Holidu Production API)
- Auth: send the API key in the `api-key` header
- Full spec: https://developer.holidu.com/openapi/connectivity-api.json
## Parameters
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `providerApartmentId` | query | string | no | |
| `provider` | query | string | no | |
| `holiduApartmentId` | query | integer (int64) | no | |
## Responses
### 200 — List of photos for the apartment
Body `application/json`, schema `array of PhotoDto`:
- `url` (string, required) — Photo URL (example: `"http://r-ec.bstatic.com/images/hotel/max500/149/14959242.jpg"`)
- `position` (integer (int32), required) — Position of the photo to be shown to the customer (min 1; example: `1`)
- `contentLength` (integer (int64)) — File size of the photo in bytes (min 1)
- `localizations` (array of PhotoLocalizationDto) — Photo titles in different languages
- `language` (string, required) — ISO Language of the Photo Title (min length 2; max length 2)
- `title` (string, required) — Photo Title
Example (assembled from the per-field examples in the spec, not an official sample):
```json
[
{
"url": "http://r-ec.bstatic.com/images/hotel/max500/149/14959242.jpg",
"position": 1
}
]
```
### 400 — Bad Request
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Bad Request"
}
```
### 401 — Authentication error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Authentication error"
}
```
### 404 — Apartment does not exist
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Apartment does not exist"
}
```
### 500 — Internal server error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Internal server error"
}
```
## Error body: `HoliduErrorResponse`
- `error` (string) — Error Text (example: `"Invalid Json: Unexpected character"`)
---
# Update photos for an apartment
Source: https://developer.holidu.com/reference/updatephotos
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
`POST /v2/photos`
- Operation ID: `updatePhotos`
- Tags: Photos
- Base URL: https://provider-api-sandbox.holidu.com (Sandbox Environment)
- Base URL: https://provider-api.holidu.com (Holidu Production API)
- Auth: send the API key in the `api-key` header
- Full spec: https://developer.holidu.com/openapi/connectivity-api.json
## Parameters
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `providerApartmentId` | query | string | no | |
| `provider` | query | string | no | |
| `holiduApartmentId` | query | integer (int64) | no | |
## Request body (required)
Content type `application/json`, schema `array of PhotoDto`:
- `url` (string, required) — Photo URL (example: `"http://r-ec.bstatic.com/images/hotel/max500/149/14959242.jpg"`)
- `position` (integer (int32), required) — Position of the photo to be shown to the customer (min 1; example: `1`)
- `contentLength` (integer (int64)) — File size of the photo in bytes (min 1)
- `localizations` (array of PhotoLocalizationDto) — Photo titles in different languages
- `language` (string, required) — ISO Language of the Photo Title (min length 2; max length 2)
- `title` (string, required) — Photo Title
Example (assembled from the per-field examples in the spec, not an official sample):
```json
[
{
"url": "http://r-ec.bstatic.com/images/hotel/max500/149/14959242.jpg",
"position": 1
}
]
```
## Responses
### 200 — Updated list of photos for the apartment
Body `application/json`, schema `array of PhotoDto`:
- `url` (string, required) — Photo URL (example: `"http://r-ec.bstatic.com/images/hotel/max500/149/14959242.jpg"`)
- `position` (integer (int32), required) — Position of the photo to be shown to the customer (min 1; example: `1`)
- `contentLength` (integer (int64)) — File size of the photo in bytes (min 1)
- `localizations` (array of PhotoLocalizationDto) — Photo titles in different languages
- `language` (string, required) — ISO Language of the Photo Title (min length 2; max length 2)
- `title` (string, required) — Photo Title
Example (assembled from the per-field examples in the spec, not an official sample):
```json
[
{
"url": "http://r-ec.bstatic.com/images/hotel/max500/149/14959242.jpg",
"position": 1
}
]
```
### 400 — Bad Request
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Bad Request"
}
```
### 401 — Authentication error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Authentication error"
}
```
### 404 — Apartment does not exist
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Apartment does not exist"
}
```
### 500 — Internal server error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Internal server error"
}
```
## Error body: `HoliduErrorResponse`
- `error` (string) — Error Text (example: `"Invalid Json: Unexpected character"`)
---
# Get customer reviews for apartment
Source: https://developer.holidu.com/reference/getcustomerreviews
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
`GET /v2/reviews`
- Operation ID: `getCustomerReviews`
- Tags: Reviews
- Base URL: https://provider-api-sandbox.holidu.com (Sandbox Environment)
- Base URL: https://provider-api.holidu.com (Holidu Production API)
- Auth: send the API key in the `api-key` header
- Full spec: https://developer.holidu.com/openapi/connectivity-api.json
## Parameters
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `providerApartmentId` | query | string | no | |
| `provider` | query | string | no | |
| `holiduApartmentId` | query | integer (int64) | no | |
## Responses
### 200 — Successfully retrieved customer reviews for apartment
Body `application/json`, schema `array of CustomerReviewDto`:
- `customerName` (string) — Name of customer. (min length 0; max length 50; example: `"John"`)
- `title` (string) — Summary of the comment (example: `"Beautiful stay"`)
- `country` (string) — Country code represented in standard ISO 3166-1 ALPHA-2 format (min length 2; max length 2; example: `"DE"`)
- `travelDate` (string (date)) — Date of arrival of the customer to the accommodation (example: `"2017-07-31"`)
- `reviewDateTime` (string) — Date of review (example: `"2017-08-12 22:17:31"`)
- `globalRating` (integer (int32), required) — Overall rating of the entire stay (min 0; max 100; example: `90`)
- `location` (integer (int32)) — Rating of the location of the accommodation (min 0; max 100; example: `90`)
- `localService` (integer (int32)) — Rating of the local services (min 0; max 100; example: `95`)
- `furnishings` (integer (int32)) — Rating of the furnishing of the accommodation (min 0; max 100; example: `85`)
- `cleanliness` (integer (int32)) — Rating of the cleanliness of the accommodation (min 0; max 100; example: `70`)
- `valueForMoney` (integer (int32)) — Rating of the value for money spent for the accommodation (min 0; max 100; example: `100`)
- `beach` (integer (int32)) — Rating of the beaches around the accommodation (min 0; max 100; example: `85`)
- `accommodation` (integer (int32)) — Rating of the accommodation. (min 0; max 100; example: `80`)
- `host` (integer (int32)) — Rating of the host (min 0; max 100; example: `100`)
- `language` (string) — Language used for review (min length 2; max length 2; example: `"en"`)
- `text` (string) — Review text (example: `"Great stay, very well located apartment."`)
- `positiveText` (string) — Positive points (example: `"Wonderful accommodation with great services"`)
- `negativeText` (string) — Negative points (example: `"Location far from city center"`)
- `hostResponse` (HostResponseDto) — Host's response to this review (text, language, timestamp). Optional. Only set when the host has replied to the guest review.
- `responseText` (string) — Text of the host's response to the guest review. (example: `"Thank you for your stay!"`)
- `responseLanguage` (string) — Language of the response, ISO 639-1 (2 chars). If unknown, providers may send the most probable one based on the review language. (min length 2; max length 2; example: `"en"`)
- `responseDateTime` (string) — Date and time the host posted (or last edited) the response. If unknown, providers may approximate from the record's last update timestamp. (example: `"2017-08-15 09:00:00"`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
[
{
"customerName": "John",
"title": "Beautiful stay",
"country": "DE",
"travelDate": "2017-07-31",
"reviewDateTime": "2017-08-12 22:17:31",
"globalRating": 90,
"location": 90,
"localService": 95,
"furnishings": 85,
"cleanliness": 70,
"valueForMoney": 100,
"beach": 85,
"accommodation": 80,
"host": 100,
"language": "en",
"text": "Great stay, very well located apartment.",
"positiveText": "Wonderful accommodation with great services",
"negativeText": "Location far from city center",
"hostResponse": {
"responseText": "Thank you for your stay!",
"responseLanguage": "en",
"responseDateTime": "2017-08-15 09:00:00"
}
}
]
```
### 400 — Bad Request
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Bad Request"
}
```
### 401 — Authentication error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Authentication error"
}
```
### 404 — Apartment does not exist
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Apartment does not exist"
}
```
### 500 — Internal server error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Internal server error"
}
```
## Error body: `HoliduErrorResponse`
- `error` (string) — Error Text (example: `"Invalid Json: Unexpected character"`)
---
# Post the customer reviews of an apartment
Source: https://developer.holidu.com/reference/updatecustomerreviews
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
`POST /v2/reviews`
- Operation ID: `updateCustomerReviews`
- Tags: Reviews
- Base URL: https://provider-api-sandbox.holidu.com (Sandbox Environment)
- Base URL: https://provider-api.holidu.com (Holidu Production API)
- Auth: send the API key in the `api-key` header
- Full spec: https://developer.holidu.com/openapi/connectivity-api.json
## Parameters
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `providerApartmentId` | query | string | no | |
| `provider` | query | string | no | |
| `holiduApartmentId` | query | integer (int64) | no | |
| `replaceReviews` | query | boolean | no | |
## Request body (required)
Content type `application/json`, schema `array of CustomerReviewDto`:
- `customerName` (string) — Name of customer. (min length 0; max length 50; example: `"John"`)
- `title` (string) — Summary of the comment (example: `"Beautiful stay"`)
- `country` (string) — Country code represented in standard ISO 3166-1 ALPHA-2 format (min length 2; max length 2; example: `"DE"`)
- `travelDate` (string (date)) — Date of arrival of the customer to the accommodation (example: `"2017-07-31"`)
- `reviewDateTime` (string) — Date of review (example: `"2017-08-12 22:17:31"`)
- `globalRating` (integer (int32), required) — Overall rating of the entire stay (min 0; max 100; example: `90`)
- `location` (integer (int32)) — Rating of the location of the accommodation (min 0; max 100; example: `90`)
- `localService` (integer (int32)) — Rating of the local services (min 0; max 100; example: `95`)
- `furnishings` (integer (int32)) — Rating of the furnishing of the accommodation (min 0; max 100; example: `85`)
- `cleanliness` (integer (int32)) — Rating of the cleanliness of the accommodation (min 0; max 100; example: `70`)
- `valueForMoney` (integer (int32)) — Rating of the value for money spent for the accommodation (min 0; max 100; example: `100`)
- `beach` (integer (int32)) — Rating of the beaches around the accommodation (min 0; max 100; example: `85`)
- `accommodation` (integer (int32)) — Rating of the accommodation. (min 0; max 100; example: `80`)
- `host` (integer (int32)) — Rating of the host (min 0; max 100; example: `100`)
- `language` (string) — Language used for review (min length 2; max length 2; example: `"en"`)
- `text` (string) — Review text (example: `"Great stay, very well located apartment."`)
- `positiveText` (string) — Positive points (example: `"Wonderful accommodation with great services"`)
- `negativeText` (string) — Negative points (example: `"Location far from city center"`)
- `hostResponse` (HostResponseDto) — Host's response to this review (text, language, timestamp). Optional. Only set when the host has replied to the guest review.
- `responseText` (string) — Text of the host's response to the guest review. (example: `"Thank you for your stay!"`)
- `responseLanguage` (string) — Language of the response, ISO 639-1 (2 chars). If unknown, providers may send the most probable one based on the review language. (min length 2; max length 2; example: `"en"`)
- `responseDateTime` (string) — Date and time the host posted (or last edited) the response. If unknown, providers may approximate from the record's last update timestamp. (example: `"2017-08-15 09:00:00"`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
[
{
"customerName": "John",
"title": "Beautiful stay",
"country": "DE",
"travelDate": "2017-07-31",
"reviewDateTime": "2017-08-12 22:17:31",
"globalRating": 90,
"location": 90,
"localService": 95,
"furnishings": 85,
"cleanliness": 70,
"valueForMoney": 100,
"beach": 85,
"accommodation": 80,
"host": 100,
"language": "en",
"text": "Great stay, very well located apartment.",
"positiveText": "Wonderful accommodation with great services",
"negativeText": "Location far from city center",
"hostResponse": {
"responseText": "Thank you for your stay!",
"responseLanguage": "en",
"responseDateTime": "2017-08-15 09:00:00"
}
}
]
```
## Responses
### 200 — Successfully updated customer reviews for apartment
Body `application/json`, schema `array of CustomerReviewDto`:
- `customerName` (string) — Name of customer. (min length 0; max length 50; example: `"John"`)
- `title` (string) — Summary of the comment (example: `"Beautiful stay"`)
- `country` (string) — Country code represented in standard ISO 3166-1 ALPHA-2 format (min length 2; max length 2; example: `"DE"`)
- `travelDate` (string (date)) — Date of arrival of the customer to the accommodation (example: `"2017-07-31"`)
- `reviewDateTime` (string) — Date of review (example: `"2017-08-12 22:17:31"`)
- `globalRating` (integer (int32), required) — Overall rating of the entire stay (min 0; max 100; example: `90`)
- `location` (integer (int32)) — Rating of the location of the accommodation (min 0; max 100; example: `90`)
- `localService` (integer (int32)) — Rating of the local services (min 0; max 100; example: `95`)
- `furnishings` (integer (int32)) — Rating of the furnishing of the accommodation (min 0; max 100; example: `85`)
- `cleanliness` (integer (int32)) — Rating of the cleanliness of the accommodation (min 0; max 100; example: `70`)
- `valueForMoney` (integer (int32)) — Rating of the value for money spent for the accommodation (min 0; max 100; example: `100`)
- `beach` (integer (int32)) — Rating of the beaches around the accommodation (min 0; max 100; example: `85`)
- `accommodation` (integer (int32)) — Rating of the accommodation. (min 0; max 100; example: `80`)
- `host` (integer (int32)) — Rating of the host (min 0; max 100; example: `100`)
- `language` (string) — Language used for review (min length 2; max length 2; example: `"en"`)
- `text` (string) — Review text (example: `"Great stay, very well located apartment."`)
- `positiveText` (string) — Positive points (example: `"Wonderful accommodation with great services"`)
- `negativeText` (string) — Negative points (example: `"Location far from city center"`)
- `hostResponse` (HostResponseDto) — Host's response to this review (text, language, timestamp). Optional. Only set when the host has replied to the guest review.
- `responseText` (string) — Text of the host's response to the guest review. (example: `"Thank you for your stay!"`)
- `responseLanguage` (string) — Language of the response, ISO 639-1 (2 chars). If unknown, providers may send the most probable one based on the review language. (min length 2; max length 2; example: `"en"`)
- `responseDateTime` (string) — Date and time the host posted (or last edited) the response. If unknown, providers may approximate from the record's last update timestamp. (example: `"2017-08-15 09:00:00"`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
[
{
"customerName": "John",
"title": "Beautiful stay",
"country": "DE",
"travelDate": "2017-07-31",
"reviewDateTime": "2017-08-12 22:17:31",
"globalRating": 90,
"location": 90,
"localService": 95,
"furnishings": 85,
"cleanliness": 70,
"valueForMoney": 100,
"beach": 85,
"accommodation": 80,
"host": 100,
"language": "en",
"text": "Great stay, very well located apartment.",
"positiveText": "Wonderful accommodation with great services",
"negativeText": "Location far from city center",
"hostResponse": {
"responseText": "Thank you for your stay!",
"responseLanguage": "en",
"responseDateTime": "2017-08-15 09:00:00"
}
}
]
```
### 400 — Bad Request
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Bad Request"
}
```
### 401 — Authentication error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Authentication error"
}
```
### 404 — Apartment does not exist
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Apartment does not exist"
}
```
### 409 — Conflicting request. Can occur when adding duplicated reviews from the same visit in parallel.
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Conflicting request. Can occur when adding duplicated reviews from the same visit in parallel."
}
```
### 500 — Internal server error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Internal server error"
}
```
## Error body: `HoliduErrorResponse`
- `error` (string) — Error Text (example: `"Invalid Json: Unexpected character"`)
---
# Get LOS for an apartment
Source: https://developer.holidu.com/reference/getlos
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
`GET /v2/los`
- Operation ID: `getLos`
- Tags: LOS
- Base URL: https://provider-api-sandbox.holidu.com (Sandbox Environment)
- Base URL: https://provider-api.holidu.com (Holidu Production API)
- Auth: send the API key in the `api-key` header
- Full spec: https://developer.holidu.com/openapi/connectivity-api.json
## Parameters
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `providerApartmentId` | query | string | no | |
| `provider` | query | string | no | |
| `holiduApartmentId` | query | integer (int64) | no | |
| `rateId` | query | string | no | |
## Responses
### 200 — Successful retrieval of LOS for an apartment
Body `application/json`, schema `LosDto`:
- `los` (map of string (checkInDate) → array of LosItemDto, required) — Length of Stay. Keyed by check-in date (YYYY-MM-DD). Each value lists the price tiers available for that date, one entry per guest count. (example: `{"2019-05-13":[{"currency":"EUR","guests":2,"price":[100,200]},{"currency":"EUR","guests":3,"price":[150,250]}],"2019-05-14":[{"currency":"EUR","guests":2,"price":[300]}]}`)
- `currency` (string, required) (example: `"EUR"`)
- `guests` (integer (int32), required) — Number of guests these prices apply to (example: `2`)
- `price` (array of number, required) — Total stay price indexed by length of stay: index N is the price for an (N+1)-night stay from the check-in date, and 0 means that length of stay is not bookable. At most 62 entries. (example: `[100,200,300,400,500,600,700]`)
- `rateId` (string (string)) — Rate identifier. Identifies the rate this LOS belongs to. Defaults to DEFAULT when omitted. (pattern `DEFAULT|REFUNDABLE|NON_REFUNDABLE`; example: `"NON_REFUNDABLE"`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"los": {
"2019-05-13": [
{
"currency": "EUR",
"guests": 2,
"price": [
100,
200
]
},
{
"currency": "EUR",
"guests": 3,
"price": [
150,
250
]
}
],
"2019-05-14": [
{
"currency": "EUR",
"guests": 2,
"price": [
300
]
}
]
},
"rateId": "NON_REFUNDABLE"
}
```
### 400 — Bad Request
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Bad Request"
}
```
### 401 — Authentication error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Authentication error"
}
```
### 404 — Apartment does not exist
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Apartment does not exist"
}
```
### 500 — Internal server error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Internal server error"
}
```
## Error body: `HoliduErrorResponse`
- `error` (string) — Error Text (example: `"Invalid Json: Unexpected character"`)
---
# Create or update LOS for an apartment
Source: https://developer.holidu.com/reference/upsertlos
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
`POST /v2/los`
- Operation ID: `upsertLos`
- Tags: LOS
- Base URL: https://provider-api-sandbox.holidu.com (Sandbox Environment)
- Base URL: https://provider-api.holidu.com (Holidu Production API)
- Auth: send the API key in the `api-key` header
- Full spec: https://developer.holidu.com/openapi/connectivity-api.json
## Parameters
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `providerApartmentId` | query | string | no | |
| `provider` | query | string | no | |
| `holiduApartmentId` | query | integer (int64) | no | |
## Request body (required)
Content type `application/json`, schema `LosDto`:
- `los` (map of string (checkInDate) → array of LosItemDto, required) — Length of Stay. Keyed by check-in date (YYYY-MM-DD). Each value lists the price tiers available for that date, one entry per guest count. (example: `{"2019-05-13":[{"currency":"EUR","guests":2,"price":[100,200]},{"currency":"EUR","guests":3,"price":[150,250]}],"2019-05-14":[{"currency":"EUR","guests":2,"price":[300]}]}`)
- `currency` (string, required) (example: `"EUR"`)
- `guests` (integer (int32), required) — Number of guests these prices apply to (example: `2`)
- `price` (array of number, required) — Total stay price indexed by length of stay: index N is the price for an (N+1)-night stay from the check-in date, and 0 means that length of stay is not bookable. At most 62 entries. (example: `[100,200,300,400,500,600,700]`)
- `rateId` (string (string)) — Rate identifier. Identifies the rate this LOS belongs to. Defaults to DEFAULT when omitted. (pattern `DEFAULT|REFUNDABLE|NON_REFUNDABLE`; example: `"NON_REFUNDABLE"`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"los": {
"2019-05-13": [
{
"currency": "EUR",
"guests": 2,
"price": [
100,
200
]
},
{
"currency": "EUR",
"guests": 3,
"price": [
150,
250
]
}
],
"2019-05-14": [
{
"currency": "EUR",
"guests": 2,
"price": [
300
]
}
]
},
"rateId": "NON_REFUNDABLE"
}
```
## Responses
### 200 — Successful creation or update of LOS for an apartment
Body `application/json`, schema `LosDto`:
- `los` (map of string (checkInDate) → array of LosItemDto, required) — Length of Stay. Keyed by check-in date (YYYY-MM-DD). Each value lists the price tiers available for that date, one entry per guest count. (example: `{"2019-05-13":[{"currency":"EUR","guests":2,"price":[100,200]},{"currency":"EUR","guests":3,"price":[150,250]}],"2019-05-14":[{"currency":"EUR","guests":2,"price":[300]}]}`)
- `currency` (string, required) (example: `"EUR"`)
- `guests` (integer (int32), required) — Number of guests these prices apply to (example: `2`)
- `price` (array of number, required) — Total stay price indexed by length of stay: index N is the price for an (N+1)-night stay from the check-in date, and 0 means that length of stay is not bookable. At most 62 entries. (example: `[100,200,300,400,500,600,700]`)
- `rateId` (string (string)) — Rate identifier. Identifies the rate this LOS belongs to. Defaults to DEFAULT when omitted. (pattern `DEFAULT|REFUNDABLE|NON_REFUNDABLE`; example: `"NON_REFUNDABLE"`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"los": {
"2019-05-13": [
{
"currency": "EUR",
"guests": 2,
"price": [
100,
200
]
},
{
"currency": "EUR",
"guests": 3,
"price": [
150,
250
]
}
],
"2019-05-14": [
{
"currency": "EUR",
"guests": 2,
"price": [
300
]
}
]
},
"rateId": "NON_REFUNDABLE"
}
```
### 400 — Bad Request
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Bad Request"
}
```
### 401 — Authentication error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Authentication error"
}
```
### 404 — Apartment does not exist
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Apartment does not exist"
}
```
### 500 — Internal server error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Internal server error"
}
```
## Error body: `HoliduErrorResponse`
- `error` (string) — Error Text (example: `"Invalid Json: Unexpected character"`)
---
# Delete LOS for an apartment
Source: https://developer.holidu.com/reference/deletelos
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
`DELETE /v2/los`
- Operation ID: `deleteLos`
- Tags: LOS
- Base URL: https://provider-api-sandbox.holidu.com (Sandbox Environment)
- Base URL: https://provider-api.holidu.com (Holidu Production API)
- Auth: send the API key in the `api-key` header
- Full spec: https://developer.holidu.com/openapi/connectivity-api.json
## Parameters
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `providerApartmentId` | query | string | yes | |
| `provider` | query | string | no | |
| `holiduApartmentId` | query | integer (int64) | no | |
| `rateId` | query | string | no | |
## Responses
### 200 — Successful removal of LOS for an apartment
### 400 — Bad Request
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Bad Request"
}
```
### 401 — Authentication error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Authentication error"
}
```
### 404 — Apartment does not exist
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Apartment does not exist"
}
```
### 500 — Internal server error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Internal server error"
}
```
## Error body: `HoliduErrorResponse`
- `error` (string) — Error Text (example: `"Invalid Json: Unexpected character"`)
---
# Get LOS rate Ids for an apartment
Source: https://developer.holidu.com/reference/getlosrateids
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
`GET /v2/los/rate-ids`
- Operation ID: `getLosRateIds`
- Tags: LOS
- Base URL: https://provider-api-sandbox.holidu.com (Sandbox Environment)
- Base URL: https://provider-api.holidu.com (Holidu Production API)
- Auth: send the API key in the `api-key` header
- Full spec: https://developer.holidu.com/openapi/connectivity-api.json
## Parameters
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `providerApartmentId` | query | string | no | |
| `provider` | query | string | no | |
| `holiduApartmentId` | query | integer (int64) | no | |
## Responses
### 200 — Successful retrieval of LOS rate Ids for an apartment
Body `application/json`, schema `array of string`:
### 400 — Bad Request
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Bad Request"
}
```
### 401 — Authentication error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Authentication error"
}
```
### 404 — Apartment does not exist
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Apartment does not exist"
}
```
### 500 — Internal server error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Internal server error"
}
```
## Error body: `HoliduErrorResponse`
- `error` (string) — Error Text (example: `"Invalid Json: Unexpected character"`)
---
# Get apartment availability
Source: https://developer.holidu.com/reference/getavailability
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
`GET /v2/availability`
- Operation ID: `getAvailability`
- Tags: Availability
- **Deprecated**
- Base URL: https://provider-api-sandbox.holidu.com (Sandbox Environment)
- Base URL: https://provider-api.holidu.com (Holidu Production API)
- Auth: send the API key in the `api-key` header
- Full spec: https://developer.holidu.com/openapi/connectivity-api.json
## Parameters
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `providerApartmentId` | query | string | no | |
| `provider` | query | string | no | |
| `holiduApartmentId` | query | integer (int64) | no | |
## Responses
### 200 — Successful retrieval of apartment availability
Body `application/json`, schema `ApartmentAvailability`:
- `availableDays` (array of string (date))
- `bookedDays` (array of string (date))
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"availableDays": [
"2023-12-29"
],
"bookedDays": [
"2023-12-30"
]
}
```
### 400 — Bad Request
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Bad Request"
}
```
### 401 — Authentication error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Authentication error"
}
```
### 404 — Apartment does not exist
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Apartment does not exist"
}
```
### 500 — Internal server error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Internal server error"
}
```
## Error body: `HoliduErrorResponse`
- `error` (string) — Error Text (example: `"Invalid Json: Unexpected character"`)
---
# Update apartment availability
Source: https://developer.holidu.com/reference/updateavailability
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
`POST /v2/availability`
- Operation ID: `updateAvailability`
- Tags: Availability
- **Deprecated**
- Base URL: https://provider-api-sandbox.holidu.com (Sandbox Environment)
- Base URL: https://provider-api.holidu.com (Holidu Production API)
- Auth: send the API key in the `api-key` header
- Full spec: https://developer.holidu.com/openapi/connectivity-api.json
## Parameters
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `providerApartmentId` | query | string | no | |
| `provider` | query | string | no | |
| `holiduApartmentId` | query | integer (int64) | no | |
## Request body (required)
Content type `application/json`, schema `ApartmentAvailability`:
- `availableDays` (array of string (date))
- `bookedDays` (array of string (date))
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"availableDays": [
"2023-12-29"
],
"bookedDays": [
"2023-12-30"
]
}
```
## Responses
### 200 — Successful update of apartment availability
Body `application/json`, schema `ApartmentAvailability`:
- `availableDays` (array of string (date))
- `bookedDays` (array of string (date))
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"availableDays": [
"2023-12-29"
],
"bookedDays": [
"2023-12-30"
]
}
```
### 400 — Bad Request
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Bad Request"
}
```
### 401 — Authentication error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Authentication error"
}
```
### 404 — Apartment does not exist
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Apartment does not exist"
}
```
### 406 — Request terminated
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Request terminated"
}
```
### 500 — Internal server error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Internal server error"
}
```
## Error body: `HoliduErrorResponse`
- `error` (string) — Error Text (example: `"Invalid Json: Unexpected character"`)
---
# Get apartment rate plans
Source: https://developer.holidu.com/reference/getrates
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
`GET /v2/rates`
- Operation ID: `getRates`
- Tags: Rates
- **Deprecated**
- Base URL: https://provider-api-sandbox.holidu.com (Sandbox Environment)
- Base URL: https://provider-api.holidu.com (Holidu Production API)
- Auth: send the API key in the `api-key` header
- Full spec: https://developer.holidu.com/openapi/connectivity-api.json
## Parameters
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `providerApartmentId` | query | string | no | |
| `provider` | query | string | no | |
| `holiduApartmentId` | query | integer (int64) | no | |
## Responses
### 200 — Successful retrieval of apartment rates
Body `application/json`, schema `ApartmentRates`:
- `ratePlans` (array of RatePlan, required)
- `ratePlanId` (string, required) — Unique identifier for this rate plan (example: `"SHORT_STAY_RATE"`)
- `guests` (integer (int32), required) — Number of guests. Allowed number of guests must be between 1 and 100 (min 1; max 100; example: `2`)
- `currency` (string, required) (example: `"EUR"`)
- `minimumStay` (integer (int32), required) — Minimum Stay (days) (example: `1`)
- `maximumStay` (integer (int32)) — Maximum Stay (days) (example: `30`)
- `dailyRates` (array of DailyRate, required) — List of daily rates
- `date` (string (date), required) — Date (example: `"2023-05-01"`)
- `price` (number, required) — Daily price (example: `95`)
- `priceForExtraPerson` (number) — Additional cost per extra person (example: `20`)
- `checkinAllowed` (boolean, required) — Check in is possible on this day (example: `true`)
- `checkoutAllowed` (boolean, required) — Check out is possible on this day (example: `false`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"ratePlans": [
{
"ratePlanId": "SHORT_STAY_RATE",
"guests": 2,
"currency": "EUR",
"minimumStay": 1,
"maximumStay": 30,
"dailyRates": [
{
"date": "2023-05-01",
"price": 95,
"priceForExtraPerson": 20,
"checkinAllowed": true,
"checkoutAllowed": false
}
]
}
]
}
```
### 400 — Bad Request
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Bad Request"
}
```
### 401 — Authentication error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Authentication error"
}
```
### 404 — Apartment does not exist
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Apartment does not exist"
}
```
### 500 — Internal server error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Internal server error"
}
```
## Error body: `HoliduErrorResponse`
- `error` (string) — Error Text (example: `"Invalid Json: Unexpected character"`)
---
# Update apartment rate plans
Source: https://developer.holidu.com/reference/setrates
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
`POST /v2/rates`
- Operation ID: `setRates`
- Tags: Rates
- **Deprecated**
- Base URL: https://provider-api-sandbox.holidu.com (Sandbox Environment)
- Base URL: https://provider-api.holidu.com (Holidu Production API)
- Auth: send the API key in the `api-key` header
- Full spec: https://developer.holidu.com/openapi/connectivity-api.json
## Parameters
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `providerApartmentId` | query | string | no | |
| `provider` | query | string | no | |
| `holiduApartmentId` | query | integer (int64) | no | |
## Request body (required)
Content type `application/json`, schema `ApartmentRates`:
- `ratePlans` (array of RatePlan, required)
- `ratePlanId` (string, required) — Unique identifier for this rate plan (example: `"SHORT_STAY_RATE"`)
- `guests` (integer (int32), required) — Number of guests. Allowed number of guests must be between 1 and 100 (min 1; max 100; example: `2`)
- `currency` (string, required) (example: `"EUR"`)
- `minimumStay` (integer (int32), required) — Minimum Stay (days) (example: `1`)
- `maximumStay` (integer (int32)) — Maximum Stay (days) (example: `30`)
- `dailyRates` (array of DailyRate, required) — List of daily rates
- `date` (string (date), required) — Date (example: `"2023-05-01"`)
- `price` (number, required) — Daily price (example: `95`)
- `priceForExtraPerson` (number) — Additional cost per extra person (example: `20`)
- `checkinAllowed` (boolean, required) — Check in is possible on this day (example: `true`)
- `checkoutAllowed` (boolean, required) — Check out is possible on this day (example: `false`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"ratePlans": [
{
"ratePlanId": "SHORT_STAY_RATE",
"guests": 2,
"currency": "EUR",
"minimumStay": 1,
"maximumStay": 30,
"dailyRates": [
{
"date": "2023-05-01",
"price": 95,
"priceForExtraPerson": 20,
"checkinAllowed": true,
"checkoutAllowed": false
}
]
}
]
}
```
## Responses
### 200 — Successful creation or update of rate plans for the apartment
Body `application/json`, schema `ApartmentRates`:
- `ratePlans` (array of RatePlan, required)
- `ratePlanId` (string, required) — Unique identifier for this rate plan (example: `"SHORT_STAY_RATE"`)
- `guests` (integer (int32), required) — Number of guests. Allowed number of guests must be between 1 and 100 (min 1; max 100; example: `2`)
- `currency` (string, required) (example: `"EUR"`)
- `minimumStay` (integer (int32), required) — Minimum Stay (days) (example: `1`)
- `maximumStay` (integer (int32)) — Maximum Stay (days) (example: `30`)
- `dailyRates` (array of DailyRate, required) — List of daily rates
- `date` (string (date), required) — Date (example: `"2023-05-01"`)
- `price` (number, required) — Daily price (example: `95`)
- `priceForExtraPerson` (number) — Additional cost per extra person (example: `20`)
- `checkinAllowed` (boolean, required) — Check in is possible on this day (example: `true`)
- `checkoutAllowed` (boolean, required) — Check out is possible on this day (example: `false`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"ratePlans": [
{
"ratePlanId": "SHORT_STAY_RATE",
"guests": 2,
"currency": "EUR",
"minimumStay": 1,
"maximumStay": 30,
"dailyRates": [
{
"date": "2023-05-01",
"price": 95,
"priceForExtraPerson": 20,
"checkinAllowed": true,
"checkoutAllowed": false
}
]
}
]
}
```
### 400 — Bad Request
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Bad Request"
}
```
### 401 — Authentication error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Authentication error"
}
```
### 406 — Request terminated
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Request terminated"
}
```
### 500 — Internal server error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Internal server error"
}
```
## Error body: `HoliduErrorResponse`
- `error` (string) — Error Text (example: `"Invalid Json: Unexpected character"`)
---
# Get the extra costs of an apartment
Source: https://developer.holidu.com/reference/getextracosts
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
`GET /v2/apartments/extracosts`
- Operation ID: `getExtraCosts`
- Tags: Extra Costs
- Base URL: https://provider-api-sandbox.holidu.com (Sandbox Environment)
- Base URL: https://provider-api.holidu.com (Holidu Production API)
- Auth: send the API key in the `api-key` header
- Full spec: https://developer.holidu.com/openapi/connectivity-api.json
## Parameters
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `providerApartmentId` | query | string | no | |
| `provider` | query | string | no | |
| `holiduApartmentId` | query | integer (int64) | no | |
## Responses
### 200 — Successfully retrieved extra costs for apartment
Body `application/json`, schema `array of ApartmentExtraCost`:
- `id` (string, required) — An identifier for this extra cost (example: `"XYZ_123"`)
- `name` (string, required) — Name of extra cost (one of: `FINAL_CLEANING`, `EXTRA_CLEANING`, `REFUNDABLE_SECURITY_DEPOSIT`, `TOURIST_OR_CITY_TAX`, `ECO_TAX`, `VAT_OF_RENTAL_PRICE`, `BOOKING_FEE`, `HYGIENE_SURCHARGE`, `PET`, `TRAVEL_INSURANCE`, `TOWEL`, `BEDLINEN`, `TOWEL_BEDLINEN_PACKAGE`, `KITCHEN_TOWELS`, `BEDLINEN_AND_BEDMAKING`, `BABY_BED`, `BABY_CHAIR`, `BABY_COT`, `BABY_BUGGY`, `BABY_HIGH_CHAIR`, `EXTRA_BED`, `HEATING`, `AIRCONDITION`, `FIREWOOD`, `ELECTRICITY`, `WATER`, `GAS`, `SAUNA`, `POOL`, `HOT_TUB`, `WASHING_MACHINE`, `BEACH_SERVICES`, `CLUB_CARD`, `INTERNET`, `PARKING`, `AIRPORT_SHUTTLE`, `BREAKFAST`, `SERVICE_COSTS`; example: `"BEDLINEN"`)
- `basisOfCalculation` (string, required) — How is cost is calculated (one of: `PER_STAY`, `PER_PERSON_PER_NIGHT`, `PER_NIGHT`, `PER_PERSON`, `PER_UNIT`, `PER_UNIT_PER_NIGHT`; example: `"PER_PERSON_PER_NIGHT"`)
- `maximumCount` (integer (int32)) — Maximum units that can be selected for this extra service if the service is selectable (example: `1`)
- `type` (string, required) — Type of service associated with this extra cost (one of: `MANDATORY`, `SELECTABLE`, `ON_USAGE`; example: `"MANDATORY"`)
- `paymentTime` (string, required) — Payment time of extra cost (one of: `ON_BOOKING`, `WITH_RATES`, `ONSITE`; example: `"ONSITE"`)
- `price` (ExtraCostPrice, required) — Price configuration for extra cost
- `type` (string, required) (one of: `PERCENTAGE`, `FIXED`; example: `"PERCENTAGE"`)
- `amount` (number, required) — Price amount dependent on type (example: `90.24`)
- `currency` (string) — Currency (example: `"EUR"`)
- `condition` (ExtraCostCondition) — Conditions applicable for extra cost
- `seasonApplicable` (SeasonApplicable) — Season for which extra cost is applicable
- `onlyApplicableFrom` (string (date)) — Only applicable from date (example: `"2020-08-01"`)
- `onlyApplicableUntil` (string (date)) — Only applicable until date (example: `"2021-04-30"`)
- `numberOfNights` (LengthOfStay) — Extra cost only applicable if lengthOfStay shorter than
- `fromStayLengthInNights` (integer (int32)) — Based on the length of stay, applicable from night (example: `1`)
- `toStayLengthInNights` (integer (int32)) — Based on the length of stay, applicable until night (example: `7`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
[
{
"id": "XYZ_123",
"name": "BEDLINEN",
"basisOfCalculation": "PER_PERSON_PER_NIGHT",
"maximumCount": 1,
"type": "MANDATORY",
"paymentTime": "ONSITE",
"price": {
"type": "PERCENTAGE",
"amount": 90.24,
"currency": "EUR"
},
"condition": {
"seasonApplicable": {
"onlyApplicableFrom": "2020-08-01",
"onlyApplicableUntil": "2021-04-30"
},
"numberOfNights": {
"fromStayLengthInNights": 1,
"toStayLengthInNights": 7
}
}
}
]
```
### 401 — Authentication error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Authentication error"
}
```
### 404 — Apartment does not exist
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Apartment does not exist"
}
```
### 500 — Internal server error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Internal server error"
}
```
## Error body: `HoliduErrorResponse`
- `error` (string) — Error Text (example: `"Invalid Json: Unexpected character"`)
---
# Update the extra costs of an apartment
Source: https://developer.holidu.com/reference/updateextracosts
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
`POST /v2/apartments/extracosts`
- Operation ID: `updateExtraCosts`
- Tags: Extra Costs
- Base URL: https://provider-api-sandbox.holidu.com (Sandbox Environment)
- Base URL: https://provider-api.holidu.com (Holidu Production API)
- Auth: send the API key in the `api-key` header
- Full spec: https://developer.holidu.com/openapi/connectivity-api.json
## Parameters
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `providerApartmentId` | query | string | no | |
| `provider` | query | string | no | |
| `holiduApartmentId` | query | integer (int64) | no | |
## Request body (required)
Content type `application/json`, schema `array of ApartmentExtraCost`:
- `id` (string, required) — An identifier for this extra cost (example: `"XYZ_123"`)
- `name` (string, required) — Name of extra cost (one of: `FINAL_CLEANING`, `EXTRA_CLEANING`, `REFUNDABLE_SECURITY_DEPOSIT`, `TOURIST_OR_CITY_TAX`, `ECO_TAX`, `VAT_OF_RENTAL_PRICE`, `BOOKING_FEE`, `HYGIENE_SURCHARGE`, `PET`, `TRAVEL_INSURANCE`, `TOWEL`, `BEDLINEN`, `TOWEL_BEDLINEN_PACKAGE`, `KITCHEN_TOWELS`, `BEDLINEN_AND_BEDMAKING`, `BABY_BED`, `BABY_CHAIR`, `BABY_COT`, `BABY_BUGGY`, `BABY_HIGH_CHAIR`, `EXTRA_BED`, `HEATING`, `AIRCONDITION`, `FIREWOOD`, `ELECTRICITY`, `WATER`, `GAS`, `SAUNA`, `POOL`, `HOT_TUB`, `WASHING_MACHINE`, `BEACH_SERVICES`, `CLUB_CARD`, `INTERNET`, `PARKING`, `AIRPORT_SHUTTLE`, `BREAKFAST`, `SERVICE_COSTS`; example: `"BEDLINEN"`)
- `basisOfCalculation` (string, required) — How is cost is calculated (one of: `PER_STAY`, `PER_PERSON_PER_NIGHT`, `PER_NIGHT`, `PER_PERSON`, `PER_UNIT`, `PER_UNIT_PER_NIGHT`; example: `"PER_PERSON_PER_NIGHT"`)
- `maximumCount` (integer (int32)) — Maximum units that can be selected for this extra service if the service is selectable (example: `1`)
- `type` (string, required) — Type of service associated with this extra cost (one of: `MANDATORY`, `SELECTABLE`, `ON_USAGE`; example: `"MANDATORY"`)
- `paymentTime` (string, required) — Payment time of extra cost (one of: `ON_BOOKING`, `WITH_RATES`, `ONSITE`; example: `"ONSITE"`)
- `price` (ExtraCostPrice, required) — Price configuration for extra cost
- `type` (string, required) (one of: `PERCENTAGE`, `FIXED`; example: `"PERCENTAGE"`)
- `amount` (number, required) — Price amount dependent on type (example: `90.24`)
- `currency` (string) — Currency (example: `"EUR"`)
- `condition` (ExtraCostCondition) — Conditions applicable for extra cost
- `seasonApplicable` (SeasonApplicable) — Season for which extra cost is applicable
- `onlyApplicableFrom` (string (date)) — Only applicable from date (example: `"2020-08-01"`)
- `onlyApplicableUntil` (string (date)) — Only applicable until date (example: `"2021-04-30"`)
- `numberOfNights` (LengthOfStay) — Extra cost only applicable if lengthOfStay shorter than
- `fromStayLengthInNights` (integer (int32)) — Based on the length of stay, applicable from night (example: `1`)
- `toStayLengthInNights` (integer (int32)) — Based on the length of stay, applicable until night (example: `7`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
[
{
"id": "XYZ_123",
"name": "BEDLINEN",
"basisOfCalculation": "PER_PERSON_PER_NIGHT",
"maximumCount": 1,
"type": "MANDATORY",
"paymentTime": "ONSITE",
"price": {
"type": "PERCENTAGE",
"amount": 90.24,
"currency": "EUR"
},
"condition": {
"seasonApplicable": {
"onlyApplicableFrom": "2020-08-01",
"onlyApplicableUntil": "2021-04-30"
},
"numberOfNights": {
"fromStayLengthInNights": 1,
"toStayLengthInNights": 7
}
}
}
]
```
## Responses
### 200 — Successful update of extra costs for apartment
Body `application/json`, schema `array of ApartmentExtraCost`:
- `id` (string, required) — An identifier for this extra cost (example: `"XYZ_123"`)
- `name` (string, required) — Name of extra cost (one of: `FINAL_CLEANING`, `EXTRA_CLEANING`, `REFUNDABLE_SECURITY_DEPOSIT`, `TOURIST_OR_CITY_TAX`, `ECO_TAX`, `VAT_OF_RENTAL_PRICE`, `BOOKING_FEE`, `HYGIENE_SURCHARGE`, `PET`, `TRAVEL_INSURANCE`, `TOWEL`, `BEDLINEN`, `TOWEL_BEDLINEN_PACKAGE`, `KITCHEN_TOWELS`, `BEDLINEN_AND_BEDMAKING`, `BABY_BED`, `BABY_CHAIR`, `BABY_COT`, `BABY_BUGGY`, `BABY_HIGH_CHAIR`, `EXTRA_BED`, `HEATING`, `AIRCONDITION`, `FIREWOOD`, `ELECTRICITY`, `WATER`, `GAS`, `SAUNA`, `POOL`, `HOT_TUB`, `WASHING_MACHINE`, `BEACH_SERVICES`, `CLUB_CARD`, `INTERNET`, `PARKING`, `AIRPORT_SHUTTLE`, `BREAKFAST`, `SERVICE_COSTS`; example: `"BEDLINEN"`)
- `basisOfCalculation` (string, required) — How is cost is calculated (one of: `PER_STAY`, `PER_PERSON_PER_NIGHT`, `PER_NIGHT`, `PER_PERSON`, `PER_UNIT`, `PER_UNIT_PER_NIGHT`; example: `"PER_PERSON_PER_NIGHT"`)
- `maximumCount` (integer (int32)) — Maximum units that can be selected for this extra service if the service is selectable (example: `1`)
- `type` (string, required) — Type of service associated with this extra cost (one of: `MANDATORY`, `SELECTABLE`, `ON_USAGE`; example: `"MANDATORY"`)
- `paymentTime` (string, required) — Payment time of extra cost (one of: `ON_BOOKING`, `WITH_RATES`, `ONSITE`; example: `"ONSITE"`)
- `price` (ExtraCostPrice, required) — Price configuration for extra cost
- `type` (string, required) (one of: `PERCENTAGE`, `FIXED`; example: `"PERCENTAGE"`)
- `amount` (number, required) — Price amount dependent on type (example: `90.24`)
- `currency` (string) — Currency (example: `"EUR"`)
- `condition` (ExtraCostCondition) — Conditions applicable for extra cost
- `seasonApplicable` (SeasonApplicable) — Season for which extra cost is applicable
- `onlyApplicableFrom` (string (date)) — Only applicable from date (example: `"2020-08-01"`)
- `onlyApplicableUntil` (string (date)) — Only applicable until date (example: `"2021-04-30"`)
- `numberOfNights` (LengthOfStay) — Extra cost only applicable if lengthOfStay shorter than
- `fromStayLengthInNights` (integer (int32)) — Based on the length of stay, applicable from night (example: `1`)
- `toStayLengthInNights` (integer (int32)) — Based on the length of stay, applicable until night (example: `7`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
[
{
"id": "XYZ_123",
"name": "BEDLINEN",
"basisOfCalculation": "PER_PERSON_PER_NIGHT",
"maximumCount": 1,
"type": "MANDATORY",
"paymentTime": "ONSITE",
"price": {
"type": "PERCENTAGE",
"amount": 90.24,
"currency": "EUR"
},
"condition": {
"seasonApplicable": {
"onlyApplicableFrom": "2020-08-01",
"onlyApplicableUntil": "2021-04-30"
},
"numberOfNights": {
"fromStayLengthInNights": 1,
"toStayLengthInNights": 7
}
}
}
]
```
### 401 — Authentication error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Authentication error"
}
```
### 404 — Apartment does not exist
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Apartment does not exist"
}
```
### 500 — Internal server error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Internal server error"
}
```
## Error body: `HoliduErrorResponse`
- `error` (string) — Error Text (example: `"Invalid Json: Unexpected character"`)
---
# Get a single discount for an apartment by discount id
Source: https://developer.holidu.com/reference/getdiscountbyid
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
`GET /v2/discount`
- Operation ID: `getDiscountById`
- Tags: Discounts
- Base URL: https://provider-api-sandbox.holidu.com (Sandbox Environment)
- Base URL: https://provider-api.holidu.com (Holidu Production API)
- Auth: send the API key in the `api-key` header
- Full spec: https://developer.holidu.com/openapi/connectivity-api.json
## Parameters
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `providerApartmentId` | query | string | no | |
| `provider` | query | string | no | |
| `holiduApartmentId` | query | integer (int64) | no | |
| `discountId` | query | integer (int64) | yes | |
## Responses
### 200 — Successful retrieval of discount by id
Body `application/json`, schema `DiscountDto`:
- `id` (integer (int64)) — Discount id in Holidu system
- `providerDiscountId` (string) — Provider's own external discount ID for reconciliation
- `status` (string, required) — Discount Status (one of: `ACTIVE`, `INACTIVE`, `DELETED`; example: `"ACTIVE"`)
- `name` (string) — Name of the discount (example: `"Pre Season Discount"`)
- `discountType` (string, required) — Type of discount (one of: `EARLY_BIRD`, `LAST_MINUTE`, `LONG_STAY`, `DEVICE_SPECIFIC`, `NEW_LISTING`, `LOYALTY`, `OFFER`; example: `"EARLY_BIRD"`)
- `discountPercent` (number, required) — Percentage of discount (min 0; max 100; example: `12`)
- `conditions` (DiscountConditions)
- `daysBeforeCheckIn` (integer (int32)) — Number of days before checkin the booking has to be made (example: `60`)
- `minStay` (integer (int32)) — Minimum Stay (days) if required to get the discount (example: `5`)
- `bookingSeason` (array of SeasonApplicable) — Booking date must be in seasons for the discount to apply
- `onlyApplicableFrom` (string (date)) — Only applicable from date (example: `"2020-08-01"`)
- `onlyApplicableUntil` (string (date)) — Only applicable until date (example: `"2021-04-30"`)
- `travelSeason` (array of SeasonApplicable) — Stay must be within seasons for the discount to apply
- `onlyApplicableFrom` (string (date)) — Only applicable from date (example: `"2020-08-01"`)
- `onlyApplicableUntil` (string (date)) — Only applicable until date (example: `"2021-04-30"`)
- `deviceType` (string) — If the discount is applicable only for specific device. (one of: `MOBILE`, `DESKTOP`)
- `userType` (string) — If discount is applicable based on user type. (one of: `USER_AUTHENTICATED`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"status": "ACTIVE",
"name": "Pre Season Discount",
"discountType": "EARLY_BIRD",
"discountPercent": 12,
"conditions": {
"daysBeforeCheckIn": 60,
"minStay": 5,
"bookingSeason": [
{
"onlyApplicableFrom": "2020-08-01",
"onlyApplicableUntil": "2021-04-30"
}
],
"travelSeason": [
{
"onlyApplicableFrom": "2020-08-01",
"onlyApplicableUntil": "2021-04-30"
}
],
"deviceType": "MOBILE",
"userType": "USER_AUTHENTICATED"
}
}
```
### 400 — Bad Request
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Bad Request"
}
```
### 401 — Authentication error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Authentication error"
}
```
### 404 — Apartment or discount does not exist
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Apartment or discount does not exist"
}
```
### 500 — Internal server error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Internal server error"
}
```
## Error body: `HoliduErrorResponse`
- `error` (string) — Error Text (example: `"Invalid Json: Unexpected character"`)
---
# Create or update a single discount for an apartment
Source: https://developer.holidu.com/reference/upsertdiscount
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
`POST /v2/discount`
- Operation ID: `upsertDiscount`
- Tags: Discounts
- Base URL: https://provider-api-sandbox.holidu.com (Sandbox Environment)
- Base URL: https://provider-api.holidu.com (Holidu Production API)
- Auth: send the API key in the `api-key` header
- Full spec: https://developer.holidu.com/openapi/connectivity-api.json
## Parameters
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `providerApartmentId` | query | string | no | |
| `provider` | query | string | no | |
| `holiduApartmentId` | query | integer (int64) | no | |
## Request body (required)
Content type `application/json`, schema `DiscountDto`:
- `id` (integer (int64)) — Discount id in Holidu system
- `providerDiscountId` (string) — Provider's own external discount ID for reconciliation
- `status` (string, required) — Discount Status (one of: `ACTIVE`, `INACTIVE`, `DELETED`; example: `"ACTIVE"`)
- `name` (string) — Name of the discount (example: `"Pre Season Discount"`)
- `discountType` (string, required) — Type of discount (one of: `EARLY_BIRD`, `LAST_MINUTE`, `LONG_STAY`, `DEVICE_SPECIFIC`, `NEW_LISTING`, `LOYALTY`, `OFFER`; example: `"EARLY_BIRD"`)
- `discountPercent` (number, required) — Percentage of discount (min 0; max 100; example: `12`)
- `conditions` (DiscountConditions)
- `daysBeforeCheckIn` (integer (int32)) — Number of days before checkin the booking has to be made (example: `60`)
- `minStay` (integer (int32)) — Minimum Stay (days) if required to get the discount (example: `5`)
- `bookingSeason` (array of SeasonApplicable) — Booking date must be in seasons for the discount to apply
- `onlyApplicableFrom` (string (date)) — Only applicable from date (example: `"2020-08-01"`)
- `onlyApplicableUntil` (string (date)) — Only applicable until date (example: `"2021-04-30"`)
- `travelSeason` (array of SeasonApplicable) — Stay must be within seasons for the discount to apply
- `onlyApplicableFrom` (string (date)) — Only applicable from date (example: `"2020-08-01"`)
- `onlyApplicableUntil` (string (date)) — Only applicable until date (example: `"2021-04-30"`)
- `deviceType` (string) — If the discount is applicable only for specific device. (one of: `MOBILE`, `DESKTOP`)
- `userType` (string) — If discount is applicable based on user type. (one of: `USER_AUTHENTICATED`)
Example — Adding new Discount:
```json
{
"status": "ACTIVE",
"name": "Long stay Discount",
"discountType": "LONG_STAY",
"discountPercent": "10",
"conditions": {
"minStay": "15"
}
}
```
Example — Updating existing Discount:
```json
{
"id": "18321",
"status": "INACTIVE",
"name": "Early bird Discount",
"discountType": "EARLY_BIRD",
"discountPercent": "12",
"conditions": {
"daysBeforeCheckIn": "60"
}
}
```
## Responses
### 200 — Discount created or updated
Body `application/json`, schema `DiscountDto`:
- `id` (integer (int64)) — Discount id in Holidu system
- `providerDiscountId` (string) — Provider's own external discount ID for reconciliation
- `status` (string, required) — Discount Status (one of: `ACTIVE`, `INACTIVE`, `DELETED`; example: `"ACTIVE"`)
- `name` (string) — Name of the discount (example: `"Pre Season Discount"`)
- `discountType` (string, required) — Type of discount (one of: `EARLY_BIRD`, `LAST_MINUTE`, `LONG_STAY`, `DEVICE_SPECIFIC`, `NEW_LISTING`, `LOYALTY`, `OFFER`; example: `"EARLY_BIRD"`)
- `discountPercent` (number, required) — Percentage of discount (min 0; max 100; example: `12`)
- `conditions` (DiscountConditions)
- `daysBeforeCheckIn` (integer (int32)) — Number of days before checkin the booking has to be made (example: `60`)
- `minStay` (integer (int32)) — Minimum Stay (days) if required to get the discount (example: `5`)
- `bookingSeason` (array of SeasonApplicable) — Booking date must be in seasons for the discount to apply
- `onlyApplicableFrom` (string (date)) — Only applicable from date (example: `"2020-08-01"`)
- `onlyApplicableUntil` (string (date)) — Only applicable until date (example: `"2021-04-30"`)
- `travelSeason` (array of SeasonApplicable) — Stay must be within seasons for the discount to apply
- `onlyApplicableFrom` (string (date)) — Only applicable from date (example: `"2020-08-01"`)
- `onlyApplicableUntil` (string (date)) — Only applicable until date (example: `"2021-04-30"`)
- `deviceType` (string) — If the discount is applicable only for specific device. (one of: `MOBILE`, `DESKTOP`)
- `userType` (string) — If discount is applicable based on user type. (one of: `USER_AUTHENTICATED`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"status": "ACTIVE",
"name": "Pre Season Discount",
"discountType": "EARLY_BIRD",
"discountPercent": 12,
"conditions": {
"daysBeforeCheckIn": 60,
"minStay": 5,
"bookingSeason": [
{
"onlyApplicableFrom": "2020-08-01",
"onlyApplicableUntil": "2021-04-30"
}
],
"travelSeason": [
{
"onlyApplicableFrom": "2020-08-01",
"onlyApplicableUntil": "2021-04-30"
}
],
"deviceType": "MOBILE",
"userType": "USER_AUTHENTICATED"
}
}
```
### 400 — Bad Request
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Bad Request"
}
```
### 401 — Authentication error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Authentication error"
}
```
### 404 — Apartment does not exist
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Apartment does not exist"
}
```
### 500 — Internal server error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Internal server error"
}
```
## Error body: `HoliduErrorResponse`
- `error` (string) — Error Text (example: `"Invalid Json: Unexpected character"`)
---
# Get discounts for an apartment
Source: https://developer.holidu.com/reference/getdiscounts
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
`GET /v2/discounts`
- Operation ID: `getDiscounts`
- Tags: Discounts
- Base URL: https://provider-api-sandbox.holidu.com (Sandbox Environment)
- Base URL: https://provider-api.holidu.com (Holidu Production API)
- Auth: send the API key in the `api-key` header
- Full spec: https://developer.holidu.com/openapi/connectivity-api.json
## Parameters
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `providerApartmentId` | query | string | no | |
| `provider` | query | string | no | |
| `holiduApartmentId` | query | integer (int64) | no | |
## Responses
### 200 — Successful retrieval of discounts for an apartment
Body `application/json`, schema `array of DiscountDto`:
- `id` (integer (int64)) — Discount id in Holidu system
- `providerDiscountId` (string) — Provider's own external discount ID for reconciliation
- `status` (string, required) — Discount Status (one of: `ACTIVE`, `INACTIVE`, `DELETED`; example: `"ACTIVE"`)
- `name` (string) — Name of the discount (example: `"Pre Season Discount"`)
- `discountType` (string, required) — Type of discount (one of: `EARLY_BIRD`, `LAST_MINUTE`, `LONG_STAY`, `DEVICE_SPECIFIC`, `NEW_LISTING`, `LOYALTY`, `OFFER`; example: `"EARLY_BIRD"`)
- `discountPercent` (number, required) — Percentage of discount (min 0; max 100; example: `12`)
- `conditions` (DiscountConditions)
- `daysBeforeCheckIn` (integer (int32)) — Number of days before checkin the booking has to be made (example: `60`)
- `minStay` (integer (int32)) — Minimum Stay (days) if required to get the discount (example: `5`)
- `bookingSeason` (array of SeasonApplicable) — Booking date must be in seasons for the discount to apply
- `onlyApplicableFrom` (string (date)) — Only applicable from date (example: `"2020-08-01"`)
- `onlyApplicableUntil` (string (date)) — Only applicable until date (example: `"2021-04-30"`)
- `travelSeason` (array of SeasonApplicable) — Stay must be within seasons for the discount to apply
- `onlyApplicableFrom` (string (date)) — Only applicable from date (example: `"2020-08-01"`)
- `onlyApplicableUntil` (string (date)) — Only applicable until date (example: `"2021-04-30"`)
- `deviceType` (string) — If the discount is applicable only for specific device. (one of: `MOBILE`, `DESKTOP`)
- `userType` (string) — If discount is applicable based on user type. (one of: `USER_AUTHENTICATED`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
[
{
"status": "ACTIVE",
"name": "Pre Season Discount",
"discountType": "EARLY_BIRD",
"discountPercent": 12,
"conditions": {
"daysBeforeCheckIn": 60,
"minStay": 5,
"bookingSeason": [
{
"onlyApplicableFrom": "2020-08-01",
"onlyApplicableUntil": "2021-04-30"
}
],
"travelSeason": [
{
"onlyApplicableFrom": "2020-08-01",
"onlyApplicableUntil": "2021-04-30"
}
],
"deviceType": "MOBILE",
"userType": "USER_AUTHENTICATED"
}
}
]
```
### 401 — Authentication error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Authentication error"
}
```
### 404 — Apartment does not exist
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Apartment does not exist"
}
```
### 500 — Internal server error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Internal server error"
}
```
## Error body: `HoliduErrorResponse`
- `error` (string) — Error Text (example: `"Invalid Json: Unexpected character"`)
---
# Get terms and conditions for apartment
Source: https://developer.holidu.com/reference/gettermsandconditions
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
`GET /v2/apartments/terms-and-conditions`
- Operation ID: `getTermsAndConditions`
- Tags: Booking Terms
- Base URL: https://provider-api-sandbox.holidu.com (Sandbox Environment)
- Base URL: https://provider-api.holidu.com (Holidu Production API)
- Auth: send the API key in the `api-key` header
- Full spec: https://developer.holidu.com/openapi/connectivity-api.json
## Parameters
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `providerApartmentId` | query | string | no | |
| `provider` | query | string | no | |
| `holiduApartmentId` | query | integer (int64) | no | |
## Responses
### 200 — Successfully retrieved terms and conditions for apartment
Body `application/json`, schema `array of ApartmentTermsAndConditions`:
- `countries` (array of string) — List of country codes represented in standard ISO 3166-1 ALPHA-2 format. If empty then applies to none.
- `url` (string, required) — Url to terms and conditions (example: `"https://www.abc.org/xyz"`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
[
{
"url": "https://www.abc.org/xyz"
}
]
```
### 400 — Bad Request
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Bad Request"
}
```
### 401 — Authentication error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Authentication error"
}
```
### 404 — Apartment does not exist
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Apartment does not exist"
}
```
### 500 — Internal server error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Internal server error"
}
```
## Error body: `HoliduErrorResponse`
- `error` (string) — Error Text (example: `"Invalid Json: Unexpected character"`)
---
# Update terms and conditions for apartment
Source: https://developer.holidu.com/reference/updatetermsandconditions
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
`POST /v2/apartments/terms-and-conditions`
- Operation ID: `updateTermsAndConditions`
- Tags: Booking Terms
- Base URL: https://provider-api-sandbox.holidu.com (Sandbox Environment)
- Base URL: https://provider-api.holidu.com (Holidu Production API)
- Auth: send the API key in the `api-key` header
- Full spec: https://developer.holidu.com/openapi/connectivity-api.json
## Parameters
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `providerApartmentId` | query | string | no | |
| `provider` | query | string | no | |
| `holiduApartmentId` | query | integer (int64) | no | |
## Request body (required)
Content type `application/json`, schema `array of ApartmentTermsAndConditions`:
- `countries` (array of string) — List of country codes represented in standard ISO 3166-1 ALPHA-2 format. If empty then applies to none.
- `url` (string, required) — Url to terms and conditions (example: `"https://www.abc.org/xyz"`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
[
{
"url": "https://www.abc.org/xyz"
}
]
```
## Responses
### 200 — Successfully updated terms and conditions for apartment
Body `application/json`, schema `array of ApartmentTermsAndConditions`:
- `countries` (array of string) — List of country codes represented in standard ISO 3166-1 ALPHA-2 format. If empty then applies to none.
- `url` (string, required) — Url to terms and conditions (example: `"https://www.abc.org/xyz"`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
[
{
"url": "https://www.abc.org/xyz"
}
]
```
### 400 — Bad Request
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Bad Request"
}
```
### 401 — Authentication error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Authentication error"
}
```
### 404 — Apartment does not exist
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Apartment does not exist"
}
```
### 500 — Internal server error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Internal server error"
}
```
## Error body: `HoliduErrorResponse`
- `error` (string) — Error Text (example: `"Invalid Json: Unexpected character"`)
---
# Get payment configuration for apartment
Source: https://developer.holidu.com/reference/getpaymentconfiguration
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
`GET /v2/apartments/payment-configuration`
- Operation ID: `getPaymentConfiguration`
- Tags: Booking Terms
- Base URL: https://provider-api-sandbox.holidu.com (Sandbox Environment)
- Base URL: https://provider-api.holidu.com (Holidu Production API)
- Auth: send the API key in the `api-key` header
- Full spec: https://developer.holidu.com/openapi/connectivity-api.json
## Parameters
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `providerApartmentId` | query | string | no | |
| `provider` | query | string | no | |
| `holiduApartmentId` | query | integer (int64) | no | |
| `rateId` | query | string | no | |
## Responses
### 200 — Successfully retrieved payment configuration for apartment
Body `application/json`, schema `ApartmentPaymentConfiguration`:
- `paymentMethods` (array of string, required)
- `paymentRates` (PaymentRates, required) — Payment schedule for the booking
- `ratePaidOnBookingInPercentage` (number) — Rate paid on booking in percentage (min 0; max 100; example: `30`)
- `ratesPerDate` (array of PaymentRatePerDate)
- `daysBeforeArrival` (integer (int32), required) — Limit of days before arrival until when the rate should be paid, for example: Until 10 days before arrival 50% should be paid (example: `10`)
- `rateAmountInPercentage` (number, required) — Value in percentage of booking that should be paid (not accumulative) (min 0; max 100; example: `70`)
- `rateId` (string (string)) — Rate identifier (pattern `DEFAULT|REFUNDABLE|NON_REFUNDABLE`; example: `"NON_REFUNDABLE"`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"paymentMethods": [
"BANK_TRANSFER"
],
"paymentRates": {
"ratePaidOnBookingInPercentage": 30,
"ratesPerDate": [
{
"daysBeforeArrival": 10,
"rateAmountInPercentage": 70
}
]
},
"rateId": "NON_REFUNDABLE"
}
```
### 400 — Bad Request
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Bad Request"
}
```
### 401 — Authentication error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Authentication error"
}
```
### 404 — Apartment does not exist
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Apartment does not exist"
}
```
### 500 — Internal server error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Internal server error"
}
```
## Error body: `HoliduErrorResponse`
- `error` (string) — Error Text (example: `"Invalid Json: Unexpected character"`)
---
# Update payment configuration for apartment
Source: https://developer.holidu.com/reference/updatepaymentconfiguration
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
`POST /v2/apartments/payment-configuration`
- Operation ID: `updatePaymentConfiguration`
- Tags: Booking Terms
- Base URL: https://provider-api-sandbox.holidu.com (Sandbox Environment)
- Base URL: https://provider-api.holidu.com (Holidu Production API)
- Auth: send the API key in the `api-key` header
- Full spec: https://developer.holidu.com/openapi/connectivity-api.json
Replaces existing payment configurations with new ones for apartment
## Parameters
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `providerApartmentId` | query | string | no | |
| `provider` | query | string | no | |
| `holiduApartmentId` | query | integer (int64) | no | |
## Request body (required)
Content type `application/json`, schema `ApartmentPaymentConfiguration`:
- `paymentMethods` (array of string, required)
- `paymentRates` (PaymentRates, required) — Payment schedule for the booking
- `ratePaidOnBookingInPercentage` (number) — Rate paid on booking in percentage (min 0; max 100; example: `30`)
- `ratesPerDate` (array of PaymentRatePerDate)
- `daysBeforeArrival` (integer (int32), required) — Limit of days before arrival until when the rate should be paid, for example: Until 10 days before arrival 50% should be paid (example: `10`)
- `rateAmountInPercentage` (number, required) — Value in percentage of booking that should be paid (not accumulative) (min 0; max 100; example: `70`)
- `rateId` (string (string)) — Rate identifier (pattern `DEFAULT|REFUNDABLE|NON_REFUNDABLE`; example: `"NON_REFUNDABLE"`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"paymentMethods": [
"BANK_TRANSFER"
],
"paymentRates": {
"ratePaidOnBookingInPercentage": 30,
"ratesPerDate": [
{
"daysBeforeArrival": 10,
"rateAmountInPercentage": 70
}
]
},
"rateId": "NON_REFUNDABLE"
}
```
## Responses
### 200 — Successfully updated payment configuration
Body `application/json`, schema `ApartmentPaymentConfiguration`:
- `paymentMethods` (array of string, required)
- `paymentRates` (PaymentRates, required) — Payment schedule for the booking
- `ratePaidOnBookingInPercentage` (number) — Rate paid on booking in percentage (min 0; max 100; example: `30`)
- `ratesPerDate` (array of PaymentRatePerDate)
- `daysBeforeArrival` (integer (int32), required) — Limit of days before arrival until when the rate should be paid, for example: Until 10 days before arrival 50% should be paid (example: `10`)
- `rateAmountInPercentage` (number, required) — Value in percentage of booking that should be paid (not accumulative) (min 0; max 100; example: `70`)
- `rateId` (string (string)) — Rate identifier (pattern `DEFAULT|REFUNDABLE|NON_REFUNDABLE`; example: `"NON_REFUNDABLE"`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"paymentMethods": [
"BANK_TRANSFER"
],
"paymentRates": {
"ratePaidOnBookingInPercentage": 30,
"ratesPerDate": [
{
"daysBeforeArrival": 10,
"rateAmountInPercentage": 70
}
]
},
"rateId": "NON_REFUNDABLE"
}
```
### 400 — Bad Request
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Bad Request"
}
```
### 401 — Authentication error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Authentication error"
}
```
### 404 — Apartment does not exist
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Apartment does not exist"
}
```
### 500 — Internal server error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Internal server error"
}
```
## Error body: `HoliduErrorResponse`
- `error` (string) — Error Text (example: `"Invalid Json: Unexpected character"`)
---
# Delete payment configuration for apartment
Source: https://developer.holidu.com/reference/deletepaymentconfiguration
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
`DELETE /v2/apartments/payment-configuration`
- Operation ID: `deletePaymentConfiguration`
- Tags: Booking Terms
- Base URL: https://provider-api-sandbox.holidu.com (Sandbox Environment)
- Base URL: https://provider-api.holidu.com (Holidu Production API)
- Auth: send the API key in the `api-key` header
- Full spec: https://developer.holidu.com/openapi/connectivity-api.json
Deletes existing payment configuration for apartment
## Parameters
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `providerApartmentId` | query | string | yes | |
| `provider` | query | string | no | |
| `holiduApartmentId` | query | integer (int64) | no | |
| `rateId` | query | string | no | |
## Responses
### 200 — Successfully deleted payment configuration
### 400 — Bad Request
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Bad Request"
}
```
### 401 — Authentication error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Authentication error"
}
```
### 404 — Apartment does not exist
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Apartment does not exist"
}
```
### 500 — Internal server error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Internal server error"
}
```
## Error body: `HoliduErrorResponse`
- `error` (string) — Error Text (example: `"Invalid Json: Unexpected character"`)
---
# Get cancellation conditions for apartment
Source: https://developer.holidu.com/reference/getcancellationpolicy
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
`GET /v2/apartments/cancellation-policy`
- Operation ID: `getCancellationPolicy`
- Tags: Booking Terms
- Base URL: https://provider-api-sandbox.holidu.com (Sandbox Environment)
- Base URL: https://provider-api.holidu.com (Holidu Production API)
- Auth: send the API key in the `api-key` header
- Full spec: https://developer.holidu.com/openapi/connectivity-api.json
## Parameters
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `providerApartmentId` | query | string | no | |
| `provider` | query | string | no | |
| `holiduApartmentId` | query | integer (int64) | no | |
| `rateId` | query | string | no | |
## Responses
### 200 — Successful retrieval of cancellation conditions
Body `application/json`, schema `array of ApartmentCancellationPolicy`:
- `daysBeforeArrival` (integer (int32), required) — Number of days before arrival for which this cancellation policy is valid (min 0; example: `10`)
- `cancellationFeeInPercent` (number, required) — Booking percentage which is non-refundable (min 0; max 100; example: `30`)
- `rateId` (string (string)) — Rate identifier (pattern `DEFAULT|REFUNDABLE|NON_REFUNDABLE`; example: `"NON_REFUNDABLE"`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
[
{
"daysBeforeArrival": 10,
"cancellationFeeInPercent": 30,
"rateId": "NON_REFUNDABLE"
}
]
```
### 400 — Bad Request
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Bad Request"
}
```
### 401 — Authentication error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Authentication error"
}
```
### 404 — Apartment does not exist
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Apartment does not exist"
}
```
### 500 — Internal server error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Internal server error"
}
```
## Error body: `HoliduErrorResponse`
- `error` (string) — Error Text (example: `"Invalid Json: Unexpected character"`)
---
# Update cancellation conditions for apartment
Source: https://developer.holidu.com/reference/updatecancellationconditions
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
`POST /v2/apartments/cancellation-policy`
- Operation ID: `updateCancellationConditions`
- Tags: Booking Terms
- Base URL: https://provider-api-sandbox.holidu.com (Sandbox Environment)
- Base URL: https://provider-api.holidu.com (Holidu Production API)
- Auth: send the API key in the `api-key` header
- Full spec: https://developer.holidu.com/openapi/connectivity-api.json
Replaces any pre-configured cancellation policies with new ones for Apartment
## Parameters
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `providerApartmentId` | query | string | no | |
| `provider` | query | string | no | |
| `holiduApartmentId` | query | integer (int64) | no | |
## Request body (required)
Content type `application/json`, schema `array of ApartmentCancellationPolicy`:
- `daysBeforeArrival` (integer (int32), required) — Number of days before arrival for which this cancellation policy is valid (min 0; example: `10`)
- `cancellationFeeInPercent` (number, required) — Booking percentage which is non-refundable (min 0; max 100; example: `30`)
- `rateId` (string (string)) — Rate identifier (pattern `DEFAULT|REFUNDABLE|NON_REFUNDABLE`; example: `"NON_REFUNDABLE"`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
[
{
"daysBeforeArrival": 10,
"cancellationFeeInPercent": 30,
"rateId": "NON_REFUNDABLE"
}
]
```
## Responses
### 200 — Cancellation policies updated
Body `application/json`, schema `array of ApartmentCancellationPolicy`:
- `daysBeforeArrival` (integer (int32), required) — Number of days before arrival for which this cancellation policy is valid (min 0; example: `10`)
- `cancellationFeeInPercent` (number, required) — Booking percentage which is non-refundable (min 0; max 100; example: `30`)
- `rateId` (string (string)) — Rate identifier (pattern `DEFAULT|REFUNDABLE|NON_REFUNDABLE`; example: `"NON_REFUNDABLE"`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
[
{
"daysBeforeArrival": 10,
"cancellationFeeInPercent": 30,
"rateId": "NON_REFUNDABLE"
}
]
```
### 400 — Bad Request
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Bad Request"
}
```
### 401 — Authentication error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Authentication error"
}
```
### 404 — Apartment does not exist
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Apartment does not exist"
}
```
### 500 — Internal server error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Internal server error"
}
```
## Error body: `HoliduErrorResponse`
- `error` (string) — Error Text (example: `"Invalid Json: Unexpected character"`)
---
# Delete cancellation policy for apartment
Source: https://developer.holidu.com/reference/deletecancellationpolicy
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
`DELETE /v2/apartments/cancellation-policy`
- Operation ID: `deleteCancellationPolicy`
- Tags: Booking Terms
- Base URL: https://provider-api-sandbox.holidu.com (Sandbox Environment)
- Base URL: https://provider-api.holidu.com (Holidu Production API)
- Auth: send the API key in the `api-key` header
- Full spec: https://developer.holidu.com/openapi/connectivity-api.json
Deletes existing cancellation policy for apartment
## Parameters
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `providerApartmentId` | query | string | yes | |
| `provider` | query | string | no | |
| `holiduApartmentId` | query | integer (int64) | no | |
| `rateId` | query | string | no | |
## Responses
### 200 — Successfully deleted cancellation policy
### 400 — Bad Request
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Bad Request"
}
```
### 401 — Authentication error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Authentication error"
}
```
### 404 — Apartment does not exist
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Apartment does not exist"
}
```
### 500 — Internal server error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Internal server error"
}
```
## Error body: `HoliduErrorResponse`
- `error` (string) — Error Text (example: `"Invalid Json: Unexpected character"`)
---
# Get payment configuration rateIds for apartment
Source: https://developer.holidu.com/reference/getpaymentconfigurationrateids
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
`GET /v2/apartments/payment-configuration/rate-ids`
- Operation ID: `getPaymentConfigurationRateIds`
- Tags: Booking Terms
- Base URL: https://provider-api-sandbox.holidu.com (Sandbox Environment)
- Base URL: https://provider-api.holidu.com (Holidu Production API)
- Auth: send the API key in the `api-key` header
- Full spec: https://developer.holidu.com/openapi/connectivity-api.json
## Parameters
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `providerApartmentId` | query | string | no | |
| `provider` | query | string | no | |
| `holiduApartmentId` | query | integer (int64) | no | |
## Responses
### 200 — Successfully retrieved payment configuration rate Ids for apartment
Body `application/json`, schema `ApartmentPaymentConfiguration`:
- `paymentMethods` (array of string, required)
- `paymentRates` (PaymentRates, required) — Payment schedule for the booking
- `ratePaidOnBookingInPercentage` (number) — Rate paid on booking in percentage (min 0; max 100; example: `30`)
- `ratesPerDate` (array of PaymentRatePerDate)
- `daysBeforeArrival` (integer (int32), required) — Limit of days before arrival until when the rate should be paid, for example: Until 10 days before arrival 50% should be paid (example: `10`)
- `rateAmountInPercentage` (number, required) — Value in percentage of booking that should be paid (not accumulative) (min 0; max 100; example: `70`)
- `rateId` (string (string)) — Rate identifier (pattern `DEFAULT|REFUNDABLE|NON_REFUNDABLE`; example: `"NON_REFUNDABLE"`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"paymentMethods": [
"BANK_TRANSFER"
],
"paymentRates": {
"ratePaidOnBookingInPercentage": 30,
"ratesPerDate": [
{
"daysBeforeArrival": 10,
"rateAmountInPercentage": 70
}
]
},
"rateId": "NON_REFUNDABLE"
}
```
### 400 — Bad Request
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Bad Request"
}
```
### 401 — Authentication error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Authentication error"
}
```
### 404 — Apartment does not exist
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Apartment does not exist"
}
```
### 500 — Internal server error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Internal server error"
}
```
## Error body: `HoliduErrorResponse`
- `error` (string) — Error Text (example: `"Invalid Json: Unexpected character"`)
---
# Get cancellation policy rate Ids for apartment
Source: https://developer.holidu.com/reference/getcancellationpolicyrateids
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
`GET /v2/apartments/cancellation-policy/rate-ids`
- Operation ID: `getCancellationPolicyRateIds`
- Tags: Booking Terms
- Base URL: https://provider-api-sandbox.holidu.com (Sandbox Environment)
- Base URL: https://provider-api.holidu.com (Holidu Production API)
- Auth: send the API key in the `api-key` header
- Full spec: https://developer.holidu.com/openapi/connectivity-api.json
## Parameters
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `providerApartmentId` | query | string | no | |
| `provider` | query | string | no | |
| `holiduApartmentId` | query | integer (int64) | no | |
## Responses
### 200 — Successful retrieval of cancellation policy rate Ids
Body `application/json`, schema `array of ApartmentCancellationPolicy`:
- `daysBeforeArrival` (integer (int32), required) — Number of days before arrival for which this cancellation policy is valid (min 0; example: `10`)
- `cancellationFeeInPercent` (number, required) — Booking percentage which is non-refundable (min 0; max 100; example: `30`)
- `rateId` (string (string)) — Rate identifier (pattern `DEFAULT|REFUNDABLE|NON_REFUNDABLE`; example: `"NON_REFUNDABLE"`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
[
{
"daysBeforeArrival": 10,
"cancellationFeeInPercent": 30,
"rateId": "NON_REFUNDABLE"
}
]
```
### 400 — Bad Request
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Bad Request"
}
```
### 401 — Authentication error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Authentication error"
}
```
### 404 — Apartment does not exist
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Apartment does not exist"
}
```
### 500 — Internal server error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Internal server error"
}
```
## Error body: `HoliduErrorResponse`
- `error` (string) — Error Text (example: `"Invalid Json: Unexpected character"`)
---
# Update booking details
Source: https://developer.holidu.com/reference/updatebooking
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
`PUT /v2/bookings`
- Operation ID: `updateBooking`
- Tags: Bookings
- Base URL: https://provider-api-sandbox.holidu.com (Sandbox Environment)
- Base URL: https://provider-api.holidu.com (Holidu Production API)
- Auth: send the API key in the `api-key` header
- Full spec: https://developer.holidu.com/openapi/connectivity-api.json
## Parameters
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `providerBookingId` | query | string | yes | |
| `provider` | query | string | no | |
## Request body (required)
Content type `application/json`, schema `BookingUpsert`:
- `providerApartmentId` (string, required) — ID of the apartment in provider database (example: `"123456"`)
- `arrival` (string (date), required) — Date of arrival (example: `"2020-10-20"`)
- `departure` (string (date), required) — Date of departure (example: `"2020-10-30"`)
- `bareRentalPrice` (Price, required) — Price with amount and currency
- `amount` (number, required) — Price value (example: `100`)
- `currency` (string, required) — Price currency (example: `"EUR"`)
- `totalPrice` (Price) — Price with amount and currency
- `amount` (number, required) — Price value (example: `100`)
- `currency` (string, required) — Price currency (example: `"EUR"`)
- `commissionablePrice` (Price) — Price with amount and currency
- `amount` (number, required) — Price value (example: `100`)
- `currency` (string, required) — Price currency (example: `"EUR"`)
- `costs` (array of BookingUpsertExtraCost) — Breakdown of extra costs for the booking.
- `name` (string, required) — Name of the cost (one of: `FINAL_CLEANING`, `EXTRA_CLEANING`, `REFUNDABLE_SECURITY_DEPOSIT`, `TOURIST_OR_CITY_TAX`, `ECO_TAX`, `VAT_OF_RENTAL_PRICE`, `BOOKING_FEE`, `HYGIENE_SURCHARGE`, `PET`, `TRAVEL_INSURANCE`, `TOWEL`, `BEDLINEN`, `TOWEL_BEDLINEN_PACKAGE`, `KITCHEN_TOWELS`, `BEDLINEN_AND_BEDMAKING`, `BABY_BED`, `BABY_CHAIR`, `BABY_COT`, `BABY_BUGGY`, `BABY_HIGH_CHAIR`, `EXTRA_BED`, `HEATING`, `AIRCONDITION`, `FIREWOOD`, `ELECTRICITY`, `WATER`, `GAS`, `SAUNA`, `POOL`, `HOT_TUB`, `WASHING_MACHINE`, `BEACH_SERVICES`, `CLUB_CARD`, `INTERNET`, `PARKING`, `AIRPORT_SHUTTLE`, `BREAKFAST`, `SERVICE_COSTS`; example: `"FINAL_CLEANING"`)
- `paymentTime` (string) — When the cost is paid. Treated as paid with the booking if omitted. (one of: `ON_BOOKING`, `WITH_RATES`, `ONSITE`; example: `"WITH_RATES"`)
- `totalPrice` (Price, required) — Price with amount and currency
- `amount` (number, required) — Price value (example: `100`)
- `currency` (string, required) — Price currency (example: `"EUR"`)
- `numberOfGuests` (integer (int32)) — Number of guests (example: `2`)
- `rateId` (string) — Rate identifier (example: `"DEFAULT"`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"providerApartmentId": "123456",
"arrival": "2020-10-20",
"departure": "2020-10-30",
"bareRentalPrice": {
"amount": 100,
"currency": "EUR"
},
"totalPrice": {
"amount": 100,
"currency": "EUR"
},
"commissionablePrice": {
"amount": 100,
"currency": "EUR"
},
"costs": [
{
"name": "FINAL_CLEANING",
"paymentTime": "WITH_RATES",
"totalPrice": {
"amount": 100,
"currency": "EUR"
}
}
],
"numberOfGuests": 2,
"rateId": "DEFAULT"
}
```
## Responses
### 200 — Booking data has been updated successfully
Body `application/json`, schema `BookingDetails`:
- `providerApartmentId` (string)
- `arrival` (string (date))
- `departure` (string (date))
- `guests` (array of Guest)
- `age` (integer (int32)) — Age of the guest, can be null if it is not required by capacity rules or provider config
- `customer` (CustomerDetails) — Model of the Customer.
- `firstName` (string)
- `lastName` (string)
- `email` (string)
- `gender` (string) (one of: `MALE`, `FEMALE`)
- `zip` (string)
- `city` (string)
- `street` (string)
- `country` (string) — Country code represented in standard ISO 3166-1 ALPHA-2 format (example: `"DE"`)
- `phone` (string)
- `language` (string)
- `specialCustomerRequest` (string)
- `guestReceipt` (Receipt)
- `costs` (array of BookingExtraCost)
- `id` (string)
- `name` (string)
- `basisOfCalculation` (string)
- `paymentTime` (string)
- `type` (string)
- `pricePerUnit` (PriceDto)
- `amount` (number)
- `currency` (string)
- `unitsSelected` (integer (int32))
- `totalPrice` (PriceDto)
- `amount` (number)
- `currency` (string)
- `discount` (BookingDiscount)
- `discountId` (integer (int64))
- `providerDiscountId` (string)
- `name` (string)
- `discountType` (string) (one of: `EARLY_BIRD`, `LAST_MINUTE`, `LONG_STAY`, `DEVICE_SPECIFIC`, `NEW_LISTING`, `LOYALTY`, `OFFER`)
- `percentage` (number)
- `conditions` (DiscountConditions)
- `daysBeforeCheckIn` (integer (int32)) — Number of days before checkin the booking has to be made (example: `60`)
- `minStay` (integer (int32)) — Minimum Stay (days) if required to get the discount (example: `5`)
- `bookingSeason` (array of SeasonApplicable) — Booking date must be in seasons for the discount to apply
- `onlyApplicableFrom` (string (date)) — Only applicable from date (example: `"2020-08-01"`)
- `onlyApplicableUntil` (string (date)) — Only applicable until date (example: `"2021-04-30"`)
- `travelSeason` (array of SeasonApplicable) — Stay must be within seasons for the discount to apply
- `onlyApplicableFrom` (string (date)) — Only applicable from date (example: `"2020-08-01"`)
- `onlyApplicableUntil` (string (date)) — Only applicable until date (example: `"2021-04-30"`)
- `deviceType` (string) — If the discount is applicable only for specific device. (one of: `MOBILE`, `DESKTOP`)
- `userType` (string) — If discount is applicable based on user type. (one of: `USER_AUTHENTICATED`)
- `amount` (PriceDto)
- `amount` (number)
- `currency` (string)
- `bareRentalPrice` (PriceDto)
- `amount` (number)
- `currency` (string)
- `paymentProcessing` (Payment)
- `paymentWithBooking` (PaymentWithBooking)
- `paymentPlanUuid` (string)
- `paymentHandler` (string)
- `paymentMethod` (string)
- `paymentTotalWithBooking` (PriceDto)
- `amount` (number)
- `currency` (string)
- `paymentRates` (array of PaymentRate)
- `dueDate` (string (date-time))
- `value` (PriceDto)
- `amount` (number)
- `currency` (string)
- `paymentOnsite` (array of PriceDto)
- `amount` (number)
- `currency` (string)
- `cancellationFees` (array of CancellationFee)
- `validUntil` (string (date-time))
- `feeInPercentage` (number)
- `metaData` (MetaData)
- `bookedAt` (string (date-time))
- `createdAt` (string (date-time))
- `updatedAt` (string (date-time))
- `status` (string) (one of: `PENDING`, `CONFIRMED`, `CANCELLED`, `DELETED`)
- `cancelledAt` (string (date-time))
- `holiduBookingId` (integer (int64))
- `commission` (Commission)
- `percentage` (number) — Holidu percentage commission for this booking, if percentage deal
- `commissionToHolidu` (PriceDto)
- `amount` (number)
- `currency` (string)
- `rateId` (string)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"customer": {
"gender": "MALE",
"country": "DE"
},
"guestReceipt": {
"discount": {
"discountType": "EARLY_BIRD",
"conditions": {
"daysBeforeCheckIn": 60,
"minStay": 5,
"bookingSeason": [
{
"onlyApplicableFrom": "2020-08-01",
"onlyApplicableUntil": "2021-04-30"
}
],
"travelSeason": [
{
"onlyApplicableFrom": "2020-08-01",
"onlyApplicableUntil": "2021-04-30"
}
],
"deviceType": "MOBILE",
"userType": "USER_AUTHENTICATED"
}
}
},
"metaData": {
"status": "PENDING"
}
}
```
### 400 — Bad Request
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Bad Request"
}
```
### 401 — Authentication error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Authentication error"
}
```
### 403 — Forbidden
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Forbidden"
}
```
### 404 — Apartment does not exist
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Apartment does not exist"
}
```
### 418 — Requested method is not available in sandbox environment
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Requested method is not available in sandbox environment"
}
```
### 500 — Internal server error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Internal server error"
}
```
## Error body: `HoliduErrorResponse`
- `error` (string) — Error Text (example: `"Invalid Json: Unexpected character"`)
---
# Cancel a booking
Source: https://developer.holidu.com/reference/cancelbooking
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
`POST /v2/bookings/cancel`
- Operation ID: `cancelBooking`
- Tags: Bookings
- Base URL: https://provider-api-sandbox.holidu.com (Sandbox Environment)
- Base URL: https://provider-api.holidu.com (Holidu Production API)
- Auth: send the API key in the `api-key` header
- Full spec: https://developer.holidu.com/openapi/connectivity-api.json
## Parameters
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `provider` | query | string | no | |
| `providerBookingId` | query | string | no | Provider booking id. Either this or holiduBookingId is required. |
| `holiduBookingId` | query | integer (int64) | no | Holidu booking id. Either this or providerBookingId is required. |
| `cancellationFee` | query | number | no | |
| `reason` | query | string | yes | one of: `PROVIDER_NO_PAYMENT`, `PROVIDER_OVERBOOKED`, `PROVIDER_FORCE_MAJEURE_NATURAL_DISASTER`, `PROVIDER_GUEST_BEHAVIOR`, `PROVIDER_INCORRECT_CONTENT`, `PROVIDER_INCORRECT_PRICING`, `PROVIDER_OTHER`, `PROVIDER_TECHNICAL_ISSUE_OTHER`, `PROVIDER_UNAVAILABLE_MANAGEMENT_STOPPED`, `PROVIDER_UNAVAILABLE_PROPERTY_RENOVATION_MAINTENANCE`, `PROVIDER_UNAVAILABLE_PROPERTY_SOLD`, `CUSTOMER_WRONG_PRICE`, `CUSTOMER_WRONG_FACILITIES`, `CUSTOMER_UNKNOWN_REASON`, `CUSTOMER_REBOOKING`, `CUSTOMER_PERSONAL`, `CUSTOMER_ALTERNATIVE_HOLIDU_PRICE`, `CUSTOMER_ALTERNATIVE_HOLIDU_LOCATION`, `CUSTOMER_ALTERNATIVE_HOLIDU_OTHER`, `CUSTOMER_ALTERNATIVE_ELSEWHERE_PRICE`, `CUSTOMER_ALTERNATIVE_ELSEWHERE_LOCATION`, `CUSTOMER_ALTERNATIVE_ELSEWHERE_OTHER`, `CUSTOMER_TRAVEL_RESTRICTIONS_VISA`, `CUSTOMER_TRAVEL_RESTRICTIONS_COVID`, `CUSTOMER_TRAVEL_RESTRICTIONS_OTHER`, `CUSTOMER_PROVIDER_REQUEST_BOOK_ELSEWHERE`, `CUSTOMER_PROVIDER_REQUEST_AVAILABILITY`, `CUSTOMER_PROVIDER_REQUEST_OTHER`, `CUSTOMER_PROPERTY_QUALITY`, `CUSTOMER_OTHER`, `HOLIDU_TEST_BOOKING`, `HOLIDU_NO_PAYMENT` |
## Responses
### 200 — The booking was cancelled
Body `application/json`, schema `BookingCancellationResponse`:
- `cancellationStatus` (string) — Status of the cancellation request (one of: `ALREADY_CANCELLED`, `CANCELLATION_SUCCESSFUL`, `BOOKING_DELETED`; example: `"CANCELLATION_SUCCESSFUL"`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"cancellationStatus": "CANCELLATION_SUCCESSFUL"
}
```
### 400 — Bad Request
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Bad Request"
}
```
### 401 — Authentication error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Authentication error"
}
```
### 403 — Forbidden
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Forbidden"
}
```
### 404 — Booking does not exist
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Booking does not exist"
}
```
### 418 — Requested method is not available in sandbox environment
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Requested method is not available in sandbox environment"
}
```
### 500 — Internal server error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Internal server error"
}
```
## Error body: `HoliduErrorResponse`
- `error` (string) — Error Text (example: `"Invalid Json: Unexpected character"`)
---
# Get booking details
Source: https://developer.holidu.com/reference/getbookingdetails
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
`GET /v2/bookings/details`
- Operation ID: `getBookingDetails`
- Tags: Bookings
- Base URL: https://provider-api-sandbox.holidu.com (Sandbox Environment)
- Base URL: https://provider-api.holidu.com (Holidu Production API)
- Auth: send the API key in the `api-key` header
- Full spec: https://developer.holidu.com/openapi/connectivity-api.json
## Parameters
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `provider` | query | string | no | Only needed for subprovider identification. |
| `providerBookingId` | query | string | no | Booking id. Either this or holiduBookingId is required. |
| `holiduBookingId` | query | integer (int64) | no | Holidu booking id. Either this or bookingId is required. |
## Responses
### 200 — Information for the booking
Body `application/json`, schema `BookingDetails`:
- `providerApartmentId` (string)
- `arrival` (string (date))
- `departure` (string (date))
- `guests` (array of Guest)
- `age` (integer (int32)) — Age of the guest, can be null if it is not required by capacity rules or provider config
- `customer` (CustomerDetails) — Model of the Customer.
- `firstName` (string)
- `lastName` (string)
- `email` (string)
- `gender` (string) (one of: `MALE`, `FEMALE`)
- `zip` (string)
- `city` (string)
- `street` (string)
- `country` (string) — Country code represented in standard ISO 3166-1 ALPHA-2 format (example: `"DE"`)
- `phone` (string)
- `language` (string)
- `specialCustomerRequest` (string)
- `guestReceipt` (Receipt)
- `costs` (array of BookingExtraCost)
- `id` (string)
- `name` (string)
- `basisOfCalculation` (string)
- `paymentTime` (string)
- `type` (string)
- `pricePerUnit` (PriceDto)
- `amount` (number)
- `currency` (string)
- `unitsSelected` (integer (int32))
- `totalPrice` (PriceDto)
- `amount` (number)
- `currency` (string)
- `discount` (BookingDiscount)
- `discountId` (integer (int64))
- `providerDiscountId` (string)
- `name` (string)
- `discountType` (string) (one of: `EARLY_BIRD`, `LAST_MINUTE`, `LONG_STAY`, `DEVICE_SPECIFIC`, `NEW_LISTING`, `LOYALTY`, `OFFER`)
- `percentage` (number)
- `conditions` (DiscountConditions)
- `daysBeforeCheckIn` (integer (int32)) — Number of days before checkin the booking has to be made (example: `60`)
- `minStay` (integer (int32)) — Minimum Stay (days) if required to get the discount (example: `5`)
- `bookingSeason` (array of SeasonApplicable) — Booking date must be in seasons for the discount to apply
- `onlyApplicableFrom` (string (date)) — Only applicable from date (example: `"2020-08-01"`)
- `onlyApplicableUntil` (string (date)) — Only applicable until date (example: `"2021-04-30"`)
- `travelSeason` (array of SeasonApplicable) — Stay must be within seasons for the discount to apply
- `onlyApplicableFrom` (string (date)) — Only applicable from date (example: `"2020-08-01"`)
- `onlyApplicableUntil` (string (date)) — Only applicable until date (example: `"2021-04-30"`)
- `deviceType` (string) — If the discount is applicable only for specific device. (one of: `MOBILE`, `DESKTOP`)
- `userType` (string) — If discount is applicable based on user type. (one of: `USER_AUTHENTICATED`)
- `amount` (PriceDto)
- `amount` (number)
- `currency` (string)
- `bareRentalPrice` (PriceDto)
- `amount` (number)
- `currency` (string)
- `paymentProcessing` (Payment)
- `paymentWithBooking` (PaymentWithBooking)
- `paymentPlanUuid` (string)
- `paymentHandler` (string)
- `paymentMethod` (string)
- `paymentTotalWithBooking` (PriceDto)
- `amount` (number)
- `currency` (string)
- `paymentRates` (array of PaymentRate)
- `dueDate` (string (date-time))
- `value` (PriceDto)
- `amount` (number)
- `currency` (string)
- `paymentOnsite` (array of PriceDto)
- `amount` (number)
- `currency` (string)
- `cancellationFees` (array of CancellationFee)
- `validUntil` (string (date-time))
- `feeInPercentage` (number)
- `metaData` (MetaData)
- `bookedAt` (string (date-time))
- `createdAt` (string (date-time))
- `updatedAt` (string (date-time))
- `status` (string) (one of: `PENDING`, `CONFIRMED`, `CANCELLED`, `DELETED`)
- `cancelledAt` (string (date-time))
- `holiduBookingId` (integer (int64))
- `commission` (Commission)
- `percentage` (number) — Holidu percentage commission for this booking, if percentage deal
- `commissionToHolidu` (PriceDto)
- `amount` (number)
- `currency` (string)
- `rateId` (string)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"customer": {
"gender": "MALE",
"country": "DE"
},
"guestReceipt": {
"discount": {
"discountType": "EARLY_BIRD",
"conditions": {
"daysBeforeCheckIn": 60,
"minStay": 5,
"bookingSeason": [
{
"onlyApplicableFrom": "2020-08-01",
"onlyApplicableUntil": "2021-04-30"
}
],
"travelSeason": [
{
"onlyApplicableFrom": "2020-08-01",
"onlyApplicableUntil": "2021-04-30"
}
],
"deviceType": "MOBILE",
"userType": "USER_AUTHENTICATED"
}
}
},
"metaData": {
"status": "PENDING"
}
}
```
### 400 — Bad Request
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Bad Request"
}
```
### 401 — Authentication error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Authentication error"
}
```
### 404 — Booking does not exist
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Booking does not exist"
}
```
### 418 — Requested method is not available in sandbox environment
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Requested method is not available in sandbox environment"
}
```
### 500 — Internal server error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Internal server error"
}
```
## Error body: `HoliduErrorResponse`
- `error` (string) — Error Text (example: `"Invalid Json: Unexpected character"`)
---
# Get parent apartment in multi-unit structure
Source: https://developer.holidu.com/reference/getmultiunit
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
`GET /v2/multi-unit`
- Operation ID: `getMultiUnit`
- Tags: MultiUnit
- Base URL: https://provider-api-sandbox.holidu.com (Sandbox Environment)
- Base URL: https://provider-api.holidu.com (Holidu Production API)
- Auth: send the API key in the `api-key` header
- Full spec: https://developer.holidu.com/openapi/connectivity-api.json
## Parameters
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `provider` | query | string | no | |
| `providerGroupId` | query | string | yes | |
## Responses
### 200 — Successful retrieval of a parent apartment
Body `*/*`, schema `MultiUnitDto`:
- `parentType` (string) — Type of the parent property (e.g. HOTEL, CAMPING) (one of: `ALLOTMENT_GARDEN`, `APARTMENT`, `BARN`, `BEACH_HUT`, `BED_AND_BREAKFAST`, `BOAT`, `BUNGALOW`, `CAMPER`, `CAMPING`, `CARAVAN`, `CASTLE`, `CAVE`, `CHACARA`, `CHALET`, `COTTAGE`, `COUNTRY_HOUSE`, `FARM`, `FARMHOUSE`, `FINCA`, `FISHING_HOUSE`, `GITE`, `GLAMPING`, `GUEST_HOUSE`, `HOLIDAY_VILLAGE`, `HOMESTAY`, `HOSTEL`, `HOTEL`, `HOUSE_BOAT`, `HUT`, `LIGHTHOUSE`, `LODGE`, `LOG_CABIN`, `LUXURY_TENT`, `MANOR`, `MILL`, `MOBILE_HOME`, `MOUNTAIN_HUT`, `PENSION`, `PENTHOUSE`, `RESIDENCE`, `RESORT`, `RIAD`, `TENT`, `TIPI`, `TOWER`, `TREE_HOUSE`, `TRULLO`, `VILLA`, `YACHT`, `YURT`; example: `"HOTEL"`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"parentType": "HOTEL"
}
```
### 400 — Bad Request
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Bad Request"
}
```
### 401 — Authentication error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Authentication error"
}
```
### 404 — Multi-unit does not exist
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Multi-unit does not exist"
}
```
### 500 — Internal server error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Internal server error"
}
```
## Error body: `HoliduErrorResponse`
- `error` (string) — Error Text (example: `"Invalid Json: Unexpected character"`)
---
# Create or update parent apartment in multi-unit structure
Source: https://developer.holidu.com/reference/upsertmultiunit
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
`POST /v2/multi-unit`
- Operation ID: `upsertMultiUnit`
- Tags: MultiUnit
- Base URL: https://provider-api-sandbox.holidu.com (Sandbox Environment)
- Base URL: https://provider-api.holidu.com (Holidu Production API)
- Auth: send the API key in the `api-key` header
- Full spec: https://developer.holidu.com/openapi/connectivity-api.json
## Parameters
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `provider` | query | string | no | |
| `providerGroupId` | query | string | yes | |
## Request body (required)
Content type `application/json`, schema `MultiUnitDto`:
- `parentType` (string) — Type of the parent property (e.g. HOTEL, CAMPING) (one of: `ALLOTMENT_GARDEN`, `APARTMENT`, `BARN`, `BEACH_HUT`, `BED_AND_BREAKFAST`, `BOAT`, `BUNGALOW`, `CAMPER`, `CAMPING`, `CARAVAN`, `CASTLE`, `CAVE`, `CHACARA`, `CHALET`, `COTTAGE`, `COUNTRY_HOUSE`, `FARM`, `FARMHOUSE`, `FINCA`, `FISHING_HOUSE`, `GITE`, `GLAMPING`, `GUEST_HOUSE`, `HOLIDAY_VILLAGE`, `HOMESTAY`, `HOSTEL`, `HOTEL`, `HOUSE_BOAT`, `HUT`, `LIGHTHOUSE`, `LODGE`, `LOG_CABIN`, `LUXURY_TENT`, `MANOR`, `MILL`, `MOBILE_HOME`, `MOUNTAIN_HUT`, `PENSION`, `PENTHOUSE`, `RESIDENCE`, `RESORT`, `RIAD`, `TENT`, `TIPI`, `TOWER`, `TREE_HOUSE`, `TRULLO`, `VILLA`, `YACHT`, `YURT`; example: `"HOTEL"`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"parentType": "HOTEL"
}
```
## Responses
### 200 — Successful creation or update of a parent apartment
Body `*/*`, schema `MultiUnitDto`:
- `parentType` (string) — Type of the parent property (e.g. HOTEL, CAMPING) (one of: `ALLOTMENT_GARDEN`, `APARTMENT`, `BARN`, `BEACH_HUT`, `BED_AND_BREAKFAST`, `BOAT`, `BUNGALOW`, `CAMPER`, `CAMPING`, `CARAVAN`, `CASTLE`, `CAVE`, `CHACARA`, `CHALET`, `COTTAGE`, `COUNTRY_HOUSE`, `FARM`, `FARMHOUSE`, `FINCA`, `FISHING_HOUSE`, `GITE`, `GLAMPING`, `GUEST_HOUSE`, `HOLIDAY_VILLAGE`, `HOMESTAY`, `HOSTEL`, `HOTEL`, `HOUSE_BOAT`, `HUT`, `LIGHTHOUSE`, `LODGE`, `LOG_CABIN`, `LUXURY_TENT`, `MANOR`, `MILL`, `MOBILE_HOME`, `MOUNTAIN_HUT`, `PENSION`, `PENTHOUSE`, `RESIDENCE`, `RESORT`, `RIAD`, `TENT`, `TIPI`, `TOWER`, `TREE_HOUSE`, `TRULLO`, `VILLA`, `YACHT`, `YURT`; example: `"HOTEL"`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"parentType": "HOTEL"
}
```
### 400 — Bad Request
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Bad Request"
}
```
### 401 — Authentication error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Authentication error"
}
```
### 500 — Internal server error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Internal server error"
}
```
## Error body: `HoliduErrorResponse`
- `error` (string) — Error Text (example: `"Invalid Json: Unexpected character"`)
---
# Get descriptions for a multi-unit
Source: https://developer.holidu.com/reference/getmultiunitdescriptions
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
`GET /v2/multi-unit/description`
- Operation ID: `getMultiUnitDescriptions`
- Tags: MultiUnit Localization
- Base URL: https://provider-api-sandbox.holidu.com (Sandbox Environment)
- Base URL: https://provider-api.holidu.com (Holidu Production API)
- Auth: send the API key in the `api-key` header
- Full spec: https://developer.holidu.com/openapi/connectivity-api.json
## Parameters
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `provider` | query | string | no | |
| `providerGroupId` | query | string | yes | |
## Responses
### 200 — Successful retrieval of multi-unit descriptions
Body `*/*`, schema `array of MultiUnitDescriptionDto`:
- `isoLanguage` (string, required) — ISO language code (example: `"en"`)
- `title` (string) — Title of the multi-unit in the specified language (example: `"Beach Resort"`)
- `description` (string) — Description of the multi-unit in the specified language (example: `"A beautiful resort by the beach"`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
[
{
"isoLanguage": "en",
"title": "Beach Resort",
"description": "A beautiful resort by the beach"
}
]
```
### 400 — Bad Request
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Bad Request"
}
```
### 401 — Authentication error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Authentication error"
}
```
### 500 — Internal server error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Internal server error"
}
```
## Error body: `HoliduErrorResponse`
- `error` (string) — Error Text (example: `"Invalid Json: Unexpected character"`)
---
# Update descriptions for a multi-unit
Source: https://developer.holidu.com/reference/updatemultiunitdescriptions
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
`POST /v2/multi-unit/description`
- Operation ID: `updateMultiUnitDescriptions`
- Tags: MultiUnit Localization
- Base URL: https://provider-api-sandbox.holidu.com (Sandbox Environment)
- Base URL: https://provider-api.holidu.com (Holidu Production API)
- Auth: send the API key in the `api-key` header
- Full spec: https://developer.holidu.com/openapi/connectivity-api.json
## Parameters
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `provider` | query | string | no | |
| `providerGroupId` | query | string | yes | |
## Request body (required)
Content type `application/json`, schema `array of MultiUnitDescriptionDto`:
- `isoLanguage` (string, required) — ISO language code (example: `"en"`)
- `title` (string) — Title of the multi-unit in the specified language (example: `"Beach Resort"`)
- `description` (string) — Description of the multi-unit in the specified language (example: `"A beautiful resort by the beach"`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
[
{
"isoLanguage": "en",
"title": "Beach Resort",
"description": "A beautiful resort by the beach"
}
]
```
## Responses
### 200 — Successful update of multi-unit descriptions
Body `*/*`, schema `array of MultiUnitDescriptionDto`:
- `isoLanguage` (string, required) — ISO language code (example: `"en"`)
- `title` (string) — Title of the multi-unit in the specified language (example: `"Beach Resort"`)
- `description` (string) — Description of the multi-unit in the specified language (example: `"A beautiful resort by the beach"`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
[
{
"isoLanguage": "en",
"title": "Beach Resort",
"description": "A beautiful resort by the beach"
}
]
```
### 400 — Bad Request
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Bad Request"
}
```
### 401 — Authentication error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Authentication error"
}
```
### 500 — Internal server error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Internal server error"
}
```
## Error body: `HoliduErrorResponse`
- `error` (string) — Error Text (example: `"Invalid Json: Unexpected character"`)
---
# Get photos for a multi-unit
Source: https://developer.holidu.com/reference/getmultiunitphotos
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
`GET /v2/multi-unit/photos`
- Operation ID: `getMultiUnitPhotos`
- Tags: MultiUnit Photo
- Base URL: https://provider-api-sandbox.holidu.com (Sandbox Environment)
- Base URL: https://provider-api.holidu.com (Holidu Production API)
- Auth: send the API key in the `api-key` header
- Full spec: https://developer.holidu.com/openapi/connectivity-api.json
## Parameters
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `provider` | query | string | no | |
| `providerGroupId` | query | string | yes | |
## Responses
### 200 — Successful retrieval of multi-unit photos
Body `*/*`, schema `array of PhotoDto`:
- `url` (string, required) — Photo URL (example: `"http://r-ec.bstatic.com/images/hotel/max500/149/14959242.jpg"`)
- `position` (integer (int32), required) — Position of the photo to be shown to the customer (min 1; example: `1`)
- `contentLength` (integer (int64)) — File size of the photo in bytes (min 1)
- `localizations` (array of PhotoLocalizationDto) — Photo titles in different languages
- `language` (string, required) — ISO Language of the Photo Title (min length 2; max length 2)
- `title` (string, required) — Photo Title
Example (assembled from the per-field examples in the spec, not an official sample):
```json
[
{
"url": "http://r-ec.bstatic.com/images/hotel/max500/149/14959242.jpg",
"position": 1
}
]
```
### 400 — Bad Request
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Bad Request"
}
```
### 401 — Authentication error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Authentication error"
}
```
### 500 — Internal server error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Internal server error"
}
```
## Error body: `HoliduErrorResponse`
- `error` (string) — Error Text (example: `"Invalid Json: Unexpected character"`)
---
# Update photos for a multi-unit
Source: https://developer.holidu.com/reference/updatemultiunitphotos
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
`POST /v2/multi-unit/photos`
- Operation ID: `updateMultiUnitPhotos`
- Tags: MultiUnit Photo
- Base URL: https://provider-api-sandbox.holidu.com (Sandbox Environment)
- Base URL: https://provider-api.holidu.com (Holidu Production API)
- Auth: send the API key in the `api-key` header
- Full spec: https://developer.holidu.com/openapi/connectivity-api.json
## Parameters
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `provider` | query | string | no | |
| `providerGroupId` | query | string | yes | |
## Request body (required)
Content type `application/json`, schema `array of PhotoDto`:
- `url` (string, required) — Photo URL (example: `"http://r-ec.bstatic.com/images/hotel/max500/149/14959242.jpg"`)
- `position` (integer (int32), required) — Position of the photo to be shown to the customer (min 1; example: `1`)
- `contentLength` (integer (int64)) — File size of the photo in bytes (min 1)
- `localizations` (array of PhotoLocalizationDto) — Photo titles in different languages
- `language` (string, required) — ISO Language of the Photo Title (min length 2; max length 2)
- `title` (string, required) — Photo Title
Example (assembled from the per-field examples in the spec, not an official sample):
```json
[
{
"url": "http://r-ec.bstatic.com/images/hotel/max500/149/14959242.jpg",
"position": 1
}
]
```
## Responses
### 200 — Successful update of multi-unit photos
Body `*/*`, schema `array of PhotoDto`:
- `url` (string, required) — Photo URL (example: `"http://r-ec.bstatic.com/images/hotel/max500/149/14959242.jpg"`)
- `position` (integer (int32), required) — Position of the photo to be shown to the customer (min 1; example: `1`)
- `contentLength` (integer (int64)) — File size of the photo in bytes (min 1)
- `localizations` (array of PhotoLocalizationDto) — Photo titles in different languages
- `language` (string, required) — ISO Language of the Photo Title (min length 2; max length 2)
- `title` (string, required) — Photo Title
Example (assembled from the per-field examples in the spec, not an official sample):
```json
[
{
"url": "http://r-ec.bstatic.com/images/hotel/max500/149/14959242.jpg",
"position": 1
}
]
```
### 400 — Bad Request
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Bad Request"
}
```
### 401 — Authentication error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Authentication error"
}
```
### 500 — Internal server error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Internal server error"
}
```
## Error body: `HoliduErrorResponse`
- `error` (string) — Error Text (example: `"Invalid Json: Unexpected character"`)
---
# Get facilities for a multi-unit
Source: https://developer.holidu.com/reference/getmultiunitfacilities
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
`GET /v2/multi-unit/facilities`
- Operation ID: `getMultiUnitFacilities`
- Tags: MultiUnit Facility
- Base URL: https://provider-api-sandbox.holidu.com (Sandbox Environment)
- Base URL: https://provider-api.holidu.com (Holidu Production API)
- Auth: send the API key in the `api-key` header
- Full spec: https://developer.holidu.com/openapi/connectivity-api.json
## Parameters
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `provider` | query | string | no | |
| `providerGroupId` | query | string | yes | |
## Responses
### 200 — Successful retrieval of multi-unit facilities
Body `*/*`, schema `array of MultiUnitFacility`:
- `name` (string)
- `type` (string) — Facility type. Here you should map your facilities to ours. The allowed values can be taken from GET /v2/facilities/types (one of: `SMOKING_ALLOWED`, `SMOKING_NOT_ALLOWED`, `SMOKING_AREA`, `PETS_ALLOWED`, `PETS_ALLOWED_ON_REQUEST`, `PETS_ALLOWED_SMALL_PETS`, `PETS_ALLOWED_CAT`, `PETS_ALLOWED_DOG`, `PETS_ALLOWED_DOG_MAX_10_KG`, `PETS_ALLOWED_DOG_MORE_THAN_10_KG`, `PETS_NOT_ALLOWED`, `PETS_ON_AVAILABILITY`, `VIEW`, `VIEW_OCEAN`, `VIEW_LAKE`, `VIEW_CITY`, `VIEW_GARDEN`, `VIEW_LANDMARK`, `VIEW_MOUNTAIN`, `VIEW_RIVER`, `VIEW_SEA`, `VIEW_BEACH`, `VIEW_GOLF_COURSE`, `VIEW_WATER`, `VIEW_INNER_COURTYARD`, `VIEW_POOL`, `WATERFRONT`, `BARRIER_FREE`, `SUITABLE_FOR_DISABLED`, `SUITABLE_FOR_ELDERLY`, `BARRIER_FREE_NOT`, `ENERGY`, `ENERGY_SOLAR`, `ENERGY_WIND`, `WATER_HOT`, `ROOF_FLAT`, `ENTRANCE_PRIVATE`, `ROOF_THATCHED`, `ANIMALS`, `ANIMALS_CAT`, `ANIMALS_DOG`, `ANIMALS_FARM`, `POOL`, `POOL_PRIVATE`, `POOL_CHILDREN`, `POOL_HEATED`, `POOL_INFINITY`, `POOL_TOYS`, `POOL_ROOFTOP`, `POOL_SEASONALLY_OPENED`, `POOL_FENCED`, `WHIRLPOOL`, `WHIRLPOOL_BATHTUB`, `ELEVATOR`, `INTERNET`, `INTERNET_NOT`, `INTERNET_WIFI`, `INTERNET_LAN`, `SAUNA`, `INFRARED_CABIN`, `CHIMNEY`, `STOVE_WOOD`, `FIREPLACE`, `CHILDFRIENDLY`, `RENOVATED`, `ALLERGY_FRIENDLY`, `BEST_PRICE`, `FOR_EVENTS`, `LUXURY`, `QUIET`, `VISITED_BY_HOLIDU`, `WASHER`, `DRYER`, `WASHER_DRYER_COMBO`, `FLAT_IRON`, `FLAT_IRON_AND_BOARD`, `HEATING`, `HEATING_NOT`, `HEATING_OIL`, `HEATING_GAS`, `HEATING_UNDERFLOOR`, `HEATING_WOOD_STOVE`, `HEATING_ELECTRIC`, `AIR_CONDITION`, `VENTILATOR`, `SOLARIUM`, `POOL_INDOOR`, `POOL_INDOOR_CHILDREN`, `WHIRLPOOL_INDOOR`, `TV`, `TV_CHILDREN`, `TV_LCD`, `TV_FLAT_SCREEN`, `TV_GERMAN_CHANNELS`, `TV_FRENCH_CHANNELS`, `TV_ENGLISH_CHANNELS`, `TV_SPANISH_CHANNELS`, `TV_DUTCH_CHANNELS`, `TV_DANISH_CHANNELS`, `TV_ITALIAN_CHANNELS`, `TV_INTERNATIONAL_CHANNELS`, `TV_CABLE`, `TV_SATELLITE`, `TV_DIGITAL`, `TV_PAY_PER_VIEW`, `BEAMER`, `BLURAY_PLAYER`, `DVD_PLAYER`, `CD_PLAYER`, `RADIO`, `MP3_PLAYER`, `IPOD_DOCK`, `SPEAKERS`, `SOUND_SYSTEM`, `COMPUTER`, `TELEPHONE`, `HIGHCHAIR`, `PLAYROOM`, `ROOMS_LOUNGE`, `INTERCOM`, `FIRE_PIT`, `FIRE_EXTINGUISHER`, `FIRE_ALARM`, `CARBONMONOXIDE_DETECTOR`, `ALARM_HOUSE`, `BED_KING`, `BED_QUEEN`, `BED_DOUBLE`, `BED_SINGLE`, `BED_CHILDREN`, `BED_BABY`, `BED_EXTRA`, `BED_SLEEPING_COUCH`, `BED_SLEEPING_COUCH_2`, `BED_SLEEPING_COUCH_1`, `BED_FOLDAWAY`, `BED_BUNK`, `BED_BUNK_1`, `BED_BUNK_2`, `BED_FLOOR_MATTRESS`, `BED_AIR_MATTRESS`, `ROOMS_DININGROOM`, `ROOMS_LIVINGROOM`, `ROOMS_SINGLE`, `ROOMS_DOUBLE`, `ROOMS_FAMILY`, `ROOMS_BATHROOM`, `ROOMS_BEDROOM`, `ROOMS_COMMON`, `SUITED_FOR_GROUPS`, `OUTDOOR_DINING_AREA`, `SAFE`, `BALCONY_TERRACE`, `BALCONY`, `BALCONY_COVERED`, `BALCONY_UNCOVERED`, `TERRACE`, `TERRACE_COVERED`, `TERRACE_UNCOVERED`, `TERRACE_ROOFTOP`, `GARDEN`, `HOUSEOWNED_BEACH`, `GARDEN_FURNITURE`, `HAMMOCK`, `STROLLER`, `DECK_CHAIR`, `BEACH_CHAIR`, `POOL_OUTDOOR`, `POOL_OUTDOOR_CHILDREN`, `WHIRLPOOL_OUTDOOR`, `STEAMBATH`, `FENCED_PROPERTY`, `FENCED_PROPERTY_NOT`, `TOYS`, `TOYS_BOARD_GAME`, `TOYS_BOOKS`, `TOYS_BOOKS_FOR_CHILDREN`, `TOYS_DVDS`, `TOYS_DVDS_FOR_CHILDREN`, `GAME_CONSOLE_PS3`, `GAME_CONSOLE_PS4`, `GAME_CONSOLE_XBOX_ONE`, `GAME_CONSOLE_XBOX_360`, `GAME_CONSOLE_WII`, `GAME_CONSOLE_OTHER`, `PLAYGROUND`, `GRILL`, `GRILL_GAS`, `GRILL_COAL`, `GRILL_ELECTRIC`, `PARKING`, `PARKING_SPOT`, `PARKING_AT_OBJECT`, `PARKING_GARAGE`, `PARKING_CARPORT`, `PARKING_STREET`, `PARKING_SECURE`, `PARKING_DISABLED`, `CONSERVATORY`, `BICYCLE_RACK`, `BICYCLE_CELLAR`, `BICYCLE_RENTALS_ON_SITE`, `LANDING_STAGE`, `SKI_IN_OUT`, `SKI_BUS_AT_PROPERTY`, `PARASOL`, `KITCHEN`, `KITCHEN_NOT`, `KITCHENETTE`, `OVEN`, `COOKTOP`, `MICROWAVE`, `FRIDGE`, `ICE_MAKER`, `FREEZER`, `FRIDGE_FREEZER_COMBINATION`, `DISHWASHER`, `WATER_HEATER`, `COFFEE_TEA_MACHINE`, `COFFEE_MACHINE`, `ESPRESSO_MACHINE`, `COFFEE`, `MIXER`, `TOASTER`, `JUICER`, `MINIBAR`, `KETTLE`, `SPICES`, `DISHES`, `CUTLERY`, `KITCHEN_UTENSILS`, `SHOWER`, `SHOWER_BATHTUB_COMBO`, `SHOWER_BATHTUB`, `SHOWER_OUTSIDE`, `BATHTUB`, `SEPARATE_TOILET`, `EN_SUITE_TOILET`, `HAIRDRYER`, `VACUUM_CLEANER`, `IRONING_BOARD`, `TROUSERPRESS`, `WARDROBE`, `CLOTHES_HANGERS`, `FURNITURE_DESK`, `CURTAINS_BLACKOUT`, `SMOKE_DETECTOR`, `TOWELS`, `TOWELS_BEACH_POOL`, `TOWELS_NOT`, `TOILETRIES`, `BEDLINEN`, `BEDLINEN_NOT`, `DISHCLOTH`, `BATHROBE`, `BREAKFAST`, `HALF_BOARD`, `LUNCHSERVICE_PACKED`, `CHILDCARE`, `BIKE_RENTAL`, `SKI_RENTAL`, `SKI_STORAGE`, `SKI_PASS`, `SCOOTER_RENTAL`, `CAR_RENTAL`, `BOAT_RENTAL`, `BIKE_PROVIDED`, `BOAT_PROVIDED`, `AIRPORT_SHUTTLE`, `SHUTTLE_SERVICE`, `FIRST_AID_KIT`, `DOORMAN`, `RECEPTION_24H`, `ATM`, `DRY_CLEANING`, `IRONING_SERVICE`, `LUGGAGE_STORAGE`, `CURRENCY_EXCHANGE`, `RESTAURANT`, `MINIMARKET`, `HOUSEKEEPING`, `HOUSEKEEPING_DAILY`, `HOUSEKEEPING_WEEKLY`, `BOOK_WITHOUT_CREDIT_CARD`, `CHEQUES_VACANCES`, `GROUPS_NOT_ALLOWED`, `YOUTH_GROUPS_NOT_ALLOWED`, `YOUTH_GROUPS_ALLOWED`, `SUITABLE_YOUNG_PEOPLE`, `SUITABLE_CHILDREN`, `SUITABLE_CHILDREN_NO`, `CHILDREN_NOT_ALLOWED`, `FAMILY_FRIENDLY`, `HOUSEOWNER_LIVES_ONSPOT`, `LONGTERM_STAYS_ALLOWED`, `CHECKIN_HOST`, `CHECKIN_SELF`, `KEY_CARD_ACCESS`, `LOCATION_GROUND_FLOOR`, `LOCATION_UPPER_FLOOR`, `WINTER_SPORTS`, `WATER_SPORTS`, `SKI_VACATION`, `BEACH_VACATION`, `FARM_VACATION`, `NATURE`, `WELLNESS`, `WELLNESS_TREATMENTS`, `WELLNESS_AREA`, `GYM`, `TENNIS_COURT`, `GOLF`, `MINIGOLF`, `FISHING`, `SAILING`, `HIKING`, `HORSEBACK_RIDING`, `WATERPARK`, `SURFING`, `WINDSURFING`, `KITESURFING`, `BIKING`, `DIVING`, `MOUNTAIN_BIKING`, `BOAT_TRIP`, `BILLIARD_TABLE`, `TABLE_TENNIS`, `PUBLIC_TRANSPORTATION`, `CHILDREN_ALLOWED`, `SINK`, `BASKETBALL`, `BIKE`, `BOAT`, `VOLLEY_BALL_COURT`, `GOLF_COURT`, `CROSS_COUNTRY_SKI`, `BY_THE_WATER`, `IN_THE_SKI_RESORT`, `CLOSE_TO_SKI_LIFTS`, `SKI_PASS_DISCOUNTED`, `SKI_PASS_INCLUDED`, `SKI_RENTAL_DISCOUNTED`, `SKI_RENTAL_INCLUDED`, `SKI_SCHOOL_DISCOUNTED`, `SKI_SCHOOL_INCLUDED`, `BIKE_STORAGE`, `LGBTQ_FRIENDLY`, `GREEN_PROPERTY`, `EVENT_FRIENDLY`, `PRIVATE_BEACH`, `BEACH_ACCESS`, `BEACH_FRONT`, `LAKE_FRONT`, `WATER_FRONT`, `OCEAN_FRONT`, `ELECTRIC_VEHICLE_CHARGING_STATION`, `ELECTRIC_BIKE_CHARGING_STATION`, `MOBILITY_PUBLIC_TRANSPORT`, `MOBILITY_BIKES`, `MOBILITY_EBIKES`, `RENEWABLE_ENERGY`, `RECYCLING_GLASS`, `RECYCLING_PAPER`, `RECYCLING_PLASTIC`, `RECYCLING_ORGANIC`, `ENERGY_SAVING_SOLAR_PANELS`, `ENERGY_SAVING_WIND_POWER`, `ENERGY_SAVING_METHANE_DIGESTER`, `ENERGY_SAVING_SOLAR_COLLECTOR`, `ENERGY_SAVING_LIGHTING`, `ENERGY_SAVING_SMART_CONTROLS`, `ENERGY_SOLAR_THERMAL_PANELS`, `ENERGY_HEAT_PUMPS`, `ENERGY_GREEN_ELECTRICITY_PROVIDER`, `ENERGY_BIOMASS`, `ENERGY_GEOTHERMICS`, `ENERGY_INFRARED_HEATING_PANELS`, `ENERGY_MASONRY_HEATER`, `INSULATION_GLASS`, `INSULATION_ROOF`, `INSULATION_WALL`, `INSULATION_FLOOR`, `INSULATION_NATURAL_MATERIALS`, `INSULATION_GREEN_COOL_ROOF`, `WATER_SAVING_SHOWER`, `WATER_SAVING_TOILET`, `WATER_SAVING_TAPS`, `RAINWATER_TREATMENT`, `GREY_WATER_SYSTEM`, `OWN_PRODUCE_JAM`, `OWN_PRODUCE_VEGETABLES`, `OWN_PRODUCE_HERBS`, `OWN_PRODUCE_OLIVE_OIL`, `OWN_PRODUCE_HONEY`, `OWN_PRODUCE_FRUITS`, `OWN_PRODUCE_EGGS`, `OWN_PRODUCE_CHEESE`, `OWN_PRODUCE_BREAD`, `OWN_PRODUCE_NUTS`, `ECO_CLEANING_PRODUCTS`, `SUSTAINABLE_CONSTRUCTION`, `EVENT_MEAL`, `EVENT_BIRTHDAY_CHILD`, `EVENT_BABY_SHOWER`, `EVENT_STAG_PARTY`, `EVENT_WEDDING`, `EVENT_BIRTHDAY_ADULT`, `SHOWER_ROLL_IN`, `SHOWER_GRAB_RAILS`, `TOILET_RAISED`, `WIDE_DOORS`, `STEP_FREE_ACCESS`, `BATHTUB_CHAIR`, `BATHROOM_TURNING_CYCLE_MIN_1_5_M`, `BATHROOM_EMERGENCY_CORD`, `STEP_FREE_INTERIOR`, `SHOWER_CHAIR`, `TOILET_GRAB_RAILS`, `BATHROOM_SINK_LOWERED`, `INTERNET_WIFI_FOR_VIDEO_CALLS`, `DRINKING_WATER_BOTTLED`, `DISH_DETERGENT`, `SHAMPOO`, `PARTIES_NOT_ALLOWED`, `LAUNDRY`, `LAUNDRY_SERVICE`, `WATER_PARK`, `CORONA_RULES_APPLIED`, `SOUTERRAIN`, `BOWLING`, `KEGELBAHN`, `YOGA_SCHOOL`, `UNIT_SIZE`, `PRINTER`, `PIANO`, `BABYSITTING_SERVICES`, `ROOM_SERVICE`, `HOUR_SEC`, `_24HOUR_SECURITY`, `AIR_PURIFIER`, `BABY_MONITOR`, `BED_EXTRA_LONG`, `BIDET`, `BOOT_DRIER`, `BREAD_SERVICE`, `BROADCAST_LIVE_SPORT`, `CANOEING`, `CASHLESS_PAYMENT`, `CLEANING_PRODUCTS`, `CLOTHES_DRYING_RACK`, `COFFEE_GRINDER`, `CONCIERGE`, `COOKING_CLASS`, `EXPRESS_CHECKINOUT`, `ECOTOURISM`, `FLOOR_CARPETING`, `GROCERY_DELIVERY`, `HOT_SPRINGS`, `HYPOALLERGENIC_PILLOW`, `JET_SKIING`, `KAYAKING`, `KIDS_CLUB`, `LIVE_MUSIC`, `MEAL_DELIVERY`, `MOSQUITO_NET`, `MOTORBOATING`, `NEWSPAPER`, `NO_STEP_FREE_ACCESS`, `NORDIC_WALKING`, `RECYCLING`, `SANDBOX`, `SHOPPING`, `SKI_SCHOOL`, `SKIING`, `SNORKELING`, `SUNLOUNGER`, `TOOTHBRUSH`, `TRAMPOLINE`, `TV_STREAMING`, `VISUAL_AID_BRAILLE`, `VISUAL_AID_TACTILE_SIGNS`, `WILDLIFE_VIEWING`, `WINERY`, `WING_FOIL`, `STAND_UP_PADDLING`, `CLIMBING`, `SWIMMING`, `PARAGLIDING`, `RUNNING`, `CANYONING`, `YOGA`, `PARTNER_SUSTAINABILITY_BADGE`, `GASTGEBER_MIT_HERZ`, `ALLGAEU_TOP_HOTELS`, `CERTIFICATE_4FUER3`, `CERTIFICATE_ADAC_CAMPINGPLATZ_AUSZEICHNUNG`, `CERTIFICATE_ALBCARD`, `CERTIFICATE_ALB_CROSSING`, `CERTIFICATE_ALBSTEIG`, `CERTIFICATE_BAG_OBSTHOF`, `CERTIFICATE_BAG_URLAUB_AUF_DEM_BAUERNHOF`, `CERTIFICATE_BARRIEREFREI_ERLEBEN`, `CERTIFICATE_BARRIEREFREIE_UNTERKUNFT_OKGO_CH`, `CERTIFICATE_BERGSTEIGERDOERFER_CH`, `CERTIFICATE_BETT_UND_BIKE`, `CERTIFICATE_BETT_UND_BIKE_ADFC`, `CERTIFICATE_BIKE_HOTEL_HOTTELIERSUISSE_CH`, `CERTIFICATE_BIOSPHAEREN_GASTGEBER`, `CERTIFICATE_CAUSE_WE_CARE_CH`, `CERTIFICATE_DEHOGA_UMWELTCHECK_GOLD`, `CERTIFICATE_DEHOGA_UMWELTCHECK_SILBER`, `CERTIFICATE_DLG_LANDURLAUB`, `CERTIFICATE_DLG_URLAUB_AUF_DEM_WINZERHOF`, `CERTIFICATE_ECARF_ALLERGIKERFREUNDLICH`, `CERTIFICATE_ECHTE_GASTLICHKEIT_SCHWARZWALD`, `CERTIFICATE_ECHT_NACHHALTIG`, `CERTIFICATE_ECOCAMPING`, `CERTIFICATE_EMPFOHLENES_WEINHOTEL_BADEN_WUERTTEMBERG`, `CERTIFICATE_FAMILIEN_FERIEN`, `CERTIFICATE_FAMILIEN_RESTAURANTS`, `CERTIFICATE_FIVE_STAR_CH`, `CERTIFICATE_FIVE_STAR_GASTROSUISSE_CH`, `CERTIFICATE_FIVE_STAR_HOTELLERIESUISSE_CH`, `CERTIFICATE_FIVE_STAR_SERVICED_APARTMENTS_CH`, `CERTIFICATE_FIVE_STAR_SUPERIOR_CH`, `CERTIFICATE_FIVE_STAR_SUPERIOR_HOTTELLERIESUISSE_CH`, `CERTIFICATE_FOUR_STAR_CH`, `CERTIFICATE_FOUR_STAR_GASTROSUISSE_CH`, `CERTIFICATE_FOUR_STAR_HOTELLERIESUISSE_CH`, `CERTIFICATE_FOUR_STAR_SERVICED_APARTMENTS_CH`, `CERTIFICATE_FOUR_STAR_SUPERIOR_CH`, `CERTIFICATE_FOUR_STAR_SUPERIOR_HOTTELLERIESUISSE_CH`, `CERTIFICATE_GLIDE_RESTAAURANTS_CH`, `CERTIFICATE_GREENSIGN_LEVEL_3`, `CERTIFICATE_GREENSIGN_LEVEL_4`, `CERTIFICATE_IBEX_FAIRSTAY_CH`, `CERTIFICATE_LAND_URLAUB`, `CERTIFICATE_MICHELIN_STERN`, `CERTIFICATE_MOEHNETALRADWEG`, `CERTIFICATE_MOTORBIKE_FRIENDLY`, `CERTIFICATE_NACHHALTIGE_FERIENIMMOBILIE`, `CERTIFICATE_NATURPARK_WIRTE`, `CERTIFICATE_OHNE_GLUTEN_CH`, `CERTIFICATE_ONE_STAR_CH`, `CERTIFICATE_ONE_STAR_GASTROSUISSE_CH`, `CERTIFICATE_ONE_STAR_HOTELLERIESUISSE_CH`, `CERTIFICATE_ONE_STAR_SERVICED_APARTMENTS_CH`, `CERTIFICATE_ONE_STAR_SUPERIOR_CH`, `CERTIFICATE_ONE_STAR_SUPERIOR_HOTELLERIESUISSE_CH`, `CERTIFICATE_PARTNER_NATIONALPARK_SCHWARZWALD`, `CERTIFICATE_QUALITAETSBETRIEB_ROTHAARSTEIG`, `CERTIFICATE_SAUERLAENDER_WANDERGASTHOEFE`, `CERTIFICATE_SAUERLAND_HOEHENFLUG`, `CERTIFICATE_SCHMALLENBERGER_KINDERLAND`, `CERTIFICATE_SCHMECK_DEN_SUEDEN`, `CERTIFICATE_SCHNEESPORTHOTEL_HOTELLERIESUISSE_CH`, `CERTIFICATE_SCHWARZWALD_BALANCE`, `CERTIFICATE_SCHWARZWALD_PLUS`, `CERTIFICATE_SERVICE_QUALITAET_DEUTSCHLAND`, `CERTIFICATE_STERNE_IM_SAUERLAND`, `CERTIFICATE_STV_FIVE_STARS_CH`, `CERTIFICATE_STV_FIVE_STARS_SUP_CH`, `CERTIFICATE_STV_FOUR_STARS_CH`, `CERTIFICATE_STV_FOUR_STARS_SUP_CH`, `CERTIFICATE_STV_ONE_STAR_CH`, `CERTIFICATE_STV_ONE_STAR_SUP_CH`, `CERTIFICATE_STV_THREE_STARS_CH`, `CERTIFICATE_STV_THREE_STARS_SUP_CH`, `CERTIFICATE_STV_TWO_STARS_CH`, `CERTIFICATE_STV_TWO_STARS_SUP_CH`, `CERTIFICATE_SWISS_HISTORIC_HOTELS_CH`, `CERTIFICATE_SWISS_LODGE_HOTTELIERSUISSE_CH`, `CERTIFICATE_SWISSTAINABLE_LEVEL_ONE_CH`, `CERTIFICATE_SWISSTAINABLE_LEVEL_TWO_CH`, `CERTIFICATE_SWISSTAINSABLE_LEVEL_THREE_CH`, `CERTIFICATE_THREE_STAR_CH`, `CERTIFICATE_THREE_STAR_GASTROSUISSE_CH`, `CERTIFICATE_THREE_STAR_HOTELLERIESUISSE_CH`, `CERTIFICATE_THREE_STAR_SERVICED_APARTMENTS_CH`, `CERTIFICATE_THREE_STAR_SUPERIOR_CH`, `CERTIFICATE_THREE_STAR_SUPERIOR_HOTTELLERIESUISSE_CH`, `CERTIFICATE_TRAUFGAENGE_GASTGEBER`, `CERTIFICATE_TWO_STAR_CH`, `CERTIFICATE_TWO_STAR_GASTROSUISSE_CH`, `CERTIFICATE_TWO_STAR_HOTELLERIESUISSE_CH`, `CERTIFICATE_TWO_STAR_SERVICED_APARTMENTS_CH`, `CERTIFICATE_TWO_STAR_SUPERIOR_CH`, `CERTIFICATE_TWO_STAR_SUPERIOR_HOTTELLERIESUISSE_CH`, `CERTIFICATE_URLAUB_AUF_DEM_BAUERNHOF`, `CERTIFICATE_URLAUB_AUF_DEM_BAUERNHOF_GER`, `CERTIFICATE_WANDERBARES_DEUTSCHLAND`, `CERTIFICATE_WANDERBARES_DEUTSCHLAND_GASTRONOMIE`, `CERTIFICATE_WANDER_HOTEL_HOTTELIERSUISSE_CH`, `CERTIFICATE_WELLNESS_AND_SPA_HOTTELIERSUISSE_CH`, `CERTIFICATE_WELLNESS_HOTEL_HOTTELIERSUISSE_CH`, `CERTIFICATE_WELLNESS_STARS_DEUTSCHLAND`, `CERTIFICATE_WIN_CHARTA_DES_LANDES_BADEN_WUERTTEMBERG`, `CERTIFICATE_WINTERSPORTARENA_SAUERLAND`, `DREIWELTEN_CARD`, `ECHT_BODENSEE_CARD`, `GUESTCARD`, `HOCHSCHWARZWALD_CARD`, `SAUERLAND_CARD`, `SAUERLAND_SOMMER_CARD`, `SCHMALLENBERGER_SAUERLAND_CARD`, `WILLINGEN_MEINE_CARD`, `MARKENPARTNER`, `CERTIFICATE_URLAUBS_WINZERHOF`, `CERTIFICATE_URLAUBS_REITERHOF`, `CERTIFICATE_SCHWARZWALD_`, `BALANCE`, `CERTIFICATE_VIABONO`, `CERTIFICATE_MEDICAL_WELLNESS_THREE_STARS`, `CERTIFICATE_MEDICAL_WELLNESS_FOUR_STARS`, `CERTIFICATE_MEDICAL_WELLNESS_FIVE_STARS`, `CERTIFICATE_VIA_MICHELIN_TWO_STARS`, `CERTIFICATE_VIA_MICHELIN_THREE_STARS`, `CERTIFICATE_BRONZE_DEHOGA`, `CERTIFICATE_BIKE_AREA_SAUERLAND`, `CERTIFICATE_SAUERLAND_WALDROUTE`, `CERTIFICATE_KAISERSTUEHLER_WINZERHOF`, `CERTIFICATE_WEINHOTELS_KAISERSTUHL`, `CERTIFICATE_KOSTENLOS_STORNIERBAR_GARANTIE`, `CERTIFICATE_WIR_FUER_SIE`, `CERTIFICATE_PARTNER_BIOSPHAERENGEBIET_SCHWAEBISCHE_ALB`, `CERTIFICATE_REISEN_FUER_ALLE`, `CERTIFICATE_DLG_`, `LANDURLAUB`, `CERTIFICATE_BIOSFERA_PARTNERBETRIEB_CH`, `THEMENPARTNER_KULTUR`, `THEMENPARTNER_RAD`, `THEMENPARTNER_WANDERN`, `THEMENPARTNER_FAMILIE`, `THEMENPARTNER_WELLNESS`, `TOP_GASTGEBER_BOFE`, `LUNCH`, `DINNER`; example: `"POOL"`)
- `maxAmount` (integer (int32)) — Max Amount (example: `1`)
- `privateUsage` (boolean) — Facility is in private use (example: `true`)
- `additionalFeesApply` (boolean) — Additional fees apply for the use of this facility (example: `true`)
- `availableTime` (FacilityAvailabilityData)
- `availableFrom` (AvailableTime) — Time until facility would be available
- `pointInMonth` (string) — Point in the month (one of: `BEGINNING`, `MIDDLE`, `END`; example: `"MIDDLE"`)
- `month` (string) — Month (one of: `JANUARY`, `FEBRUARY`, `MARCH`, `APRIL`, `MAY`, `JUNE`, `JULY`, `AUGUST`, `SEPTEMBER`, `OCTOBER`, `NOVEMBER`, `DECEMBER`; example: `"JANUARY"`)
- `availableTo` (AvailableTime) — Time until facility would be available
- `pointInMonth` (string) — Point in the month (one of: `BEGINNING`, `MIDDLE`, `END`; example: `"MIDDLE"`)
- `month` (string) — Month (one of: `JANUARY`, `FEBRUARY`, `MARCH`, `APRIL`, `MAY`, `JUNE`, `JULY`, `AUGUST`, `SEPTEMBER`, `OCTOBER`, `NOVEMBER`, `DECEMBER`; example: `"JANUARY"`)
- `location` (string) — Location of facility (one of: `UNDEFINED`, `NEAR_BY`, `IN_APARTMENT`; example: `"NEAR_BY"`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
[
{
"type": "POOL",
"maxAmount": 1,
"privateUsage": true,
"additionalFeesApply": true,
"availableTime": {
"availableFrom": {
"pointInMonth": "MIDDLE",
"month": "JANUARY"
},
"availableTo": {
"pointInMonth": "MIDDLE",
"month": "JANUARY"
}
},
"location": "NEAR_BY"
}
]
```
### 400 — Bad Request
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Bad Request"
}
```
### 401 — Authentication error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Authentication error"
}
```
### 500 — Internal server error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Internal server error"
}
```
## Error body: `HoliduErrorResponse`
- `error` (string) — Error Text (example: `"Invalid Json: Unexpected character"`)
---
# Update facilities for a multi-unit
Source: https://developer.holidu.com/reference/updatemultiunitfacilities
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
`POST /v2/multi-unit/facilities`
- Operation ID: `updateMultiUnitFacilities`
- Tags: MultiUnit Facility
- Base URL: https://provider-api-sandbox.holidu.com (Sandbox Environment)
- Base URL: https://provider-api.holidu.com (Holidu Production API)
- Auth: send the API key in the `api-key` header
- Full spec: https://developer.holidu.com/openapi/connectivity-api.json
## Parameters
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `provider` | query | string | no | |
| `providerGroupId` | query | string | yes | |
## Request body (required)
Content type `application/json`, schema `array of MultiUnitFacility`:
- `name` (string)
- `type` (string) — Facility type. Here you should map your facilities to ours. The allowed values can be taken from GET /v2/facilities/types (one of: `SMOKING_ALLOWED`, `SMOKING_NOT_ALLOWED`, `SMOKING_AREA`, `PETS_ALLOWED`, `PETS_ALLOWED_ON_REQUEST`, `PETS_ALLOWED_SMALL_PETS`, `PETS_ALLOWED_CAT`, `PETS_ALLOWED_DOG`, `PETS_ALLOWED_DOG_MAX_10_KG`, `PETS_ALLOWED_DOG_MORE_THAN_10_KG`, `PETS_NOT_ALLOWED`, `PETS_ON_AVAILABILITY`, `VIEW`, `VIEW_OCEAN`, `VIEW_LAKE`, `VIEW_CITY`, `VIEW_GARDEN`, `VIEW_LANDMARK`, `VIEW_MOUNTAIN`, `VIEW_RIVER`, `VIEW_SEA`, `VIEW_BEACH`, `VIEW_GOLF_COURSE`, `VIEW_WATER`, `VIEW_INNER_COURTYARD`, `VIEW_POOL`, `WATERFRONT`, `BARRIER_FREE`, `SUITABLE_FOR_DISABLED`, `SUITABLE_FOR_ELDERLY`, `BARRIER_FREE_NOT`, `ENERGY`, `ENERGY_SOLAR`, `ENERGY_WIND`, `WATER_HOT`, `ROOF_FLAT`, `ENTRANCE_PRIVATE`, `ROOF_THATCHED`, `ANIMALS`, `ANIMALS_CAT`, `ANIMALS_DOG`, `ANIMALS_FARM`, `POOL`, `POOL_PRIVATE`, `POOL_CHILDREN`, `POOL_HEATED`, `POOL_INFINITY`, `POOL_TOYS`, `POOL_ROOFTOP`, `POOL_SEASONALLY_OPENED`, `POOL_FENCED`, `WHIRLPOOL`, `WHIRLPOOL_BATHTUB`, `ELEVATOR`, `INTERNET`, `INTERNET_NOT`, `INTERNET_WIFI`, `INTERNET_LAN`, `SAUNA`, `INFRARED_CABIN`, `CHIMNEY`, `STOVE_WOOD`, `FIREPLACE`, `CHILDFRIENDLY`, `RENOVATED`, `ALLERGY_FRIENDLY`, `BEST_PRICE`, `FOR_EVENTS`, `LUXURY`, `QUIET`, `VISITED_BY_HOLIDU`, `WASHER`, `DRYER`, `WASHER_DRYER_COMBO`, `FLAT_IRON`, `FLAT_IRON_AND_BOARD`, `HEATING`, `HEATING_NOT`, `HEATING_OIL`, `HEATING_GAS`, `HEATING_UNDERFLOOR`, `HEATING_WOOD_STOVE`, `HEATING_ELECTRIC`, `AIR_CONDITION`, `VENTILATOR`, `SOLARIUM`, `POOL_INDOOR`, `POOL_INDOOR_CHILDREN`, `WHIRLPOOL_INDOOR`, `TV`, `TV_CHILDREN`, `TV_LCD`, `TV_FLAT_SCREEN`, `TV_GERMAN_CHANNELS`, `TV_FRENCH_CHANNELS`, `TV_ENGLISH_CHANNELS`, `TV_SPANISH_CHANNELS`, `TV_DUTCH_CHANNELS`, `TV_DANISH_CHANNELS`, `TV_ITALIAN_CHANNELS`, `TV_INTERNATIONAL_CHANNELS`, `TV_CABLE`, `TV_SATELLITE`, `TV_DIGITAL`, `TV_PAY_PER_VIEW`, `BEAMER`, `BLURAY_PLAYER`, `DVD_PLAYER`, `CD_PLAYER`, `RADIO`, `MP3_PLAYER`, `IPOD_DOCK`, `SPEAKERS`, `SOUND_SYSTEM`, `COMPUTER`, `TELEPHONE`, `HIGHCHAIR`, `PLAYROOM`, `ROOMS_LOUNGE`, `INTERCOM`, `FIRE_PIT`, `FIRE_EXTINGUISHER`, `FIRE_ALARM`, `CARBONMONOXIDE_DETECTOR`, `ALARM_HOUSE`, `BED_KING`, `BED_QUEEN`, `BED_DOUBLE`, `BED_SINGLE`, `BED_CHILDREN`, `BED_BABY`, `BED_EXTRA`, `BED_SLEEPING_COUCH`, `BED_SLEEPING_COUCH_2`, `BED_SLEEPING_COUCH_1`, `BED_FOLDAWAY`, `BED_BUNK`, `BED_BUNK_1`, `BED_BUNK_2`, `BED_FLOOR_MATTRESS`, `BED_AIR_MATTRESS`, `ROOMS_DININGROOM`, `ROOMS_LIVINGROOM`, `ROOMS_SINGLE`, `ROOMS_DOUBLE`, `ROOMS_FAMILY`, `ROOMS_BATHROOM`, `ROOMS_BEDROOM`, `ROOMS_COMMON`, `SUITED_FOR_GROUPS`, `OUTDOOR_DINING_AREA`, `SAFE`, `BALCONY_TERRACE`, `BALCONY`, `BALCONY_COVERED`, `BALCONY_UNCOVERED`, `TERRACE`, `TERRACE_COVERED`, `TERRACE_UNCOVERED`, `TERRACE_ROOFTOP`, `GARDEN`, `HOUSEOWNED_BEACH`, `GARDEN_FURNITURE`, `HAMMOCK`, `STROLLER`, `DECK_CHAIR`, `BEACH_CHAIR`, `POOL_OUTDOOR`, `POOL_OUTDOOR_CHILDREN`, `WHIRLPOOL_OUTDOOR`, `STEAMBATH`, `FENCED_PROPERTY`, `FENCED_PROPERTY_NOT`, `TOYS`, `TOYS_BOARD_GAME`, `TOYS_BOOKS`, `TOYS_BOOKS_FOR_CHILDREN`, `TOYS_DVDS`, `TOYS_DVDS_FOR_CHILDREN`, `GAME_CONSOLE_PS3`, `GAME_CONSOLE_PS4`, `GAME_CONSOLE_XBOX_ONE`, `GAME_CONSOLE_XBOX_360`, `GAME_CONSOLE_WII`, `GAME_CONSOLE_OTHER`, `PLAYGROUND`, `GRILL`, `GRILL_GAS`, `GRILL_COAL`, `GRILL_ELECTRIC`, `PARKING`, `PARKING_SPOT`, `PARKING_AT_OBJECT`, `PARKING_GARAGE`, `PARKING_CARPORT`, `PARKING_STREET`, `PARKING_SECURE`, `PARKING_DISABLED`, `CONSERVATORY`, `BICYCLE_RACK`, `BICYCLE_CELLAR`, `BICYCLE_RENTALS_ON_SITE`, `LANDING_STAGE`, `SKI_IN_OUT`, `SKI_BUS_AT_PROPERTY`, `PARASOL`, `KITCHEN`, `KITCHEN_NOT`, `KITCHENETTE`, `OVEN`, `COOKTOP`, `MICROWAVE`, `FRIDGE`, `ICE_MAKER`, `FREEZER`, `FRIDGE_FREEZER_COMBINATION`, `DISHWASHER`, `WATER_HEATER`, `COFFEE_TEA_MACHINE`, `COFFEE_MACHINE`, `ESPRESSO_MACHINE`, `COFFEE`, `MIXER`, `TOASTER`, `JUICER`, `MINIBAR`, `KETTLE`, `SPICES`, `DISHES`, `CUTLERY`, `KITCHEN_UTENSILS`, `SHOWER`, `SHOWER_BATHTUB_COMBO`, `SHOWER_BATHTUB`, `SHOWER_OUTSIDE`, `BATHTUB`, `SEPARATE_TOILET`, `EN_SUITE_TOILET`, `HAIRDRYER`, `VACUUM_CLEANER`, `IRONING_BOARD`, `TROUSERPRESS`, `WARDROBE`, `CLOTHES_HANGERS`, `FURNITURE_DESK`, `CURTAINS_BLACKOUT`, `SMOKE_DETECTOR`, `TOWELS`, `TOWELS_BEACH_POOL`, `TOWELS_NOT`, `TOILETRIES`, `BEDLINEN`, `BEDLINEN_NOT`, `DISHCLOTH`, `BATHROBE`, `BREAKFAST`, `HALF_BOARD`, `LUNCHSERVICE_PACKED`, `CHILDCARE`, `BIKE_RENTAL`, `SKI_RENTAL`, `SKI_STORAGE`, `SKI_PASS`, `SCOOTER_RENTAL`, `CAR_RENTAL`, `BOAT_RENTAL`, `BIKE_PROVIDED`, `BOAT_PROVIDED`, `AIRPORT_SHUTTLE`, `SHUTTLE_SERVICE`, `FIRST_AID_KIT`, `DOORMAN`, `RECEPTION_24H`, `ATM`, `DRY_CLEANING`, `IRONING_SERVICE`, `LUGGAGE_STORAGE`, `CURRENCY_EXCHANGE`, `RESTAURANT`, `MINIMARKET`, `HOUSEKEEPING`, `HOUSEKEEPING_DAILY`, `HOUSEKEEPING_WEEKLY`, `BOOK_WITHOUT_CREDIT_CARD`, `CHEQUES_VACANCES`, `GROUPS_NOT_ALLOWED`, `YOUTH_GROUPS_NOT_ALLOWED`, `YOUTH_GROUPS_ALLOWED`, `SUITABLE_YOUNG_PEOPLE`, `SUITABLE_CHILDREN`, `SUITABLE_CHILDREN_NO`, `CHILDREN_NOT_ALLOWED`, `FAMILY_FRIENDLY`, `HOUSEOWNER_LIVES_ONSPOT`, `LONGTERM_STAYS_ALLOWED`, `CHECKIN_HOST`, `CHECKIN_SELF`, `KEY_CARD_ACCESS`, `LOCATION_GROUND_FLOOR`, `LOCATION_UPPER_FLOOR`, `WINTER_SPORTS`, `WATER_SPORTS`, `SKI_VACATION`, `BEACH_VACATION`, `FARM_VACATION`, `NATURE`, `WELLNESS`, `WELLNESS_TREATMENTS`, `WELLNESS_AREA`, `GYM`, `TENNIS_COURT`, `GOLF`, `MINIGOLF`, `FISHING`, `SAILING`, `HIKING`, `HORSEBACK_RIDING`, `WATERPARK`, `SURFING`, `WINDSURFING`, `KITESURFING`, `BIKING`, `DIVING`, `MOUNTAIN_BIKING`, `BOAT_TRIP`, `BILLIARD_TABLE`, `TABLE_TENNIS`, `PUBLIC_TRANSPORTATION`, `CHILDREN_ALLOWED`, `SINK`, `BASKETBALL`, `BIKE`, `BOAT`, `VOLLEY_BALL_COURT`, `GOLF_COURT`, `CROSS_COUNTRY_SKI`, `BY_THE_WATER`, `IN_THE_SKI_RESORT`, `CLOSE_TO_SKI_LIFTS`, `SKI_PASS_DISCOUNTED`, `SKI_PASS_INCLUDED`, `SKI_RENTAL_DISCOUNTED`, `SKI_RENTAL_INCLUDED`, `SKI_SCHOOL_DISCOUNTED`, `SKI_SCHOOL_INCLUDED`, `BIKE_STORAGE`, `LGBTQ_FRIENDLY`, `GREEN_PROPERTY`, `EVENT_FRIENDLY`, `PRIVATE_BEACH`, `BEACH_ACCESS`, `BEACH_FRONT`, `LAKE_FRONT`, `WATER_FRONT`, `OCEAN_FRONT`, `ELECTRIC_VEHICLE_CHARGING_STATION`, `ELECTRIC_BIKE_CHARGING_STATION`, `MOBILITY_PUBLIC_TRANSPORT`, `MOBILITY_BIKES`, `MOBILITY_EBIKES`, `RENEWABLE_ENERGY`, `RECYCLING_GLASS`, `RECYCLING_PAPER`, `RECYCLING_PLASTIC`, `RECYCLING_ORGANIC`, `ENERGY_SAVING_SOLAR_PANELS`, `ENERGY_SAVING_WIND_POWER`, `ENERGY_SAVING_METHANE_DIGESTER`, `ENERGY_SAVING_SOLAR_COLLECTOR`, `ENERGY_SAVING_LIGHTING`, `ENERGY_SAVING_SMART_CONTROLS`, `ENERGY_SOLAR_THERMAL_PANELS`, `ENERGY_HEAT_PUMPS`, `ENERGY_GREEN_ELECTRICITY_PROVIDER`, `ENERGY_BIOMASS`, `ENERGY_GEOTHERMICS`, `ENERGY_INFRARED_HEATING_PANELS`, `ENERGY_MASONRY_HEATER`, `INSULATION_GLASS`, `INSULATION_ROOF`, `INSULATION_WALL`, `INSULATION_FLOOR`, `INSULATION_NATURAL_MATERIALS`, `INSULATION_GREEN_COOL_ROOF`, `WATER_SAVING_SHOWER`, `WATER_SAVING_TOILET`, `WATER_SAVING_TAPS`, `RAINWATER_TREATMENT`, `GREY_WATER_SYSTEM`, `OWN_PRODUCE_JAM`, `OWN_PRODUCE_VEGETABLES`, `OWN_PRODUCE_HERBS`, `OWN_PRODUCE_OLIVE_OIL`, `OWN_PRODUCE_HONEY`, `OWN_PRODUCE_FRUITS`, `OWN_PRODUCE_EGGS`, `OWN_PRODUCE_CHEESE`, `OWN_PRODUCE_BREAD`, `OWN_PRODUCE_NUTS`, `ECO_CLEANING_PRODUCTS`, `SUSTAINABLE_CONSTRUCTION`, `EVENT_MEAL`, `EVENT_BIRTHDAY_CHILD`, `EVENT_BABY_SHOWER`, `EVENT_STAG_PARTY`, `EVENT_WEDDING`, `EVENT_BIRTHDAY_ADULT`, `SHOWER_ROLL_IN`, `SHOWER_GRAB_RAILS`, `TOILET_RAISED`, `WIDE_DOORS`, `STEP_FREE_ACCESS`, `BATHTUB_CHAIR`, `BATHROOM_TURNING_CYCLE_MIN_1_5_M`, `BATHROOM_EMERGENCY_CORD`, `STEP_FREE_INTERIOR`, `SHOWER_CHAIR`, `TOILET_GRAB_RAILS`, `BATHROOM_SINK_LOWERED`, `INTERNET_WIFI_FOR_VIDEO_CALLS`, `DRINKING_WATER_BOTTLED`, `DISH_DETERGENT`, `SHAMPOO`, `PARTIES_NOT_ALLOWED`, `LAUNDRY`, `LAUNDRY_SERVICE`, `WATER_PARK`, `CORONA_RULES_APPLIED`, `SOUTERRAIN`, `BOWLING`, `KEGELBAHN`, `YOGA_SCHOOL`, `UNIT_SIZE`, `PRINTER`, `PIANO`, `BABYSITTING_SERVICES`, `ROOM_SERVICE`, `HOUR_SEC`, `_24HOUR_SECURITY`, `AIR_PURIFIER`, `BABY_MONITOR`, `BED_EXTRA_LONG`, `BIDET`, `BOOT_DRIER`, `BREAD_SERVICE`, `BROADCAST_LIVE_SPORT`, `CANOEING`, `CASHLESS_PAYMENT`, `CLEANING_PRODUCTS`, `CLOTHES_DRYING_RACK`, `COFFEE_GRINDER`, `CONCIERGE`, `COOKING_CLASS`, `EXPRESS_CHECKINOUT`, `ECOTOURISM`, `FLOOR_CARPETING`, `GROCERY_DELIVERY`, `HOT_SPRINGS`, `HYPOALLERGENIC_PILLOW`, `JET_SKIING`, `KAYAKING`, `KIDS_CLUB`, `LIVE_MUSIC`, `MEAL_DELIVERY`, `MOSQUITO_NET`, `MOTORBOATING`, `NEWSPAPER`, `NO_STEP_FREE_ACCESS`, `NORDIC_WALKING`, `RECYCLING`, `SANDBOX`, `SHOPPING`, `SKI_SCHOOL`, `SKIING`, `SNORKELING`, `SUNLOUNGER`, `TOOTHBRUSH`, `TRAMPOLINE`, `TV_STREAMING`, `VISUAL_AID_BRAILLE`, `VISUAL_AID_TACTILE_SIGNS`, `WILDLIFE_VIEWING`, `WINERY`, `WING_FOIL`, `STAND_UP_PADDLING`, `CLIMBING`, `SWIMMING`, `PARAGLIDING`, `RUNNING`, `CANYONING`, `YOGA`, `PARTNER_SUSTAINABILITY_BADGE`, `GASTGEBER_MIT_HERZ`, `ALLGAEU_TOP_HOTELS`, `CERTIFICATE_4FUER3`, `CERTIFICATE_ADAC_CAMPINGPLATZ_AUSZEICHNUNG`, `CERTIFICATE_ALBCARD`, `CERTIFICATE_ALB_CROSSING`, `CERTIFICATE_ALBSTEIG`, `CERTIFICATE_BAG_OBSTHOF`, `CERTIFICATE_BAG_URLAUB_AUF_DEM_BAUERNHOF`, `CERTIFICATE_BARRIEREFREI_ERLEBEN`, `CERTIFICATE_BARRIEREFREIE_UNTERKUNFT_OKGO_CH`, `CERTIFICATE_BERGSTEIGERDOERFER_CH`, `CERTIFICATE_BETT_UND_BIKE`, `CERTIFICATE_BETT_UND_BIKE_ADFC`, `CERTIFICATE_BIKE_HOTEL_HOTTELIERSUISSE_CH`, `CERTIFICATE_BIOSPHAEREN_GASTGEBER`, `CERTIFICATE_CAUSE_WE_CARE_CH`, `CERTIFICATE_DEHOGA_UMWELTCHECK_GOLD`, `CERTIFICATE_DEHOGA_UMWELTCHECK_SILBER`, `CERTIFICATE_DLG_LANDURLAUB`, `CERTIFICATE_DLG_URLAUB_AUF_DEM_WINZERHOF`, `CERTIFICATE_ECARF_ALLERGIKERFREUNDLICH`, `CERTIFICATE_ECHTE_GASTLICHKEIT_SCHWARZWALD`, `CERTIFICATE_ECHT_NACHHALTIG`, `CERTIFICATE_ECOCAMPING`, `CERTIFICATE_EMPFOHLENES_WEINHOTEL_BADEN_WUERTTEMBERG`, `CERTIFICATE_FAMILIEN_FERIEN`, `CERTIFICATE_FAMILIEN_RESTAURANTS`, `CERTIFICATE_FIVE_STAR_CH`, `CERTIFICATE_FIVE_STAR_GASTROSUISSE_CH`, `CERTIFICATE_FIVE_STAR_HOTELLERIESUISSE_CH`, `CERTIFICATE_FIVE_STAR_SERVICED_APARTMENTS_CH`, `CERTIFICATE_FIVE_STAR_SUPERIOR_CH`, `CERTIFICATE_FIVE_STAR_SUPERIOR_HOTTELLERIESUISSE_CH`, `CERTIFICATE_FOUR_STAR_CH`, `CERTIFICATE_FOUR_STAR_GASTROSUISSE_CH`, `CERTIFICATE_FOUR_STAR_HOTELLERIESUISSE_CH`, `CERTIFICATE_FOUR_STAR_SERVICED_APARTMENTS_CH`, `CERTIFICATE_FOUR_STAR_SUPERIOR_CH`, `CERTIFICATE_FOUR_STAR_SUPERIOR_HOTTELLERIESUISSE_CH`, `CERTIFICATE_GLIDE_RESTAAURANTS_CH`, `CERTIFICATE_GREENSIGN_LEVEL_3`, `CERTIFICATE_GREENSIGN_LEVEL_4`, `CERTIFICATE_IBEX_FAIRSTAY_CH`, `CERTIFICATE_LAND_URLAUB`, `CERTIFICATE_MICHELIN_STERN`, `CERTIFICATE_MOEHNETALRADWEG`, `CERTIFICATE_MOTORBIKE_FRIENDLY`, `CERTIFICATE_NACHHALTIGE_FERIENIMMOBILIE`, `CERTIFICATE_NATURPARK_WIRTE`, `CERTIFICATE_OHNE_GLUTEN_CH`, `CERTIFICATE_ONE_STAR_CH`, `CERTIFICATE_ONE_STAR_GASTROSUISSE_CH`, `CERTIFICATE_ONE_STAR_HOTELLERIESUISSE_CH`, `CERTIFICATE_ONE_STAR_SERVICED_APARTMENTS_CH`, `CERTIFICATE_ONE_STAR_SUPERIOR_CH`, `CERTIFICATE_ONE_STAR_SUPERIOR_HOTELLERIESUISSE_CH`, `CERTIFICATE_PARTNER_NATIONALPARK_SCHWARZWALD`, `CERTIFICATE_QUALITAETSBETRIEB_ROTHAARSTEIG`, `CERTIFICATE_SAUERLAENDER_WANDERGASTHOEFE`, `CERTIFICATE_SAUERLAND_HOEHENFLUG`, `CERTIFICATE_SCHMALLENBERGER_KINDERLAND`, `CERTIFICATE_SCHMECK_DEN_SUEDEN`, `CERTIFICATE_SCHNEESPORTHOTEL_HOTELLERIESUISSE_CH`, `CERTIFICATE_SCHWARZWALD_BALANCE`, `CERTIFICATE_SCHWARZWALD_PLUS`, `CERTIFICATE_SERVICE_QUALITAET_DEUTSCHLAND`, `CERTIFICATE_STERNE_IM_SAUERLAND`, `CERTIFICATE_STV_FIVE_STARS_CH`, `CERTIFICATE_STV_FIVE_STARS_SUP_CH`, `CERTIFICATE_STV_FOUR_STARS_CH`, `CERTIFICATE_STV_FOUR_STARS_SUP_CH`, `CERTIFICATE_STV_ONE_STAR_CH`, `CERTIFICATE_STV_ONE_STAR_SUP_CH`, `CERTIFICATE_STV_THREE_STARS_CH`, `CERTIFICATE_STV_THREE_STARS_SUP_CH`, `CERTIFICATE_STV_TWO_STARS_CH`, `CERTIFICATE_STV_TWO_STARS_SUP_CH`, `CERTIFICATE_SWISS_HISTORIC_HOTELS_CH`, `CERTIFICATE_SWISS_LODGE_HOTTELIERSUISSE_CH`, `CERTIFICATE_SWISSTAINABLE_LEVEL_ONE_CH`, `CERTIFICATE_SWISSTAINABLE_LEVEL_TWO_CH`, `CERTIFICATE_SWISSTAINSABLE_LEVEL_THREE_CH`, `CERTIFICATE_THREE_STAR_CH`, `CERTIFICATE_THREE_STAR_GASTROSUISSE_CH`, `CERTIFICATE_THREE_STAR_HOTELLERIESUISSE_CH`, `CERTIFICATE_THREE_STAR_SERVICED_APARTMENTS_CH`, `CERTIFICATE_THREE_STAR_SUPERIOR_CH`, `CERTIFICATE_THREE_STAR_SUPERIOR_HOTTELLERIESUISSE_CH`, `CERTIFICATE_TRAUFGAENGE_GASTGEBER`, `CERTIFICATE_TWO_STAR_CH`, `CERTIFICATE_TWO_STAR_GASTROSUISSE_CH`, `CERTIFICATE_TWO_STAR_HOTELLERIESUISSE_CH`, `CERTIFICATE_TWO_STAR_SERVICED_APARTMENTS_CH`, `CERTIFICATE_TWO_STAR_SUPERIOR_CH`, `CERTIFICATE_TWO_STAR_SUPERIOR_HOTTELLERIESUISSE_CH`, `CERTIFICATE_URLAUB_AUF_DEM_BAUERNHOF`, `CERTIFICATE_URLAUB_AUF_DEM_BAUERNHOF_GER`, `CERTIFICATE_WANDERBARES_DEUTSCHLAND`, `CERTIFICATE_WANDERBARES_DEUTSCHLAND_GASTRONOMIE`, `CERTIFICATE_WANDER_HOTEL_HOTTELIERSUISSE_CH`, `CERTIFICATE_WELLNESS_AND_SPA_HOTTELIERSUISSE_CH`, `CERTIFICATE_WELLNESS_HOTEL_HOTTELIERSUISSE_CH`, `CERTIFICATE_WELLNESS_STARS_DEUTSCHLAND`, `CERTIFICATE_WIN_CHARTA_DES_LANDES_BADEN_WUERTTEMBERG`, `CERTIFICATE_WINTERSPORTARENA_SAUERLAND`, `DREIWELTEN_CARD`, `ECHT_BODENSEE_CARD`, `GUESTCARD`, `HOCHSCHWARZWALD_CARD`, `SAUERLAND_CARD`, `SAUERLAND_SOMMER_CARD`, `SCHMALLENBERGER_SAUERLAND_CARD`, `WILLINGEN_MEINE_CARD`, `MARKENPARTNER`, `CERTIFICATE_URLAUBS_WINZERHOF`, `CERTIFICATE_URLAUBS_REITERHOF`, `CERTIFICATE_SCHWARZWALD_`, `BALANCE`, `CERTIFICATE_VIABONO`, `CERTIFICATE_MEDICAL_WELLNESS_THREE_STARS`, `CERTIFICATE_MEDICAL_WELLNESS_FOUR_STARS`, `CERTIFICATE_MEDICAL_WELLNESS_FIVE_STARS`, `CERTIFICATE_VIA_MICHELIN_TWO_STARS`, `CERTIFICATE_VIA_MICHELIN_THREE_STARS`, `CERTIFICATE_BRONZE_DEHOGA`, `CERTIFICATE_BIKE_AREA_SAUERLAND`, `CERTIFICATE_SAUERLAND_WALDROUTE`, `CERTIFICATE_KAISERSTUEHLER_WINZERHOF`, `CERTIFICATE_WEINHOTELS_KAISERSTUHL`, `CERTIFICATE_KOSTENLOS_STORNIERBAR_GARANTIE`, `CERTIFICATE_WIR_FUER_SIE`, `CERTIFICATE_PARTNER_BIOSPHAERENGEBIET_SCHWAEBISCHE_ALB`, `CERTIFICATE_REISEN_FUER_ALLE`, `CERTIFICATE_DLG_`, `LANDURLAUB`, `CERTIFICATE_BIOSFERA_PARTNERBETRIEB_CH`, `THEMENPARTNER_KULTUR`, `THEMENPARTNER_RAD`, `THEMENPARTNER_WANDERN`, `THEMENPARTNER_FAMILIE`, `THEMENPARTNER_WELLNESS`, `TOP_GASTGEBER_BOFE`, `LUNCH`, `DINNER`; example: `"POOL"`)
- `maxAmount` (integer (int32)) — Max Amount (example: `1`)
- `privateUsage` (boolean) — Facility is in private use (example: `true`)
- `additionalFeesApply` (boolean) — Additional fees apply for the use of this facility (example: `true`)
- `availableTime` (FacilityAvailabilityData)
- `availableFrom` (AvailableTime) — Time until facility would be available
- `pointInMonth` (string) — Point in the month (one of: `BEGINNING`, `MIDDLE`, `END`; example: `"MIDDLE"`)
- `month` (string) — Month (one of: `JANUARY`, `FEBRUARY`, `MARCH`, `APRIL`, `MAY`, `JUNE`, `JULY`, `AUGUST`, `SEPTEMBER`, `OCTOBER`, `NOVEMBER`, `DECEMBER`; example: `"JANUARY"`)
- `availableTo` (AvailableTime) — Time until facility would be available
- `pointInMonth` (string) — Point in the month (one of: `BEGINNING`, `MIDDLE`, `END`; example: `"MIDDLE"`)
- `month` (string) — Month (one of: `JANUARY`, `FEBRUARY`, `MARCH`, `APRIL`, `MAY`, `JUNE`, `JULY`, `AUGUST`, `SEPTEMBER`, `OCTOBER`, `NOVEMBER`, `DECEMBER`; example: `"JANUARY"`)
- `location` (string) — Location of facility (one of: `UNDEFINED`, `NEAR_BY`, `IN_APARTMENT`; example: `"NEAR_BY"`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
[
{
"type": "POOL",
"maxAmount": 1,
"privateUsage": true,
"additionalFeesApply": true,
"availableTime": {
"availableFrom": {
"pointInMonth": "MIDDLE",
"month": "JANUARY"
},
"availableTo": {
"pointInMonth": "MIDDLE",
"month": "JANUARY"
}
},
"location": "NEAR_BY"
}
]
```
## Responses
### 200 — Successful update of multi-unit facilities
Body `*/*`, schema `array of MultiUnitFacility`:
- `name` (string)
- `type` (string) — Facility type. Here you should map your facilities to ours. The allowed values can be taken from GET /v2/facilities/types (one of: `SMOKING_ALLOWED`, `SMOKING_NOT_ALLOWED`, `SMOKING_AREA`, `PETS_ALLOWED`, `PETS_ALLOWED_ON_REQUEST`, `PETS_ALLOWED_SMALL_PETS`, `PETS_ALLOWED_CAT`, `PETS_ALLOWED_DOG`, `PETS_ALLOWED_DOG_MAX_10_KG`, `PETS_ALLOWED_DOG_MORE_THAN_10_KG`, `PETS_NOT_ALLOWED`, `PETS_ON_AVAILABILITY`, `VIEW`, `VIEW_OCEAN`, `VIEW_LAKE`, `VIEW_CITY`, `VIEW_GARDEN`, `VIEW_LANDMARK`, `VIEW_MOUNTAIN`, `VIEW_RIVER`, `VIEW_SEA`, `VIEW_BEACH`, `VIEW_GOLF_COURSE`, `VIEW_WATER`, `VIEW_INNER_COURTYARD`, `VIEW_POOL`, `WATERFRONT`, `BARRIER_FREE`, `SUITABLE_FOR_DISABLED`, `SUITABLE_FOR_ELDERLY`, `BARRIER_FREE_NOT`, `ENERGY`, `ENERGY_SOLAR`, `ENERGY_WIND`, `WATER_HOT`, `ROOF_FLAT`, `ENTRANCE_PRIVATE`, `ROOF_THATCHED`, `ANIMALS`, `ANIMALS_CAT`, `ANIMALS_DOG`, `ANIMALS_FARM`, `POOL`, `POOL_PRIVATE`, `POOL_CHILDREN`, `POOL_HEATED`, `POOL_INFINITY`, `POOL_TOYS`, `POOL_ROOFTOP`, `POOL_SEASONALLY_OPENED`, `POOL_FENCED`, `WHIRLPOOL`, `WHIRLPOOL_BATHTUB`, `ELEVATOR`, `INTERNET`, `INTERNET_NOT`, `INTERNET_WIFI`, `INTERNET_LAN`, `SAUNA`, `INFRARED_CABIN`, `CHIMNEY`, `STOVE_WOOD`, `FIREPLACE`, `CHILDFRIENDLY`, `RENOVATED`, `ALLERGY_FRIENDLY`, `BEST_PRICE`, `FOR_EVENTS`, `LUXURY`, `QUIET`, `VISITED_BY_HOLIDU`, `WASHER`, `DRYER`, `WASHER_DRYER_COMBO`, `FLAT_IRON`, `FLAT_IRON_AND_BOARD`, `HEATING`, `HEATING_NOT`, `HEATING_OIL`, `HEATING_GAS`, `HEATING_UNDERFLOOR`, `HEATING_WOOD_STOVE`, `HEATING_ELECTRIC`, `AIR_CONDITION`, `VENTILATOR`, `SOLARIUM`, `POOL_INDOOR`, `POOL_INDOOR_CHILDREN`, `WHIRLPOOL_INDOOR`, `TV`, `TV_CHILDREN`, `TV_LCD`, `TV_FLAT_SCREEN`, `TV_GERMAN_CHANNELS`, `TV_FRENCH_CHANNELS`, `TV_ENGLISH_CHANNELS`, `TV_SPANISH_CHANNELS`, `TV_DUTCH_CHANNELS`, `TV_DANISH_CHANNELS`, `TV_ITALIAN_CHANNELS`, `TV_INTERNATIONAL_CHANNELS`, `TV_CABLE`, `TV_SATELLITE`, `TV_DIGITAL`, `TV_PAY_PER_VIEW`, `BEAMER`, `BLURAY_PLAYER`, `DVD_PLAYER`, `CD_PLAYER`, `RADIO`, `MP3_PLAYER`, `IPOD_DOCK`, `SPEAKERS`, `SOUND_SYSTEM`, `COMPUTER`, `TELEPHONE`, `HIGHCHAIR`, `PLAYROOM`, `ROOMS_LOUNGE`, `INTERCOM`, `FIRE_PIT`, `FIRE_EXTINGUISHER`, `FIRE_ALARM`, `CARBONMONOXIDE_DETECTOR`, `ALARM_HOUSE`, `BED_KING`, `BED_QUEEN`, `BED_DOUBLE`, `BED_SINGLE`, `BED_CHILDREN`, `BED_BABY`, `BED_EXTRA`, `BED_SLEEPING_COUCH`, `BED_SLEEPING_COUCH_2`, `BED_SLEEPING_COUCH_1`, `BED_FOLDAWAY`, `BED_BUNK`, `BED_BUNK_1`, `BED_BUNK_2`, `BED_FLOOR_MATTRESS`, `BED_AIR_MATTRESS`, `ROOMS_DININGROOM`, `ROOMS_LIVINGROOM`, `ROOMS_SINGLE`, `ROOMS_DOUBLE`, `ROOMS_FAMILY`, `ROOMS_BATHROOM`, `ROOMS_BEDROOM`, `ROOMS_COMMON`, `SUITED_FOR_GROUPS`, `OUTDOOR_DINING_AREA`, `SAFE`, `BALCONY_TERRACE`, `BALCONY`, `BALCONY_COVERED`, `BALCONY_UNCOVERED`, `TERRACE`, `TERRACE_COVERED`, `TERRACE_UNCOVERED`, `TERRACE_ROOFTOP`, `GARDEN`, `HOUSEOWNED_BEACH`, `GARDEN_FURNITURE`, `HAMMOCK`, `STROLLER`, `DECK_CHAIR`, `BEACH_CHAIR`, `POOL_OUTDOOR`, `POOL_OUTDOOR_CHILDREN`, `WHIRLPOOL_OUTDOOR`, `STEAMBATH`, `FENCED_PROPERTY`, `FENCED_PROPERTY_NOT`, `TOYS`, `TOYS_BOARD_GAME`, `TOYS_BOOKS`, `TOYS_BOOKS_FOR_CHILDREN`, `TOYS_DVDS`, `TOYS_DVDS_FOR_CHILDREN`, `GAME_CONSOLE_PS3`, `GAME_CONSOLE_PS4`, `GAME_CONSOLE_XBOX_ONE`, `GAME_CONSOLE_XBOX_360`, `GAME_CONSOLE_WII`, `GAME_CONSOLE_OTHER`, `PLAYGROUND`, `GRILL`, `GRILL_GAS`, `GRILL_COAL`, `GRILL_ELECTRIC`, `PARKING`, `PARKING_SPOT`, `PARKING_AT_OBJECT`, `PARKING_GARAGE`, `PARKING_CARPORT`, `PARKING_STREET`, `PARKING_SECURE`, `PARKING_DISABLED`, `CONSERVATORY`, `BICYCLE_RACK`, `BICYCLE_CELLAR`, `BICYCLE_RENTALS_ON_SITE`, `LANDING_STAGE`, `SKI_IN_OUT`, `SKI_BUS_AT_PROPERTY`, `PARASOL`, `KITCHEN`, `KITCHEN_NOT`, `KITCHENETTE`, `OVEN`, `COOKTOP`, `MICROWAVE`, `FRIDGE`, `ICE_MAKER`, `FREEZER`, `FRIDGE_FREEZER_COMBINATION`, `DISHWASHER`, `WATER_HEATER`, `COFFEE_TEA_MACHINE`, `COFFEE_MACHINE`, `ESPRESSO_MACHINE`, `COFFEE`, `MIXER`, `TOASTER`, `JUICER`, `MINIBAR`, `KETTLE`, `SPICES`, `DISHES`, `CUTLERY`, `KITCHEN_UTENSILS`, `SHOWER`, `SHOWER_BATHTUB_COMBO`, `SHOWER_BATHTUB`, `SHOWER_OUTSIDE`, `BATHTUB`, `SEPARATE_TOILET`, `EN_SUITE_TOILET`, `HAIRDRYER`, `VACUUM_CLEANER`, `IRONING_BOARD`, `TROUSERPRESS`, `WARDROBE`, `CLOTHES_HANGERS`, `FURNITURE_DESK`, `CURTAINS_BLACKOUT`, `SMOKE_DETECTOR`, `TOWELS`, `TOWELS_BEACH_POOL`, `TOWELS_NOT`, `TOILETRIES`, `BEDLINEN`, `BEDLINEN_NOT`, `DISHCLOTH`, `BATHROBE`, `BREAKFAST`, `HALF_BOARD`, `LUNCHSERVICE_PACKED`, `CHILDCARE`, `BIKE_RENTAL`, `SKI_RENTAL`, `SKI_STORAGE`, `SKI_PASS`, `SCOOTER_RENTAL`, `CAR_RENTAL`, `BOAT_RENTAL`, `BIKE_PROVIDED`, `BOAT_PROVIDED`, `AIRPORT_SHUTTLE`, `SHUTTLE_SERVICE`, `FIRST_AID_KIT`, `DOORMAN`, `RECEPTION_24H`, `ATM`, `DRY_CLEANING`, `IRONING_SERVICE`, `LUGGAGE_STORAGE`, `CURRENCY_EXCHANGE`, `RESTAURANT`, `MINIMARKET`, `HOUSEKEEPING`, `HOUSEKEEPING_DAILY`, `HOUSEKEEPING_WEEKLY`, `BOOK_WITHOUT_CREDIT_CARD`, `CHEQUES_VACANCES`, `GROUPS_NOT_ALLOWED`, `YOUTH_GROUPS_NOT_ALLOWED`, `YOUTH_GROUPS_ALLOWED`, `SUITABLE_YOUNG_PEOPLE`, `SUITABLE_CHILDREN`, `SUITABLE_CHILDREN_NO`, `CHILDREN_NOT_ALLOWED`, `FAMILY_FRIENDLY`, `HOUSEOWNER_LIVES_ONSPOT`, `LONGTERM_STAYS_ALLOWED`, `CHECKIN_HOST`, `CHECKIN_SELF`, `KEY_CARD_ACCESS`, `LOCATION_GROUND_FLOOR`, `LOCATION_UPPER_FLOOR`, `WINTER_SPORTS`, `WATER_SPORTS`, `SKI_VACATION`, `BEACH_VACATION`, `FARM_VACATION`, `NATURE`, `WELLNESS`, `WELLNESS_TREATMENTS`, `WELLNESS_AREA`, `GYM`, `TENNIS_COURT`, `GOLF`, `MINIGOLF`, `FISHING`, `SAILING`, `HIKING`, `HORSEBACK_RIDING`, `WATERPARK`, `SURFING`, `WINDSURFING`, `KITESURFING`, `BIKING`, `DIVING`, `MOUNTAIN_BIKING`, `BOAT_TRIP`, `BILLIARD_TABLE`, `TABLE_TENNIS`, `PUBLIC_TRANSPORTATION`, `CHILDREN_ALLOWED`, `SINK`, `BASKETBALL`, `BIKE`, `BOAT`, `VOLLEY_BALL_COURT`, `GOLF_COURT`, `CROSS_COUNTRY_SKI`, `BY_THE_WATER`, `IN_THE_SKI_RESORT`, `CLOSE_TO_SKI_LIFTS`, `SKI_PASS_DISCOUNTED`, `SKI_PASS_INCLUDED`, `SKI_RENTAL_DISCOUNTED`, `SKI_RENTAL_INCLUDED`, `SKI_SCHOOL_DISCOUNTED`, `SKI_SCHOOL_INCLUDED`, `BIKE_STORAGE`, `LGBTQ_FRIENDLY`, `GREEN_PROPERTY`, `EVENT_FRIENDLY`, `PRIVATE_BEACH`, `BEACH_ACCESS`, `BEACH_FRONT`, `LAKE_FRONT`, `WATER_FRONT`, `OCEAN_FRONT`, `ELECTRIC_VEHICLE_CHARGING_STATION`, `ELECTRIC_BIKE_CHARGING_STATION`, `MOBILITY_PUBLIC_TRANSPORT`, `MOBILITY_BIKES`, `MOBILITY_EBIKES`, `RENEWABLE_ENERGY`, `RECYCLING_GLASS`, `RECYCLING_PAPER`, `RECYCLING_PLASTIC`, `RECYCLING_ORGANIC`, `ENERGY_SAVING_SOLAR_PANELS`, `ENERGY_SAVING_WIND_POWER`, `ENERGY_SAVING_METHANE_DIGESTER`, `ENERGY_SAVING_SOLAR_COLLECTOR`, `ENERGY_SAVING_LIGHTING`, `ENERGY_SAVING_SMART_CONTROLS`, `ENERGY_SOLAR_THERMAL_PANELS`, `ENERGY_HEAT_PUMPS`, `ENERGY_GREEN_ELECTRICITY_PROVIDER`, `ENERGY_BIOMASS`, `ENERGY_GEOTHERMICS`, `ENERGY_INFRARED_HEATING_PANELS`, `ENERGY_MASONRY_HEATER`, `INSULATION_GLASS`, `INSULATION_ROOF`, `INSULATION_WALL`, `INSULATION_FLOOR`, `INSULATION_NATURAL_MATERIALS`, `INSULATION_GREEN_COOL_ROOF`, `WATER_SAVING_SHOWER`, `WATER_SAVING_TOILET`, `WATER_SAVING_TAPS`, `RAINWATER_TREATMENT`, `GREY_WATER_SYSTEM`, `OWN_PRODUCE_JAM`, `OWN_PRODUCE_VEGETABLES`, `OWN_PRODUCE_HERBS`, `OWN_PRODUCE_OLIVE_OIL`, `OWN_PRODUCE_HONEY`, `OWN_PRODUCE_FRUITS`, `OWN_PRODUCE_EGGS`, `OWN_PRODUCE_CHEESE`, `OWN_PRODUCE_BREAD`, `OWN_PRODUCE_NUTS`, `ECO_CLEANING_PRODUCTS`, `SUSTAINABLE_CONSTRUCTION`, `EVENT_MEAL`, `EVENT_BIRTHDAY_CHILD`, `EVENT_BABY_SHOWER`, `EVENT_STAG_PARTY`, `EVENT_WEDDING`, `EVENT_BIRTHDAY_ADULT`, `SHOWER_ROLL_IN`, `SHOWER_GRAB_RAILS`, `TOILET_RAISED`, `WIDE_DOORS`, `STEP_FREE_ACCESS`, `BATHTUB_CHAIR`, `BATHROOM_TURNING_CYCLE_MIN_1_5_M`, `BATHROOM_EMERGENCY_CORD`, `STEP_FREE_INTERIOR`, `SHOWER_CHAIR`, `TOILET_GRAB_RAILS`, `BATHROOM_SINK_LOWERED`, `INTERNET_WIFI_FOR_VIDEO_CALLS`, `DRINKING_WATER_BOTTLED`, `DISH_DETERGENT`, `SHAMPOO`, `PARTIES_NOT_ALLOWED`, `LAUNDRY`, `LAUNDRY_SERVICE`, `WATER_PARK`, `CORONA_RULES_APPLIED`, `SOUTERRAIN`, `BOWLING`, `KEGELBAHN`, `YOGA_SCHOOL`, `UNIT_SIZE`, `PRINTER`, `PIANO`, `BABYSITTING_SERVICES`, `ROOM_SERVICE`, `HOUR_SEC`, `_24HOUR_SECURITY`, `AIR_PURIFIER`, `BABY_MONITOR`, `BED_EXTRA_LONG`, `BIDET`, `BOOT_DRIER`, `BREAD_SERVICE`, `BROADCAST_LIVE_SPORT`, `CANOEING`, `CASHLESS_PAYMENT`, `CLEANING_PRODUCTS`, `CLOTHES_DRYING_RACK`, `COFFEE_GRINDER`, `CONCIERGE`, `COOKING_CLASS`, `EXPRESS_CHECKINOUT`, `ECOTOURISM`, `FLOOR_CARPETING`, `GROCERY_DELIVERY`, `HOT_SPRINGS`, `HYPOALLERGENIC_PILLOW`, `JET_SKIING`, `KAYAKING`, `KIDS_CLUB`, `LIVE_MUSIC`, `MEAL_DELIVERY`, `MOSQUITO_NET`, `MOTORBOATING`, `NEWSPAPER`, `NO_STEP_FREE_ACCESS`, `NORDIC_WALKING`, `RECYCLING`, `SANDBOX`, `SHOPPING`, `SKI_SCHOOL`, `SKIING`, `SNORKELING`, `SUNLOUNGER`, `TOOTHBRUSH`, `TRAMPOLINE`, `TV_STREAMING`, `VISUAL_AID_BRAILLE`, `VISUAL_AID_TACTILE_SIGNS`, `WILDLIFE_VIEWING`, `WINERY`, `WING_FOIL`, `STAND_UP_PADDLING`, `CLIMBING`, `SWIMMING`, `PARAGLIDING`, `RUNNING`, `CANYONING`, `YOGA`, `PARTNER_SUSTAINABILITY_BADGE`, `GASTGEBER_MIT_HERZ`, `ALLGAEU_TOP_HOTELS`, `CERTIFICATE_4FUER3`, `CERTIFICATE_ADAC_CAMPINGPLATZ_AUSZEICHNUNG`, `CERTIFICATE_ALBCARD`, `CERTIFICATE_ALB_CROSSING`, `CERTIFICATE_ALBSTEIG`, `CERTIFICATE_BAG_OBSTHOF`, `CERTIFICATE_BAG_URLAUB_AUF_DEM_BAUERNHOF`, `CERTIFICATE_BARRIEREFREI_ERLEBEN`, `CERTIFICATE_BARRIEREFREIE_UNTERKUNFT_OKGO_CH`, `CERTIFICATE_BERGSTEIGERDOERFER_CH`, `CERTIFICATE_BETT_UND_BIKE`, `CERTIFICATE_BETT_UND_BIKE_ADFC`, `CERTIFICATE_BIKE_HOTEL_HOTTELIERSUISSE_CH`, `CERTIFICATE_BIOSPHAEREN_GASTGEBER`, `CERTIFICATE_CAUSE_WE_CARE_CH`, `CERTIFICATE_DEHOGA_UMWELTCHECK_GOLD`, `CERTIFICATE_DEHOGA_UMWELTCHECK_SILBER`, `CERTIFICATE_DLG_LANDURLAUB`, `CERTIFICATE_DLG_URLAUB_AUF_DEM_WINZERHOF`, `CERTIFICATE_ECARF_ALLERGIKERFREUNDLICH`, `CERTIFICATE_ECHTE_GASTLICHKEIT_SCHWARZWALD`, `CERTIFICATE_ECHT_NACHHALTIG`, `CERTIFICATE_ECOCAMPING`, `CERTIFICATE_EMPFOHLENES_WEINHOTEL_BADEN_WUERTTEMBERG`, `CERTIFICATE_FAMILIEN_FERIEN`, `CERTIFICATE_FAMILIEN_RESTAURANTS`, `CERTIFICATE_FIVE_STAR_CH`, `CERTIFICATE_FIVE_STAR_GASTROSUISSE_CH`, `CERTIFICATE_FIVE_STAR_HOTELLERIESUISSE_CH`, `CERTIFICATE_FIVE_STAR_SERVICED_APARTMENTS_CH`, `CERTIFICATE_FIVE_STAR_SUPERIOR_CH`, `CERTIFICATE_FIVE_STAR_SUPERIOR_HOTTELLERIESUISSE_CH`, `CERTIFICATE_FOUR_STAR_CH`, `CERTIFICATE_FOUR_STAR_GASTROSUISSE_CH`, `CERTIFICATE_FOUR_STAR_HOTELLERIESUISSE_CH`, `CERTIFICATE_FOUR_STAR_SERVICED_APARTMENTS_CH`, `CERTIFICATE_FOUR_STAR_SUPERIOR_CH`, `CERTIFICATE_FOUR_STAR_SUPERIOR_HOTTELLERIESUISSE_CH`, `CERTIFICATE_GLIDE_RESTAAURANTS_CH`, `CERTIFICATE_GREENSIGN_LEVEL_3`, `CERTIFICATE_GREENSIGN_LEVEL_4`, `CERTIFICATE_IBEX_FAIRSTAY_CH`, `CERTIFICATE_LAND_URLAUB`, `CERTIFICATE_MICHELIN_STERN`, `CERTIFICATE_MOEHNETALRADWEG`, `CERTIFICATE_MOTORBIKE_FRIENDLY`, `CERTIFICATE_NACHHALTIGE_FERIENIMMOBILIE`, `CERTIFICATE_NATURPARK_WIRTE`, `CERTIFICATE_OHNE_GLUTEN_CH`, `CERTIFICATE_ONE_STAR_CH`, `CERTIFICATE_ONE_STAR_GASTROSUISSE_CH`, `CERTIFICATE_ONE_STAR_HOTELLERIESUISSE_CH`, `CERTIFICATE_ONE_STAR_SERVICED_APARTMENTS_CH`, `CERTIFICATE_ONE_STAR_SUPERIOR_CH`, `CERTIFICATE_ONE_STAR_SUPERIOR_HOTELLERIESUISSE_CH`, `CERTIFICATE_PARTNER_NATIONALPARK_SCHWARZWALD`, `CERTIFICATE_QUALITAETSBETRIEB_ROTHAARSTEIG`, `CERTIFICATE_SAUERLAENDER_WANDERGASTHOEFE`, `CERTIFICATE_SAUERLAND_HOEHENFLUG`, `CERTIFICATE_SCHMALLENBERGER_KINDERLAND`, `CERTIFICATE_SCHMECK_DEN_SUEDEN`, `CERTIFICATE_SCHNEESPORTHOTEL_HOTELLERIESUISSE_CH`, `CERTIFICATE_SCHWARZWALD_BALANCE`, `CERTIFICATE_SCHWARZWALD_PLUS`, `CERTIFICATE_SERVICE_QUALITAET_DEUTSCHLAND`, `CERTIFICATE_STERNE_IM_SAUERLAND`, `CERTIFICATE_STV_FIVE_STARS_CH`, `CERTIFICATE_STV_FIVE_STARS_SUP_CH`, `CERTIFICATE_STV_FOUR_STARS_CH`, `CERTIFICATE_STV_FOUR_STARS_SUP_CH`, `CERTIFICATE_STV_ONE_STAR_CH`, `CERTIFICATE_STV_ONE_STAR_SUP_CH`, `CERTIFICATE_STV_THREE_STARS_CH`, `CERTIFICATE_STV_THREE_STARS_SUP_CH`, `CERTIFICATE_STV_TWO_STARS_CH`, `CERTIFICATE_STV_TWO_STARS_SUP_CH`, `CERTIFICATE_SWISS_HISTORIC_HOTELS_CH`, `CERTIFICATE_SWISS_LODGE_HOTTELIERSUISSE_CH`, `CERTIFICATE_SWISSTAINABLE_LEVEL_ONE_CH`, `CERTIFICATE_SWISSTAINABLE_LEVEL_TWO_CH`, `CERTIFICATE_SWISSTAINSABLE_LEVEL_THREE_CH`, `CERTIFICATE_THREE_STAR_CH`, `CERTIFICATE_THREE_STAR_GASTROSUISSE_CH`, `CERTIFICATE_THREE_STAR_HOTELLERIESUISSE_CH`, `CERTIFICATE_THREE_STAR_SERVICED_APARTMENTS_CH`, `CERTIFICATE_THREE_STAR_SUPERIOR_CH`, `CERTIFICATE_THREE_STAR_SUPERIOR_HOTTELLERIESUISSE_CH`, `CERTIFICATE_TRAUFGAENGE_GASTGEBER`, `CERTIFICATE_TWO_STAR_CH`, `CERTIFICATE_TWO_STAR_GASTROSUISSE_CH`, `CERTIFICATE_TWO_STAR_HOTELLERIESUISSE_CH`, `CERTIFICATE_TWO_STAR_SERVICED_APARTMENTS_CH`, `CERTIFICATE_TWO_STAR_SUPERIOR_CH`, `CERTIFICATE_TWO_STAR_SUPERIOR_HOTTELLERIESUISSE_CH`, `CERTIFICATE_URLAUB_AUF_DEM_BAUERNHOF`, `CERTIFICATE_URLAUB_AUF_DEM_BAUERNHOF_GER`, `CERTIFICATE_WANDERBARES_DEUTSCHLAND`, `CERTIFICATE_WANDERBARES_DEUTSCHLAND_GASTRONOMIE`, `CERTIFICATE_WANDER_HOTEL_HOTTELIERSUISSE_CH`, `CERTIFICATE_WELLNESS_AND_SPA_HOTTELIERSUISSE_CH`, `CERTIFICATE_WELLNESS_HOTEL_HOTTELIERSUISSE_CH`, `CERTIFICATE_WELLNESS_STARS_DEUTSCHLAND`, `CERTIFICATE_WIN_CHARTA_DES_LANDES_BADEN_WUERTTEMBERG`, `CERTIFICATE_WINTERSPORTARENA_SAUERLAND`, `DREIWELTEN_CARD`, `ECHT_BODENSEE_CARD`, `GUESTCARD`, `HOCHSCHWARZWALD_CARD`, `SAUERLAND_CARD`, `SAUERLAND_SOMMER_CARD`, `SCHMALLENBERGER_SAUERLAND_CARD`, `WILLINGEN_MEINE_CARD`, `MARKENPARTNER`, `CERTIFICATE_URLAUBS_WINZERHOF`, `CERTIFICATE_URLAUBS_REITERHOF`, `CERTIFICATE_SCHWARZWALD_`, `BALANCE`, `CERTIFICATE_VIABONO`, `CERTIFICATE_MEDICAL_WELLNESS_THREE_STARS`, `CERTIFICATE_MEDICAL_WELLNESS_FOUR_STARS`, `CERTIFICATE_MEDICAL_WELLNESS_FIVE_STARS`, `CERTIFICATE_VIA_MICHELIN_TWO_STARS`, `CERTIFICATE_VIA_MICHELIN_THREE_STARS`, `CERTIFICATE_BRONZE_DEHOGA`, `CERTIFICATE_BIKE_AREA_SAUERLAND`, `CERTIFICATE_SAUERLAND_WALDROUTE`, `CERTIFICATE_KAISERSTUEHLER_WINZERHOF`, `CERTIFICATE_WEINHOTELS_KAISERSTUHL`, `CERTIFICATE_KOSTENLOS_STORNIERBAR_GARANTIE`, `CERTIFICATE_WIR_FUER_SIE`, `CERTIFICATE_PARTNER_BIOSPHAERENGEBIET_SCHWAEBISCHE_ALB`, `CERTIFICATE_REISEN_FUER_ALLE`, `CERTIFICATE_DLG_`, `LANDURLAUB`, `CERTIFICATE_BIOSFERA_PARTNERBETRIEB_CH`, `THEMENPARTNER_KULTUR`, `THEMENPARTNER_RAD`, `THEMENPARTNER_WANDERN`, `THEMENPARTNER_FAMILIE`, `THEMENPARTNER_WELLNESS`, `TOP_GASTGEBER_BOFE`, `LUNCH`, `DINNER`; example: `"POOL"`)
- `maxAmount` (integer (int32)) — Max Amount (example: `1`)
- `privateUsage` (boolean) — Facility is in private use (example: `true`)
- `additionalFeesApply` (boolean) — Additional fees apply for the use of this facility (example: `true`)
- `availableTime` (FacilityAvailabilityData)
- `availableFrom` (AvailableTime) — Time until facility would be available
- `pointInMonth` (string) — Point in the month (one of: `BEGINNING`, `MIDDLE`, `END`; example: `"MIDDLE"`)
- `month` (string) — Month (one of: `JANUARY`, `FEBRUARY`, `MARCH`, `APRIL`, `MAY`, `JUNE`, `JULY`, `AUGUST`, `SEPTEMBER`, `OCTOBER`, `NOVEMBER`, `DECEMBER`; example: `"JANUARY"`)
- `availableTo` (AvailableTime) — Time until facility would be available
- `pointInMonth` (string) — Point in the month (one of: `BEGINNING`, `MIDDLE`, `END`; example: `"MIDDLE"`)
- `month` (string) — Month (one of: `JANUARY`, `FEBRUARY`, `MARCH`, `APRIL`, `MAY`, `JUNE`, `JULY`, `AUGUST`, `SEPTEMBER`, `OCTOBER`, `NOVEMBER`, `DECEMBER`; example: `"JANUARY"`)
- `location` (string) — Location of facility (one of: `UNDEFINED`, `NEAR_BY`, `IN_APARTMENT`; example: `"NEAR_BY"`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
[
{
"type": "POOL",
"maxAmount": 1,
"privateUsage": true,
"additionalFeesApply": true,
"availableTime": {
"availableFrom": {
"pointInMonth": "MIDDLE",
"month": "JANUARY"
},
"availableTo": {
"pointInMonth": "MIDDLE",
"month": "JANUARY"
}
},
"location": "NEAR_BY"
}
]
```
### 400 — Bad Request
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Bad Request"
}
```
### 401 — Authentication error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Authentication error"
}
```
### 500 — Internal server error
Body `application/json`: `HoliduErrorResponse` (shape below).
```json
{
"error": "Internal server error"
}
```
## Error body: `HoliduErrorResponse`
- `error` (string) — Error Text (example: `"Invalid Json: Unexpected character"`)
---
# API response codes
Source: https://developer.holidu.com/reference/api-response-codes
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
| Response code | Meaning | Description |
| :------------ | :---------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 200 | `Success` | Your request has been processed. You see what has been processed in the response. |
| 202 | `Accepted` | Not returned by the current API. Booking updates are synchronous and answer `200`. |
| 400 | `Bad Request` | This usually occurs because of a missing or malformed parameter. Check the documentation and the syntax of your request and try again. |
| 401 | `Unauthorized` | A valid api\_key was not provided with the request, so the API could not associate a user with the request. This could mean no api\_key was provided, or the provided api\_key was incorrect (or disabled). |
| 403 | `Forbidden` | The booking is a Holidu Payments booking, which cannot be updated or cancelled through this API. |
| 404 | `Not found` | Either the request method and path supplied do not specify a known action in the API, or the object specified by the request does not exist. |
| 413 | `Payload too large` | The request body is larger than 10 MB. There is no limit on the number of rate plans. |
| 418 | `I'm a teapot` | The booking endpoints (update, details, cancel) are not available in the sandbox. |
| 429 | `Too many requests` | You push too many updates for a single apartment, most of the times at the same time for multiple endpoints. |
| 500 | `Internal server error` | This error lets you know our servers have experienced a problem. Please stop pushing and retry after a few seconds. If this error persists, please contact us. |
**Update Restrictions**
There can be only one update at a time on an apartment. When there are multiple updates on an apartment, the first request will be successful while the second one waits up to about 4.5 seconds for it to finish and otherwise fails with a 429 error code. This might happen since there are many APIs to update apartment details (LOS, Photos, etc.)\
Best practice is to wait for requests to finish before sending the next one. If you are sending multiple requests at once, those requests should be for different apartments.
If an update hangs or gets interrupted, its lock expires after 4 seconds; the update can be retried after that.
If an apartment is priced with LOS, pushes to the rates and availability endpoints answer `200` and are ignored.
---
# How to Integrate with Holidu: Capabilities & Use Cases
Source: https://developer.holidu.com/reference/how-to-integrate-with-holidu-capabilities-use-cases
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
| Capability | Purpose |
| :-------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------- |
| Inventory (Property Content) Population | Initial load of property content (titles, descriptions, facilities, amenities, etc.) into the partner's database |
| Inventory (Property Content) Sync | Keep locally stored property content up to date with Holidu |
| Future Availabilities & Pricing Storage | Maintain future availability and pricing data locally via the Push API — enables partner-owned ranking |
| Partner-Owned Search with Availability Confirmation | Partner-owned search logic with real-time availability confirmation via /availabilities |
| Real-Time Search Using Holidu Ranking | Live search without storing availability & pricing locally, using Holidu's ranking |
Partners manage different types of data, property content, availability, and pricing, within their own systems, and can combine the endpoints below in different ways depending on how much data they store locally versus fetch in real-time. Each section describes a distinct capability.
## Inventory (Property Content) Population
*Obtaining property content data from the provided inventory.*
Used to populate the partner's local database with property content (titles, descriptions, facilities, amenities, images, reviews, etc.) from Holidu.
Steps:
* Call the /changed endpoint to acquire the apartmentIds (according to inventory restrictions: region, property type, etc.)
* Call the /search endpoint (without dates) to acquire all properties' list-page data
* Call the /details endpoint to acquire all properties' enriched data (reviews, etc.)
📌 Note: Partners should decide whether to call /search, /details, or both, based on their content needs. If only list-page data is required, /search alone may be sufficient. If enriched data (reviews etc.) is needed, /details should also be called.

***
## Inventory (Property Content) Sync
*Updating existing property content data.*
Used to keep the partner's local property content current with Holidu's system over time.
Steps:
* Call the /changed endpoint with request paramter *DOCUMENT\_UPDATE* to identify updated apartmentIds
* Call the /search endpoint to update all properties' list-page data
* Call the /details endpoint to update all properties' enriched data
📌 Note: As with Property Content Population, partners should choose between /search, /details, or both depending on which content they maintain locally and need to keep in sync.
***
## Future Availabilities & Pricing Storage
*When the partner wants to store upcoming future availabilities and pricing information on their end.*
Steps:
* Partner implements the Push API — Holidu pushes all incoming LOS (Length of Stay) data for an apartment whenever it changes on the Holidu system
* Partner's database stays current through these regular push updates
⚠️ Important: The /availabilities endpoint should never be used to cache upcoming prices and availabilities for an apartment. The calendar should be built from the pushed LOS data.
Outcome: From Push API partner has up-to-date future availability and pricing data locally, enabling them to build their own calendar and have full picture for upcoming prices and availability.

***
## Partner-Owned Search with Availability Confirmation
*When the partner stores static apartment data and future availabilities/pricing on their end — what to do at real-time search.*
This phase combines the outputs of previous phases into a complete real-time search flow.
Steps:
* Partner fetches all apartment-related information from their own database (matching search criteria, filters, applying their own ranking and sorting, etc.)
* At search time, the partner calls the /availabilities endpoint with the set of apartments that appear available on their end (acquired from the Push API)
* Definite availabilities are confirmed before showing final results to the user
Outcome: Partner delivers fast, custom-ranked search results with confirmed availabilities — combining the best of local data and real-time accuracy.

***
## Real-Time Search Using Holidu Ranking
*A search flow designed for partners who do not want to store any availability and pricing data, and prefer to use Holidu's ranking and search logic — e.g. injecting Holidu offers at the end of their page.*
Steps:
* The partner calls the /search endpoint in real-time, with or without search dates.
* For undated searches, the endpoint returns matching properties with reference prices, ordered by Holidu's ranking.
* For dated searches, the endpoint returns only the available offers that match the search criteria, along with their exact prices, ordered by Holidu's ranking.
📌 Note: The /search endpoint accepts filters, so amenity-filtered searches are supported. To enable this, the list of existing amenities will be provided to the customer.

---
# Introduction
Source: https://developer.holidu.com/reference/intro-1
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
In this API reference section of the developer hub, you can find all endpoints the **Holidu Affiliate API** offers. The API allows you to search for offers, retrieve detailed property information, check availabilities, and stay in sync with changes.
## Authentication
Holidu will provide you with an **API key** which you must include in every request to verify your calls.\
You can also use this API key directly in the developer hub to test calls in real time.
## Conventions
* **Format:** All requests and responses use JSON over HTTPS.
* **Versioning:** The API is versioned; breaking changes will be announced in advance.
* **Locales and Currencies:** Supported sets are documented on the [Languages & Currencies](https://developer.holidu.com/reference/supported-languages-currencies.md) page.
---
# Intro
Source: https://developer.holidu.com/reference/intro
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
In the API reference section of the developer hub, you can find all endpoints the Holidu API offers.

Holidu will provide you with an api key that you need to verify all your calls. You can also use this api key in the reference section (1) and test all calls in real time.
You will get two api keys, one for the sandbox environment and one for the live environment. You can decide yourself in which environment you want to act (2). But be aware that testing in the live environment has an impact on production data.
We prepared for each endpoint an example request to get you started faster (3). To make them work for you, you still need to adjust parameters for the provider identifier, to match it yours. You can also change all other parameters yourself.
With the try it out (4), you can see in real time how the API reacts.
Have fun exploring our API!
> **Warning**
>
> If you use the live environment, you will make changes on live data, so use this cautiously.
> **Info**
>
> When your integration is not active yet, you can push your data to the live endpoint without the properties being shown in public. Holidu will make the final testing only on data pushed to the live endpoint.
---
# Property Types
Source: https://developer.holidu.com/reference/property-types
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
Potential responses for propertyType (as well as valid options for propertyType filter in /search API) are as follows, but are not limited to this list. The different types is a dynamic list that is always growing and it can also be that in your region specific types are not available.
```
AGRITOURISM
APARTMENT_HOTEL
APARTMENT
BEACH_HOUSE
BED_AND_BREAKFAST
BOAT
BUNGALOW
CABIN
CAMPING
CARAVAN
CASTLE
CHALET
COTTAGE
FINCA
GITE
GLAMPING
HOLIDAY_VILLAGE
HOTEL
HUT
LODGE
LOFT
LOG_CABIN
MANOR
MANSION
RARE
RIAD
ROOM
STUDIO
TENT
VACATION_APARTMENT
VACATION_HOME
VILLA
```
---
# /search
Source: https://developer.holidu.com/reference/search
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
---
# Languages & Currencies
Source: https://developer.holidu.com/reference/supported-languages-currencies
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
This page lists all currencies and locales you can use with the currency and locale parameters in the Holidu Affiliate API. Provide these codes in your requests to receive prices in the requested currency and content (descriptions, room details) in the requested language/region.
**Currencies**
Use the ISO 4217 currency code in the currency parameter.
```
AED → UAE Dirham
ARS → Argentine Peso
AUD → Australian Dollar
BRL → Brazilian Real
CAD → Canadian Dollar
CHF → Swiss Franc
CZK → Czech Koruna
DKK → Danish Krone
EUR → Euro
GBP → British Pound
MXN → Mexican Peso
NOK → Norwegian Krone
NZD → New Zealand Dollar
PLN → Polish Złoty
RON → Romanian Leu
SAR → Saudi Riyal
SEK → Swedish Krona
USD → US Dollar
```
**Locales**
Use the language-region code in the locale parameter.\
Format: \<lang>-\<COUNTRY> (two-letter ISO 639-1 language in lowercase + two-letter ISO 3166-1 region in uppercase).
```
da-DK → Danish (Denmark)
de-AT → German (Austria)
de-CH → German (Switzerland)
de-DE → German (Germany)
en-AU → English (Australia)
en-CA → English (Canada)
en-GB → English (UK)
en-IE → English (Ireland)
en-NZ → English (New Zealand)
en-US → English (US)
es-ES → Spanish (Spain)
es-MX → Spanish (Mexico)
fr-BE → French (Belgium)
fr-CH → French (Switzerland)
fr-FR → French (France)
el-GR → Greek (Greece)
it-CH → Italian (Switzerland)
it-IT → Italian (Italy)
no-NO → Norwegian (Norway)
nl-NL → Dutch (Netherlands)
nl-BE → Dutch (Belgium)
pl-PL → Polish (Poland)
pt-BR → Portuguese (Brazil)
pt-PT → Portuguese (Portugal)
sv-SE → Swedish (Sweden)
```
---
# Versioning
Source: https://developer.holidu.com/reference/versioning
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
Versions are specified by the url.
> **Tip: Commitment on backwards compatibility**
>
> We are committed to maintaining backwards compatibility in our API. To support this, we will not make breaking changes within an API version.
## Changes allowed within a version
| Accepted changes | Notes |
| :--- | :--- |
| Adding \**new endpoints/resources* | * |
| Adding **optional parameters** to existing endpoints | * |
| Adding **new fields** to existing resource responses | Clients should not use strict mode in their parsers, and should not assume that any keys not currently in the response will not be added later. |
| Changing **order of fields** in existing responses | Clients should not rely on ordering of fields within a response object. |
| Changing the **length/format of ID fields**, or other opaque strings | IDs of individual objects will not change, but the format may be different between objects. Clients should not introspect on the values of IDs. Thus, should not base logic on comparing/computing their values. |
| Adding **new options for "enumerated" fields** | For example, adding a new facility type |
---
# Search for offers based on the provided criteria
Source: https://developer.holidu.com/reference/search-1
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
`POST /search`
- Operation ID: `search`
- Base URL: https://external-api.holidu.com
- Auth: send the API key in the `x-api-key` header
- Full spec: https://developer.holidu.com/openapi/affiliate-api.json
Retrieve a paginated list of offers matching specified filtering criteria, ranked by relevance. If dates are provided, only available offers for those dates are returned with exact pricing. Each offer includes basic property information.
## Request body (required)
Content type `application/json`, schema `object`:
- `pageIndex` (integer) — Zero-based page index (min 0; max 10000)
- `pageSize` (integer) — Number of results per page (min 1; max 50)
- `searchTerm` (string)
- `locationBoundingBox` (object) — Bounding box of the search location. Overrides the searchTerm parameter
- `neLat` (number, required) (min -90; max 90)
- `neLng` (number, required) (min -180; max 180)
- `swLat` (number, required) (min -90; max 90)
- `swLng` (number, required) (min -180; max 180)
- `checkin` (string (date)) — Check-in date in ISO format YYYY-MM-DD
- `checkout` (string (date)) — Check-out date in ISO format YYYY-MM-DD
- `adults` (integer, required) — Number of adult guests (min 1; max 50)
- `children` (integer, required) — Number of child guests (min 0; max 50)
- `childrenAges` (array of integer) — Ages of child guests, defaults to 10 if not specified (min items 1; max items 50)
- `bedrooms` (integer) — Number of bedrooms (min 1)
- `locale` (string, required) — Locale code in format ISO 639-1 + ISO 3166-1 alpha-2, e.g. "en-US" (pattern `^[a-z]{2}-[A-Z]{2}$`)
- `currency` (string, required) — Currency code in ISO 4217 format, e.g. "USD" (pattern `^[A-Z]{3}$`)
- `propertyTypes` (array of string) — List of property types
- `propertyIds` (array of string) — List of property IDs to search for specifically (max 50) (min items 1; max items 50)
- `facilities` (array of string) — List of facilities
- `extras` (array of string) — Extra fields to include in the response. Supported values: description, photos, facilities
- `salesChannelId` (string) — Only for special cases, consult Holidu (max length 80)
- `domainId` (integer) — Only for special cases, consult Holidu (min 1; max 99999)
## Responses
### 200 — Successful response
Body `application/json`, schema `object`:
- `metadata` (object, required)
- `totalCount` (integer, required) — Total number of results matching the search criteria
- `items` (array of object, required)
- `id` (string, required) (min length 1)
- `description` (string, required) — Short text description of the offer (nullable)
- `photos` (array of object, required) (nullable)
- `thumbnail` (string (uri), required)
- `medium` (string (uri), required)
- `large` (string (uri), required)
- `url` (string, required)
- `area` (object, required) (nullable)
- `value` (number, required) (min 0)
- `unit` (string, required) — Unit of the area. Either UNIT_SM (square meters) of UNIT_SF (square feet) (one of: `UNIT_SM`, `UNIT_SF`)
- `bedroomCount` (integer, required) (nullable)
- `bathroomCount` (integer, required) (nullable)
- `guestCount` (integer, required) — Number of guests the offer can accommodate
- `title` (string, required)
- `propertyType` (object, required)
- `id` (string, required)
- `title` (string, required) (min length 1; max length 80)
- `facilities` (array of object, required) (nullable)
- `id` (string, required)
- `title` (string, required) (min length 2; max length 80)
- `group` (string, required)
- `petsAllowed` (boolean, required)
- `location` (object, required) (nullable)
- `name` (string, required) (min length 1; max length 350)
- `distance` (string, required) — Distance in meters to the center of search region if specified, otherwise null (nullable)
- `postalCode` (string, required) — Postal code, can be null if not shared by the provider (nullable)
- `city` (string, required) — City name, can be null if not shared by the provider (nullable)
- `coordinates` (object, required)
- `lat` (number, required) (min -90; max 90)
- `lng` (number, required) (min -180; max 180)
- `price` (any, required) — Price information for the offer, either for a given travel dates or as a starting price
- one of (1/2): object
- `currency` (string, required) — Currency code in ISO 4217 format, e.g. "USD"
- `daily` (number, required)
- `total` (number, required)
- `nights` (integer, required)
- `discountAmount` (number, required) — Absolute discount amount in given currency (min 0; nullable)
- `discountPercentage` (number, required) (nullable)
- `totalBeforeDiscount` (number, required) (nullable)
- `dailyBeforeDiscount` (number, required) (nullable)
- one of (2/2): object
- `currency` (string, required) — Currency code in ISO 4217 format, e.g. "USD"
- `daily` (number, required)
- `cancellationPolicy` (object, required) (nullable)
- `type` (string, required) (one of: `FREE_CANCELLATION`, `LIGHT_CANCELLATION`)
- `rating` (object, required) (nullable)
- `value` (number, required) (min 0; max 10)
- `count` (integer, required) (min 0)
- `licenseId` (string, required) (nullable)
- `errors` (array of object)
- `apartmentId` (string, required)
- `code` (number, required)
- `message` (string, required)
### default — Error response
Body `application/json`, schema `object`:
- `message` (string, required)
- `code` (string, required)
- `issues` (array of object)
- `message` (string, required)
---
# Get detailed information about the provided offers
Source: https://developer.holidu.com/reference/details-1
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
`POST /details`
- Operation ID: `details`
- Base URL: https://external-api.holidu.com
- Auth: send the API key in the `x-api-key` header
- Full spec: https://developer.holidu.com/openapi/affiliate-api.json
Retrieve detailed static information for specified offers. The "extras" parameter allows for the inclusion of additional data points to the response. The response includes an RFC 6570-compatible "urlTemplate" for generating checkout page links with check-in and check-out dates. If some requested offers cannot be retrieved, these will be reported in the "errors" array, with the corresponding property identifier, error code, and descriptive message.
## Request body (required)
Content type `application/json`, schema `object`:
- `propertyIds` (array of string, required) — List of property IDs (min items 1; max items 50)
- `locale` (string, required) — Locale code in format ISO 639-1 + ISO 3166-1 alpha-2, e.g. "en-US" (pattern `^[a-z]{2}-[A-Z]{2}$`)
- `currency` (string, required) — Currency code in ISO 4217 format, e.g. "USD" (pattern `^[A-Z]{3}$`)
- `extras` (array of string) — Extra fields to include in the response. Supported values: description, photos, facilities, rooms, reviews, guestCardsAndCertificates.
- `domainId` (number) — Only for special cases, consult Holidu
- `salesChannelId` (string) — Only for special cases, consult Holidu (max length 80)
## Responses
### 200 — Successful response
Body `application/json`, schema `object`:
- `items` (array of object, required)
- `id` (string, required) (min length 1)
- `description` (string, required) — Short text description of the offer (nullable)
- `photos` (array of object) (nullable)
- `thumbnail` (string (uri), required)
- `medium` (string (uri), required)
- `large` (string (uri), required)
- `urlTemplate` (string, required) — RFC 6570 URI template to generate checkout page link with check-in, check-out and guest information. Date placeholders must be in ISO 8601 format.
- `area` (object, required) (nullable)
- `value` (number, required) (min 0)
- `unit` (string, required) — Unit of the area. Either UNIT_SM (square meters) of UNIT_SF (square feet) (one of: `UNIT_SM`, `UNIT_SF`)
- `bedrooms` (integer, required) (nullable)
- `bathrooms` (integer, required) (nullable)
- `guests` (integer, required) (min 1)
- `title` (string, required) (min length 2; max length 250)
- `propertyType` (object, required)
- `id` (string, required)
- `title` (string, required) (max length 250; nullable)
- `facilities` (array of object) (nullable)
- `id` (string, required)
- `title` (string, required) (min length 2; max length 80)
- `group` (string, required)
- `guestCardsAndCertificates` (object) (nullable)
- `items` (array of object, required)
- `title` (string, required)
- `name` (string, required)
- `petsAllowed` (boolean, required) (nullable)
- `location` (object, required) (nullable)
- `name` (string, required) (min length 1; max length 350)
- `postalCode` (string, required) — Postal code, can be null if not shared by the provider (nullable)
- `city` (string, required) — City name, can be null if not shared by the provider (nullable)
- `coordinates` (object, required)
- `lat` (number, required) (min -90; max 90)
- `lng` (number, required) (min -180; max 180)
- `cancellationPolicy` (object, required) (nullable)
- `type` (string, required) (one of: `FREE_CANCELLATION`, `LIGHT_CANCELLATION`)
- `rating` (object, required) (nullable)
- `value` (number, required) (min 0; max 10)
- `count` (integer, required) (min 0)
- `rooms` (array of object, required) (nullable)
- `type` (string, required) (one of: `BEDROOM`, `LIVING_ROOM`, `BATHROOM`, `KITCHEN`)
- `rules` (any, required) — TODO: implement rules schema (one of: `null`; nullable)
- `pois` (any, required) — TODO: implement pois schema (one of: `null`; nullable)
- `reviews` (object, required) (nullable)
- `averageRatings` (array of object, required)
- `category` (string, required)
- `rating` (number, required)
- `reviewDetails` (array of object, required)
- `publishedAt` (string, required)
- `comment` (string, required)
- `language` (string, required)
- `price` (object, required) — Minimal daily price for a property, doesn't depend on travel dates
- `currency` (string, required) — Currency code in ISO 4217 format, e.g. "USD"
- `daily` (number, required)
- `instantBookable` (boolean, required)
- `errors` (array of object)
- `propertyId` (string, required)
- `code` (number, required)
- `message` (string, required)
### default — Error response
Body `application/json`, schema `object`:
- `message` (string, required)
- `code` (string, required)
- `issues` (array of object)
- `message` (string, required)
---
# Get information about the availability of given offers
Source: https://developer.holidu.com/reference/availabilities-1
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
`POST /availabilities`
- Operation ID: `availabilities`
- Base URL: https://external-api.holidu.com
- Auth: send the API key in the `x-api-key` header
- Full spec: https://developer.holidu.com/openapi/affiliate-api.json
Retrieve real-time prices and availability for specified properties on given dates.
## Request body (required)
Content type `application/json`, schema `object`:
- `propertyIds` (array of string, required) — List of property IDs (min items 1; max items 200)
- `checkin` (string (date), required) — Check-in date in ISO format YYYY-MM-DD
- `checkout` (string (date), required) — Check-out date in ISO format YYYY-MM-DD
- `adults` (integer, required) — Number of adult guests (min 1; max 50)
- `children` (integer, required) — Number of child guests (min 0; max 50)
- `childrenAges` (array of integer) — Ages of child guests (max items 50)
- `currency` (string, required) — Currency code in ISO 4217 format, e.g. "USD" (pattern `^[A-Z]{3}$`)
- `salesChannelId` (string) — Only for special cases, consult Holidu (max length 80)
- `locale` (string, required) — Locale code in format ISO 639-1 + ISO 3166-1 alpha-2, e.g. "en-US" (pattern `^[a-z]{2}-[A-Z]{2}$`)
- `country` (string, required) — Country code in ISO 3166-1 alpha-2 format (pattern `^[A-Z]{2}$`)
- `domainId` (integer) — Only for special cases, consult Holidu
- `brand` (string) — Only for special cases, consult Holidu
- `deviceType` (string) — Device type, either "DESKTOP" or "MOBILE" (one of: `DESKTOP`, `MOBILE`)
## Responses
### 200 — Successful response
Body `application/json`, schema `object`:
- `items` (array of object, required)
- `propertyId` (string, required) (min length 1)
- `isAvailable` (boolean, required)
- `price` (object, required) — Price for the given dates. Null if property is not available for the given dates. (nullable)
- `currency` (string, required) — Currency code in ISO 4217 format, e.g. "USD"
- `daily` (number, required)
- `total` (number, required)
- `nights` (integer, required)
- `discountAmount` (number, required) — Absolute discount amount in given currency (min 0; nullable)
- `discountPercentage` (number, required) (nullable)
- `totalBeforeDiscount` (number, required) (nullable)
- `dailyBeforeDiscount` (number, required) (nullable)
- `cancellationPolicy` (object, required) — Cancellation policy for the property. Null if not available. (nullable)
- `cancellationFees` (array of object, required)
- `daysBeforeArrival` (integer) — Number of days before arrival from which this fee applies (nullable)
- `free` (boolean, required) — Whether cancellation is free under this fee rule
- `percentage` (number) — Percentage of the total price charged as a cancellation fee (nullable)
- `amount` (number) — Fixed amount charged as a cancellation fee (nullable)
- `currency` (string) — Currency code for the fixed cancellation fee amount (nullable)
- `errors` (array of object) — List of errors for properties that could not be fetched
- `id` (string, required) — Property ID for which the error occurred
- `errorType` (string, required) — Type of error that occurred
### default — Error response
Body `application/json`, schema `object`:
- `message` (string, required)
- `code` (string, required)
- `issues` (array of object)
- `message` (string, required)
---
# Get a list of property IDs that have changed within the specified time window.
Source: https://developer.holidu.com/reference/changed-1
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
`POST /changed`
- Operation ID: `changed`
- Base URL: https://external-api.holidu.com
- Auth: send the API key in the `x-api-key` header
- Full spec: https://developer.holidu.com/openapi/affiliate-api.json
Returns property IDs with data potentially updated within the specified time range. The inventory is continuously refreshed, with more frequent updates for recent days.
## Request body (required)
Content type `application/json`, schema `object`:
- `changedSince` (string (date-time), required) — Start of the time window (inclusive) in ISO-8601 format from which property changes are returned, e.g. 2024-10-01T14:48:00.000Z
- `changedUntil` (string (date-time)) — End of the time window (inclusive) in ISO-8601 format until which property changes are returned, e.g. 2024-10-01T16:00:00.000Z
- `domainId` (integer) — Only for special cases, consult Holidu
- `salesChannelId` (string) — Only for special cases, consult Holidu (max length 80)
- `changeDetectionMode` (string) — Controls what triggers a change event. DOCUMENT_REFRESH includes any re-indexing, DOCUMENT_CHANGE only includes actual data changes. Defaults to DOCUMENT_REFRESH (one of: `DOCUMENT_REFRESH`, `DOCUMENT_CHANGE`)
## Responses
### 200 — Successful response
Body `application/json`, schema `object`:
- `changedPropertyIds` (array of string, required) — List of property IDs with data updated within the specified time window.
### default — Error response
Body `application/json`, schema `object`:
- `message` (string, required)
- `code` (string, required)
- `issues` (array of object)
- `message` (string, required)
---
# Create or replace LOS data for an apartment
Source: https://developer.holidu.com/reference/upsertlos-1
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
`PUT /{apartmentId}/los`
- Operation ID: `upsertLos`
- Tags: LOS Push API
- Base URL: https://{affiliateHost}/holidu/v1/apartments (Affiliate provider endpoint (base URL agreed upon during onboarding).)
- `{affiliateHost}`: The affiliate's API hostname. (default `api.affiliate-example.com`)
- Auth: http (bearer)
- Full spec: https://developer.holidu.com/openapi/affiliate-api.json
Holidu calls this endpoint to push the complete LOS data for an apartment to the affiliate.
This is an idempotent upsert ([RFC 9110 §9.3.4](https://www.rfc-editor.org/rfc/rfc9110#section-9.3.4)):
- If the affiliate does not yet have LOS data for this apartment, it should store the payload and respond with `201 Created`.
- If LOS data already exists, the affiliate should **fully replace** it with the provided payload and respond with `204 No Content`.
The request body always contains the **complete** LOS dataset for the apartment. Any check-in dates the affiliate previously stored but that are absent from this payload are no longer valid and must be removed.
An empty `los` map (`{}`) means no pricing is available for the apartment — the affiliate should remove all stored LOS data for it.
## Authentication
Holidu authenticates to the affiliate using an OAuth 2.0 Bearer Token ([RFC 6750](https://www.rfc-editor.org/rfc/rfc6750)).
| Property | Value |
|----------|-------|
| **Type** | `http` |
| **Scheme** | `bearer` |
| **Bearer format** | `JWT` |
Token exchange details are agreed upon during onboarding.
## Request body examples
**Multiple check-in dates with tiered pricing:**
```json
{
"los": {
"2024-06-01": [
{ "currency": "EUR", "guests": 2, "price": [0, 0, 300.00, 400.00, 500.00] },
{ "currency": "EUR", "guests": 4, "price": [0, 0, 350.00, 460.00, 580.00] }
],
"2024-06-02": [
{ "currency": "EUR", "guests": 2, "price": [0, 150.00, 280.00] }
]
}
}
```
**Single check-in date with one pricing tier:**
```json
{
"los": {
"2024-06-01": [
{ "currency": "EUR", "guests": 2, "price": [0, 0, 300.00, 400.00, 500.00] }
]
}
}
```
**Empty LOS (no pricing available / fully booked):**
```json
{ "los": {} }
```
## Parameters
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `apartmentId` | path | string | yes | Holidu's unique identifier for the apartment. This ID is stable and assigned during onboarding. |
## Request body (required)
Content type `application/json`, schema `LosDto`:
- `los` (map of string (checkInDate) → array of LosItemDto, required) — The key is an ISO calendar date (YYYY-MM-DD) representing the check-in date. The value is a list of price configurations for that date. A single check-in date may have multiple entries with different guest counts, each representing a separate pricing tier. (example: `{"2024-06-01":[{"currency":"EUR","guests":2,"price":[0,0,300,400,500]},{"currency":"EUR","guests":4,"price":[0,0,350,460,580]}],"2024-06-02":[{"currency":"EUR","guests":2,"price":[0,150,280]}]}`)
- `currency` (string (iso-4217), required) — ISO 4217 currency code. (example: `"EUR"`)
- `guests` (integer, required) — Maximum number of guests this configuration applies to (adults + kids, babies excluded). A configuration with guests=2 applies to searches for 1 or 2 guests. Multiple entries with different guest values may exist for the same check-in date, allowing tiered pricing based on occupancy (e.g., guests=2 for base price, guests=4 for a higher rate). (example: `2`)
- `price` (array of number (decimal), required) — Accumulated prices indexed by length of stay. Element at index N represents the total price for an (N+1)-night stay starting on the parent check-in date. A value of 0 means checkout is not permitted on that day (encodes minimum stay rules). Maximum 62 entries. (max items 62; example: `[0,0,300,400,500]`)
Example — multiDate:
```json
{
"los": {
"2024-06-01": [
{
"currency": "EUR",
"guests": 2,
"price": [
0,
0,
300,
400,
500
]
},
{
"currency": "EUR",
"guests": 4,
"price": [
0,
0,
350,
460,
580
]
}
],
"2024-06-02": [
{
"currency": "EUR",
"guests": 2,
"price": [
0,
150,
280
]
}
]
}
}
```
Example — singleDate:
```json
{
"los": {
"2024-06-01": [
{
"currency": "EUR",
"guests": 2,
"price": [
0,
0,
300,
400,
500
]
}
]
}
}
```
Example — fullyBooked:
```json
{
"los": {}
}
```
## Responses
### 201 — LOS data created (first push for this apartment) ([RFC 9110 §15.3.2](https://www.rfc-editor.org/rfc/rfc9110#section-15.3.2)). The `Location` header contains the canonical URI of the new resource ([RFC 9110 §10.2.2](https://www.rfc-editor.org/rfc/rfc9110#section-10.2.2)).
### 204 — LOS data replaced successfully — no response body ([RFC 9110 §15.3.5](https://www.rfc-editor.org/rfc/rfc9110#section-15.3.5)).
### 400 — The request is syntactically invalid (malformed JSON, wrong types, etc.) ([RFC 9110 §15.5.1](https://www.rfc-editor.org/rfc/rfc9110#section-15.5.1)).
Body `application/problem+json`, schema `ProblemDetail`:
- `type` (string (uri), required) — A URI reference that identifies the problem type ([RFC 9457 §3.1.1](https://www.rfc-editor.org/rfc/rfc9457#section-3.1.1)). (example: `"https://api.affiliate-example.com/problems/validation-error"`)
- `title` (string, required) — A short, human-readable summary of the problem type. (example: `"Validation Error"`)
- `status` (integer, required) — The HTTP status code. (example: `400`)
- `detail` (string) — A human-readable explanation specific to this occurrence of the problem. (example: `"Request body is not valid JSON."`)
- `instance` (string (uri)) — A URI reference that identifies the specific occurrence of the problem. (example: `"/apt-12345/los"`)
Example — Example:
```json
{
"type": "https://api.affiliate-example.com/problems/bad-request",
"title": "Bad Request",
"status": 400,
"detail": "Request body is not valid JSON."
}
```
### 401 — Authentication credentials are missing or invalid ([RFC 9110 §15.5.2](https://www.rfc-editor.org/rfc/rfc9110#section-15.5.2)). The affiliate should return a `WWW-Authenticate` header indicating the expected scheme ([RFC 9110 §11.6.1](https://www.rfc-editor.org/rfc/rfc9110#section-11.6.1)).
Body `application/problem+json`, schema `ProblemDetail`:
- `type` (string (uri), required) — A URI reference that identifies the problem type ([RFC 9457 §3.1.1](https://www.rfc-editor.org/rfc/rfc9457#section-3.1.1)). (example: `"https://api.affiliate-example.com/problems/validation-error"`)
- `title` (string, required) — A short, human-readable summary of the problem type. (example: `"Validation Error"`)
- `status` (integer, required) — The HTTP status code. (example: `400`)
- `detail` (string) — A human-readable explanation specific to this occurrence of the problem. (example: `"Request body is not valid JSON."`)
- `instance` (string (uri)) — A URI reference that identifies the specific occurrence of the problem. (example: `"/apt-12345/los"`)
Example — Example:
```json
{
"type": "https://api.affiliate-example.com/problems/unauthorized",
"title": "Unauthorized",
"status": 401,
"detail": "Bearer token is expired or invalid."
}
```
### 404 — The affiliate does not recognise the apartment ID ([RFC 9110 §15.5.5](https://www.rfc-editor.org/rfc/rfc9110#section-15.5.5)). This may indicate a mapping or onboarding issue that Holidu should investigate.
Body `application/problem+json`, schema `ProblemDetail`:
- `type` (string (uri), required) — A URI reference that identifies the problem type ([RFC 9457 §3.1.1](https://www.rfc-editor.org/rfc/rfc9457#section-3.1.1)). (example: `"https://api.affiliate-example.com/problems/validation-error"`)
- `title` (string, required) — A short, human-readable summary of the problem type. (example: `"Validation Error"`)
- `status` (integer, required) — The HTTP status code. (example: `400`)
- `detail` (string) — A human-readable explanation specific to this occurrence of the problem. (example: `"Request body is not valid JSON."`)
- `instance` (string (uri)) — A URI reference that identifies the specific occurrence of the problem. (example: `"/apt-12345/los"`)
Example — Example:
```json
{
"type": "https://api.affiliate-example.com/problems/not-found",
"title": "Not Found",
"status": 404,
"detail": "Apartment 'apt-99999' is not known to this affiliate."
}
```
### 413 — The request body exceeds the affiliate's maximum accepted size ([RFC 9110 §15.5.14](https://www.rfc-editor.org/rfc/rfc9110#section-15.5.14)).
Body `application/problem+json`, schema `ProblemDetail`:
- `type` (string (uri), required) — A URI reference that identifies the problem type ([RFC 9457 §3.1.1](https://www.rfc-editor.org/rfc/rfc9457#section-3.1.1)). (example: `"https://api.affiliate-example.com/problems/validation-error"`)
- `title` (string, required) — A short, human-readable summary of the problem type. (example: `"Validation Error"`)
- `status` (integer, required) — The HTTP status code. (example: `400`)
- `detail` (string) — A human-readable explanation specific to this occurrence of the problem. (example: `"Request body is not valid JSON."`)
- `instance` (string (uri)) — A URI reference that identifies the specific occurrence of the problem. (example: `"/apt-12345/los"`)
Example — Example:
```json
{
"type": "https://api.affiliate-example.com/problems/payload-too-large",
"title": "Payload Too Large",
"status": 413,
"detail": "The LOS payload exceeds the maximum allowed size of 5 MB."
}
```
### 429 — The affiliate is rate-limiting Holidu ([RFC 6585 §4](https://www.rfc-editor.org/rfc/rfc6585#section-4)). Holidu will respect the `Retry-After` header before retrying.
Body `application/problem+json`, schema `ProblemDetail`:
- `type` (string (uri), required) — A URI reference that identifies the problem type ([RFC 9457 §3.1.1](https://www.rfc-editor.org/rfc/rfc9457#section-3.1.1)). (example: `"https://api.affiliate-example.com/problems/validation-error"`)
- `title` (string, required) — A short, human-readable summary of the problem type. (example: `"Validation Error"`)
- `status` (integer, required) — The HTTP status code. (example: `400`)
- `detail` (string) — A human-readable explanation specific to this occurrence of the problem. (example: `"Request body is not valid JSON."`)
- `instance` (string (uri)) — A URI reference that identifies the specific occurrence of the problem. (example: `"/apt-12345/los"`)
Example — Example:
```json
{
"type": "https://api.affiliate-example.com/problems/too-many-requests",
"title": "Too Many Requests",
"status": 429,
"detail": "Rate limit exceeded. Retry after 60 seconds."
}
```
### 500 — An unexpected error on the affiliate's side ([RFC 9110 §15.6.1](https://www.rfc-editor.org/rfc/rfc9110#section-15.6.1)).
Body `application/problem+json`, schema `ProblemDetail`:
- `type` (string (uri), required) — A URI reference that identifies the problem type ([RFC 9457 §3.1.1](https://www.rfc-editor.org/rfc/rfc9457#section-3.1.1)). (example: `"https://api.affiliate-example.com/problems/validation-error"`)
- `title` (string, required) — A short, human-readable summary of the problem type. (example: `"Validation Error"`)
- `status` (integer, required) — The HTTP status code. (example: `400`)
- `detail` (string) — A human-readable explanation specific to this occurrence of the problem. (example: `"Request body is not valid JSON."`)
- `instance` (string (uri)) — A URI reference that identifies the specific occurrence of the problem. (example: `"/apt-12345/los"`)
Example — Example:
```json
{
"type": "https://api.affiliate-example.com/problems/internal-error",
"title": "Internal Server Error",
"status": 500,
"detail": "An unexpected error occurred."
}
```
---
# Apartment Rates
Source: https://developer.holidu.com/reference/schemas/apartment-rates
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `ApartmentRates` in https://developer.holidu.com/openapi/connectivity-api.json
Fields of `ApartmentRates`:
- `ratePlans` (array of RatePlan, required)
- `ratePlanId` (string, required) — Unique identifier for this rate plan (example: `"SHORT_STAY_RATE"`)
- `guests` (integer (int32), required) — Number of guests. Allowed number of guests must be between 1 and 100 (min 1; max 100; example: `2`)
- `currency` (string, required) (example: `"EUR"`)
- `minimumStay` (integer (int32), required) — Minimum Stay (days) (example: `1`)
- `maximumStay` (integer (int32)) — Maximum Stay (days) (example: `30`)
- `dailyRates` (array of DailyRate, required) — List of daily rates
- `date` (string (date), required) — Date (example: `"2023-05-01"`)
- `price` (number, required) — Daily price (example: `95`)
- `priceForExtraPerson` (number) — Additional cost per extra person (example: `20`)
- `checkinAllowed` (boolean, required) — Check in is possible on this day (example: `true`)
- `checkoutAllowed` (boolean, required) — Check out is possible on this day (example: `false`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"ratePlans": [
{
"ratePlanId": "SHORT_STAY_RATE",
"guests": 2,
"currency": "EUR",
"minimumStay": 1,
"maximumStay": 30,
"dailyRates": [
{
"date": "2023-05-01",
"price": 95,
"priceForExtraPerson": 20,
"checkinAllowed": true,
"checkoutAllowed": false
}
]
}
]
}
```
---
# ApartmentAddress
Source: https://developer.holidu.com/reference/schemas/apartmentaddress
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `ApartmentAddress` in https://developer.holidu.com/openapi/connectivity-api.json
Address of the rental property
Fields of `ApartmentAddress`:
- `street` (string) — Street (min length 0; max length 128; example: `"Karlstrasse 66"`)
- `zipCode` (string) — ZIP Code (max 20 chars) (min length 0; max length 20; example: `"76133"`)
- `city` (string) — City (min length 0; max length 128; example: `"Munich"`)
- `countryCode` (string) — Country code represented in standard ISO 3166-1 ALPHA-2 format (min length 2; max length 2; example: `"DE"`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"street": "Karlstrasse 66",
"zipCode": "76133",
"city": "Munich",
"countryCode": "DE"
}
```
---
# ApartmentAvailability
Source: https://developer.holidu.com/reference/schemas/apartmentavailability
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `ApartmentAvailability` in https://developer.holidu.com/openapi/connectivity-api.json
Fields of `ApartmentAvailability`:
- `availableDays` (array of string (date))
- `bookedDays` (array of string (date))
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"availableDays": [
"2023-12-29"
],
"bookedDays": [
"2023-12-30"
]
}
```
---
# ApartmentCancellationPolicy
Source: https://developer.holidu.com/reference/schemas/apartmentcancellationpolicy
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `ApartmentCancellationPolicy` in https://developer.holidu.com/openapi/connectivity-api.json
Fields of `ApartmentCancellationPolicy`:
- `daysBeforeArrival` (integer (int32), required) — Number of days before arrival for which this cancellation policy is valid (min 0; example: `10`)
- `cancellationFeeInPercent` (number, required) — Booking percentage which is non-refundable (min 0; max 100; example: `30`)
- `rateId` (string (string)) — Rate identifier (pattern `DEFAULT|REFUNDABLE|NON_REFUNDABLE`; example: `"NON_REFUNDABLE"`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"daysBeforeArrival": 10,
"cancellationFeeInPercent": 30,
"rateId": "NON_REFUNDABLE"
}
```
---
# ApartmentDescription
Source: https://developer.holidu.com/reference/schemas/apartmentdescription
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `ApartmentDescription` in https://developer.holidu.com/openapi/connectivity-api.json
Fields of `ApartmentDescription`:
- `language` (string, required) — Language (min length 2; max length 2; example: `"de"`)
- `description` (string, required) — Description of the apartment translated into language above (example: `"Die Appartamenti La Grotta befinden sich im historischen Zentrum von Bardolino..."`)
- `title` (string) — Title of the apartment translated into language above (example: `"La Grotta"`)
- `locationDescription` (string) — Description of the outside of apartment like location, surroundings (example: `"The apartment is located at 730 m above sea level and just 300 m from Lake Bajer."`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"language": "de",
"description": "Die Appartamenti La Grotta befinden sich im historischen Zentrum von Bardolino...",
"title": "La Grotta",
"locationDescription": "The apartment is located at 730 m above sea level and just 300 m from Lake Bajer."
}
```
---
# ApartmentExtraCost
Source: https://developer.holidu.com/reference/schemas/apartmentextracost
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `ApartmentExtraCost` in https://developer.holidu.com/openapi/connectivity-api.json
Fields of `ApartmentExtraCost`:
- `id` (string, required) — An identifier for this extra cost (example: `"XYZ_123"`)
- `name` (string, required) — Name of extra cost (one of: `FINAL_CLEANING`, `EXTRA_CLEANING`, `REFUNDABLE_SECURITY_DEPOSIT`, `TOURIST_OR_CITY_TAX`, `ECO_TAX`, `VAT_OF_RENTAL_PRICE`, `BOOKING_FEE`, `HYGIENE_SURCHARGE`, `PET`, `TRAVEL_INSURANCE`, `TOWEL`, `BEDLINEN`, `TOWEL_BEDLINEN_PACKAGE`, `KITCHEN_TOWELS`, `BEDLINEN_AND_BEDMAKING`, `BABY_BED`, `BABY_CHAIR`, `BABY_COT`, `BABY_BUGGY`, `BABY_HIGH_CHAIR`, `EXTRA_BED`, `HEATING`, `AIRCONDITION`, `FIREWOOD`, `ELECTRICITY`, `WATER`, `GAS`, `SAUNA`, `POOL`, `HOT_TUB`, `WASHING_MACHINE`, `BEACH_SERVICES`, `CLUB_CARD`, `INTERNET`, `PARKING`, `AIRPORT_SHUTTLE`, `BREAKFAST`, `SERVICE_COSTS`; example: `"BEDLINEN"`)
- `basisOfCalculation` (string, required) — How is cost is calculated (one of: `PER_STAY`, `PER_PERSON_PER_NIGHT`, `PER_NIGHT`, `PER_PERSON`, `PER_UNIT`, `PER_UNIT_PER_NIGHT`; example: `"PER_PERSON_PER_NIGHT"`)
- `maximumCount` (integer (int32)) — Maximum units that can be selected for this extra service if the service is selectable (example: `1`)
- `type` (string, required) — Type of service associated with this extra cost (one of: `MANDATORY`, `SELECTABLE`, `ON_USAGE`; example: `"MANDATORY"`)
- `paymentTime` (string, required) — Payment time of extra cost (one of: `ON_BOOKING`, `WITH_RATES`, `ONSITE`; example: `"ONSITE"`)
- `price` (ExtraCostPrice, required) — Price configuration for extra cost
- `type` (string, required) (one of: `PERCENTAGE`, `FIXED`; example: `"PERCENTAGE"`)
- `amount` (number, required) — Price amount dependent on type (example: `90.24`)
- `currency` (string) — Currency (example: `"EUR"`)
- `condition` (ExtraCostCondition) — Conditions applicable for extra cost
- `seasonApplicable` (SeasonApplicable) — Season for which extra cost is applicable
- `onlyApplicableFrom` (string (date)) — Only applicable from date (example: `"2020-08-01"`)
- `onlyApplicableUntil` (string (date)) — Only applicable until date (example: `"2021-04-30"`)
- `numberOfNights` (LengthOfStay) — Extra cost only applicable if lengthOfStay shorter than
- `fromStayLengthInNights` (integer (int32)) — Based on the length of stay, applicable from night (example: `1`)
- `toStayLengthInNights` (integer (int32)) — Based on the length of stay, applicable until night (example: `7`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"id": "XYZ_123",
"name": "BEDLINEN",
"basisOfCalculation": "PER_PERSON_PER_NIGHT",
"maximumCount": 1,
"type": "MANDATORY",
"paymentTime": "ONSITE",
"price": {
"type": "PERCENTAGE",
"amount": 90.24,
"currency": "EUR"
},
"condition": {
"seasonApplicable": {
"onlyApplicableFrom": "2020-08-01",
"onlyApplicableUntil": "2021-04-30"
},
"numberOfNights": {
"fromStayLengthInNights": 1,
"toStayLengthInNights": 7
}
}
}
```
---
# ApartmentFacility
Source: https://developer.holidu.com/reference/schemas/apartmentfacility
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `ApartmentFacility` in https://developer.holidu.com/openapi/connectivity-api.json
Fields of `ApartmentFacility`:
- `name` (string)
- `type` (string) — Facility type. Here you should map your facilities to ours. The allowed values can be taken from GET /v2/facilities/types (one of: `SMOKING_ALLOWED`, `SMOKING_NOT_ALLOWED`, `SMOKING_AREA`, `PETS_ALLOWED`, `PETS_ALLOWED_ON_REQUEST`, `PETS_ALLOWED_SMALL_PETS`, `PETS_ALLOWED_CAT`, `PETS_ALLOWED_DOG`, `PETS_ALLOWED_DOG_MAX_10_KG`, `PETS_ALLOWED_DOG_MORE_THAN_10_KG`, `PETS_NOT_ALLOWED`, `PETS_ON_AVAILABILITY`, `VIEW`, `VIEW_OCEAN`, `VIEW_LAKE`, `VIEW_CITY`, `VIEW_GARDEN`, `VIEW_LANDMARK`, `VIEW_MOUNTAIN`, `VIEW_RIVER`, `VIEW_SEA`, `VIEW_BEACH`, `VIEW_GOLF_COURSE`, `VIEW_WATER`, `VIEW_INNER_COURTYARD`, `VIEW_POOL`, `WATERFRONT`, `BARRIER_FREE`, `SUITABLE_FOR_DISABLED`, `SUITABLE_FOR_ELDERLY`, `BARRIER_FREE_NOT`, `ENERGY`, `ENERGY_SOLAR`, `ENERGY_WIND`, `WATER_HOT`, `ROOF_FLAT`, `ENTRANCE_PRIVATE`, `ROOF_THATCHED`, `ANIMALS`, `ANIMALS_CAT`, `ANIMALS_DOG`, `ANIMALS_FARM`, `POOL`, `POOL_PRIVATE`, `POOL_CHILDREN`, `POOL_HEATED`, `POOL_INFINITY`, `POOL_TOYS`, `POOL_ROOFTOP`, `POOL_SEASONALLY_OPENED`, `POOL_FENCED`, `WHIRLPOOL`, `WHIRLPOOL_BATHTUB`, `ELEVATOR`, `INTERNET`, `INTERNET_NOT`, `INTERNET_WIFI`, `INTERNET_LAN`, `SAUNA`, `INFRARED_CABIN`, `CHIMNEY`, `STOVE_WOOD`, `FIREPLACE`, `CHILDFRIENDLY`, `RENOVATED`, `ALLERGY_FRIENDLY`, `BEST_PRICE`, `FOR_EVENTS`, `LUXURY`, `QUIET`, `VISITED_BY_HOLIDU`, `WASHER`, `DRYER`, `WASHER_DRYER_COMBO`, `FLAT_IRON`, `FLAT_IRON_AND_BOARD`, `HEATING`, `HEATING_NOT`, `HEATING_OIL`, `HEATING_GAS`, `HEATING_UNDERFLOOR`, `HEATING_WOOD_STOVE`, `HEATING_ELECTRIC`, `AIR_CONDITION`, `VENTILATOR`, `SOLARIUM`, `POOL_INDOOR`, `POOL_INDOOR_CHILDREN`, `WHIRLPOOL_INDOOR`, `TV`, `TV_CHILDREN`, `TV_LCD`, `TV_FLAT_SCREEN`, `TV_GERMAN_CHANNELS`, `TV_FRENCH_CHANNELS`, `TV_ENGLISH_CHANNELS`, `TV_SPANISH_CHANNELS`, `TV_DUTCH_CHANNELS`, `TV_DANISH_CHANNELS`, `TV_ITALIAN_CHANNELS`, `TV_INTERNATIONAL_CHANNELS`, `TV_CABLE`, `TV_SATELLITE`, `TV_DIGITAL`, `TV_PAY_PER_VIEW`, `BEAMER`, `BLURAY_PLAYER`, `DVD_PLAYER`, `CD_PLAYER`, `RADIO`, `MP3_PLAYER`, `IPOD_DOCK`, `SPEAKERS`, `SOUND_SYSTEM`, `COMPUTER`, `TELEPHONE`, `HIGHCHAIR`, `PLAYROOM`, `ROOMS_LOUNGE`, `INTERCOM`, `FIRE_PIT`, `FIRE_EXTINGUISHER`, `FIRE_ALARM`, `CARBONMONOXIDE_DETECTOR`, `ALARM_HOUSE`, `BED_KING`, `BED_QUEEN`, `BED_DOUBLE`, `BED_SINGLE`, `BED_CHILDREN`, `BED_BABY`, `BED_EXTRA`, `BED_SLEEPING_COUCH`, `BED_SLEEPING_COUCH_2`, `BED_SLEEPING_COUCH_1`, `BED_FOLDAWAY`, `BED_BUNK`, `BED_BUNK_1`, `BED_BUNK_2`, `BED_FLOOR_MATTRESS`, `BED_AIR_MATTRESS`, `ROOMS_DININGROOM`, `ROOMS_LIVINGROOM`, `ROOMS_SINGLE`, `ROOMS_DOUBLE`, `ROOMS_FAMILY`, `ROOMS_BATHROOM`, `ROOMS_BEDROOM`, `ROOMS_COMMON`, `SUITED_FOR_GROUPS`, `OUTDOOR_DINING_AREA`, `SAFE`, `BALCONY_TERRACE`, `BALCONY`, `BALCONY_COVERED`, `BALCONY_UNCOVERED`, `TERRACE`, `TERRACE_COVERED`, `TERRACE_UNCOVERED`, `TERRACE_ROOFTOP`, `GARDEN`, `HOUSEOWNED_BEACH`, `GARDEN_FURNITURE`, `HAMMOCK`, `STROLLER`, `DECK_CHAIR`, `BEACH_CHAIR`, `POOL_OUTDOOR`, `POOL_OUTDOOR_CHILDREN`, `WHIRLPOOL_OUTDOOR`, `STEAMBATH`, `FENCED_PROPERTY`, `FENCED_PROPERTY_NOT`, `TOYS`, `TOYS_BOARD_GAME`, `TOYS_BOOKS`, `TOYS_BOOKS_FOR_CHILDREN`, `TOYS_DVDS`, `TOYS_DVDS_FOR_CHILDREN`, `GAME_CONSOLE_PS3`, `GAME_CONSOLE_PS4`, `GAME_CONSOLE_XBOX_ONE`, `GAME_CONSOLE_XBOX_360`, `GAME_CONSOLE_WII`, `GAME_CONSOLE_OTHER`, `PLAYGROUND`, `GRILL`, `GRILL_GAS`, `GRILL_COAL`, `GRILL_ELECTRIC`, `PARKING`, `PARKING_SPOT`, `PARKING_AT_OBJECT`, `PARKING_GARAGE`, `PARKING_CARPORT`, `PARKING_STREET`, `PARKING_SECURE`, `PARKING_DISABLED`, `CONSERVATORY`, `BICYCLE_RACK`, `BICYCLE_CELLAR`, `BICYCLE_RENTALS_ON_SITE`, `LANDING_STAGE`, `SKI_IN_OUT`, `SKI_BUS_AT_PROPERTY`, `PARASOL`, `KITCHEN`, `KITCHEN_NOT`, `KITCHENETTE`, `OVEN`, `COOKTOP`, `MICROWAVE`, `FRIDGE`, `ICE_MAKER`, `FREEZER`, `FRIDGE_FREEZER_COMBINATION`, `DISHWASHER`, `WATER_HEATER`, `COFFEE_TEA_MACHINE`, `COFFEE_MACHINE`, `ESPRESSO_MACHINE`, `COFFEE`, `MIXER`, `TOASTER`, `JUICER`, `MINIBAR`, `KETTLE`, `SPICES`, `DISHES`, `CUTLERY`, `KITCHEN_UTENSILS`, `SHOWER`, `SHOWER_BATHTUB_COMBO`, `SHOWER_BATHTUB`, `SHOWER_OUTSIDE`, `BATHTUB`, `SEPARATE_TOILET`, `EN_SUITE_TOILET`, `HAIRDRYER`, `VACUUM_CLEANER`, `IRONING_BOARD`, `TROUSERPRESS`, `WARDROBE`, `CLOTHES_HANGERS`, `FURNITURE_DESK`, `CURTAINS_BLACKOUT`, `SMOKE_DETECTOR`, `TOWELS`, `TOWELS_BEACH_POOL`, `TOWELS_NOT`, `TOILETRIES`, `BEDLINEN`, `BEDLINEN_NOT`, `DISHCLOTH`, `BATHROBE`, `BREAKFAST`, `HALF_BOARD`, `LUNCHSERVICE_PACKED`, `CHILDCARE`, `BIKE_RENTAL`, `SKI_RENTAL`, `SKI_STORAGE`, `SKI_PASS`, `SCOOTER_RENTAL`, `CAR_RENTAL`, `BOAT_RENTAL`, `BIKE_PROVIDED`, `BOAT_PROVIDED`, `AIRPORT_SHUTTLE`, `SHUTTLE_SERVICE`, `FIRST_AID_KIT`, `DOORMAN`, `RECEPTION_24H`, `ATM`, `DRY_CLEANING`, `IRONING_SERVICE`, `LUGGAGE_STORAGE`, `CURRENCY_EXCHANGE`, `RESTAURANT`, `MINIMARKET`, `HOUSEKEEPING`, `HOUSEKEEPING_DAILY`, `HOUSEKEEPING_WEEKLY`, `BOOK_WITHOUT_CREDIT_CARD`, `CHEQUES_VACANCES`, `GROUPS_NOT_ALLOWED`, `YOUTH_GROUPS_NOT_ALLOWED`, `YOUTH_GROUPS_ALLOWED`, `SUITABLE_YOUNG_PEOPLE`, `SUITABLE_CHILDREN`, `SUITABLE_CHILDREN_NO`, `CHILDREN_NOT_ALLOWED`, `FAMILY_FRIENDLY`, `HOUSEOWNER_LIVES_ONSPOT`, `LONGTERM_STAYS_ALLOWED`, `CHECKIN_HOST`, `CHECKIN_SELF`, `KEY_CARD_ACCESS`, `LOCATION_GROUND_FLOOR`, `LOCATION_UPPER_FLOOR`, `WINTER_SPORTS`, `WATER_SPORTS`, `SKI_VACATION`, `BEACH_VACATION`, `FARM_VACATION`, `NATURE`, `WELLNESS`, `WELLNESS_TREATMENTS`, `WELLNESS_AREA`, `GYM`, `TENNIS_COURT`, `GOLF`, `MINIGOLF`, `FISHING`, `SAILING`, `HIKING`, `HORSEBACK_RIDING`, `WATERPARK`, `SURFING`, `WINDSURFING`, `KITESURFING`, `BIKING`, `DIVING`, `MOUNTAIN_BIKING`, `BOAT_TRIP`, `BILLIARD_TABLE`, `TABLE_TENNIS`, `PUBLIC_TRANSPORTATION`, `CHILDREN_ALLOWED`, `SINK`, `BASKETBALL`, `BIKE`, `BOAT`, `VOLLEY_BALL_COURT`, `GOLF_COURT`, `CROSS_COUNTRY_SKI`, `BY_THE_WATER`, `IN_THE_SKI_RESORT`, `CLOSE_TO_SKI_LIFTS`, `SKI_PASS_DISCOUNTED`, `SKI_PASS_INCLUDED`, `SKI_RENTAL_DISCOUNTED`, `SKI_RENTAL_INCLUDED`, `SKI_SCHOOL_DISCOUNTED`, `SKI_SCHOOL_INCLUDED`, `BIKE_STORAGE`, `LGBTQ_FRIENDLY`, `GREEN_PROPERTY`, `EVENT_FRIENDLY`, `PRIVATE_BEACH`, `BEACH_ACCESS`, `BEACH_FRONT`, `LAKE_FRONT`, `WATER_FRONT`, `OCEAN_FRONT`, `ELECTRIC_VEHICLE_CHARGING_STATION`, `ELECTRIC_BIKE_CHARGING_STATION`, `MOBILITY_PUBLIC_TRANSPORT`, `MOBILITY_BIKES`, `MOBILITY_EBIKES`, `RENEWABLE_ENERGY`, `RECYCLING_GLASS`, `RECYCLING_PAPER`, `RECYCLING_PLASTIC`, `RECYCLING_ORGANIC`, `ENERGY_SAVING_SOLAR_PANELS`, `ENERGY_SAVING_WIND_POWER`, `ENERGY_SAVING_METHANE_DIGESTER`, `ENERGY_SAVING_SOLAR_COLLECTOR`, `ENERGY_SAVING_LIGHTING`, `ENERGY_SAVING_SMART_CONTROLS`, `ENERGY_SOLAR_THERMAL_PANELS`, `ENERGY_HEAT_PUMPS`, `ENERGY_GREEN_ELECTRICITY_PROVIDER`, `ENERGY_BIOMASS`, `ENERGY_GEOTHERMICS`, `ENERGY_INFRARED_HEATING_PANELS`, `ENERGY_MASONRY_HEATER`, `INSULATION_GLASS`, `INSULATION_ROOF`, `INSULATION_WALL`, `INSULATION_FLOOR`, `INSULATION_NATURAL_MATERIALS`, `INSULATION_GREEN_COOL_ROOF`, `WATER_SAVING_SHOWER`, `WATER_SAVING_TOILET`, `WATER_SAVING_TAPS`, `RAINWATER_TREATMENT`, `GREY_WATER_SYSTEM`, `OWN_PRODUCE_JAM`, `OWN_PRODUCE_VEGETABLES`, `OWN_PRODUCE_HERBS`, `OWN_PRODUCE_OLIVE_OIL`, `OWN_PRODUCE_HONEY`, `OWN_PRODUCE_FRUITS`, `OWN_PRODUCE_EGGS`, `OWN_PRODUCE_CHEESE`, `OWN_PRODUCE_BREAD`, `OWN_PRODUCE_NUTS`, `ECO_CLEANING_PRODUCTS`, `SUSTAINABLE_CONSTRUCTION`, `EVENT_MEAL`, `EVENT_BIRTHDAY_CHILD`, `EVENT_BABY_SHOWER`, `EVENT_STAG_PARTY`, `EVENT_WEDDING`, `EVENT_BIRTHDAY_ADULT`, `SHOWER_ROLL_IN`, `SHOWER_GRAB_RAILS`, `TOILET_RAISED`, `WIDE_DOORS`, `STEP_FREE_ACCESS`, `BATHTUB_CHAIR`, `BATHROOM_TURNING_CYCLE_MIN_1_5_M`, `BATHROOM_EMERGENCY_CORD`, `STEP_FREE_INTERIOR`, `SHOWER_CHAIR`, `TOILET_GRAB_RAILS`, `BATHROOM_SINK_LOWERED`, `INTERNET_WIFI_FOR_VIDEO_CALLS`, `DRINKING_WATER_BOTTLED`, `DISH_DETERGENT`, `SHAMPOO`, `PARTIES_NOT_ALLOWED`, `LAUNDRY`, `LAUNDRY_SERVICE`, `WATER_PARK`, `CORONA_RULES_APPLIED`, `SOUTERRAIN`, `BOWLING`, `KEGELBAHN`, `YOGA_SCHOOL`, `UNIT_SIZE`, `PRINTER`, `PIANO`, `BABYSITTING_SERVICES`, `ROOM_SERVICE`, `HOUR_SEC`, `_24HOUR_SECURITY`, `AIR_PURIFIER`, `BABY_MONITOR`, `BED_EXTRA_LONG`, `BIDET`, `BOOT_DRIER`, `BREAD_SERVICE`, `BROADCAST_LIVE_SPORT`, `CANOEING`, `CASHLESS_PAYMENT`, `CLEANING_PRODUCTS`, `CLOTHES_DRYING_RACK`, `COFFEE_GRINDER`, `CONCIERGE`, `COOKING_CLASS`, `EXPRESS_CHECKINOUT`, `ECOTOURISM`, `FLOOR_CARPETING`, `GROCERY_DELIVERY`, `HOT_SPRINGS`, `HYPOALLERGENIC_PILLOW`, `JET_SKIING`, `KAYAKING`, `KIDS_CLUB`, `LIVE_MUSIC`, `MEAL_DELIVERY`, `MOSQUITO_NET`, `MOTORBOATING`, `NEWSPAPER`, `NO_STEP_FREE_ACCESS`, `NORDIC_WALKING`, `RECYCLING`, `SANDBOX`, `SHOPPING`, `SKI_SCHOOL`, `SKIING`, `SNORKELING`, `SUNLOUNGER`, `TOOTHBRUSH`, `TRAMPOLINE`, `TV_STREAMING`, `VISUAL_AID_BRAILLE`, `VISUAL_AID_TACTILE_SIGNS`, `WILDLIFE_VIEWING`, `WINERY`, `WING_FOIL`, `STAND_UP_PADDLING`, `CLIMBING`, `SWIMMING`, `PARAGLIDING`, `RUNNING`, `CANYONING`, `YOGA`, `PARTNER_SUSTAINABILITY_BADGE`, `GASTGEBER_MIT_HERZ`, `ALLGAEU_TOP_HOTELS`, `CERTIFICATE_4FUER3`, `CERTIFICATE_ADAC_CAMPINGPLATZ_AUSZEICHNUNG`, `CERTIFICATE_ALBCARD`, `CERTIFICATE_ALB_CROSSING`, `CERTIFICATE_ALBSTEIG`, `CERTIFICATE_BAG_OBSTHOF`, `CERTIFICATE_BAG_URLAUB_AUF_DEM_BAUERNHOF`, `CERTIFICATE_BARRIEREFREI_ERLEBEN`, `CERTIFICATE_BARRIEREFREIE_UNTERKUNFT_OKGO_CH`, `CERTIFICATE_BERGSTEIGERDOERFER_CH`, `CERTIFICATE_BETT_UND_BIKE`, `CERTIFICATE_BETT_UND_BIKE_ADFC`, `CERTIFICATE_BIKE_HOTEL_HOTTELIERSUISSE_CH`, `CERTIFICATE_BIOSPHAEREN_GASTGEBER`, `CERTIFICATE_CAUSE_WE_CARE_CH`, `CERTIFICATE_DEHOGA_UMWELTCHECK_GOLD`, `CERTIFICATE_DEHOGA_UMWELTCHECK_SILBER`, `CERTIFICATE_DLG_LANDURLAUB`, `CERTIFICATE_DLG_URLAUB_AUF_DEM_WINZERHOF`, `CERTIFICATE_ECARF_ALLERGIKERFREUNDLICH`, `CERTIFICATE_ECHTE_GASTLICHKEIT_SCHWARZWALD`, `CERTIFICATE_ECHT_NACHHALTIG`, `CERTIFICATE_ECOCAMPING`, `CERTIFICATE_EMPFOHLENES_WEINHOTEL_BADEN_WUERTTEMBERG`, `CERTIFICATE_FAMILIEN_FERIEN`, `CERTIFICATE_FAMILIEN_RESTAURANTS`, `CERTIFICATE_FIVE_STAR_CH`, `CERTIFICATE_FIVE_STAR_GASTROSUISSE_CH`, `CERTIFICATE_FIVE_STAR_HOTELLERIESUISSE_CH`, `CERTIFICATE_FIVE_STAR_SERVICED_APARTMENTS_CH`, `CERTIFICATE_FIVE_STAR_SUPERIOR_CH`, `CERTIFICATE_FIVE_STAR_SUPERIOR_HOTTELLERIESUISSE_CH`, `CERTIFICATE_FOUR_STAR_CH`, `CERTIFICATE_FOUR_STAR_GASTROSUISSE_CH`, `CERTIFICATE_FOUR_STAR_HOTELLERIESUISSE_CH`, `CERTIFICATE_FOUR_STAR_SERVICED_APARTMENTS_CH`, `CERTIFICATE_FOUR_STAR_SUPERIOR_CH`, `CERTIFICATE_FOUR_STAR_SUPERIOR_HOTTELLERIESUISSE_CH`, `CERTIFICATE_GLIDE_RESTAAURANTS_CH`, `CERTIFICATE_GREENSIGN_LEVEL_3`, `CERTIFICATE_GREENSIGN_LEVEL_4`, `CERTIFICATE_IBEX_FAIRSTAY_CH`, `CERTIFICATE_LAND_URLAUB`, `CERTIFICATE_MICHELIN_STERN`, `CERTIFICATE_MOEHNETALRADWEG`, `CERTIFICATE_MOTORBIKE_FRIENDLY`, `CERTIFICATE_NACHHALTIGE_FERIENIMMOBILIE`, `CERTIFICATE_NATURPARK_WIRTE`, `CERTIFICATE_OHNE_GLUTEN_CH`, `CERTIFICATE_ONE_STAR_CH`, `CERTIFICATE_ONE_STAR_GASTROSUISSE_CH`, `CERTIFICATE_ONE_STAR_HOTELLERIESUISSE_CH`, `CERTIFICATE_ONE_STAR_SERVICED_APARTMENTS_CH`, `CERTIFICATE_ONE_STAR_SUPERIOR_CH`, `CERTIFICATE_ONE_STAR_SUPERIOR_HOTELLERIESUISSE_CH`, `CERTIFICATE_PARTNER_NATIONALPARK_SCHWARZWALD`, `CERTIFICATE_QUALITAETSBETRIEB_ROTHAARSTEIG`, `CERTIFICATE_SAUERLAENDER_WANDERGASTHOEFE`, `CERTIFICATE_SAUERLAND_HOEHENFLUG`, `CERTIFICATE_SCHMALLENBERGER_KINDERLAND`, `CERTIFICATE_SCHMECK_DEN_SUEDEN`, `CERTIFICATE_SCHNEESPORTHOTEL_HOTELLERIESUISSE_CH`, `CERTIFICATE_SCHWARZWALD_BALANCE`, `CERTIFICATE_SCHWARZWALD_PLUS`, `CERTIFICATE_SERVICE_QUALITAET_DEUTSCHLAND`, `CERTIFICATE_STERNE_IM_SAUERLAND`, `CERTIFICATE_STV_FIVE_STARS_CH`, `CERTIFICATE_STV_FIVE_STARS_SUP_CH`, `CERTIFICATE_STV_FOUR_STARS_CH`, `CERTIFICATE_STV_FOUR_STARS_SUP_CH`, `CERTIFICATE_STV_ONE_STAR_CH`, `CERTIFICATE_STV_ONE_STAR_SUP_CH`, `CERTIFICATE_STV_THREE_STARS_CH`, `CERTIFICATE_STV_THREE_STARS_SUP_CH`, `CERTIFICATE_STV_TWO_STARS_CH`, `CERTIFICATE_STV_TWO_STARS_SUP_CH`, `CERTIFICATE_SWISS_HISTORIC_HOTELS_CH`, `CERTIFICATE_SWISS_LODGE_HOTTELIERSUISSE_CH`, `CERTIFICATE_SWISSTAINABLE_LEVEL_ONE_CH`, `CERTIFICATE_SWISSTAINABLE_LEVEL_TWO_CH`, `CERTIFICATE_SWISSTAINSABLE_LEVEL_THREE_CH`, `CERTIFICATE_THREE_STAR_CH`, `CERTIFICATE_THREE_STAR_GASTROSUISSE_CH`, `CERTIFICATE_THREE_STAR_HOTELLERIESUISSE_CH`, `CERTIFICATE_THREE_STAR_SERVICED_APARTMENTS_CH`, `CERTIFICATE_THREE_STAR_SUPERIOR_CH`, `CERTIFICATE_THREE_STAR_SUPERIOR_HOTTELLERIESUISSE_CH`, `CERTIFICATE_TRAUFGAENGE_GASTGEBER`, `CERTIFICATE_TWO_STAR_CH`, `CERTIFICATE_TWO_STAR_GASTROSUISSE_CH`, `CERTIFICATE_TWO_STAR_HOTELLERIESUISSE_CH`, `CERTIFICATE_TWO_STAR_SERVICED_APARTMENTS_CH`, `CERTIFICATE_TWO_STAR_SUPERIOR_CH`, `CERTIFICATE_TWO_STAR_SUPERIOR_HOTTELLERIESUISSE_CH`, `CERTIFICATE_URLAUB_AUF_DEM_BAUERNHOF`, `CERTIFICATE_URLAUB_AUF_DEM_BAUERNHOF_GER`, `CERTIFICATE_WANDERBARES_DEUTSCHLAND`, `CERTIFICATE_WANDERBARES_DEUTSCHLAND_GASTRONOMIE`, `CERTIFICATE_WANDER_HOTEL_HOTTELIERSUISSE_CH`, `CERTIFICATE_WELLNESS_AND_SPA_HOTTELIERSUISSE_CH`, `CERTIFICATE_WELLNESS_HOTEL_HOTTELIERSUISSE_CH`, `CERTIFICATE_WELLNESS_STARS_DEUTSCHLAND`, `CERTIFICATE_WIN_CHARTA_DES_LANDES_BADEN_WUERTTEMBERG`, `CERTIFICATE_WINTERSPORTARENA_SAUERLAND`, `DREIWELTEN_CARD`, `ECHT_BODENSEE_CARD`, `GUESTCARD`, `HOCHSCHWARZWALD_CARD`, `SAUERLAND_CARD`, `SAUERLAND_SOMMER_CARD`, `SCHMALLENBERGER_SAUERLAND_CARD`, `WILLINGEN_MEINE_CARD`, `MARKENPARTNER`, `CERTIFICATE_URLAUBS_WINZERHOF`, `CERTIFICATE_URLAUBS_REITERHOF`, `CERTIFICATE_SCHWARZWALD_`, `BALANCE`, `CERTIFICATE_VIABONO`, `CERTIFICATE_MEDICAL_WELLNESS_THREE_STARS`, `CERTIFICATE_MEDICAL_WELLNESS_FOUR_STARS`, `CERTIFICATE_MEDICAL_WELLNESS_FIVE_STARS`, `CERTIFICATE_VIA_MICHELIN_TWO_STARS`, `CERTIFICATE_VIA_MICHELIN_THREE_STARS`, `CERTIFICATE_BRONZE_DEHOGA`, `CERTIFICATE_BIKE_AREA_SAUERLAND`, `CERTIFICATE_SAUERLAND_WALDROUTE`, `CERTIFICATE_KAISERSTUEHLER_WINZERHOF`, `CERTIFICATE_WEINHOTELS_KAISERSTUHL`, `CERTIFICATE_KOSTENLOS_STORNIERBAR_GARANTIE`, `CERTIFICATE_WIR_FUER_SIE`, `CERTIFICATE_PARTNER_BIOSPHAERENGEBIET_SCHWAEBISCHE_ALB`, `CERTIFICATE_REISEN_FUER_ALLE`, `CERTIFICATE_DLG_`, `LANDURLAUB`, `CERTIFICATE_BIOSFERA_PARTNERBETRIEB_CH`, `THEMENPARTNER_KULTUR`, `THEMENPARTNER_RAD`, `THEMENPARTNER_WANDERN`, `THEMENPARTNER_FAMILIE`, `THEMENPARTNER_WELLNESS`, `TOP_GASTGEBER_BOFE`, `LUNCH`, `DINNER`; example: `"POOL"`)
- `maxAmount` (integer (int32)) — Max Amount (example: `1`)
- `privateUsage` (boolean) — Facility is in private use (example: `true`)
- `additionalFeesApply` (boolean) — Additional fees apply for the use of this facility (example: `true`)
- `room` (Room) — Room
- `roomId` (string) — A unique identifier for the room (example: `"123"`)
- `roomType` (string) — Room type (one of: `BED_ROOM`, `LIVING_ROOM`, `BATH_ROOM`, `KITCHEN`; example: `"BED_ROOM"`)
- `availableTime` (FacilityAvailabilityData)
- `availableFrom` (AvailableTime) — Time until facility would be available
- `pointInMonth` (string) — Point in the month (one of: `BEGINNING`, `MIDDLE`, `END`; example: `"MIDDLE"`)
- `month` (string) — Month (one of: `JANUARY`, `FEBRUARY`, `MARCH`, `APRIL`, `MAY`, `JUNE`, `JULY`, `AUGUST`, `SEPTEMBER`, `OCTOBER`, `NOVEMBER`, `DECEMBER`; example: `"JANUARY"`)
- `availableTo` (AvailableTime) — Time until facility would be available
- `pointInMonth` (string) — Point in the month (one of: `BEGINNING`, `MIDDLE`, `END`; example: `"MIDDLE"`)
- `month` (string) — Month (one of: `JANUARY`, `FEBRUARY`, `MARCH`, `APRIL`, `MAY`, `JUNE`, `JULY`, `AUGUST`, `SEPTEMBER`, `OCTOBER`, `NOVEMBER`, `DECEMBER`; example: `"JANUARY"`)
- `location` (string) — Location of facility (one of: `UNDEFINED`, `NEAR_BY`, `IN_APARTMENT`; example: `"NEAR_BY"`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"type": "POOL",
"maxAmount": 1,
"privateUsage": true,
"additionalFeesApply": true,
"room": {
"roomId": "123",
"roomType": "BED_ROOM"
},
"availableTime": {
"availableFrom": {
"pointInMonth": "MIDDLE",
"month": "JANUARY"
},
"availableTo": {
"pointInMonth": "MIDDLE",
"month": "JANUARY"
}
},
"location": "NEAR_BY"
}
```
---
# ApartmentInformation
Source: https://developer.holidu.com/reference/schemas/apartmentinformation
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `ApartmentInformation` in https://developer.holidu.com/openapi/connectivity-api.json
Fields of `ApartmentInformation`:
- `providerApartmentId` (string)
- `holiduApartmentId` (string)
- `active` (boolean)
- `lastUpdate` (string (date-time))
---
# ApartmentInformationPage
Source: https://developer.holidu.com/reference/schemas/apartmentinformationpage
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `ApartmentInformationPage` in https://developer.holidu.com/openapi/connectivity-api.json
Fields of `ApartmentInformationPage`:
- `totalApartments` (integer (int64))
- `page` (integer (int32))
- `size` (integer (int32))
- `apartments` (array of ApartmentInformation)
- `providerApartmentId` (string)
- `holiduApartmentId` (string)
- `active` (boolean)
- `lastUpdate` (string (date-time))
---
# ApartmentPaymentConfiguration
Source: https://developer.holidu.com/reference/schemas/apartmentpaymentconfiguration
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `ApartmentPaymentConfiguration` in https://developer.holidu.com/openapi/connectivity-api.json
Payment configuration (payment methods and rates) applicable on booking
Fields of `ApartmentPaymentConfiguration`:
- `paymentMethods` (array of string, required)
- `paymentRates` (PaymentRates, required) — Payment schedule for the booking
- `ratePaidOnBookingInPercentage` (number) — Rate paid on booking in percentage (min 0; max 100; example: `30`)
- `ratesPerDate` (array of PaymentRatePerDate)
- `daysBeforeArrival` (integer (int32), required) — Limit of days before arrival until when the rate should be paid, for example: Until 10 days before arrival 50% should be paid (example: `10`)
- `rateAmountInPercentage` (number, required) — Value in percentage of booking that should be paid (not accumulative) (min 0; max 100; example: `70`)
- `rateId` (string (string)) — Rate identifier (pattern `DEFAULT|REFUNDABLE|NON_REFUNDABLE`; example: `"NON_REFUNDABLE"`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"paymentMethods": [
"BANK_TRANSFER"
],
"paymentRates": {
"ratePaidOnBookingInPercentage": 30,
"ratesPerDate": [
{
"daysBeforeArrival": 10,
"rateAmountInPercentage": 70
}
]
},
"rateId": "NON_REFUNDABLE"
}
```
---
# ApartmentTermsAndConditions
Source: https://developer.holidu.com/reference/schemas/apartmenttermsandconditions
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `ApartmentTermsAndConditions` in https://developer.holidu.com/openapi/connectivity-api.json
Terms and conditions which apply on booking for the given countries
Fields of `ApartmentTermsAndConditions`:
- `countries` (array of string) — List of country codes represented in standard ISO 3166-1 ALPHA-2 format. If empty then applies to none.
- `url` (string, required) — Url to terms and conditions (example: `"https://www.abc.org/xyz"`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"url": "https://www.abc.org/xyz"
}
```
---
# ApartmentValidation
Source: https://developer.holidu.com/reference/schemas/apartmentvalidation
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `ApartmentValidation` in https://developer.holidu.com/openapi/connectivity-api.json
Fields of `ApartmentValidation`:
- `holiduApartmentId` (integer (int64)) — Holidu Apartment Id
- `providerApartmentId` (string) — Provider Apartment Id
- `lastValidatedAt` (string (date-time)) — Last time validation ran for apartment
- `valid` (boolean) — Is apartment valid
- `validationErrorMessages` (array of ValidationErrorMessage) — Validation Error Messages
- `errorCode` (string) — Error code for which validation failed
- `message` (string) — Message for which validation failed
---
# AvailableTime
Source: https://developer.holidu.com/reference/schemas/availabletime
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `AvailableTime` in https://developer.holidu.com/openapi/connectivity-api.json
Time until facility would be available
Fields of `AvailableTime`:
- `pointInMonth` (string) — Point in the month (one of: `BEGINNING`, `MIDDLE`, `END`; example: `"MIDDLE"`)
- `month` (string) — Month (one of: `JANUARY`, `FEBRUARY`, `MARCH`, `APRIL`, `MAY`, `JUNE`, `JULY`, `AUGUST`, `SEPTEMBER`, `OCTOBER`, `NOVEMBER`, `DECEMBER`; example: `"JANUARY"`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"pointInMonth": "MIDDLE",
"month": "JANUARY"
}
```
---
# BasicApartmentDto
Source: https://developer.holidu.com/reference/schemas/basicapartmentdto
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `BasicApartmentDto` in https://developer.holidu.com/openapi/connectivity-api.json
Fields of `BasicApartmentDto`:
- `providerApartmentGroupId` (string) — ID of the house where apartment is located. If several apartments are located in one house, they'll share the same providerApartmentGroupId (example: `"house-123"`)
- `lat` (number, required) — Latitude (example: `50.9293009`)
- `lng` (number, required) — Longitude (example: `5.9779776`)
- `name` (string) — Name of the apartment (example: `"Villa Munich Center"`)
- `apartmentAddress` (ApartmentAddress) — Address of the rental property
- `street` (string) — Street (min length 0; max length 128; example: `"Karlstrasse 66"`)
- `zipCode` (string) — ZIP Code (max 20 chars) (min length 0; max length 20; example: `"76133"`)
- `city` (string) — City (min length 0; max length 128; example: `"Munich"`)
- `countryCode` (string) — Country code represented in standard ISO 3166-1 ALPHA-2 format (min length 2; max length 2; example: `"DE"`)
- `contactDetails` (ContactDetails) — Contact details
- `contactName` (string) — Contact person for this apartment (example: `"John Doe"`)
- `contactPhone` (string) — Phone number of contact person (example: `"+123(4)56789"`)
- `contactEmail` (string) — Email of contact person (example: `"john@doe.com"`)
- `guestCapacityRules` (GuestCapacityRules, required) — Guest capacity rules applicable to apartment
- `standardCapacity` (integer (int32), required) — The standard capacity of guests allowed. This includes a minimum of 1 adult and excludes babies. (min 1; example: `1`)
- `adultsOnly` (boolean) — Does apartment permit only adults (example: `false`)
- `additionalChildren` (integer (int32)) — Number of children allowed on top of standardCapacity. (min 0; example: `0`)
- `maxBabies` (integer (int32)) — Maximum number of babies allowed. (min 0; example: `2`)
- `numberOfBedrooms` (integer (int32)) (min 1; max 30; example: `2`)
- `numberOfLivingrooms` (integer (int32)) (min 1; max 30; example: `1`)
- `numberOfBathrooms` (integer (int32)) (min 1; max 30; example: `2`)
- `sizeInSqm` (number) — Size of apartment in square meters (example: `100`)
- `apartmentType` (string, required) — Type of the apartment (one of: `ALLOTMENT_GARDEN`, `APARTMENT`, `APARTMENT_HOTEL`, `BARN`, `BEACH_HUT`, `BED_AND_BREAKFAST`, `BOAT`, `BUNGALOW`, `CAMPER`, `CAMPING`, `CARAVAN`, `CASTLE`, `CAVE`, `CHACARA`, `CHALET`, `COTTAGE`, `COUNTRY_HOUSE`, `FARM`, `FARMHOUSE`, `FINCA`, `FISHING_HOUSE`, `GITE`, `GLAMPING`, `GUEST_HOUSE`, `GUEST_ROOM`, `HOLIDAY_VILLAGE`, `HOMESTAY`, `HOSTEL`, `HOTEL`, `HOUSE_BOAT`, `HUT`, `LIGHTHOUSE`, `LODGE`, `LOG_CABIN`, `LUXURY_TENT`, `MANOR`, `MILL`, `MOBILE_HOME`, `MOUNTAIN_HUT`, `PENSION`, `PENTHOUSE`, `RESIDENCE`, `RESORT`, `RIAD`, `ROOM`, `ROOM_BREAKFAST`, `STUDIO`, `TENT`, `TINY_HOME`, `TIPI`, `TOWER`, `TREE_HOUSE`, `TRULLO`, `VACATION_APARTMENT`, `VACATION_HOME`, `VILLA`, `YACHT`, `YURT`; example: `"VILLA"`)
- `checkInCheckOutTimes` (CheckInCheckOutTimes) — Check-ins and check-outs details
- `checkIn` (array of CheckInDuration, required) — List of possible check in times
- `checkInFrom` (string (time), required) — Check in from (24h format) (example: `"12:00"`)
- `checkInTo` (string (time), required) — Check in to (24h format) (example: `"21:00"`)
- `checkOutUntil` (string, required) — Check out time (24h format) (example: `"14:30"`)
- `floor` (integer (int32)) — The floor on which the property is located, starting with 0 for the ground floor (example: `0`)
- `sizeOfPlot` (number) — Total area includes the whole area of the property accessible to the guest. This includes the garden, terraces or garages (example: `140.5`)
- `buildYear` (integer (int32)) — Build year of the property (example: `2001`)
- `modernizedYear` (integer (int32)) — Year of renovation (example: `2007`)
- `license` (string) — License number of the property (the license number is required for properties in the Balearic area in Spain) (example: `"1231882"`)
- `regulatoryInformation` (map of string (regulatoryIdentifier) → string) — Registration numbers the property must display, keyed by regulatory identifier: CIN_LICENSE_NUMBER (Codice Identificativo Nazionale, required in Italy) or NRA_LICENSE_NUMBER (Numero de Registro de Alquiler, required in Spain).
- `isTestApartment` (boolean) — Mark as test apartment
- `onRequestDetails` (OnRequestDetails) — Used only for on request apartments
- `bookableOnRequest` (boolean) — is the apartment bookable on request only (not instant bookable)?
- `hostEmailAddress` (string) — the email address of the host when guest sends request to the host
- `leadTimeHours` (integer (int32)) — Booking lead time in hours
- `duplicateFrom` (array of DuplicateFrom) — Use this object if other Holidu partners also have this property in their system. Please contact us before using this.
- `provider` (string) — Name of this provider as in our system (please ask us the right name first) (example: `"HRS"`)
- `duplicatedApartmentId` (string) — Id of the duplicate apartment in the other partner system. (example: `"123654"`)
---
# BookingCancellationResponse
Source: https://developer.holidu.com/reference/schemas/bookingcancellationresponse
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `BookingCancellationResponse` in https://developer.holidu.com/openapi/connectivity-api.json
Fields of `BookingCancellationResponse`:
- `cancellationStatus` (string) — Status of the cancellation request (one of: `ALREADY_CANCELLED`, `CANCELLATION_SUCCESSFUL`, `BOOKING_DELETED`; example: `"CANCELLATION_SUCCESSFUL"`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"cancellationStatus": "CANCELLATION_SUCCESSFUL"
}
```
---
# BookingDetails
Source: https://developer.holidu.com/reference/schemas/bookingdetails
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `BookingDetails` in https://developer.holidu.com/openapi/connectivity-api.json
Fields of `BookingDetails`:
- `providerApartmentId` (string)
- `arrival` (string (date))
- `departure` (string (date))
- `guests` (array of Guest)
- `age` (integer (int32)) — Age of the guest, can be null if it is not required by capacity rules or provider config
- `customer` (CustomerDetails) — Model of the Customer.
- `firstName` (string)
- `lastName` (string)
- `email` (string)
- `gender` (string) (one of: `MALE`, `FEMALE`)
- `zip` (string)
- `city` (string)
- `street` (string)
- `country` (string) — Country code represented in standard ISO 3166-1 ALPHA-2 format (example: `"DE"`)
- `phone` (string)
- `language` (string)
- `specialCustomerRequest` (string)
- `guestReceipt` (Receipt)
- `costs` (array of BookingExtraCost)
- `id` (string)
- `name` (string)
- `basisOfCalculation` (string)
- `paymentTime` (string)
- `type` (string)
- `pricePerUnit` (PriceDto)
- `amount` (number)
- `currency` (string)
- `unitsSelected` (integer (int32))
- `totalPrice` (PriceDto)
- `amount` (number)
- `currency` (string)
- `discount` (BookingDiscount)
- `discountId` (integer (int64))
- `providerDiscountId` (string)
- `name` (string)
- `discountType` (string) (one of: `EARLY_BIRD`, `LAST_MINUTE`, `LONG_STAY`, `DEVICE_SPECIFIC`, `NEW_LISTING`, `LOYALTY`, `OFFER`)
- `percentage` (number)
- `conditions` (DiscountConditions)
- `daysBeforeCheckIn` (integer (int32)) — Number of days before checkin the booking has to be made (example: `60`)
- `minStay` (integer (int32)) — Minimum Stay (days) if required to get the discount (example: `5`)
- `bookingSeason` (array of SeasonApplicable) — Booking date must be in seasons for the discount to apply
- `onlyApplicableFrom` (string (date)) — Only applicable from date (example: `"2020-08-01"`)
- `onlyApplicableUntil` (string (date)) — Only applicable until date (example: `"2021-04-30"`)
- `travelSeason` (array of SeasonApplicable) — Stay must be within seasons for the discount to apply
- `onlyApplicableFrom` (string (date)) — Only applicable from date (example: `"2020-08-01"`)
- `onlyApplicableUntil` (string (date)) — Only applicable until date (example: `"2021-04-30"`)
- `deviceType` (string) — If the discount is applicable only for specific device. (one of: `MOBILE`, `DESKTOP`)
- `userType` (string) — If discount is applicable based on user type. (one of: `USER_AUTHENTICATED`)
- `amount` (PriceDto)
- `amount` (number)
- `currency` (string)
- `bareRentalPrice` (PriceDto)
- `amount` (number)
- `currency` (string)
- `paymentProcessing` (Payment)
- `paymentWithBooking` (PaymentWithBooking)
- `paymentPlanUuid` (string)
- `paymentHandler` (string)
- `paymentMethod` (string)
- `paymentTotalWithBooking` (PriceDto)
- `amount` (number)
- `currency` (string)
- `paymentRates` (array of PaymentRate)
- `dueDate` (string (date-time))
- `value` (PriceDto)
- `amount` (number)
- `currency` (string)
- `paymentOnsite` (array of PriceDto)
- `amount` (number)
- `currency` (string)
- `cancellationFees` (array of CancellationFee)
- `validUntil` (string (date-time))
- `feeInPercentage` (number)
- `metaData` (MetaData)
- `bookedAt` (string (date-time))
- `createdAt` (string (date-time))
- `updatedAt` (string (date-time))
- `status` (string) (one of: `PENDING`, `CONFIRMED`, `CANCELLED`, `DELETED`)
- `cancelledAt` (string (date-time))
- `holiduBookingId` (integer (int64))
- `commission` (Commission)
- `percentage` (number) — Holidu percentage commission for this booking, if percentage deal
- `commissionToHolidu` (PriceDto)
- `amount` (number)
- `currency` (string)
- `rateId` (string)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"customer": {
"gender": "MALE",
"country": "DE"
},
"guestReceipt": {
"discount": {
"discountType": "EARLY_BIRD",
"conditions": {
"daysBeforeCheckIn": 60,
"minStay": 5,
"bookingSeason": [
{
"onlyApplicableFrom": "2020-08-01",
"onlyApplicableUntil": "2021-04-30"
}
],
"travelSeason": [
{
"onlyApplicableFrom": "2020-08-01",
"onlyApplicableUntil": "2021-04-30"
}
],
"deviceType": "MOBILE",
"userType": "USER_AUTHENTICATED"
}
}
},
"metaData": {
"status": "PENDING"
}
}
```
---
# BookingDiscount
Source: https://developer.holidu.com/reference/schemas/bookingdiscount
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `BookingDiscount` in https://developer.holidu.com/openapi/connectivity-api.json
Fields of `BookingDiscount`:
- `discountId` (integer (int64))
- `providerDiscountId` (string)
- `name` (string)
- `discountType` (string) (one of: `EARLY_BIRD`, `LAST_MINUTE`, `LONG_STAY`, `DEVICE_SPECIFIC`, `NEW_LISTING`, `LOYALTY`, `OFFER`)
- `percentage` (number)
- `conditions` (DiscountConditions)
- `daysBeforeCheckIn` (integer (int32)) — Number of days before checkin the booking has to be made (example: `60`)
- `minStay` (integer (int32)) — Minimum Stay (days) if required to get the discount (example: `5`)
- `bookingSeason` (array of SeasonApplicable) — Booking date must be in seasons for the discount to apply
- `onlyApplicableFrom` (string (date)) — Only applicable from date (example: `"2020-08-01"`)
- `onlyApplicableUntil` (string (date)) — Only applicable until date (example: `"2021-04-30"`)
- `travelSeason` (array of SeasonApplicable) — Stay must be within seasons for the discount to apply
- `onlyApplicableFrom` (string (date)) — Only applicable from date (example: `"2020-08-01"`)
- `onlyApplicableUntil` (string (date)) — Only applicable until date (example: `"2021-04-30"`)
- `deviceType` (string) — If the discount is applicable only for specific device. (one of: `MOBILE`, `DESKTOP`)
- `userType` (string) — If discount is applicable based on user type. (one of: `USER_AUTHENTICATED`)
- `amount` (PriceDto)
- `amount` (number)
- `currency` (string)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"discountType": "EARLY_BIRD",
"conditions": {
"daysBeforeCheckIn": 60,
"minStay": 5,
"bookingSeason": [
{
"onlyApplicableFrom": "2020-08-01",
"onlyApplicableUntil": "2021-04-30"
}
],
"travelSeason": [
{
"onlyApplicableFrom": "2020-08-01",
"onlyApplicableUntil": "2021-04-30"
}
],
"deviceType": "MOBILE",
"userType": "USER_AUTHENTICATED"
}
}
```
---
# BookingExtraCost
Source: https://developer.holidu.com/reference/schemas/bookingextracost
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `BookingExtraCost` in https://developer.holidu.com/openapi/connectivity-api.json
Fields of `BookingExtraCost`:
- `id` (string)
- `name` (string)
- `basisOfCalculation` (string)
- `paymentTime` (string)
- `type` (string)
- `pricePerUnit` (PriceDto)
- `amount` (number)
- `currency` (string)
- `unitsSelected` (integer (int32))
- `totalPrice` (PriceDto)
- `amount` (number)
- `currency` (string)
---
# BookingUpsert
Source: https://developer.holidu.com/reference/schemas/bookingupsert
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `BookingUpsert` in https://developer.holidu.com/openapi/connectivity-api.json
Fields of `BookingUpsert`:
- `providerApartmentId` (string, required) — ID of the apartment in provider database (example: `"123456"`)
- `arrival` (string (date), required) — Date of arrival (example: `"2020-10-20"`)
- `departure` (string (date), required) — Date of departure (example: `"2020-10-30"`)
- `bareRentalPrice` (Price, required) — Price with amount and currency
- `amount` (number, required) — Price value (example: `100`)
- `currency` (string, required) — Price currency (example: `"EUR"`)
- `totalPrice` (Price) — Price with amount and currency
- `amount` (number, required) — Price value (example: `100`)
- `currency` (string, required) — Price currency (example: `"EUR"`)
- `commissionablePrice` (Price) — Price with amount and currency
- `amount` (number, required) — Price value (example: `100`)
- `currency` (string, required) — Price currency (example: `"EUR"`)
- `costs` (array of BookingUpsertExtraCost) — Breakdown of extra costs for the booking.
- `name` (string, required) — Name of the cost (one of: `FINAL_CLEANING`, `EXTRA_CLEANING`, `REFUNDABLE_SECURITY_DEPOSIT`, `TOURIST_OR_CITY_TAX`, `ECO_TAX`, `VAT_OF_RENTAL_PRICE`, `BOOKING_FEE`, `HYGIENE_SURCHARGE`, `PET`, `TRAVEL_INSURANCE`, `TOWEL`, `BEDLINEN`, `TOWEL_BEDLINEN_PACKAGE`, `KITCHEN_TOWELS`, `BEDLINEN_AND_BEDMAKING`, `BABY_BED`, `BABY_CHAIR`, `BABY_COT`, `BABY_BUGGY`, `BABY_HIGH_CHAIR`, `EXTRA_BED`, `HEATING`, `AIRCONDITION`, `FIREWOOD`, `ELECTRICITY`, `WATER`, `GAS`, `SAUNA`, `POOL`, `HOT_TUB`, `WASHING_MACHINE`, `BEACH_SERVICES`, `CLUB_CARD`, `INTERNET`, `PARKING`, `AIRPORT_SHUTTLE`, `BREAKFAST`, `SERVICE_COSTS`; example: `"FINAL_CLEANING"`)
- `paymentTime` (string) — When the cost is paid. Treated as paid with the booking if omitted. (one of: `ON_BOOKING`, `WITH_RATES`, `ONSITE`; example: `"WITH_RATES"`)
- `totalPrice` (Price, required) — Price with amount and currency
- `amount` (number, required) — Price value (example: `100`)
- `currency` (string, required) — Price currency (example: `"EUR"`)
- `numberOfGuests` (integer (int32)) — Number of guests (example: `2`)
- `rateId` (string) — Rate identifier (example: `"DEFAULT"`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"providerApartmentId": "123456",
"arrival": "2020-10-20",
"departure": "2020-10-30",
"bareRentalPrice": {
"amount": 100,
"currency": "EUR"
},
"totalPrice": {
"amount": 100,
"currency": "EUR"
},
"commissionablePrice": {
"amount": 100,
"currency": "EUR"
},
"costs": [
{
"name": "FINAL_CLEANING",
"paymentTime": "WITH_RATES",
"totalPrice": {
"amount": 100,
"currency": "EUR"
}
}
],
"numberOfGuests": 2,
"rateId": "DEFAULT"
}
```
---
# BookingUpsertExtraCost
Source: https://developer.holidu.com/reference/schemas/bookingupsertextracost
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `BookingUpsertExtraCost` in https://developer.holidu.com/openapi/connectivity-api.json
Breakdown of extra costs for the booking.
Fields of `BookingUpsertExtraCost`:
- `name` (string, required) — Name of the cost (one of: `FINAL_CLEANING`, `EXTRA_CLEANING`, `REFUNDABLE_SECURITY_DEPOSIT`, `TOURIST_OR_CITY_TAX`, `ECO_TAX`, `VAT_OF_RENTAL_PRICE`, `BOOKING_FEE`, `HYGIENE_SURCHARGE`, `PET`, `TRAVEL_INSURANCE`, `TOWEL`, `BEDLINEN`, `TOWEL_BEDLINEN_PACKAGE`, `KITCHEN_TOWELS`, `BEDLINEN_AND_BEDMAKING`, `BABY_BED`, `BABY_CHAIR`, `BABY_COT`, `BABY_BUGGY`, `BABY_HIGH_CHAIR`, `EXTRA_BED`, `HEATING`, `AIRCONDITION`, `FIREWOOD`, `ELECTRICITY`, `WATER`, `GAS`, `SAUNA`, `POOL`, `HOT_TUB`, `WASHING_MACHINE`, `BEACH_SERVICES`, `CLUB_CARD`, `INTERNET`, `PARKING`, `AIRPORT_SHUTTLE`, `BREAKFAST`, `SERVICE_COSTS`; example: `"FINAL_CLEANING"`)
- `paymentTime` (string) — When the cost is paid. Treated as paid with the booking if omitted. (one of: `ON_BOOKING`, `WITH_RATES`, `ONSITE`; example: `"WITH_RATES"`)
- `totalPrice` (Price, required) — Price with amount and currency
- `amount` (number, required) — Price value (example: `100`)
- `currency` (string, required) — Price currency (example: `"EUR"`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"name": "FINAL_CLEANING",
"paymentTime": "WITH_RATES",
"totalPrice": {
"amount": 100,
"currency": "EUR"
}
}
```
---
# CancellationFee
Source: https://developer.holidu.com/reference/schemas/cancellationfee
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `CancellationFee` in https://developer.holidu.com/openapi/connectivity-api.json
Fields of `CancellationFee`:
- `validUntil` (string (date-time))
- `feeInPercentage` (number)
---
# CheckInCheckOutTimes
Source: https://developer.holidu.com/reference/schemas/checkincheckouttimes
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `CheckInCheckOutTimes` in https://developer.holidu.com/openapi/connectivity-api.json
Check-ins and check-outs details
Fields of `CheckInCheckOutTimes`:
- `checkIn` (array of CheckInDuration, required) — List of possible check in times
- `checkInFrom` (string (time), required) — Check in from (24h format) (example: `"12:00"`)
- `checkInTo` (string (time), required) — Check in to (24h format) (example: `"21:00"`)
- `checkOutUntil` (string, required) — Check out time (24h format) (example: `"14:30"`)
---
# CheckInDuration
Source: https://developer.holidu.com/reference/schemas/checkinduration
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `CheckInDuration` in https://developer.holidu.com/openapi/connectivity-api.json
List of possible check in times
Fields of `CheckInDuration`:
- `checkInFrom` (string (time), required) — Check in from (24h format) (example: `"12:00"`)
- `checkInTo` (string (time), required) — Check in to (24h format) (example: `"21:00"`)
---
# Commission
Source: https://developer.holidu.com/reference/schemas/commission
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `Commission` in https://developer.holidu.com/openapi/connectivity-api.json
Fields of `Commission`:
- `percentage` (number) — Holidu percentage commission for this booking, if percentage deal
- `commissionToHolidu` (PriceDto)
- `amount` (number)
- `currency` (string)
---
# CompleteApartmentDto
Source: https://developer.holidu.com/reference/schemas/completeapartmentdto
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `CompleteApartmentDto` in https://developer.holidu.com/openapi/connectivity-api.json
Fields of `CompleteApartmentDto`:
- `providerApartmentGroupId` (string) — ID of the house where apartment is located. If several apartments are located in one house, they'll share the same providerApartmentGroupId (example: `"house-123"`)
- `lat` (number, required) — Latitude (example: `50.9293009`)
- `lng` (number, required) — Longitude (example: `5.9779776`)
- `name` (string) — Name of the apartment (example: `"Villa Munich Center"`)
- `apartmentAddress` (ApartmentAddress) — Address of the rental property
- `street` (string) — Street (min length 0; max length 128; example: `"Karlstrasse 66"`)
- `zipCode` (string) — ZIP Code (max 20 chars) (min length 0; max length 20; example: `"76133"`)
- `city` (string) — City (min length 0; max length 128; example: `"Munich"`)
- `countryCode` (string) — Country code represented in standard ISO 3166-1 ALPHA-2 format (min length 2; max length 2; example: `"DE"`)
- `contactDetails` (ContactDetails) — Contact details
- `contactName` (string) — Contact person for this apartment (example: `"John Doe"`)
- `contactPhone` (string) — Phone number of contact person (example: `"+123(4)56789"`)
- `contactEmail` (string) — Email of contact person (example: `"john@doe.com"`)
- `guestCapacityRules` (GuestCapacityRules, required) — Guest capacity rules applicable to apartment
- `standardCapacity` (integer (int32), required) — The standard capacity of guests allowed. This includes a minimum of 1 adult and excludes babies. (min 1; example: `1`)
- `adultsOnly` (boolean) — Does apartment permit only adults (example: `false`)
- `additionalChildren` (integer (int32)) — Number of children allowed on top of standardCapacity. (min 0; example: `0`)
- `maxBabies` (integer (int32)) — Maximum number of babies allowed. (min 0; example: `2`)
- `numberOfBedrooms` (integer (int32)) (min 1; max 30; example: `2`)
- `numberOfLivingrooms` (integer (int32)) (min 1; max 30; example: `1`)
- `numberOfBathrooms` (integer (int32)) (min 1; max 30; example: `2`)
- `sizeInSqm` (number) — Size of apartment in square meters (example: `100`)
- `apartmentType` (string, required) — Type of the apartment (one of: `ALLOTMENT_GARDEN`, `APARTMENT`, `APARTMENT_HOTEL`, `BARN`, `BEACH_HUT`, `BED_AND_BREAKFAST`, `BOAT`, `BUNGALOW`, `CAMPER`, `CAMPING`, `CARAVAN`, `CASTLE`, `CAVE`, `CHACARA`, `CHALET`, `COTTAGE`, `COUNTRY_HOUSE`, `FARM`, `FARMHOUSE`, `FINCA`, `FISHING_HOUSE`, `GITE`, `GLAMPING`, `GUEST_HOUSE`, `GUEST_ROOM`, `HOLIDAY_VILLAGE`, `HOMESTAY`, `HOSTEL`, `HOTEL`, `HOUSE_BOAT`, `HUT`, `LIGHTHOUSE`, `LODGE`, `LOG_CABIN`, `LUXURY_TENT`, `MANOR`, `MILL`, `MOBILE_HOME`, `MOUNTAIN_HUT`, `PENSION`, `PENTHOUSE`, `RESIDENCE`, `RESORT`, `RIAD`, `ROOM`, `ROOM_BREAKFAST`, `STUDIO`, `TENT`, `TINY_HOME`, `TIPI`, `TOWER`, `TREE_HOUSE`, `TRULLO`, `VACATION_APARTMENT`, `VACATION_HOME`, `VILLA`, `YACHT`, `YURT`; example: `"VILLA"`)
- `checkInCheckOutTimes` (CheckInCheckOutTimes) — Check-ins and check-outs details
- `checkIn` (array of CheckInDuration, required) — List of possible check in times
- `checkInFrom` (string (time), required) — Check in from (24h format) (example: `"12:00"`)
- `checkInTo` (string (time), required) — Check in to (24h format) (example: `"21:00"`)
- `checkOutUntil` (string, required) — Check out time (24h format) (example: `"14:30"`)
- `floor` (integer (int32)) — The floor on which the property is located, starting with 0 for the ground floor (example: `0`)
- `sizeOfPlot` (number) — Total area includes the whole area of the property accessible to the guest. This includes the garden, terraces or garages (example: `140.5`)
- `buildYear` (integer (int32)) — Build year of the property (example: `2001`)
- `modernizedYear` (integer (int32)) — Year of renovation (example: `2007`)
- `license` (string) — License number of the property (the license number is required for properties in the Balearic area in Spain) (example: `"1231882"`)
- `regulatoryInformation` (map of string (regulatoryIdentifier) → string) — Registration numbers the property must display, keyed by regulatory identifier: CIN_LICENSE_NUMBER (Codice Identificativo Nazionale, required in Italy) or NRA_LICENSE_NUMBER (Numero de Registro de Alquiler, required in Spain).
- `isTestApartment` (boolean) — Mark as test apartment
- `onRequestDetails` (OnRequestDetails) — Used only for on request apartments
- `bookableOnRequest` (boolean) — is the apartment bookable on request only (not instant bookable)?
- `hostEmailAddress` (string) — the email address of the host when guest sends request to the host
- `leadTimeHours` (integer (int32)) — Booking lead time in hours
- `duplicateFrom` (array of DuplicateFrom) — Use this object if other Holidu partners also have this property in their system. Please contact us before using this.
- `provider` (string) — Name of this provider as in our system (please ask us the right name first) (example: `"HRS"`)
- `duplicatedApartmentId` (string) — Id of the duplicate apartment in the other partner system. (example: `"123654"`)
- `active` (boolean) — Should apartment be activated
- `holiduApartmentId` (integer (int64)) — Holidu Apartment Id
---
# ContactDetails
Source: https://developer.holidu.com/reference/schemas/contactdetails
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `ContactDetails` in https://developer.holidu.com/openapi/connectivity-api.json
Contact details
Fields of `ContactDetails`:
- `contactName` (string) — Contact person for this apartment (example: `"John Doe"`)
- `contactPhone` (string) — Phone number of contact person (example: `"+123(4)56789"`)
- `contactEmail` (string) — Email of contact person (example: `"john@doe.com"`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"contactName": "John Doe",
"contactPhone": "+123(4)56789",
"contactEmail": "john@doe.com"
}
```
---
# CustomerDetails
Source: https://developer.holidu.com/reference/schemas/customerdetails
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `CustomerDetails` in https://developer.holidu.com/openapi/connectivity-api.json
Model of the Customer.
Fields of `CustomerDetails`:
- `firstName` (string)
- `lastName` (string)
- `email` (string)
- `gender` (string) (one of: `MALE`, `FEMALE`)
- `zip` (string)
- `city` (string)
- `street` (string)
- `country` (string) — Country code represented in standard ISO 3166-1 ALPHA-2 format (example: `"DE"`)
- `phone` (string)
- `language` (string)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"gender": "MALE",
"country": "DE"
}
```
---
# CustomerReviewDto
Source: https://developer.holidu.com/reference/schemas/customerreviewdto
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `CustomerReviewDto` in https://developer.holidu.com/openapi/connectivity-api.json
Fields of `CustomerReviewDto`:
- `customerName` (string) — Name of customer. (min length 0; max length 50; example: `"John"`)
- `title` (string) — Summary of the comment (example: `"Beautiful stay"`)
- `country` (string) — Country code represented in standard ISO 3166-1 ALPHA-2 format (min length 2; max length 2; example: `"DE"`)
- `travelDate` (string (date)) — Date of arrival of the customer to the accommodation (example: `"2017-07-31"`)
- `reviewDateTime` (string) — Date of review (example: `"2017-08-12 22:17:31"`)
- `globalRating` (integer (int32), required) — Overall rating of the entire stay (min 0; max 100; example: `90`)
- `location` (integer (int32)) — Rating of the location of the accommodation (min 0; max 100; example: `90`)
- `localService` (integer (int32)) — Rating of the local services (min 0; max 100; example: `95`)
- `furnishings` (integer (int32)) — Rating of the furnishing of the accommodation (min 0; max 100; example: `85`)
- `cleanliness` (integer (int32)) — Rating of the cleanliness of the accommodation (min 0; max 100; example: `70`)
- `valueForMoney` (integer (int32)) — Rating of the value for money spent for the accommodation (min 0; max 100; example: `100`)
- `beach` (integer (int32)) — Rating of the beaches around the accommodation (min 0; max 100; example: `85`)
- `accommodation` (integer (int32)) — Rating of the accommodation. (min 0; max 100; example: `80`)
- `host` (integer (int32)) — Rating of the host (min 0; max 100; example: `100`)
- `language` (string) — Language used for review (min length 2; max length 2; example: `"en"`)
- `text` (string) — Review text (example: `"Great stay, very well located apartment."`)
- `positiveText` (string) — Positive points (example: `"Wonderful accommodation with great services"`)
- `negativeText` (string) — Negative points (example: `"Location far from city center"`)
- `hostResponse` (HostResponseDto) — Host's response to this review (text, language, timestamp). Optional. Only set when the host has replied to the guest review.
- `responseText` (string) — Text of the host's response to the guest review. (example: `"Thank you for your stay!"`)
- `responseLanguage` (string) — Language of the response, ISO 639-1 (2 chars). If unknown, providers may send the most probable one based on the review language. (min length 2; max length 2; example: `"en"`)
- `responseDateTime` (string) — Date and time the host posted (or last edited) the response. If unknown, providers may approximate from the record's last update timestamp. (example: `"2017-08-15 09:00:00"`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"customerName": "John",
"title": "Beautiful stay",
"country": "DE",
"travelDate": "2017-07-31",
"reviewDateTime": "2017-08-12 22:17:31",
"globalRating": 90,
"location": 90,
"localService": 95,
"furnishings": 85,
"cleanliness": 70,
"valueForMoney": 100,
"beach": 85,
"accommodation": 80,
"host": 100,
"language": "en",
"text": "Great stay, very well located apartment.",
"positiveText": "Wonderful accommodation with great services",
"negativeText": "Location far from city center",
"hostResponse": {
"responseText": "Thank you for your stay!",
"responseLanguage": "en",
"responseDateTime": "2017-08-15 09:00:00"
}
}
```
---
# Daily Rate
Source: https://developer.holidu.com/reference/schemas/daily-rate
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `DailyRate` in https://developer.holidu.com/openapi/connectivity-api.json
List of daily rates
Fields of `DailyRate`:
- `date` (string (date), required) — Date (example: `"2023-05-01"`)
- `price` (number, required) — Daily price (example: `95`)
- `priceForExtraPerson` (number) — Additional cost per extra person (example: `20`)
- `checkinAllowed` (boolean, required) — Check in is possible on this day (example: `true`)
- `checkoutAllowed` (boolean, required) — Check out is possible on this day (example: `false`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"date": "2023-05-01",
"price": 95,
"priceForExtraPerson": 20,
"checkinAllowed": true,
"checkoutAllowed": false
}
```
---
# DiscountConditions
Source: https://developer.holidu.com/reference/schemas/discountconditions
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `DiscountConditions` in https://developer.holidu.com/openapi/connectivity-api.json
Fields of `DiscountConditions`:
- `daysBeforeCheckIn` (integer (int32)) — Number of days before checkin the booking has to be made (example: `60`)
- `minStay` (integer (int32)) — Minimum Stay (days) if required to get the discount (example: `5`)
- `bookingSeason` (array of SeasonApplicable) — Booking date must be in seasons for the discount to apply
- `onlyApplicableFrom` (string (date)) — Only applicable from date (example: `"2020-08-01"`)
- `onlyApplicableUntil` (string (date)) — Only applicable until date (example: `"2021-04-30"`)
- `travelSeason` (array of SeasonApplicable) — Stay must be within seasons for the discount to apply
- `onlyApplicableFrom` (string (date)) — Only applicable from date (example: `"2020-08-01"`)
- `onlyApplicableUntil` (string (date)) — Only applicable until date (example: `"2021-04-30"`)
- `deviceType` (string) — If the discount is applicable only for specific device. (one of: `MOBILE`, `DESKTOP`)
- `userType` (string) — If discount is applicable based on user type. (one of: `USER_AUTHENTICATED`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"daysBeforeCheckIn": 60,
"minStay": 5,
"bookingSeason": [
{
"onlyApplicableFrom": "2020-08-01",
"onlyApplicableUntil": "2021-04-30"
}
],
"travelSeason": [
{
"onlyApplicableFrom": "2020-08-01",
"onlyApplicableUntil": "2021-04-30"
}
],
"deviceType": "MOBILE",
"userType": "USER_AUTHENTICATED"
}
```
---
# DiscountDto
Source: https://developer.holidu.com/reference/schemas/discountdto
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `DiscountDto` in https://developer.holidu.com/openapi/connectivity-api.json
Fields of `DiscountDto`:
- `id` (integer (int64)) — Discount id in Holidu system
- `providerDiscountId` (string) — Provider's own external discount ID for reconciliation
- `status` (string, required) — Discount Status (one of: `ACTIVE`, `INACTIVE`, `DELETED`; example: `"ACTIVE"`)
- `name` (string) — Name of the discount (example: `"Pre Season Discount"`)
- `discountType` (string, required) — Type of discount (one of: `EARLY_BIRD`, `LAST_MINUTE`, `LONG_STAY`, `DEVICE_SPECIFIC`, `NEW_LISTING`, `LOYALTY`, `OFFER`; example: `"EARLY_BIRD"`)
- `discountPercent` (number, required) — Percentage of discount (min 0; max 100; example: `12`)
- `conditions` (DiscountConditions)
- `daysBeforeCheckIn` (integer (int32)) — Number of days before checkin the booking has to be made (example: `60`)
- `minStay` (integer (int32)) — Minimum Stay (days) if required to get the discount (example: `5`)
- `bookingSeason` (array of SeasonApplicable) — Booking date must be in seasons for the discount to apply
- `onlyApplicableFrom` (string (date)) — Only applicable from date (example: `"2020-08-01"`)
- `onlyApplicableUntil` (string (date)) — Only applicable until date (example: `"2021-04-30"`)
- `travelSeason` (array of SeasonApplicable) — Stay must be within seasons for the discount to apply
- `onlyApplicableFrom` (string (date)) — Only applicable from date (example: `"2020-08-01"`)
- `onlyApplicableUntil` (string (date)) — Only applicable until date (example: `"2021-04-30"`)
- `deviceType` (string) — If the discount is applicable only for specific device. (one of: `MOBILE`, `DESKTOP`)
- `userType` (string) — If discount is applicable based on user type. (one of: `USER_AUTHENTICATED`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"status": "ACTIVE",
"name": "Pre Season Discount",
"discountType": "EARLY_BIRD",
"discountPercent": 12,
"conditions": {
"daysBeforeCheckIn": 60,
"minStay": 5,
"bookingSeason": [
{
"onlyApplicableFrom": "2020-08-01",
"onlyApplicableUntil": "2021-04-30"
}
],
"travelSeason": [
{
"onlyApplicableFrom": "2020-08-01",
"onlyApplicableUntil": "2021-04-30"
}
],
"deviceType": "MOBILE",
"userType": "USER_AUTHENTICATED"
}
}
```
---
# DuplicateFrom
Source: https://developer.holidu.com/reference/schemas/duplicatefrom
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `DuplicateFrom` in https://developer.holidu.com/openapi/connectivity-api.json
Use this object if other Holidu partners also have this property in their system. Please contact us before using this.
Fields of `DuplicateFrom`:
- `provider` (string) — Name of this provider as in our system (please ask us the right name first) (example: `"HRS"`)
- `duplicatedApartmentId` (string) — Id of the duplicate apartment in the other partner system. (example: `"123654"`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"provider": "HRS",
"duplicatedApartmentId": "123654"
}
```
---
# ExtraCostCondition
Source: https://developer.holidu.com/reference/schemas/extracostcondition
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `ExtraCostCondition` in https://developer.holidu.com/openapi/connectivity-api.json
Conditions applicable for extra cost
Fields of `ExtraCostCondition`:
- `seasonApplicable` (SeasonApplicable) — Season for which extra cost is applicable
- `onlyApplicableFrom` (string (date)) — Only applicable from date (example: `"2020-08-01"`)
- `onlyApplicableUntil` (string (date)) — Only applicable until date (example: `"2021-04-30"`)
- `numberOfNights` (LengthOfStay) — Extra cost only applicable if lengthOfStay shorter than
- `fromStayLengthInNights` (integer (int32)) — Based on the length of stay, applicable from night (example: `1`)
- `toStayLengthInNights` (integer (int32)) — Based on the length of stay, applicable until night (example: `7`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"seasonApplicable": {
"onlyApplicableFrom": "2020-08-01",
"onlyApplicableUntil": "2021-04-30"
},
"numberOfNights": {
"fromStayLengthInNights": 1,
"toStayLengthInNights": 7
}
}
```
---
# ExtraCostPrice
Source: https://developer.holidu.com/reference/schemas/extracostprice
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `ExtraCostPrice` in https://developer.holidu.com/openapi/connectivity-api.json
Price configuration for extra cost
Fields of `ExtraCostPrice`:
- `type` (string, required) (one of: `PERCENTAGE`, `FIXED`; example: `"PERCENTAGE"`)
- `amount` (number, required) — Price amount dependent on type (example: `90.24`)
- `currency` (string) — Currency (example: `"EUR"`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"type": "PERCENTAGE",
"amount": 90.24,
"currency": "EUR"
}
```
---
# FacilityAvailabilityData
Source: https://developer.holidu.com/reference/schemas/facilityavailabilitydata
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `FacilityAvailabilityData` in https://developer.holidu.com/openapi/connectivity-api.json
Fields of `FacilityAvailabilityData`:
- `availableFrom` (AvailableTime) — Time until facility would be available
- `pointInMonth` (string) — Point in the month (one of: `BEGINNING`, `MIDDLE`, `END`; example: `"MIDDLE"`)
- `month` (string) — Month (one of: `JANUARY`, `FEBRUARY`, `MARCH`, `APRIL`, `MAY`, `JUNE`, `JULY`, `AUGUST`, `SEPTEMBER`, `OCTOBER`, `NOVEMBER`, `DECEMBER`; example: `"JANUARY"`)
- `availableTo` (AvailableTime) — Time until facility would be available
- `pointInMonth` (string) — Point in the month (one of: `BEGINNING`, `MIDDLE`, `END`; example: `"MIDDLE"`)
- `month` (string) — Month (one of: `JANUARY`, `FEBRUARY`, `MARCH`, `APRIL`, `MAY`, `JUNE`, `JULY`, `AUGUST`, `SEPTEMBER`, `OCTOBER`, `NOVEMBER`, `DECEMBER`; example: `"JANUARY"`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"availableFrom": {
"pointInMonth": "MIDDLE",
"month": "JANUARY"
},
"availableTo": {
"pointInMonth": "MIDDLE",
"month": "JANUARY"
}
}
```
---
# Guest
Source: https://developer.holidu.com/reference/schemas/guest
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `Guest` in https://developer.holidu.com/openapi/connectivity-api.json
Fields of `Guest`:
- `age` (integer (int32)) — Age of the guest, can be null if it is not required by capacity rules or provider config
---
# GuestCapacityRules
Source: https://developer.holidu.com/reference/schemas/guestcapacityrules
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `GuestCapacityRules` in https://developer.holidu.com/openapi/connectivity-api.json
Guest capacity rules applicable to apartment
Fields of `GuestCapacityRules`:
- `standardCapacity` (integer (int32), required) — The standard capacity of guests allowed. This includes a minimum of 1 adult and excludes babies. (min 1; example: `1`)
- `adultsOnly` (boolean) — Does apartment permit only adults (example: `false`)
- `additionalChildren` (integer (int32)) — Number of children allowed on top of standardCapacity. (min 0; example: `0`)
- `maxBabies` (integer (int32)) — Maximum number of babies allowed. (min 0; example: `2`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"standardCapacity": 1,
"adultsOnly": false,
"additionalChildren": 0,
"maxBabies": 2
}
```
---
# HoliduErrorResponse
Source: https://developer.holidu.com/reference/schemas/holiduerrorresponse
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `HoliduErrorResponse` in https://developer.holidu.com/openapi/connectivity-api.json
Fields of `HoliduErrorResponse`:
- `error` (string) — Error Text (example: `"Invalid Json: Unexpected character"`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"error": "Invalid Json: Unexpected character"
}
```
---
# HostResponseDto
Source: https://developer.holidu.com/reference/schemas/hostresponsedto
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `HostResponseDto` in https://developer.holidu.com/openapi/connectivity-api.json
Host's response to this review (text, language, timestamp). Optional. Only set when the host has replied to the guest review.
Fields of `HostResponseDto`:
- `responseText` (string) — Text of the host's response to the guest review. (example: `"Thank you for your stay!"`)
- `responseLanguage` (string) — Language of the response, ISO 639-1 (2 chars). If unknown, providers may send the most probable one based on the review language. (min length 2; max length 2; example: `"en"`)
- `responseDateTime` (string) — Date and time the host posted (or last edited) the response. If unknown, providers may approximate from the record's last update timestamp. (example: `"2017-08-15 09:00:00"`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"responseText": "Thank you for your stay!",
"responseLanguage": "en",
"responseDateTime": "2017-08-15 09:00:00"
}
```
---
# LengthOfStay
Source: https://developer.holidu.com/reference/schemas/lengthofstay
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `LengthOfStay` in https://developer.holidu.com/openapi/connectivity-api.json
Extra cost only applicable if lengthOfStay shorter than
Fields of `LengthOfStay`:
- `fromStayLengthInNights` (integer (int32)) — Based on the length of stay, applicable from night (example: `1`)
- `toStayLengthInNights` (integer (int32)) — Based on the length of stay, applicable until night (example: `7`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"fromStayLengthInNights": 1,
"toStayLengthInNights": 7
}
```
---
# LOS
Source: https://developer.holidu.com/reference/schemas/los
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `LosDto` in https://developer.holidu.com/openapi/connectivity-api.json
Fields of `LosDto`:
- `los` (map of string (checkInDate) → array of LosItemDto, required) — Length of Stay. Keyed by check-in date (YYYY-MM-DD). Each value lists the price tiers available for that date, one entry per guest count. (example: `{"2019-05-13":[{"currency":"EUR","guests":2,"price":[100,200]},{"currency":"EUR","guests":3,"price":[150,250]}],"2019-05-14":[{"currency":"EUR","guests":2,"price":[300]}]}`)
- `currency` (string, required) (example: `"EUR"`)
- `guests` (integer (int32), required) — Number of guests these prices apply to (example: `2`)
- `price` (array of number, required) — Total stay price indexed by length of stay: index N is the price for an (N+1)-night stay from the check-in date, and 0 means that length of stay is not bookable. At most 62 entries. (example: `[100,200,300,400,500,600,700]`)
- `rateId` (string (string)) — Rate identifier. Identifies the rate this LOS belongs to. Defaults to DEFAULT when omitted. (pattern `DEFAULT|REFUNDABLE|NON_REFUNDABLE`; example: `"NON_REFUNDABLE"`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"los": {
"2019-05-13": [
{
"currency": "EUR",
"guests": 2,
"price": [
100,
200
]
},
{
"currency": "EUR",
"guests": 3,
"price": [
150,
250
]
}
],
"2019-05-14": [
{
"currency": "EUR",
"guests": 2,
"price": [
300
]
}
]
},
"rateId": "NON_REFUNDABLE"
}
```
---
# LOS Item
Source: https://developer.holidu.com/reference/schemas/los-item
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `LosItemDto` in https://developer.holidu.com/openapi/connectivity-api.json
Length of Stay. Keyed by check-in date (YYYY-MM-DD). Each value lists the price tiers available for that date, one entry per guest count.
Fields of `LosItemDto`:
- `currency` (string, required) (example: `"EUR"`)
- `guests` (integer (int32), required) — Number of guests these prices apply to (example: `2`)
- `price` (array of number, required) — Total stay price indexed by length of stay: index N is the price for an (N+1)-night stay from the check-in date, and 0 means that length of stay is not bookable. At most 62 entries. (example: `[100,200,300,400,500,600,700]`)
---
# MetaData
Source: https://developer.holidu.com/reference/schemas/metadata
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `MetaData` in https://developer.holidu.com/openapi/connectivity-api.json
Fields of `MetaData`:
- `bookedAt` (string (date-time))
- `createdAt` (string (date-time))
- `updatedAt` (string (date-time))
- `status` (string) (one of: `PENDING`, `CONFIRMED`, `CANCELLED`, `DELETED`)
- `cancelledAt` (string (date-time))
- `holiduBookingId` (integer (int64))
- `commission` (Commission)
- `percentage` (number) — Holidu percentage commission for this booking, if percentage deal
- `commissionToHolidu` (PriceDto)
- `amount` (number)
- `currency` (string)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"status": "PENDING"
}
```
---
# MultiUnitDescriptionDto
Source: https://developer.holidu.com/reference/schemas/multiunitdescriptiondto
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `MultiUnitDescriptionDto` in https://developer.holidu.com/openapi/connectivity-api.json
Localization data for a multi-unit
Fields of `MultiUnitDescriptionDto`:
- `isoLanguage` (string, required) — ISO language code (example: `"en"`)
- `title` (string) — Title of the multi-unit in the specified language (example: `"Beach Resort"`)
- `description` (string) — Description of the multi-unit in the specified language (example: `"A beautiful resort by the beach"`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"isoLanguage": "en",
"title": "Beach Resort",
"description": "A beautiful resort by the beach"
}
```
---
# MultiUnitDto
Source: https://developer.holidu.com/reference/schemas/multiunitdto
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `MultiUnitDto` in https://developer.holidu.com/openapi/connectivity-api.json
Fields of `MultiUnitDto`:
- `parentType` (string) — Type of the parent property (e.g. HOTEL, CAMPING) (one of: `ALLOTMENT_GARDEN`, `APARTMENT`, `BARN`, `BEACH_HUT`, `BED_AND_BREAKFAST`, `BOAT`, `BUNGALOW`, `CAMPER`, `CAMPING`, `CARAVAN`, `CASTLE`, `CAVE`, `CHACARA`, `CHALET`, `COTTAGE`, `COUNTRY_HOUSE`, `FARM`, `FARMHOUSE`, `FINCA`, `FISHING_HOUSE`, `GITE`, `GLAMPING`, `GUEST_HOUSE`, `HOLIDAY_VILLAGE`, `HOMESTAY`, `HOSTEL`, `HOTEL`, `HOUSE_BOAT`, `HUT`, `LIGHTHOUSE`, `LODGE`, `LOG_CABIN`, `LUXURY_TENT`, `MANOR`, `MILL`, `MOBILE_HOME`, `MOUNTAIN_HUT`, `PENSION`, `PENTHOUSE`, `RESIDENCE`, `RESORT`, `RIAD`, `TENT`, `TIPI`, `TOWER`, `TREE_HOUSE`, `TRULLO`, `VILLA`, `YACHT`, `YURT`; example: `"HOTEL"`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"parentType": "HOTEL"
}
```
---
# MultiUnitFacility
Source: https://developer.holidu.com/reference/schemas/multiunitfacility
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `MultiUnitFacility` in https://developer.holidu.com/openapi/connectivity-api.json
Fields of `MultiUnitFacility`:
- `name` (string)
- `type` (string) — Facility type. Here you should map your facilities to ours. The allowed values can be taken from GET /v2/facilities/types (one of: `SMOKING_ALLOWED`, `SMOKING_NOT_ALLOWED`, `SMOKING_AREA`, `PETS_ALLOWED`, `PETS_ALLOWED_ON_REQUEST`, `PETS_ALLOWED_SMALL_PETS`, `PETS_ALLOWED_CAT`, `PETS_ALLOWED_DOG`, `PETS_ALLOWED_DOG_MAX_10_KG`, `PETS_ALLOWED_DOG_MORE_THAN_10_KG`, `PETS_NOT_ALLOWED`, `PETS_ON_AVAILABILITY`, `VIEW`, `VIEW_OCEAN`, `VIEW_LAKE`, `VIEW_CITY`, `VIEW_GARDEN`, `VIEW_LANDMARK`, `VIEW_MOUNTAIN`, `VIEW_RIVER`, `VIEW_SEA`, `VIEW_BEACH`, `VIEW_GOLF_COURSE`, `VIEW_WATER`, `VIEW_INNER_COURTYARD`, `VIEW_POOL`, `WATERFRONT`, `BARRIER_FREE`, `SUITABLE_FOR_DISABLED`, `SUITABLE_FOR_ELDERLY`, `BARRIER_FREE_NOT`, `ENERGY`, `ENERGY_SOLAR`, `ENERGY_WIND`, `WATER_HOT`, `ROOF_FLAT`, `ENTRANCE_PRIVATE`, `ROOF_THATCHED`, `ANIMALS`, `ANIMALS_CAT`, `ANIMALS_DOG`, `ANIMALS_FARM`, `POOL`, `POOL_PRIVATE`, `POOL_CHILDREN`, `POOL_HEATED`, `POOL_INFINITY`, `POOL_TOYS`, `POOL_ROOFTOP`, `POOL_SEASONALLY_OPENED`, `POOL_FENCED`, `WHIRLPOOL`, `WHIRLPOOL_BATHTUB`, `ELEVATOR`, `INTERNET`, `INTERNET_NOT`, `INTERNET_WIFI`, `INTERNET_LAN`, `SAUNA`, `INFRARED_CABIN`, `CHIMNEY`, `STOVE_WOOD`, `FIREPLACE`, `CHILDFRIENDLY`, `RENOVATED`, `ALLERGY_FRIENDLY`, `BEST_PRICE`, `FOR_EVENTS`, `LUXURY`, `QUIET`, `VISITED_BY_HOLIDU`, `WASHER`, `DRYER`, `WASHER_DRYER_COMBO`, `FLAT_IRON`, `FLAT_IRON_AND_BOARD`, `HEATING`, `HEATING_NOT`, `HEATING_OIL`, `HEATING_GAS`, `HEATING_UNDERFLOOR`, `HEATING_WOOD_STOVE`, `HEATING_ELECTRIC`, `AIR_CONDITION`, `VENTILATOR`, `SOLARIUM`, `POOL_INDOOR`, `POOL_INDOOR_CHILDREN`, `WHIRLPOOL_INDOOR`, `TV`, `TV_CHILDREN`, `TV_LCD`, `TV_FLAT_SCREEN`, `TV_GERMAN_CHANNELS`, `TV_FRENCH_CHANNELS`, `TV_ENGLISH_CHANNELS`, `TV_SPANISH_CHANNELS`, `TV_DUTCH_CHANNELS`, `TV_DANISH_CHANNELS`, `TV_ITALIAN_CHANNELS`, `TV_INTERNATIONAL_CHANNELS`, `TV_CABLE`, `TV_SATELLITE`, `TV_DIGITAL`, `TV_PAY_PER_VIEW`, `BEAMER`, `BLURAY_PLAYER`, `DVD_PLAYER`, `CD_PLAYER`, `RADIO`, `MP3_PLAYER`, `IPOD_DOCK`, `SPEAKERS`, `SOUND_SYSTEM`, `COMPUTER`, `TELEPHONE`, `HIGHCHAIR`, `PLAYROOM`, `ROOMS_LOUNGE`, `INTERCOM`, `FIRE_PIT`, `FIRE_EXTINGUISHER`, `FIRE_ALARM`, `CARBONMONOXIDE_DETECTOR`, `ALARM_HOUSE`, `BED_KING`, `BED_QUEEN`, `BED_DOUBLE`, `BED_SINGLE`, `BED_CHILDREN`, `BED_BABY`, `BED_EXTRA`, `BED_SLEEPING_COUCH`, `BED_SLEEPING_COUCH_2`, `BED_SLEEPING_COUCH_1`, `BED_FOLDAWAY`, `BED_BUNK`, `BED_BUNK_1`, `BED_BUNK_2`, `BED_FLOOR_MATTRESS`, `BED_AIR_MATTRESS`, `ROOMS_DININGROOM`, `ROOMS_LIVINGROOM`, `ROOMS_SINGLE`, `ROOMS_DOUBLE`, `ROOMS_FAMILY`, `ROOMS_BATHROOM`, `ROOMS_BEDROOM`, `ROOMS_COMMON`, `SUITED_FOR_GROUPS`, `OUTDOOR_DINING_AREA`, `SAFE`, `BALCONY_TERRACE`, `BALCONY`, `BALCONY_COVERED`, `BALCONY_UNCOVERED`, `TERRACE`, `TERRACE_COVERED`, `TERRACE_UNCOVERED`, `TERRACE_ROOFTOP`, `GARDEN`, `HOUSEOWNED_BEACH`, `GARDEN_FURNITURE`, `HAMMOCK`, `STROLLER`, `DECK_CHAIR`, `BEACH_CHAIR`, `POOL_OUTDOOR`, `POOL_OUTDOOR_CHILDREN`, `WHIRLPOOL_OUTDOOR`, `STEAMBATH`, `FENCED_PROPERTY`, `FENCED_PROPERTY_NOT`, `TOYS`, `TOYS_BOARD_GAME`, `TOYS_BOOKS`, `TOYS_BOOKS_FOR_CHILDREN`, `TOYS_DVDS`, `TOYS_DVDS_FOR_CHILDREN`, `GAME_CONSOLE_PS3`, `GAME_CONSOLE_PS4`, `GAME_CONSOLE_XBOX_ONE`, `GAME_CONSOLE_XBOX_360`, `GAME_CONSOLE_WII`, `GAME_CONSOLE_OTHER`, `PLAYGROUND`, `GRILL`, `GRILL_GAS`, `GRILL_COAL`, `GRILL_ELECTRIC`, `PARKING`, `PARKING_SPOT`, `PARKING_AT_OBJECT`, `PARKING_GARAGE`, `PARKING_CARPORT`, `PARKING_STREET`, `PARKING_SECURE`, `PARKING_DISABLED`, `CONSERVATORY`, `BICYCLE_RACK`, `BICYCLE_CELLAR`, `BICYCLE_RENTALS_ON_SITE`, `LANDING_STAGE`, `SKI_IN_OUT`, `SKI_BUS_AT_PROPERTY`, `PARASOL`, `KITCHEN`, `KITCHEN_NOT`, `KITCHENETTE`, `OVEN`, `COOKTOP`, `MICROWAVE`, `FRIDGE`, `ICE_MAKER`, `FREEZER`, `FRIDGE_FREEZER_COMBINATION`, `DISHWASHER`, `WATER_HEATER`, `COFFEE_TEA_MACHINE`, `COFFEE_MACHINE`, `ESPRESSO_MACHINE`, `COFFEE`, `MIXER`, `TOASTER`, `JUICER`, `MINIBAR`, `KETTLE`, `SPICES`, `DISHES`, `CUTLERY`, `KITCHEN_UTENSILS`, `SHOWER`, `SHOWER_BATHTUB_COMBO`, `SHOWER_BATHTUB`, `SHOWER_OUTSIDE`, `BATHTUB`, `SEPARATE_TOILET`, `EN_SUITE_TOILET`, `HAIRDRYER`, `VACUUM_CLEANER`, `IRONING_BOARD`, `TROUSERPRESS`, `WARDROBE`, `CLOTHES_HANGERS`, `FURNITURE_DESK`, `CURTAINS_BLACKOUT`, `SMOKE_DETECTOR`, `TOWELS`, `TOWELS_BEACH_POOL`, `TOWELS_NOT`, `TOILETRIES`, `BEDLINEN`, `BEDLINEN_NOT`, `DISHCLOTH`, `BATHROBE`, `BREAKFAST`, `HALF_BOARD`, `LUNCHSERVICE_PACKED`, `CHILDCARE`, `BIKE_RENTAL`, `SKI_RENTAL`, `SKI_STORAGE`, `SKI_PASS`, `SCOOTER_RENTAL`, `CAR_RENTAL`, `BOAT_RENTAL`, `BIKE_PROVIDED`, `BOAT_PROVIDED`, `AIRPORT_SHUTTLE`, `SHUTTLE_SERVICE`, `FIRST_AID_KIT`, `DOORMAN`, `RECEPTION_24H`, `ATM`, `DRY_CLEANING`, `IRONING_SERVICE`, `LUGGAGE_STORAGE`, `CURRENCY_EXCHANGE`, `RESTAURANT`, `MINIMARKET`, `HOUSEKEEPING`, `HOUSEKEEPING_DAILY`, `HOUSEKEEPING_WEEKLY`, `BOOK_WITHOUT_CREDIT_CARD`, `CHEQUES_VACANCES`, `GROUPS_NOT_ALLOWED`, `YOUTH_GROUPS_NOT_ALLOWED`, `YOUTH_GROUPS_ALLOWED`, `SUITABLE_YOUNG_PEOPLE`, `SUITABLE_CHILDREN`, `SUITABLE_CHILDREN_NO`, `CHILDREN_NOT_ALLOWED`, `FAMILY_FRIENDLY`, `HOUSEOWNER_LIVES_ONSPOT`, `LONGTERM_STAYS_ALLOWED`, `CHECKIN_HOST`, `CHECKIN_SELF`, `KEY_CARD_ACCESS`, `LOCATION_GROUND_FLOOR`, `LOCATION_UPPER_FLOOR`, `WINTER_SPORTS`, `WATER_SPORTS`, `SKI_VACATION`, `BEACH_VACATION`, `FARM_VACATION`, `NATURE`, `WELLNESS`, `WELLNESS_TREATMENTS`, `WELLNESS_AREA`, `GYM`, `TENNIS_COURT`, `GOLF`, `MINIGOLF`, `FISHING`, `SAILING`, `HIKING`, `HORSEBACK_RIDING`, `WATERPARK`, `SURFING`, `WINDSURFING`, `KITESURFING`, `BIKING`, `DIVING`, `MOUNTAIN_BIKING`, `BOAT_TRIP`, `BILLIARD_TABLE`, `TABLE_TENNIS`, `PUBLIC_TRANSPORTATION`, `CHILDREN_ALLOWED`, `SINK`, `BASKETBALL`, `BIKE`, `BOAT`, `VOLLEY_BALL_COURT`, `GOLF_COURT`, `CROSS_COUNTRY_SKI`, `BY_THE_WATER`, `IN_THE_SKI_RESORT`, `CLOSE_TO_SKI_LIFTS`, `SKI_PASS_DISCOUNTED`, `SKI_PASS_INCLUDED`, `SKI_RENTAL_DISCOUNTED`, `SKI_RENTAL_INCLUDED`, `SKI_SCHOOL_DISCOUNTED`, `SKI_SCHOOL_INCLUDED`, `BIKE_STORAGE`, `LGBTQ_FRIENDLY`, `GREEN_PROPERTY`, `EVENT_FRIENDLY`, `PRIVATE_BEACH`, `BEACH_ACCESS`, `BEACH_FRONT`, `LAKE_FRONT`, `WATER_FRONT`, `OCEAN_FRONT`, `ELECTRIC_VEHICLE_CHARGING_STATION`, `ELECTRIC_BIKE_CHARGING_STATION`, `MOBILITY_PUBLIC_TRANSPORT`, `MOBILITY_BIKES`, `MOBILITY_EBIKES`, `RENEWABLE_ENERGY`, `RECYCLING_GLASS`, `RECYCLING_PAPER`, `RECYCLING_PLASTIC`, `RECYCLING_ORGANIC`, `ENERGY_SAVING_SOLAR_PANELS`, `ENERGY_SAVING_WIND_POWER`, `ENERGY_SAVING_METHANE_DIGESTER`, `ENERGY_SAVING_SOLAR_COLLECTOR`, `ENERGY_SAVING_LIGHTING`, `ENERGY_SAVING_SMART_CONTROLS`, `ENERGY_SOLAR_THERMAL_PANELS`, `ENERGY_HEAT_PUMPS`, `ENERGY_GREEN_ELECTRICITY_PROVIDER`, `ENERGY_BIOMASS`, `ENERGY_GEOTHERMICS`, `ENERGY_INFRARED_HEATING_PANELS`, `ENERGY_MASONRY_HEATER`, `INSULATION_GLASS`, `INSULATION_ROOF`, `INSULATION_WALL`, `INSULATION_FLOOR`, `INSULATION_NATURAL_MATERIALS`, `INSULATION_GREEN_COOL_ROOF`, `WATER_SAVING_SHOWER`, `WATER_SAVING_TOILET`, `WATER_SAVING_TAPS`, `RAINWATER_TREATMENT`, `GREY_WATER_SYSTEM`, `OWN_PRODUCE_JAM`, `OWN_PRODUCE_VEGETABLES`, `OWN_PRODUCE_HERBS`, `OWN_PRODUCE_OLIVE_OIL`, `OWN_PRODUCE_HONEY`, `OWN_PRODUCE_FRUITS`, `OWN_PRODUCE_EGGS`, `OWN_PRODUCE_CHEESE`, `OWN_PRODUCE_BREAD`, `OWN_PRODUCE_NUTS`, `ECO_CLEANING_PRODUCTS`, `SUSTAINABLE_CONSTRUCTION`, `EVENT_MEAL`, `EVENT_BIRTHDAY_CHILD`, `EVENT_BABY_SHOWER`, `EVENT_STAG_PARTY`, `EVENT_WEDDING`, `EVENT_BIRTHDAY_ADULT`, `SHOWER_ROLL_IN`, `SHOWER_GRAB_RAILS`, `TOILET_RAISED`, `WIDE_DOORS`, `STEP_FREE_ACCESS`, `BATHTUB_CHAIR`, `BATHROOM_TURNING_CYCLE_MIN_1_5_M`, `BATHROOM_EMERGENCY_CORD`, `STEP_FREE_INTERIOR`, `SHOWER_CHAIR`, `TOILET_GRAB_RAILS`, `BATHROOM_SINK_LOWERED`, `INTERNET_WIFI_FOR_VIDEO_CALLS`, `DRINKING_WATER_BOTTLED`, `DISH_DETERGENT`, `SHAMPOO`, `PARTIES_NOT_ALLOWED`, `LAUNDRY`, `LAUNDRY_SERVICE`, `WATER_PARK`, `CORONA_RULES_APPLIED`, `SOUTERRAIN`, `BOWLING`, `KEGELBAHN`, `YOGA_SCHOOL`, `UNIT_SIZE`, `PRINTER`, `PIANO`, `BABYSITTING_SERVICES`, `ROOM_SERVICE`, `HOUR_SEC`, `_24HOUR_SECURITY`, `AIR_PURIFIER`, `BABY_MONITOR`, `BED_EXTRA_LONG`, `BIDET`, `BOOT_DRIER`, `BREAD_SERVICE`, `BROADCAST_LIVE_SPORT`, `CANOEING`, `CASHLESS_PAYMENT`, `CLEANING_PRODUCTS`, `CLOTHES_DRYING_RACK`, `COFFEE_GRINDER`, `CONCIERGE`, `COOKING_CLASS`, `EXPRESS_CHECKINOUT`, `ECOTOURISM`, `FLOOR_CARPETING`, `GROCERY_DELIVERY`, `HOT_SPRINGS`, `HYPOALLERGENIC_PILLOW`, `JET_SKIING`, `KAYAKING`, `KIDS_CLUB`, `LIVE_MUSIC`, `MEAL_DELIVERY`, `MOSQUITO_NET`, `MOTORBOATING`, `NEWSPAPER`, `NO_STEP_FREE_ACCESS`, `NORDIC_WALKING`, `RECYCLING`, `SANDBOX`, `SHOPPING`, `SKI_SCHOOL`, `SKIING`, `SNORKELING`, `SUNLOUNGER`, `TOOTHBRUSH`, `TRAMPOLINE`, `TV_STREAMING`, `VISUAL_AID_BRAILLE`, `VISUAL_AID_TACTILE_SIGNS`, `WILDLIFE_VIEWING`, `WINERY`, `WING_FOIL`, `STAND_UP_PADDLING`, `CLIMBING`, `SWIMMING`, `PARAGLIDING`, `RUNNING`, `CANYONING`, `YOGA`, `PARTNER_SUSTAINABILITY_BADGE`, `GASTGEBER_MIT_HERZ`, `ALLGAEU_TOP_HOTELS`, `CERTIFICATE_4FUER3`, `CERTIFICATE_ADAC_CAMPINGPLATZ_AUSZEICHNUNG`, `CERTIFICATE_ALBCARD`, `CERTIFICATE_ALB_CROSSING`, `CERTIFICATE_ALBSTEIG`, `CERTIFICATE_BAG_OBSTHOF`, `CERTIFICATE_BAG_URLAUB_AUF_DEM_BAUERNHOF`, `CERTIFICATE_BARRIEREFREI_ERLEBEN`, `CERTIFICATE_BARRIEREFREIE_UNTERKUNFT_OKGO_CH`, `CERTIFICATE_BERGSTEIGERDOERFER_CH`, `CERTIFICATE_BETT_UND_BIKE`, `CERTIFICATE_BETT_UND_BIKE_ADFC`, `CERTIFICATE_BIKE_HOTEL_HOTTELIERSUISSE_CH`, `CERTIFICATE_BIOSPHAEREN_GASTGEBER`, `CERTIFICATE_CAUSE_WE_CARE_CH`, `CERTIFICATE_DEHOGA_UMWELTCHECK_GOLD`, `CERTIFICATE_DEHOGA_UMWELTCHECK_SILBER`, `CERTIFICATE_DLG_LANDURLAUB`, `CERTIFICATE_DLG_URLAUB_AUF_DEM_WINZERHOF`, `CERTIFICATE_ECARF_ALLERGIKERFREUNDLICH`, `CERTIFICATE_ECHTE_GASTLICHKEIT_SCHWARZWALD`, `CERTIFICATE_ECHT_NACHHALTIG`, `CERTIFICATE_ECOCAMPING`, `CERTIFICATE_EMPFOHLENES_WEINHOTEL_BADEN_WUERTTEMBERG`, `CERTIFICATE_FAMILIEN_FERIEN`, `CERTIFICATE_FAMILIEN_RESTAURANTS`, `CERTIFICATE_FIVE_STAR_CH`, `CERTIFICATE_FIVE_STAR_GASTROSUISSE_CH`, `CERTIFICATE_FIVE_STAR_HOTELLERIESUISSE_CH`, `CERTIFICATE_FIVE_STAR_SERVICED_APARTMENTS_CH`, `CERTIFICATE_FIVE_STAR_SUPERIOR_CH`, `CERTIFICATE_FIVE_STAR_SUPERIOR_HOTTELLERIESUISSE_CH`, `CERTIFICATE_FOUR_STAR_CH`, `CERTIFICATE_FOUR_STAR_GASTROSUISSE_CH`, `CERTIFICATE_FOUR_STAR_HOTELLERIESUISSE_CH`, `CERTIFICATE_FOUR_STAR_SERVICED_APARTMENTS_CH`, `CERTIFICATE_FOUR_STAR_SUPERIOR_CH`, `CERTIFICATE_FOUR_STAR_SUPERIOR_HOTTELLERIESUISSE_CH`, `CERTIFICATE_GLIDE_RESTAAURANTS_CH`, `CERTIFICATE_GREENSIGN_LEVEL_3`, `CERTIFICATE_GREENSIGN_LEVEL_4`, `CERTIFICATE_IBEX_FAIRSTAY_CH`, `CERTIFICATE_LAND_URLAUB`, `CERTIFICATE_MICHELIN_STERN`, `CERTIFICATE_MOEHNETALRADWEG`, `CERTIFICATE_MOTORBIKE_FRIENDLY`, `CERTIFICATE_NACHHALTIGE_FERIENIMMOBILIE`, `CERTIFICATE_NATURPARK_WIRTE`, `CERTIFICATE_OHNE_GLUTEN_CH`, `CERTIFICATE_ONE_STAR_CH`, `CERTIFICATE_ONE_STAR_GASTROSUISSE_CH`, `CERTIFICATE_ONE_STAR_HOTELLERIESUISSE_CH`, `CERTIFICATE_ONE_STAR_SERVICED_APARTMENTS_CH`, `CERTIFICATE_ONE_STAR_SUPERIOR_CH`, `CERTIFICATE_ONE_STAR_SUPERIOR_HOTELLERIESUISSE_CH`, `CERTIFICATE_PARTNER_NATIONALPARK_SCHWARZWALD`, `CERTIFICATE_QUALITAETSBETRIEB_ROTHAARSTEIG`, `CERTIFICATE_SAUERLAENDER_WANDERGASTHOEFE`, `CERTIFICATE_SAUERLAND_HOEHENFLUG`, `CERTIFICATE_SCHMALLENBERGER_KINDERLAND`, `CERTIFICATE_SCHMECK_DEN_SUEDEN`, `CERTIFICATE_SCHNEESPORTHOTEL_HOTELLERIESUISSE_CH`, `CERTIFICATE_SCHWARZWALD_BALANCE`, `CERTIFICATE_SCHWARZWALD_PLUS`, `CERTIFICATE_SERVICE_QUALITAET_DEUTSCHLAND`, `CERTIFICATE_STERNE_IM_SAUERLAND`, `CERTIFICATE_STV_FIVE_STARS_CH`, `CERTIFICATE_STV_FIVE_STARS_SUP_CH`, `CERTIFICATE_STV_FOUR_STARS_CH`, `CERTIFICATE_STV_FOUR_STARS_SUP_CH`, `CERTIFICATE_STV_ONE_STAR_CH`, `CERTIFICATE_STV_ONE_STAR_SUP_CH`, `CERTIFICATE_STV_THREE_STARS_CH`, `CERTIFICATE_STV_THREE_STARS_SUP_CH`, `CERTIFICATE_STV_TWO_STARS_CH`, `CERTIFICATE_STV_TWO_STARS_SUP_CH`, `CERTIFICATE_SWISS_HISTORIC_HOTELS_CH`, `CERTIFICATE_SWISS_LODGE_HOTTELIERSUISSE_CH`, `CERTIFICATE_SWISSTAINABLE_LEVEL_ONE_CH`, `CERTIFICATE_SWISSTAINABLE_LEVEL_TWO_CH`, `CERTIFICATE_SWISSTAINSABLE_LEVEL_THREE_CH`, `CERTIFICATE_THREE_STAR_CH`, `CERTIFICATE_THREE_STAR_GASTROSUISSE_CH`, `CERTIFICATE_THREE_STAR_HOTELLERIESUISSE_CH`, `CERTIFICATE_THREE_STAR_SERVICED_APARTMENTS_CH`, `CERTIFICATE_THREE_STAR_SUPERIOR_CH`, `CERTIFICATE_THREE_STAR_SUPERIOR_HOTTELLERIESUISSE_CH`, `CERTIFICATE_TRAUFGAENGE_GASTGEBER`, `CERTIFICATE_TWO_STAR_CH`, `CERTIFICATE_TWO_STAR_GASTROSUISSE_CH`, `CERTIFICATE_TWO_STAR_HOTELLERIESUISSE_CH`, `CERTIFICATE_TWO_STAR_SERVICED_APARTMENTS_CH`, `CERTIFICATE_TWO_STAR_SUPERIOR_CH`, `CERTIFICATE_TWO_STAR_SUPERIOR_HOTTELLERIESUISSE_CH`, `CERTIFICATE_URLAUB_AUF_DEM_BAUERNHOF`, `CERTIFICATE_URLAUB_AUF_DEM_BAUERNHOF_GER`, `CERTIFICATE_WANDERBARES_DEUTSCHLAND`, `CERTIFICATE_WANDERBARES_DEUTSCHLAND_GASTRONOMIE`, `CERTIFICATE_WANDER_HOTEL_HOTTELIERSUISSE_CH`, `CERTIFICATE_WELLNESS_AND_SPA_HOTTELIERSUISSE_CH`, `CERTIFICATE_WELLNESS_HOTEL_HOTTELIERSUISSE_CH`, `CERTIFICATE_WELLNESS_STARS_DEUTSCHLAND`, `CERTIFICATE_WIN_CHARTA_DES_LANDES_BADEN_WUERTTEMBERG`, `CERTIFICATE_WINTERSPORTARENA_SAUERLAND`, `DREIWELTEN_CARD`, `ECHT_BODENSEE_CARD`, `GUESTCARD`, `HOCHSCHWARZWALD_CARD`, `SAUERLAND_CARD`, `SAUERLAND_SOMMER_CARD`, `SCHMALLENBERGER_SAUERLAND_CARD`, `WILLINGEN_MEINE_CARD`, `MARKENPARTNER`, `CERTIFICATE_URLAUBS_WINZERHOF`, `CERTIFICATE_URLAUBS_REITERHOF`, `CERTIFICATE_SCHWARZWALD_`, `BALANCE`, `CERTIFICATE_VIABONO`, `CERTIFICATE_MEDICAL_WELLNESS_THREE_STARS`, `CERTIFICATE_MEDICAL_WELLNESS_FOUR_STARS`, `CERTIFICATE_MEDICAL_WELLNESS_FIVE_STARS`, `CERTIFICATE_VIA_MICHELIN_TWO_STARS`, `CERTIFICATE_VIA_MICHELIN_THREE_STARS`, `CERTIFICATE_BRONZE_DEHOGA`, `CERTIFICATE_BIKE_AREA_SAUERLAND`, `CERTIFICATE_SAUERLAND_WALDROUTE`, `CERTIFICATE_KAISERSTUEHLER_WINZERHOF`, `CERTIFICATE_WEINHOTELS_KAISERSTUHL`, `CERTIFICATE_KOSTENLOS_STORNIERBAR_GARANTIE`, `CERTIFICATE_WIR_FUER_SIE`, `CERTIFICATE_PARTNER_BIOSPHAERENGEBIET_SCHWAEBISCHE_ALB`, `CERTIFICATE_REISEN_FUER_ALLE`, `CERTIFICATE_DLG_`, `LANDURLAUB`, `CERTIFICATE_BIOSFERA_PARTNERBETRIEB_CH`, `THEMENPARTNER_KULTUR`, `THEMENPARTNER_RAD`, `THEMENPARTNER_WANDERN`, `THEMENPARTNER_FAMILIE`, `THEMENPARTNER_WELLNESS`, `TOP_GASTGEBER_BOFE`, `LUNCH`, `DINNER`; example: `"POOL"`)
- `maxAmount` (integer (int32)) — Max Amount (example: `1`)
- `privateUsage` (boolean) — Facility is in private use (example: `true`)
- `additionalFeesApply` (boolean) — Additional fees apply for the use of this facility (example: `true`)
- `availableTime` (FacilityAvailabilityData)
- `availableFrom` (AvailableTime) — Time until facility would be available
- `pointInMonth` (string) — Point in the month (one of: `BEGINNING`, `MIDDLE`, `END`; example: `"MIDDLE"`)
- `month` (string) — Month (one of: `JANUARY`, `FEBRUARY`, `MARCH`, `APRIL`, `MAY`, `JUNE`, `JULY`, `AUGUST`, `SEPTEMBER`, `OCTOBER`, `NOVEMBER`, `DECEMBER`; example: `"JANUARY"`)
- `availableTo` (AvailableTime) — Time until facility would be available
- `pointInMonth` (string) — Point in the month (one of: `BEGINNING`, `MIDDLE`, `END`; example: `"MIDDLE"`)
- `month` (string) — Month (one of: `JANUARY`, `FEBRUARY`, `MARCH`, `APRIL`, `MAY`, `JUNE`, `JULY`, `AUGUST`, `SEPTEMBER`, `OCTOBER`, `NOVEMBER`, `DECEMBER`; example: `"JANUARY"`)
- `location` (string) — Location of facility (one of: `UNDEFINED`, `NEAR_BY`, `IN_APARTMENT`; example: `"NEAR_BY"`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"type": "POOL",
"maxAmount": 1,
"privateUsage": true,
"additionalFeesApply": true,
"availableTime": {
"availableFrom": {
"pointInMonth": "MIDDLE",
"month": "JANUARY"
},
"availableTo": {
"pointInMonth": "MIDDLE",
"month": "JANUARY"
}
},
"location": "NEAR_BY"
}
```
---
# OnRequestDetails
Source: https://developer.holidu.com/reference/schemas/onrequestdetails
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `OnRequestDetails` in https://developer.holidu.com/openapi/connectivity-api.json
Used only for on request apartments
Fields of `OnRequestDetails`:
- `bookableOnRequest` (boolean) — is the apartment bookable on request only (not instant bookable)?
- `hostEmailAddress` (string) — the email address of the host when guest sends request to the host
---
# Payment
Source: https://developer.holidu.com/reference/schemas/payment
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `Payment` in https://developer.holidu.com/openapi/connectivity-api.json
Fields of `Payment`:
- `paymentWithBooking` (PaymentWithBooking)
- `paymentPlanUuid` (string)
- `paymentHandler` (string)
- `paymentMethod` (string)
- `paymentTotalWithBooking` (PriceDto)
- `amount` (number)
- `currency` (string)
- `paymentRates` (array of PaymentRate)
- `dueDate` (string (date-time))
- `value` (PriceDto)
- `amount` (number)
- `currency` (string)
- `paymentOnsite` (array of PriceDto)
- `amount` (number)
- `currency` (string)
---
# PaymentRate
Source: https://developer.holidu.com/reference/schemas/paymentrate
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `PaymentRate` in https://developer.holidu.com/openapi/connectivity-api.json
Fields of `PaymentRate`:
- `dueDate` (string (date-time))
- `value` (PriceDto)
- `amount` (number)
- `currency` (string)
---
# PaymentRatePerDate
Source: https://developer.holidu.com/reference/schemas/paymentrateperdate
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `PaymentRatePerDate` in https://developer.holidu.com/openapi/connectivity-api.json
Fields of `PaymentRatePerDate`:
- `daysBeforeArrival` (integer (int32), required) — Limit of days before arrival until when the rate should be paid, for example: Until 10 days before arrival 50% should be paid (example: `10`)
- `rateAmountInPercentage` (number, required) — Value in percentage of booking that should be paid (not accumulative) (min 0; max 100; example: `70`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"daysBeforeArrival": 10,
"rateAmountInPercentage": 70
}
```
---
# PaymentRates
Source: https://developer.holidu.com/reference/schemas/paymentrates
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `PaymentRates` in https://developer.holidu.com/openapi/connectivity-api.json
Payment schedule for the booking
Fields of `PaymentRates`:
- `ratePaidOnBookingInPercentage` (number) — Rate paid on booking in percentage (min 0; max 100; example: `30`)
- `ratesPerDate` (array of PaymentRatePerDate)
- `daysBeforeArrival` (integer (int32), required) — Limit of days before arrival until when the rate should be paid, for example: Until 10 days before arrival 50% should be paid (example: `10`)
- `rateAmountInPercentage` (number, required) — Value in percentage of booking that should be paid (not accumulative) (min 0; max 100; example: `70`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"ratePaidOnBookingInPercentage": 30,
"ratesPerDate": [
{
"daysBeforeArrival": 10,
"rateAmountInPercentage": 70
}
]
}
```
---
# PaymentWithBooking
Source: https://developer.holidu.com/reference/schemas/paymentwithbooking
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `PaymentWithBooking` in https://developer.holidu.com/openapi/connectivity-api.json
Fields of `PaymentWithBooking`:
- `paymentPlanUuid` (string)
- `paymentHandler` (string)
- `paymentMethod` (string)
- `paymentTotalWithBooking` (PriceDto)
- `amount` (number)
- `currency` (string)
- `paymentRates` (array of PaymentRate)
- `dueDate` (string (date-time))
- `value` (PriceDto)
- `amount` (number)
- `currency` (string)
---
# PhotoDto
Source: https://developer.holidu.com/reference/schemas/photodto
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `PhotoDto` in https://developer.holidu.com/openapi/connectivity-api.json
Fields of `PhotoDto`:
- `url` (string, required) — Photo URL (example: `"http://r-ec.bstatic.com/images/hotel/max500/149/14959242.jpg"`)
- `position` (integer (int32), required) — Position of the photo to be shown to the customer (min 1; example: `1`)
- `contentLength` (integer (int64)) — File size of the photo in bytes (min 1)
- `localizations` (array of PhotoLocalizationDto) — Photo titles in different languages
- `language` (string, required) — ISO Language of the Photo Title (min length 2; max length 2)
- `title` (string, required) — Photo Title
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"url": "http://r-ec.bstatic.com/images/hotel/max500/149/14959242.jpg",
"position": 1
}
```
---
# PhotoLocalizationDto
Source: https://developer.holidu.com/reference/schemas/photolocalizationdto
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `PhotoLocalizationDto` in https://developer.holidu.com/openapi/connectivity-api.json
Photo titles in different languages
Fields of `PhotoLocalizationDto`:
- `language` (string, required) — ISO Language of the Photo Title (min length 2; max length 2)
- `title` (string, required) — Photo Title
---
# Price
Source: https://developer.holidu.com/reference/schemas/price
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `Price` in https://developer.holidu.com/openapi/connectivity-api.json
Price with amount and currency
Fields of `Price`:
- `amount` (number, required) — Price value (example: `100`)
- `currency` (string, required) — Price currency (example: `"EUR"`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"amount": 100,
"currency": "EUR"
}
```
---
# PriceDto
Source: https://developer.holidu.com/reference/schemas/pricedto
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `PriceDto` in https://developer.holidu.com/openapi/connectivity-api.json
Fields of `PriceDto`:
- `amount` (number)
- `currency` (string)
---
# Rate Plan
Source: https://developer.holidu.com/reference/schemas/rate-plan
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `RatePlan` in https://developer.holidu.com/openapi/connectivity-api.json
Fields of `RatePlan`:
- `ratePlanId` (string, required) — Unique identifier for this rate plan (example: `"SHORT_STAY_RATE"`)
- `guests` (integer (int32), required) — Number of guests. Allowed number of guests must be between 1 and 100 (min 1; max 100; example: `2`)
- `currency` (string, required) (example: `"EUR"`)
- `minimumStay` (integer (int32), required) — Minimum Stay (days) (example: `1`)
- `maximumStay` (integer (int32)) — Maximum Stay (days) (example: `30`)
- `dailyRates` (array of DailyRate, required) — List of daily rates
- `date` (string (date), required) — Date (example: `"2023-05-01"`)
- `price` (number, required) — Daily price (example: `95`)
- `priceForExtraPerson` (number) — Additional cost per extra person (example: `20`)
- `checkinAllowed` (boolean, required) — Check in is possible on this day (example: `true`)
- `checkoutAllowed` (boolean, required) — Check out is possible on this day (example: `false`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"ratePlanId": "SHORT_STAY_RATE",
"guests": 2,
"currency": "EUR",
"minimumStay": 1,
"maximumStay": 30,
"dailyRates": [
{
"date": "2023-05-01",
"price": 95,
"priceForExtraPerson": 20,
"checkinAllowed": true,
"checkoutAllowed": false
}
]
}
```
---
# Receipt
Source: https://developer.holidu.com/reference/schemas/receipt
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `Receipt` in https://developer.holidu.com/openapi/connectivity-api.json
Fields of `Receipt`:
- `costs` (array of BookingExtraCost)
- `id` (string)
- `name` (string)
- `basisOfCalculation` (string)
- `paymentTime` (string)
- `type` (string)
- `pricePerUnit` (PriceDto)
- `amount` (number)
- `currency` (string)
- `unitsSelected` (integer (int32))
- `totalPrice` (PriceDto)
- `amount` (number)
- `currency` (string)
- `discount` (BookingDiscount)
- `discountId` (integer (int64))
- `providerDiscountId` (string)
- `name` (string)
- `discountType` (string) (one of: `EARLY_BIRD`, `LAST_MINUTE`, `LONG_STAY`, `DEVICE_SPECIFIC`, `NEW_LISTING`, `LOYALTY`, `OFFER`)
- `percentage` (number)
- `conditions` (DiscountConditions)
- `daysBeforeCheckIn` (integer (int32)) — Number of days before checkin the booking has to be made (example: `60`)
- `minStay` (integer (int32)) — Minimum Stay (days) if required to get the discount (example: `5`)
- `bookingSeason` (array of SeasonApplicable) — Booking date must be in seasons for the discount to apply
- `onlyApplicableFrom` (string (date)) — Only applicable from date (example: `"2020-08-01"`)
- `onlyApplicableUntil` (string (date)) — Only applicable until date (example: `"2021-04-30"`)
- `travelSeason` (array of SeasonApplicable) — Stay must be within seasons for the discount to apply
- `onlyApplicableFrom` (string (date)) — Only applicable from date (example: `"2020-08-01"`)
- `onlyApplicableUntil` (string (date)) — Only applicable until date (example: `"2021-04-30"`)
- `deviceType` (string) — If the discount is applicable only for specific device. (one of: `MOBILE`, `DESKTOP`)
- `userType` (string) — If discount is applicable based on user type. (one of: `USER_AUTHENTICATED`)
- `amount` (PriceDto)
- `amount` (number)
- `currency` (string)
- `bareRentalPrice` (PriceDto)
- `amount` (number)
- `currency` (string)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"discount": {
"discountType": "EARLY_BIRD",
"conditions": {
"daysBeforeCheckIn": 60,
"minStay": 5,
"bookingSeason": [
{
"onlyApplicableFrom": "2020-08-01",
"onlyApplicableUntil": "2021-04-30"
}
],
"travelSeason": [
{
"onlyApplicableFrom": "2020-08-01",
"onlyApplicableUntil": "2021-04-30"
}
],
"deviceType": "MOBILE",
"userType": "USER_AUTHENTICATED"
}
}
}
```
---
# Room
Source: https://developer.holidu.com/reference/schemas/room
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `Room` in https://developer.holidu.com/openapi/connectivity-api.json
Room
Fields of `Room`:
- `roomId` (string) — A unique identifier for the room (example: `"123"`)
- `roomType` (string) — Room type (one of: `BED_ROOM`, `LIVING_ROOM`, `BATH_ROOM`, `KITCHEN`; example: `"BED_ROOM"`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"roomId": "123",
"roomType": "BED_ROOM"
}
```
---
# SeasonApplicable
Source: https://developer.holidu.com/reference/schemas/seasonapplicable
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `SeasonApplicable` in https://developer.holidu.com/openapi/connectivity-api.json
Season for which extra cost is applicable
Fields of `SeasonApplicable`:
- `onlyApplicableFrom` (string (date)) — Only applicable from date (example: `"2020-08-01"`)
- `onlyApplicableUntil` (string (date)) — Only applicable until date (example: `"2021-04-30"`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"onlyApplicableFrom": "2020-08-01",
"onlyApplicableUntil": "2021-04-30"
}
```
---
# ValidationErrorMessage
Source: https://developer.holidu.com/reference/schemas/validationerrormessage
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `ValidationErrorMessage` in https://developer.holidu.com/openapi/connectivity-api.json
Validation Error Messages
Fields of `ValidationErrorMessage`:
- `errorCode` (string) — Error code for which validation failed
- `message` (string) — Message for which validation failed
---
# LosDto
Source: https://developer.holidu.com/reference/affiliate/schemas/losdto
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `LosDto` in https://developer.holidu.com/openapi/affiliate-api.json
The Length of Stay (LOS) represents accumulated prices per check-in date and length of stay. If the map is empty, no pricing is available for the apartment.
Fields of `LosDto`:
- `los` (map of string (checkInDate) → array of LosItemDto, required) — The key is an ISO calendar date (YYYY-MM-DD) representing the check-in date. The value is a list of price configurations for that date. A single check-in date may have multiple entries with different guest counts, each representing a separate pricing tier. (example: `{"2024-06-01":[{"currency":"EUR","guests":2,"price":[0,0,300,400,500]},{"currency":"EUR","guests":4,"price":[0,0,350,460,580]}],"2024-06-02":[{"currency":"EUR","guests":2,"price":[0,150,280]}]}`)
- `currency` (string (iso-4217), required) — ISO 4217 currency code. (example: `"EUR"`)
- `guests` (integer, required) — Maximum number of guests this configuration applies to (adults + kids, babies excluded). A configuration with guests=2 applies to searches for 1 or 2 guests. Multiple entries with different guest values may exist for the same check-in date, allowing tiered pricing based on occupancy (e.g., guests=2 for base price, guests=4 for a higher rate). (example: `2`)
- `price` (array of number (decimal), required) — Accumulated prices indexed by length of stay. Element at index N represents the total price for an (N+1)-night stay starting on the parent check-in date. A value of 0 means checkout is not permitted on that day (encodes minimum stay rules). Maximum 62 entries. (max items 62; example: `[0,0,300,400,500]`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"los": {
"2024-06-01": [
{
"currency": "EUR",
"guests": 2,
"price": [
0,
0,
300,
400,
500
]
},
{
"currency": "EUR",
"guests": 4,
"price": [
0,
0,
350,
460,
580
]
}
],
"2024-06-02": [
{
"currency": "EUR",
"guests": 2,
"price": [
0,
150,
280
]
}
]
}
}
```
---
# LosItemDto
Source: https://developer.holidu.com/reference/affiliate/schemas/lositemdto
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `LosItemDto` in https://developer.holidu.com/openapi/affiliate-api.json
A price configuration for a specific check-in date, guest count, and currency.
Fields of `LosItemDto`:
- `currency` (string (iso-4217), required) — ISO 4217 currency code. (example: `"EUR"`)
- `guests` (integer, required) — Maximum number of guests this configuration applies to (adults + kids, babies excluded). A configuration with guests=2 applies to searches for 1 or 2 guests. Multiple entries with different guest values may exist for the same check-in date, allowing tiered pricing based on occupancy (e.g., guests=2 for base price, guests=4 for a higher rate). (example: `2`)
- `price` (array of number (decimal), required) — Accumulated prices indexed by length of stay. Element at index N represents the total price for an (N+1)-night stay starting on the parent check-in date. A value of 0 means checkout is not permitted on that day (encodes minimum stay rules). Maximum 62 entries. (max items 62; example: `[0,0,300,400,500]`)
Example (assembled from the per-field examples in the spec, not an official sample):
```json
{
"currency": "EUR",
"guests": 2,
"price": [
0,
0,
300,
400,
500
]
}
```
---
# ProblemDetail
Source: https://developer.holidu.com/reference/affiliate/schemas/problemdetail
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
- Schema: `ProblemDetail` in https://developer.holidu.com/openapi/affiliate-api.json
Error response following [RFC 9457](https://www.rfc-editor.org/rfc/rfc9457) Problem Details for HTTP APIs. Affiliates are encouraged to use this format for error responses to aid Holidu in debugging push failures.
Fields of `ProblemDetail`:
- `type` (string (uri), required) — A URI reference that identifies the problem type ([RFC 9457 §3.1.1](https://www.rfc-editor.org/rfc/rfc9457#section-3.1.1)). (example: `"https://api.affiliate-example.com/problems/validation-error"`)
- `title` (string, required) — A short, human-readable summary of the problem type. (example: `"Validation Error"`)
- `status` (integer, required) — The HTTP status code. (example: `400`)
- `detail` (string) — A human-readable explanation specific to this occurrence of the problem. (example: `"Request body is not valid JSON."`)
- `instance` (string (uri)) — A URI reference that identifies the specific occurrence of the problem. (example: `"/apt-12345/los"`)
---
# Basic LOS
Source: https://developer.holidu.com/recipes/basic-los
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
## Steps
1. **Specify the checkin day** — If a user checks in on this day (lines 2)
2. **Specify people** — For this amount of people (lines 4,5)
3. **Price object** — For a specific length of stay, the customer has to pay the amount in the defined currency (lines 4,6-28)
4. **Length of stay with price 0** — The apartment is not available for checkout the first 6 days since all prices are 0 for those days (lines 7-12)
5. **Cost for 7 nights** — First possible checkout is after 7 days with a total price of 120 EUR (lines 13)
6. **Cost for 8 nights** — Total cost for 8 nights (lines 14)
7. **Cost for length of stay** — Total cost depending on length of stay for up until 21 days (lines 15-27)
8. **Max stay** — The last non 0 value defines the max length of stay, in this case 21 days (lines 27,28)
9. **Different number of guests** — You can add different prices for different number of guests (lines 30-37)
10. **All possible checkin days** — Add all further possible checkin days in a similar manner. Max stay in this case 14 days (lines 39-61)
## Sample
```curl cURL
"los": {
"2022-09-01": [
{
"currency": "EUR",
"guests": 5,
"price": [
0,
0,
0,
0,
0,
0,
140,
160,
180,
200,
220,
240,
260,
280,
300,
320,
340,
360,
380,
400,
420
]
},
{
"currency": "EUR",
"guests": 4,
"price": [
0,
...
]
}
],
"2022-09-08": [
{
"currency": "EUR",
"guests": 5,
"price": [
0,
0,
0,
0,
0,
0,
140,
160,
180,
200,
220,
240,
260,
280
]
}
],
....
}
```
---
# Recipe Title
Source: https://developer.holidu.com/recipes/recipe-title
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
## Steps
1. **First** — Just a test (lines 1,2)
2. **Second** (lines 3-5)
## Sample
```curl cURL
curl --request POST \
--url http://localhost:8089/rest/public/integration/apartments \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'api_key: <>'
```
---
# Holidu Whitelabels
Source: https://developer.holidu.com/page/holidu-whitelabels
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
> **Info: Welcome to the developer hub for the Holidu Whitelabel!**
>
> On this page you will learn how to integrate the Holidu whitelabel into your website. The organization who will use the whitelabel is referred to as "partner", this could be the company we have the contract with directly, or a technical agency working for this company.
>
> At the top of this website you'll find a navigation, which will bring you to the developer hub for building an API with Holidu. This has no relevance with the Whitelabel, therefore please stay on this page ([/page/holidu-whitelabels](https://developer.holidu.com/page/holidu-whitelabels.md))
## 1. The whitelabel options
The whitelabel comes in two forms:
* Digital Starter
* **Whitelabel Standard**
Technically the "Digital Starter" and the "Standard", are the same. Only the payment conditions differ, which has no influence on the technical part.
| | **Whitelabel Digital Starter** | **Whitelabel Standard** |
| ------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------- |
| **Domain** | Subdomain Holidu (e.g. partner.holidu.de) | Subdomain Partner (e.g. book.partner.de) or Reverse Proxy (e.g. [www.partner.de/book](http://www.partner.de/book)) |
| Design | Header & Footer provided by Holidu **+
Logo & colors of the partner are included in the whitelabel | Header & Footer created & hosted** by partner or by Holidu+
Logo & colors of the partner are included in the whitelabel |
| Adjustment of the quick search on the partner website | Done by the partner, based on the provided documentation | Done by the partner,
based on the provided documentation |
| Deeplinking | Available, including documentation | Available, including documentation |
| **GTM Tracking** | Not Available | Available, is to be added to the header provided by the partner |
| **Inventory API** | Not Available | Access to the Inventory API from Holidu, where the partner can connect and load inventory into their CMS |
| **Guest cards & certifications** | Available | Available |
| **Indexation of Whitelabel content** | The Whitelabel content is not being indexed. In order to index content, please refer to the Inventory API | The Whitelabel content is not being indexed. In order to index content, please refer to the Inventory API |
## 1.1. Effort related to the whitelabel implementation for the partner or their agency.
> **Warning: Work to be expected**
>
> Please examine this and the next chapter carefully. It will help you plan the work and if you are an agency, it will help you to draft an offer to your customer.
>
> For agencies: please bear in mind, that we don't take responsibility for what you include in the estimation for your work and the amount of effort related to it - as an agency you are still responsible for evaluating what will all be needed to implement the whitelabel and make your customer happy.
Based on the chosen product and the desires that you as a partner have (or your customer, in case you are an agency), different work is to be expected. The table provides a high level overview, the next chapter provides more details for each part.
| | Whitelabel Digital Starter | **Whitelabel Standard** |
| ------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Domain** | No effort from partner needed | Setup of DNS entries, update cookie banner and for reverse proxy: configuration nginx |
| **Design** | No effort from partner needed | Header & Footer created & hosted by partner, based on the requirements specified by Holidu on this page |
| **Adjustment of the quick search on the partner website** | Done by the partner, based on the provided documentation | Done by the partner,
based on the provided documentation |
| Deeplinking | Done by the partner, based on the provided documentation | Done by the partner,
based on the provided documentation |
| GTM Tracking | Not Available | Script is to be added to the header, provided by the partner. Most likely also involves work setting up Google Analytics on side of the partner |
| Inventory API | Setting up the connection to load inventory from the API into the CMS to be done by the partner, including scripts to update & maintain the inventory. Most likely additional work is needed on the side of the partner to update their website with the new content in their CMS. | Setting up the connection to load inventory from the API into the CMS to be done by the partner, including scripts to update & maintain the inventory.
Most likely additional work is needed on the side of the partner to update their website with the new content in their CMS. |
| Guest cards & certifications | Not Available | No effort from partner needed |
| **Indexation of Whitelabel content** | Not Available | Not Available |
> **Info: In the chapter below you will find more details around the expected work**
>
>
## 2. Details around the expected work
## 2.1 Domain
In case of the Digital Starter:
* No action is needed by you, the partner
In case of Whitelabel Standard:
* In case of a subdomain: Together with you, the partner, we need to setup the DNS entries to support the page on the side of the partner.
* The list of cookies provided by Holidu (documentation below) is to be added to the cookie banner by you, the partner. Also the consent manager has to come from you.
* In case of Reverse Proxy, the configuration in nginx is to be setup by you, the partner (documentation provided below).
## 2.2 Design
In case of the Digital Starter:
* No action is needed by you, the partner
In case of whitelabel Standard:
* When it is desired that the header & footer from you, the partner, are included in the whitelabel, these need to be seperately hosted by you, the partner, and these need to be delivered according to the technical specifications listed below. **Please read these carefully, as for instance the header & footer need to be scoped and this can require some work from your side.** [Requirements header & footer](#42-header--footer)
## 2.3 Adjustment of the quick search & other (deep)links on the website
In case of the Digital Starter:
* The quick search needs to be updated by the partner, so that it links to the whitelabel and that the search is translated into the right parameters that the whitelabel recognizes (documentation is found below).
* Any other (deep)links on the website need to be adjusted by the partner so that they redirect to the new whitelabel (documentation is found below). The partner will need to identify on which pages the links are to be updated and then update these.
In case of whitelabel Standard:
* The same as above.
## 2.4 GTM Tracking
In case of the Digital Starter:
* GTM Tracking is not available here. The partner will receive predefined PDF & CSV reports, but no data in GTM.
In case of Whitelabel Standard:
* You embed your complete GTM loader script directly in the header/footer you host. Alternatively, if you use the Holidu default header, send us the full GTM <script> snippet (not just the container ID) and we will include it in our header configuration. See Section 6.1 for details.
## 2.5 Inventory API
In case of the Whitelabel Standard:
* The Inventory API can be used to load inventory into the CMS of the partner. The partner will need to set up the connection based on the documentation provided below. Important to understand is that the partner is bound to some conditions using this API.
* The partner is only allowed to index inventory that "belongs to you", in other words, with which you, the partner, have a contractual agreement with. Other inventory can not be made indexable by search engines as stated in the contract between Holidu and you, the partner. In case the partner would like to index the inventory that belongs to them, the partner should set this up themselves.
* The partner should make sure the inventory is regularly updated, as stated in the contract between Holidu and you, the partner, so that any changes in description and other property related information, are kept up to date. For this we use the variable "updatedSince", so not all inventory has to be redownloaded everyday. The partner needs to configure a script for this themselves, and write a script that updates information on the website when needed.
* The partner should make sure that inventory that has gone offline, should be removed from the CMS and the partner's website. For this the partner needs to configure a script that identifies, when a property is not provided via the API anymore and then deletes it from the CMS & website.
* The API has a rate limit which is described later on this page. In the beginning the requests have to be spread, so that all of the inventory can be downloaded. Partners who have a smaller amount of inventory (usually <10k) will most likely not have an issues with the rate limit.
## 2.6 Guest cards & Certifications
In case of the Digital Starter or Whitelabel Standard:
* If it is chosen, the only effort that is needed is to provide us with the logo + description text for each of the guest cards & certifications. The rest of the work will be done by Holidu.
***
> **Info: The remainder of this page describes the technical details of the elements described earlier.**
>
>
## 3. Configuring the Domain
## 3.1 Hosting under a Holidu subdomain
This is the integration that is being used for "Digital Starter" and "Whitelabel Standard"
Example: alps-region.holidu.com
No action is needed by the partner to set up this domain, besides providing the first part of the domain name \[provided\_by\_the\_Partner].holidu.com.
> **Info: About hosting under a Holidu subdomain**
>
> Advantages
>
> - Easy setup and management: The DNS entries and SSL certificates are entirely with Holidu.
> - Load balancing & hosting: Since we host the website completely, it is faster and we can quickly scale automatically in case of sudden load peaks in website visits. (e.g. for short posts on news channels, especially TV.
> - SSL certificates do not expire: These are automatically renewed by Holidu systems.Particularly suitable when there is little technical support from an agency partner and a set-up needs to be very quick and cost-effective.
>
> Disadvantages
>
> - The perception of one's own brand may be weaker.
## 3.2 Hosting under a partner subdomain
This is one of the integration options that can be used when Standard Whitelabel is chosen.
Example: [https://buchen.hochschwarzwald.de/s](https://buchen.hochschwarzwald.de/s)
*Action needed from the partner:*
* Provide the first part of the domain name \[provided\_by\_the\_partner].\[here comes the partner website].com
* e.g. [https://buchen.hochschwarzwald.de/s](https://buchen.hochschwarzwald.de/s)
* Need to set up the DNS entries together with Holidu to setup the hosting
* The DNS entries have to be set up as follows:
**There are two separate CNAME records that need to be set by the domain owner (whoever manages DNS for the DMO)**
SSL Certificate Validation CNAME
| Purpose | Proves domain ownership so ACM can issue the certificate |
| --------- | -------------------------------------------------------- |
| **Type** | CNAME |
| **Name** | Something like `_a1b2c3.buchen.dmo.de` |
| **Value** | Something like `_x7y8z9.acm-validations.aws.` |
⚠️ Until this is set correctly, the certificate will stay in "Pending validation" status and nothing will work.
2. Domain Routing CNAME (CloudFront)
| Purpose | Routes traffic from the domain to your CloudFront distribution |
| --------- | -------------------------------------------------------------- |
| **Type** | CNAME |
| **Name** | `buchen.dmo.de` |
| **Value** | `d1a2b3c4d5e6f7.cloudfront.net` |
**Common Reasons It's Not Working**
1. **Certificate still pending** → The validation CNAME wasn't set (correctly), so no cert is issued yet
2. **CloudFront alternate domain name missing** → buchen.dmo.de must be added as an "Alternate Domain Name (CNAME)" in the CloudFront distribution settings
3. **Certificate not in us-east-1** → CloudFront requires the ACM certificate to be in the N. Virginia (us-east-1) region
4. **Typos / propagation delay** → CNAME values are long and error-prone; DNS propagation can take up to 48h (usually minutes)
* As the website is owned by you, the partner, your cookie banner will be shown and we need to add functional cookies from Holidu to your cookie banner. Holidu will turn their cookie banner off.
### 3.2.1 Cookies to be added to the partner's cookie banner
One of the service providers that is to be added, is Google reCAPTCHA (as essential service). In addition, the following cookies are to be listed:
| Cookiename | Example value | Type | Expiry date |
| :------------------------------------- | :---------------------------------- | :--------- | :---------- |
| SHOULD\_DISPLAY\_NEWSLETTER\_POPUP | 1 | Functional | 365 days |
| HAS\_CLOSED\_NEWSLETTER\_NOT\_LISTPAGE | 1 | Functional | 365 days |
| HAS\_SEEN\_APP\_TRAFFIC\_OVERLAY | 1 | Functional | 100 days |
| searchPathname | Bayern--Deutschland | Functional | 24 hours |
| \_lo | de-DE | Functional | 365 days |
| \_cu | EUR | Functional | 365 days |
| userId | 11a1a11-1111-1111-1aa1-111a11aa1111 | Functional | 365 days |
| uuid | v\_DjyhLVoJ | Functional | 365 days |
| historyFiltersKeys | 1-1 | Functional | 24 hours |
| \_historyFilter | 1-1 | Functional | 24 hours |
| PLAY\_LANG | de-DE | Functional | SESSION |
> **Info: About hosting under your partner subdomain**
>
> Advantages
>
> - Load Balancing & Hosting: Since we host the website completely, it is faster and we can quickly scale automatically in case of sudden load peaks in website visits. (e.g. for short features on news channels, especially TV).
> - SSL certificates do not expire: These are automatically renewed by the Holidu systems. (as long as all DNS entries were set up correctly at the beginning)
> - Strong perception of own brand
>
> **Disadvantages**
>
> - Setting up the hosting solution is a little more time-consuming than using a Holidu subdomain (a few hours). Several DNS entries have to be added.
## 3.3 Hosting using Reverse Proxy
This is one of the integration options that can be used when Standard Whitelabel is chosen.
Example: [www.alps-region.com/book](http://www.alps-region.com/book)
*Action needed from the partner:*
* Provide the path for the domain [www.alps-region.com/\[here\_comes\_the\_path\]](http://www.alps-region.com/\[here_comes_the_path])
* Need to setup the nginx configuration as described below under 3.3.1., and maintain this overtime when the whitelabel continues to develop itself
* The reverse proxy must only be configured for the one chosen domain (e.g. only [www.alps-region.com](http://www.alps-region.com), not both [www.alps-region.com](http://www.alps-region.com) and alps-region.com). See section 3.4 for domain format details.
* Intensive testing is needed to ensure that no consent manager whitelisting issues arise and other domain related complexities remain. For this subsequent time/effort needs to be planned
* As the website is owned by you, the partner, your cookie banner will be shown and we need to add functional cookies from Holidu to your cookie banner. Holidu will turn their cookie banner off.
* You can find the list of cookies under 3.2.1. [List of Cookies](#321-cookies-to-be-added-to-the-partners-cookie-banner)
### 3.3.1 Reverse Proxy Configuration in nginx
All traffic must be served over HTTPS. HTTP requests must be redirected to HTTPS by the partner. Serving the whitelabel over HTTP is not supported.
### 3.3.2 Reverse Proxy Configuration in nginx
The configuration described below has to be setup. In this example the path was "**/book**". In case another path is chosen, /book has to be replaced with the chosen path. The part \[INTERNAL DOMAIN NAME] will be provided by holidu. (e.g. \[dmo.holidu.com])
Whenever on the whitelabel new pages are added, this configuration needs to be updated by the partner.
```json title="Reverse Proxy Configuration in nginx"
server {
listen 8080;
server_name localhost;
location /book {
access_log off;
proxy_pass https\://[INTERNAL DOMAIN NAME]/;
proxy_set_header X-Forwarded-Host-Prio $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /api {
access_log off;
proxy_pass https\://[INTERNAL DOMAIN NAME]/api;
proxy_set_header X-Forwarded-Host-Prio $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /assets {
access_log off;
proxy_pass https\://[INTERNAL DOMAIN NAME]/assets;
proxy_set_header X-Forwarded-Host-Prio $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location / {
return 308 /book/s$is_args$args;
}
location ~ ^/s$ {
return 308 /book/s$is_args$args;
}
location ~ ^/s/(._)$ {
return 308 /book/s/$1$is_args$args;
}
location ~ ^/d/(._)$ {
return 308 /book/d/$1$is_args$args;
}
location ~ ^/c/(._)$ {
return 308 /book/c/$1$is_args$args;
}
location ~ ^/payment/(._)$ {
return 308 /book/payment/$1$is_args$args;
}
location ~ ^/booking/(._)$ {
return 308 /book/booking/$1$is_args$args;
}
location ~ ^/pending-booking/(._)$ {
return 308 /book/pending-booking/$1$is_args$args;
}
location ~ ^/help(._)$ {
return 308 /book/help$1$is_args$args;
}
location ~ ^/redirect/(._)$ {
return 308 /book/redirect/$1$is_args$args;
}
location ~ ^/request/(._)$ {
return 308 /book/request/$1$is_args$args;
}
location ~ ^/go/(._)$ {
return 308 /book/go/$1$is_args$args;
}
location ~ ^/.well-known/(._)$ {
return 308 /book/.well-known/$1$is_args$args;
}
location /gtc {
return 308 /book/gtc$is_args$args;
}
location /imprint {
return 308 /book/imprint$is_args$args;
}
location /privacy {
return 308 /book/privacy$is_args$args;
}
location /legal-info {
return 308 /book/legal-info$is_args$args;
}
}
```
> **Info: About hosting using reverse proxy**
>
> Advantages
>
> - Strong perception of own brand
>
> **Disadvantages**
>
> - The set-up of the hosting solution is more complex and test-intensive.
> - Regular adjustments by your hosting or agency partner are necessary, as the Holidu booking platform is constantly being further developed, this may entail additional costs.
> - Load peaks in website visits cannot be covered 100% by the scaling of the Holidu platform, as the reverse proxy / load balancer is provided by your hosting partner
## 3.4 Domain format
Only one exact domain is configured per partner (e.g. either [www.alps-region.com](http://www.alps-region.com) or alps-region.com). No redirect between the two variants is performed. Action needed from the partner:
* The exact domain to be used must be decided before the configuration begins.
* The partner is responsible for configuring a redirect from the unused variant to the chosen one (e.g. from alps-region.com to [www.alps-region.com](http://www.alps-region.com), or vice versa). Holidu does not perform this redirect.
## 4. Design
## 4.1. Colors & Logo's
### Colors
We will need some colors to set up the whitelabel in the desired CI. You can try around with the different color codes in our playground. Important: Any bookings made here, are REAL bookings.
[https://playground.holidu.de/s](https://playground.holidu.de/s)
Click "copy color values" and the colors are coped and can be shared with us.
### Logo's
We need your logo 6 times:
* 1x Logo in svg (your normal dimensions)
* 5x Logo in **png**
* 1x with your normal dimensions
* 1x in 76x76
* 1x in 152x152
* 1x in 57x57
* 1x in 120x120
## 4.2. Header & Footer
For the Whitelabel Pro, we can include your header & footer (this is not a must, you can also choose to still take the Holidu header & footer). Important is, that the header & footer have to be provided in a specific format, for us to be able to use it. We will not re-build the header & footer for you.
Important:
* The header & footer are hosted by you, the partner and in two elements. This means we will have 2 Html codes.
* The header & footer **have** to adhere to the requirements listed below.
You can try whether the header & footer function as you like them to, in our playground. Important: any bookings made on this page, are real bookings.
[https://playground.holidu.de/s](https://playground.holidu.de/s)
### 4.2.1. Requirements for header & footer
> **Danger: Requirements header & footer**
>
> These requirements are to be fulfilled, and can cost some considerable resources and time investment. If not planned properly, this can delay the go-live of the whitelabel or cause unexpected costs from your technical agency!
* The header & footer are provided in two separate HTML codes, which are not connected to each other.
* The CSS & Javascript is inserted inline into the HTML code.
* The HTML should only contain the necessary elements, i.e. without < html>, < body> etc. tags.
* The header cannot be made "sticky", once the user scrolls down it should not be visible anymore, otherwise it collides with existing elements.
* The JavaScript does not add global variables and functions and is contained in the header or footer elements. Ideally, there is no JavaScript or only a very limited one.
* The sources (HTML and possibly others) of these elements are requested from the partner's own servers. The response time and uptime should be fast and stable. Holidu will cache the data for a few minutes to hours to ensure stable operation and to compensate for peak loads.
* The HTML code should contain the Cookie Consent banner, in a < script> tag.
* The following exceptions have to be added: "holidu.com", "holidu.de", "adyen.com", "maps.googleapis.com", "sentry.io", "gstatic.com", "polyfill.io", "paypal.com", "paypalobjects.com", "[https://www.google.com/recaptcha/enterprise.js](https://www.google.com/recaptcha/enterprise.js)"
* If your CMP enforces a strict script-source whitelist for tracking, the following domains must also be permitted so GTM and GA4 can load: "googletagmanager.com", "google-analytics.com", "analytics.google.com" (including regional variants "region1.analytics.google.com", "region2.analytics.google.com"), "stats.g.doubleclick.net".
* The HTML code should contain the GTM container, in a < script> tag.
You can try whether the header & footer function as you like them to, in our playground. Important: any bookings made on this page, are real bookings.
[https://playground.holidu.de/s](https://playground.holidu.de/s)
* Shadow Dom
Holidu uses Shadow dom to isolate the CSS of the header & footer to the Whitelabel. Please consider the following:
If you would like to access the HTML elements of header / footer with Javascript, you have to modify how to do this:
Instead of document.querySelector(".some-element-of-wl-header")
You should use document.querySelector("#whitelabelHeader").shadowRoot.querySelector(".some-element-of-wl-header"
### 4.2.2. Header
The header can contain elements that appear in the look and feel of the rest of the website. This gives the user a sense of continuity and makes the whitelabel appear more integrated. Ideally, the logo, colors and navigation elements are consistent with the rest of the website.
### 4.2.3. Footer
The footer can contain elements that fit in with the look and feel of the rest of the website, and ideally is similar to the other footers on the rest of the website.
## 5 Adjustment of the Quick Search and other (deep)links on the website
## 5.1 Construction of the search URLs
*The following link:*
[https://buchen.alpenregion.de/s/Kampen-(Sylt)--Nordsee--Deutschland?checkin=2023-06-05✓out=2023-06-11\&adults=2χldren=2χldrenAges=3%2C5](https://buchen.alpenregion.de/s/Kampen-\(Sylt\)--Nordsee--Deutschland?checkin=2023-06-05\&checkout=2023-06-11\&adults=2\&children=2\&childrenAges=3%2C5)
***Consists of:***
[https://buchen.alpenregion.de](https://buchen.alpenregion.de) --> The domain
/s --> Path to search
/Kampen-(Sylt)--Nordsee--Deutschland --> Region/Travel destination
?checkin=2023-06-05&checkout=2023-06-11&adults=2&children=2&childrenAges=3%2C5 --> Search parameters
* All search parameters are optional.
* Region / Travel destination
* If the entire inventory in the partner's region is to be searched, the red part can be removed.
* If a search is to be made locally rather than through the entire inventory, a drop-down selection can facilitate the search and make important locations easy to find even for people without detailed knowledge of the region.
| Dropdown value | **Search entry Holidu** |
| --------------------- | --------------------------------- |
| North Sea | North-Sea--Germany |
| Nordfriesland | Nordfriesland--Germany |
| Amrum | Amrum--North-Sea--Germany |
| Kampen | Kampen-(Sylt)--North-Sea--Germany |
## 5.2 Search parameters
### 5.2.1. Search with fixed travel dates
To search with fixed travel dates, the parameters checkin and checkout must be specified.
### 5.2.2. Search with flexible travel dates
To search with flexible travel dates, the parameters dateRanges and duration must be specified. Optionally, the parameter checkinWeekdays can be specified to determine the day of the week of arrival.
*Example 1 - One week in July:*
?dateRanges=2023-07-01\~2023-07-31\&duration=7
*Example 2 - A weekend (Fri. - Sun.) in July:*
?dateRanges=2023-07-01\~2023-07-31\&duration=2✓inWeekdays=5
### 5.2.3. Overview of the most important search parameters
| Parameter | Format | Description |
| :--- | :--- | :--- |
| *Search with fixed travel dates* | | |
| checkin | Dateyyyy-mm-dd | Arrival day
Example: 2023-06-05 |
| checkout | Date
yyyy-mm-dd | Departure day
Example: 2023-06-07 |
| *Search with flexible travel dates* | | |
| dateRanges | Date / Period yyyy-mm-dd\~yyyy-mm-dd | Period (Start day \~ End day) Example: 2023-07-01\~2023-07-31 |
| duration | Whole number (Integer) | Number of travel days Example: 7 |
| checkinWeekdays | Whole number (Integer) | Week day of arrival Mo: 1, So: 7 |
| ***Travellers / Rooms*** | | |
| adults | Whole number (Integer) | Number of adults Example: 2 |
| children | Whole number (Integer) | Number of children Example: 2 |
| childrenAges | Whole number (Integer) comma separated | Age of the children Example: 7 Example comma-separated for multiple ages: 7,9 (Value must then be urlencoded 7%2C9) |
| bedrooms | Whole number (Integer) | Number of bedrooms Example: 2 |
| | | |
| ***Search categories*** | | |
| propertyType | string | Type of property -> example:propertyType=VACATION_HOME Example comma-separated for multiple property types (Value must then be urlencoded %2C) propertyType=VACATION_HOME%2CVACATION_APARTMENT Potential property types that can be used are listed here: [/page/holidu-whitelabels#7311-potential-propertytype-responses](#7311-potential-propertytype-responses) |
| rating | Whole number (Integer) | Filter on rating of e.g. 6 (60) stars or more . Only works for the ratings of 60, 70, 80 and 90 -->
Example: rating=90
Example: rating=60 |
| withoutRating | true | Filter on properties without any rating ->
Example:
withoutRating=true |
| amenities | string | Available amenities -> Example:
amenities=SAUNA Example comma-separated for multiple amenities (Value must then be urlencoded %2C) amenities=INTERNET%2CSAUNA |
| propertyViews | string | view from the property ->
propertyViews=VIEW_SEA
propertyViews=VIEW_LAKE
propertyViews=VIEW_MOUNTAIN |
| onlyCancellable | true | Flexible cancellation options available -> Example:
onlyCancellable=true |
| toSkiArea | Whole number (Integer) | Max Distance in meters to ski lift (1km, 3km or 10km) toSkiArea=1000 |
| toBeach | Whole number (Integer) | Max Distance in meters to beach (1km, 3km or 10km) toBeach=3000 |
| toCityCenter | Whole number (Integer) | Max Distance in meters to city center (1km, 3km or 10km) toCityCenter=10000 |
| toCoast | Whole number (Integer) | Max Distance in meters to coast (1km, 3km or 10km) toCoast=1000 |
| toLake | Whole number (Integer) | Max Distance in meters to lake (1km, 3km or 10km) toLake=1000 |
| regionIds | Whole number (Integer) | Combine specific areas in 1 search, using the regionIds assigned by Holidu --> regionIds=13386 Example comma-separated for multiple regions (Value must then be urlencoded %2C) regionIds=13386%2C12726 |
| sustainability=GREEN_PROPERTY | string | Filter on properties with the "sustainability label" -->
sustainability=GREEN_PROPERTY |
| minPrice=ome to t\&maxPrice=er hub f | Whole number (Integer) | Search based on Price. Only works (1) using preditermined combinations of parameter at the same time AND (2) when travel dates are selected. minPrice=0\&maxPrice=50
minPrice=0\&maxPrice=100
minPrice=0\&maxPrice=150
minPrice=0\&maxPrice=200
minPrice=200 (this is one exception) |
| | | |
## 5.3. Deeplinking
General note: The easiest way to generate deep links is to use the search function on the Whitelabel.
All parameters that can be filtered in the search such as location/region, exact travel period, flexible travel period, price category, type of accommodation or any equipment features can be filtered on the page. All parameters are contained in the URL, so it can simply be copied from the address bar of the web browser and integrated into the CMS.
If the Whitelabel is already being tested, you can use it to view the results in your region with selected sources. If the whitelabel is not yet available and you would like to prepare yourself, you can use [www.holidu.com.](http://www.holidu.com.) Please note that holidu.com may have additional sources and the region may be set up differently based on decisions made with the partner. Accordingly, it cannot be guaranteed that you will get the same number of results on the whitelabel for the same search.
### 5.3.1. Example 1 - Period and duration
* Search criteria
* Accommodation available for 1 week in July
* Deeplink
* [https://buchen.alpenregion.de/s?dateRanges=2023-07-01%7E2023-07-31&duration=7](https://buchen.alpenregion.de/s?dateRanges=2023-07-01%7E2023-07-31&duration=7)
* Used parameters
* dateRanges (Period)
* duration (in days)
### 5.3.2. Example 2 - Accommodation for guests with pets
* Search criteria
* Accommodation with the filter "Pets allowed”
* No restriction on travel dates
* Deeplink
* [https://buchen.alpenregion.de/s?amenities=PETS_ALLOWED](https://buchen.alpenregion.de/s?amenities=PETS_ALLOWED)
* Used parameters
* amenities (Filter value PETS\_ALLOWED)
### 5.3.3. Example 3 - A couples weekend near a ski resort
* Search criteria
* from 02.12. - 14.04. on any weekend from Friday - Sunday.
* Accommodation with the filter "Distance ski area or ski slope" with the value "less than 3km".
* For 2 adults
* Accommodation with sauna
* Deeplink
* [https://buchen.alpenregion.de/s?dateRanges=2023-12-02%7E2024-04-14\&duration=2✓inWeekdays=5\&adults=2\&amenities=SAUNA\&toSkiArea=3000](https://buchen.alpenregion.de/s?dateRanges=2023-12-02%7E2024-04-14\&duration=2\&checkinWeekdays=5\&adults=2\&amenities=SAUNA\&toSkiArea=3000)
* Used parameters
* dateRanges (period)
* duration (in days)
* checkinWeekdays (Day of check-in, in the example 5 for Friday)
* adults (Number of adults)
* amenities (Filter value SAUNA)
* toSkiArea (Distance from 3000m to the ski area)
## 6. GTM Tracking
## 6.1. How to include GTM
Only GA4 property IDs are supported (format: G-XXXXXXXXXX). Universal Analytics (property IDs starting with UA-) was shut down by Google on 2024-07-01 and no longer collects data. Any UA- scripts still embedded in your header or footer should be removed — they will load in the browser but deliver no data.
There are two ways to hook your GTM container into the whitelabel — pick the one that matches your header/footer setup.
1. You provide your own header & footer. Include the standard GTM loader script from googletagmanager.com/gtm.js with your container ID directly in your header HTML, and add the standard noscript fallback (an iframe pointing to googletagmanager.com/ns.html with the same ID) to your footer HTML. This is the recommended path — it gives you full control over the container and its consent categorization. See Requirements Header & Footer for the exact placement rules.
2. You use the Holidu default header & footer. Send us the complete GTM loader script snippet (not just the container ID) and we will embed it into the whitelabel’s header configuration on your behalf. If you additionally want extra Gtags or a tracking proxy, provide the full script for those as well — we cannot generate them from an ID alone.
The whitelabel supports one GTM setup at a time — either yours, or Holidu’s. Do not combine both; loading two containers in parallel leads to duplicate events and unreliable data.
## 6.2. GTM Events
We commit events to the datalayer using the GA4 standards. Important to note is that we don't have a shopping cart logic in the whitelabel and therefore don't have the add to cart and remove from cart events. Please note, that we do not support any additional custom events.
Below the events are described that we provide
* view\_item\_list event
* view\_item event
* Begin\_checkout event
* purchase event
When each event fires:
* SearchPage-Listing (view*item*list) — on the search results page as soon as the offer list has loaded.
* viewcontent (view\_item) — when an offer’s detail page is opened.
* initiatecheckout (begin\_checkout) — when the checkout process starts.
* purchase — on the payment page, when the user clicks the “Book now” button. This is deliberately fired before the redirect to the booking confirmation page.
Important for subdomain setups: the booking confirmation page is served from [www.holidu.de](http://www.holidu.de), not from your subdomain. Any tracking you attach to that confirmation page will therefore not fire on your domain. Rely on the purchase event on the payment page for conversion attribution.
### 6.2.1. View\_item\_list Event

```text title="View item list event"
{
event: 'SearchPage-Listing',
...queryParams,
content_ids: , All offers
content_type: 'hotel',
offers: , First 3 offers
num_adults: ,
num_children: ,
checkin_date: ,
checkout_date: ,
isDesktop: ,
}
```
### 6.2.2. View\_item Event

```text title="View item event"
{
event: 'viewcontent',
content_ids: ,
content_type: 'hotel',
suggested_hotels: ,
num_adults: ,
num_children: ,
checkin_date: ,
checkout_date: ,
}
```
### 6.2.3. begin\_checkout Event

```text title="Begin checkout event"
{
event: 'initiatecheckout',
content_ids: ,
content_type: 'hotel',
num_adults: ,
num_children: ,
checkin_date: ,
checkout_date: ,
}
```
### 6.2.4. purchase Event

```text title="purchase event"
{
event: 'purchase',
content_type: 'hotel',
content_ids: ,
checkin_date: ,
checkout_date: ,
num_adults: ,
num_children: ,
currency: ,
value: ,
}
```
## 6.3. Consent Management Requirements
If you run your own consent management platform (CMP) — for example Usercentrics, Cookiebot, consentmanager.net, OneTrust, Iubenda — two configurations on your side are required for tracking to work end-to-end:
Whitelist the whitelabel domain in your CMP. Add your booking domain (e.g. buchen.your-domain.com, or the Holidu subdomain we provide such as your-brand.holidu.de) as an allowed domain in your CMP admin panel. Without this the consent banner will not render correctly inside the whitelabel.
Configure the GTM container correctly in your CMP. By default, most CMPs categorize GTM as “marketing” or “statistics” and block it until the user actively opts in. Please review the categorization for the container that fires the booking events (view*item*list, view\_item, begin\_checkout, purchase) together with your data-protection officer, so that conversions and attribution can be recorded reliably. Without an appropriate configuration you will see near-empty reporting even when the container is loading correctly.
Please confirm both configurations to us during the kickoff call.
---
# 📈 Digest into multi-rates in Holidu API!
Source: https://developer.holidu.com/changelog/digest-into-multi-rates-in-holidu-api
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
## Multi-rates in Holidu API v2.0
New feature available in our API!
> **Info: We’re excited to introduce a new functionality: multi-rates!**
>
> * You can now specify a Rate Identifier (`rateId`) in your requests to manage different rates (e.g., "Standard Rate", "Non-Refundable Rate") separately across apartments.
> * The `rateId` parameter is a string field used across multiple parts of our API:
> * LOS (Length of Stay)
> * Payment Configuration
> * Cancellation conditions
## ⚡ Summary: Why use multi-rates?
1. Manage twopricing models (e.g., refundable vs non-refundable) separately.
2. Delete, update, or retrieve LOS, payment settings and cancellation conditions per rate.
3. Keep your apartment’s pricing structure more flexible and organized.
> **Danger: Important:**
>
> ☑️ If no `rateId` is passed, the request operates on the **default rate**.
>
> ☑️ `rateId` must be a string of either `REFUNDABLE` or `NON_REFUNDABLE` and should be consistently used across different API calls for the same rate.
>
> ☑️ Product design is currently supporting two rates per listings, so please set-up only:
>
> * one flexible rate (with free-cancellation)
> * one non-refundable rate (without free cancellation)
Please find here the [Holidu API V2 LOS](https://developer.holidu.com/docs/length-of-stay-los.md#using-rateid-with-los-length-of-stay) on how to set up a use `rateId` in LOS along with [Holidu API V2 Payment configuration](https://developer.holidu.com/docs/payment-configuration.md#using-rateid-with-payment-configuration) in payment configuration and [Holidu API V2 Cancellation conditions](https://developer.holidu.com/docs/cancellation-conditions.md#using-rateid-with-cancellation-conditions) in cancellation conditions.
If you are interested and still have some question, feel free to reach out to
or your Technical Account Manager.
---
# Check out our newly added feature - Booking lead time
Source: https://developer.holidu.com/changelog/draft-check-out-our-newly-added-feature-booking-lead-time
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
We are excited to introduce a new field to our API: `leadTimeHours`. This field enhances our booking capabilities by defining the minimum amount of hours before check-in that a booking can be generated.
How it works? If you set up a booking lead time of 24 hours, then the apartment will never be bookable less than 24 hours before check-in. The parameter `leadTimeHours` was added to the [apartment endpoint](https://developer.holidu.com/reference/upsertapartment.md).
Please find here the [Holidu API V2 Apartments Guide](https://developer.holidu.com/docs/general-static-data.md) on how to set up a booking lead time for each apartment.
If you are interested, would be happy if you reached out to
or your Technical Account Manager.
---
# Meet our enhanced Discount Endpoint!
Source: https://developer.holidu.com/changelog/our-new-discount-endpoint
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
In Holidu API V2 we now offer you 4 discount types to enable you to create the right discount structure that works for you.
Whether you want to offer a discount for long stays, last minute, early bird bookings, or for bookings made from specific devices, in Holidu API V2 that is possible!
Please find here the [Holidu API V2 Discounts Guide](https://developer.holidu.com/docs/discounts-1.md) on how to create great new discounts for our fellow guests.
If you are interested, would be happy if you reached out to
or your Technical Account Manager.
---
# Let's enhance facilities!
Source: https://developer.holidu.com/changelog/lets-enhance-facilities
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
Very often guests choose their desired vacation apartment by the range of facilities offered! Therefore most filters on the Holidu's list page are based on facilities.
In order to increase the performance it is important to us that we receive all facilities, that your apartments are offering to our fellow guests.
To ensure a various and valuable range of facility types to our mutual guest, we are taking the following steps:
Firstly we have added the "name" field. Here you can insert the raw facility names from your own system. Further, we have made the “type” not mandatory any longer and will take over the correct mapping of those facility names.
As a next step, of course, we plan to expand our facility type list if we miss facilities that we consider as value-adding to our guests. We want to learn from the facilities pushed by our partners and enrich our endpoint thereby.
So if you are interested in pushing all your facilities' names to help us enhance our list, please do not hesitate to do so. We would be happy if you reached out to
or your Technical Account Manager.
Please find below here the [API Reference Facility Endpoint](https://developer.holidu.com/reference/updatefacilities.md).
---
# Holidu API V2 is Officially Released!
Source: https://developer.holidu.com/changelog/hapi-version-2-is-officially-released
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
We are excited to announce the release of Holidu API version 2! This latest version includes a range of new features and enhancements that we believe will greatly improve your experience with our platform.
We have given our best effort to improve our Holidu API for our partners, making it easy to update information, removing redundant fields, using simpler object structures, and much more:
One of the most significant changes in this release is the addition of a granular endpoint for apartment management. This new endpoint will give you more control over your apartment listings, allowing you to manage your information in a more efficient and accurate way.
Therefore you will benefit from a straightforward, clean, and simple Holidu API V2 making it fun to work with:
Another exciting new feature is the apartment validation endpoint. With this new endpoint, you'll be able to validate the status of your apartments and make sure all the information, such as availability for booking, is up-to-date and complete. If for any reason, your apartment becomes inactive, you can use the validation endpoint to quickly identify the reason and take the necessary steps to get it reactivated.
Further, Holidu API V2 allows you to activate and deactivate apartments effectively through our new activation and deactivation endpoints. This eliminates the need to push Updates regularly in order not to let apartments go offline. This will for sure help you save your resources!
We've also made significant improvements to our discount model, making it more flexible and customizable to meet your specific needs.
The booking notification body has been enhanced as well providing you and your customers with all relevant booking information (for instance we found an even more comprehensible way of transferring the extra cost of each booking).
In case of cancellations Holidu API V2 introduces an automated cancellation process, allowing partners to receive instant notifications about canceled bookings.
For easy and efficient testing, we have set up a SANDBOX environment to ensure an even more easy and quick integration process.
Lastly, query parameters such as providerApartmentId, and provider were removed from the request body, those will now always be part of the URL and never part of the body.
We hope you will enjoy these new features and find them helpful in managing your apartment listings on our platform. If you have any questions or feedback, please don't hesitate to contact us.
Please check out here our detailed [Guides for Holidu API V2 Endpoints](https://developer.holidu.com/docs/certification.md) on how to use Holidu API V2.
If you have any questions, please do reach out to
or your Technical Account Manager. We are happy to help you.
---
# Get ready to migrate to Holidu API V2!
Source: https://developer.holidu.com/changelog/hapi-version-1-is-deprecated
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
With the release of Holidu API V2, there will be no new development planned for Holidu API V1 and we encourage you to upgrade to API version 2 as soon as possible.
API version 2 includes a range of new features and improvements that will greatly enhance your experience with our platform. These new features include a granular endpoint for apartment management, an apartment validation endpoint, a more flexible discount model and more. See our [migration guide](https://developer.holidu.com/docs/hapi-version-1-to-version-2-migration-guide.md) to start migrating your integration to Holidu API V2 to start benefiting.
We understand that upgrading to a new API version can be a significant change, but we are here to support you every step of the way. If you have any questions or concerns, please don't hesitate to contact us.
If you are ready, would be happy if you reached out to
or your Technical Account Manager.
---
# Keep Your Apartment Information Accurate and Up-to-Date with Our New /validation Endpoint
Source: https://developer.holidu.com/changelog/keep-your-apartment-information-accurate-and-up-to-date-with-our-new-validation-endpoint
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
We are excited to announce a new `/validation` endpoint in our version 2 API. We understand the importance of having accurate and up-to-date information for your apartments, which is why we have implemented this new feature.
In the event that your apartment becomes inactive, the `/validation` endpoint will provide you with the specific reason why, so you can take the necessary steps to get it reactivated.
To use this new endpoint, simply make a GET request to [/validation](https://developer.holidu.com/reference/getapartmentvalidation.md). The response will include the validation status of your apartment, along with any information that is missing or needs to be updated.
Check out our guide on possible error code you could encounter, as well as how to solve it [here](https://developer.holidu.com/docs/validation.md).
We hope this new feature will improve your experience with our platform and make it even easier for you to manage your apartments. If you have any questions or feedback, please don't hesitate to reach out to us.
---
# Holidu is in preparation for version 2 of the API.
Source: https://developer.holidu.com/changelog/announcing-preparation-for-version-2
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
To allow maximum compatibility and to avoid double work, we recommend to follow these guidelines already while working with version 1 of the API.
* make use of the granular endpoints like facilities, extra costs, photos, reviews, etc. and do not push everything through the apartment endpoint. In version 2 it will not be possible anymore to push everything through the apartment endpoint.
* Do not push costs as part of facilities, this will not be supported in version 2 anymore. Only use the cost related field *inclusive* to indicate if it has to be paid, but push the cost through the extra cost endpoint.
---
# Welcome to the brand new developer hub
Source: https://developer.holidu.com/changelog/welcome-to-the-brand-new-developer-hub
> For the complete documentation index, see [llms.txt](https://developer.holidu.com/llms.txt).
🎉 Welcome to the brand new Holidu Developer Hub, the place to find all documentation, reference and help you need to use all of Holidu's APIs.