BookingStudio REST API v1

Revisions

When Who What
04-09-2024 SDH Added CustomerFirstName and CustomerLastName to ReservationSummary
20-03-2023 SDH Added Sortindex attribute to v1/Lodging.
31-01-2023 SNV Documented query parameters page and pagesize of bookingoptions
12-05-2022 JBJ Added list of master facilities
08-12-2021 JBJ Added Status to SeasonCalendars
03-11-2020 SDH Added DefaultCurrency to Language entity
11-05-2020 SDH Fixed incomplete documentation for endpoint parameters to Terms and Conditions
26-09-2019 THS Reworked how the credit card gateway resources workflow is handled
22-06-2018 THS Added calendar call for ics format
25-04-2018 RKG Added the Text entity and supporting endpoint. See docs for more info
16-11-2016 DKN The ocu paramter is removed (it has been obsolete for a long time now)
26-10-2016 DKN Added a guide on how to batch import BookingOptions to your own system
30-09-2016 SDH Added custom fields to the customer entity. See docs for more info.
06-09-2016 NWN Added ItemDefinitions to the items call. See docs for more info.
27-07-2016 DKN Added a BlockedValidation call on customers. See docs for more info.
27-07-2016 DKN Added Tags call to help partners identifying tag ids. See docs for more info.
01-04-2016 DKN Added DaysWithDiscount to BookingOptions. See docs for more info.
15-03-2016 JBJ Added possibility to create a manual creditcard payment on a reservation. Se the documentation about Gateways.
25-01-2016 SDH Possibility to book on existing customers
07-12-2015 DKN Added new itp filter to API calls for BookingOptions. This specifies the level of item prices returned by the API.
30-11-2015 DKN Added new only_regular_weeks filter to search for BookingOptions.
13-11-2015 JBJ Added CustomerAdvisors, and possibility to send a customer advisor in a BookingRequest
16-10-2015 SDH Added MasterFacilityId to Facility entity
29-07-2015 DKN Added possibility to query multiple durations on BookingProbabilities
14-04-2015 THS Added A Description for Payments and their use. Added a payment to the Create Booking example. Added an example of the payrates.xml call
10-04-2015 SDH Added new winterseason rental rules. BookingOptions may or may not be available, if they break the rules for winterseason rental.
If they are available and break the rules, a new attribute on the BookingOption will have the value of "true", and should be handled accordingly to the specifications from the bureau.
See the BookingOption entity reference for further information.
30-03-2015 JBJ Added TagIds to LodgingImages in v1/lodgings
24-09-2014 SDH Removed resource v1/lodgings/bookingstatus.{format}.
Only available in v1Admin now.
17-09-2014 SDH Added resource for creating a new customer (with subscriptions to InformationMaterials).
Added resource for listing InformationMaterials.
Minor bugfix in errormessages (occasionally incorrect description reported in X-ErrorMessage header)
15-09-2014 SDH New pattern for reporting errors.
11-09-2014 SDH Added new resource v1/lodgings/bookingstatus.{format}
05-09-2014 DKN Added an optional sendemailtocustomer parameter to the BookingReques
01-09-2014 SDH Added InternalNote element to the BookingRequest
31-03-2014 DKN Added DepartmentId to lodgings
07-03-2014 DKN Added an availability filter when searching bookingoptions
13-01-2014 DKN Added a tag filter when searching bookingoptions
12-11-2013 DKN Corrected a wrong reference to the ISO standard being used in the Customer resource. The correct is ISO 3166-1 Alpha Country Code
05-12-2013 DKN Added possibility to get information about if a customer is subscribed to the newsletter.
05-09-2013 DKN Specified ChangeDay and MinimumDay and Price on SeasonCalendars and SeasonPrices
04-09-2013 DKN Corrected the routes to seasoncalendar(s)
14-08-2013 DKN Added SupplementalAddress to the Customer entity
01-08-2013 DKN Clarified how items should be passed when making a booking

Table of content

  1. Introduction
    1. Authentication
    2. Common questions
  2. Handling errors
  3. Rate limiting (429 Too Many Requests)
  4. Response status codes
    1. Success
    2. Errors
  5. Backoffice links
  6. Guide: How to batch import BookingOptions
  7. Enums
  8. Resources
    1. BoardTypes
    2. BookingOptions
    3. BookingProbabilities
    4. Bookings
    5. Calendars
    6. Currencies
    7. CustomerAdvisors
    8. CustomerBlockedValidation
    9. CustomerLogin
    10. CustomerReservations
    11. Facilities
    12. FacilityGroups
    13. Gateways
    14. Heartbeat
    15. InformationMaterials
    16. Items
    17. Languages
    18. Locations
    19. Lodgings
    20. LodgingTypes
    21. LodgingUnitTypeCategories
    22. LodgingUnitTypes
    23. ReportLists
    24. ReservationSummaries
    25. SeasonCalendars
    26. SeasonPrices
    27. Tags
    28. TermsAndConditions
    29. Texts
  9. Entities
    1. BoardType
    2. BookingOption
    3. BookingRequest
    4. Calendar
    5. Currency
    6. Customer
    7. CustomerAdvisor
    8. CustomFieldValue
    9. Facility
    10. FacilityGroup
    11. InformationMaterial
    12. Item
    13. ItemPrice
    14. Language
    15. Location
    16. Lodging
    17. LodgingType
    18. LodgingUnitType
    19. LodgingUnitTypeCategory
    20. Payment
    21. ReportList
    22. ReservationSummary
    23. SeasonCalendar
    24. SeasonPrice
    25. Tags
    26. TermsAndConditions
    27. Texts
  10. Master Facilities

Introduction

The BookingStudio REST API allows developers to hook into BookingStudio and connect it to third-party applications. The REST API is implemented as plain XML over HTTP using all four REST commands: GET, POST, PUT and DELETE.

Every resource, like Lodgings, Locations and Bookings has their own URL and are manipulated in isolation. The API closely follows the REST principles and it's easy to use. You can explore the GET part of the API through any browser. We recommend Firefox.

Entities are created independently for each and every installation, based on our client's needs. That means that you cannot rely on the id's across our clients. E.g. one installation can have Danish language with an id of 1, and another can have Danish language with an id of 5. This is very important to keep in mind when integration to multiple clients.

Authentication

You access the API through an API key. The API key has it's own configuration that is controlled by the administrator of the current installation. You're required to add your API key as user credentials via HTTP Basic Authentication. Security is provided via SSL if the plan supports it.

Common questions

Where can I find my API key?
The API key is created inside our clients BookingStudio Application. Our clients have fine grained control of what the API key may and may not access.
Is it possible to retrieve compressed responses from the API?
Our API can serve GZIP'ed responses. Just specify the "Accept-Encoding: gzip" header and you're ready to fly.
Is the order of the XML elements guaranteed?
No, the order of the XML elements is NOT guaranteed. Please take that into account when integrating with our services.
What are the difference of a resource and an entity?
Resources are URIs, and entities are the objects passed in and out of resources.

Handling errors

API clients must expect and gracefully handle transient errors, such as rate limiting or server errors. We recommend baking 5xx and 429 response handling into your low-level HTTP client so your integration can handle most errors automatically.

Rate limiting (429 Too Many Requests)

You can perform up to our fair-use limit (at the moment up to 120 requests per minute during nighttime, and up to 90 requests per minute at all other time). If you exceed this limit, you'll get a 429 Too Many Requests response for subsequent requests. Check the Retry-After header to see how many seconds to wait before retrying the request.

How to batch import BookingOptions

To batch import all BookingOptions, you must use the /v1/bookingoption.xml endpoint

How often are we allowed to read the BookingOptions?

Out fair usage policy is to read BookingOptions once every night for each language and each duration needed. Normally is should be fine to import the data with the following person combinations

adu=2&pet=0&itp=mandatory
adu=2&pet=1&itp=mandatory
adu=3&pet=1&itp=mandatory

This should give you enough data to get the prices you'll need. With two adults you get the two person discounts, and with three adults you get the standard prices and other discounts. It may be necessary to make other combinations if the bureau has special discounts. Please consult the bureau about information about what kind of discounts you can expect from them and code that into your importer. Please take great care to ensure you hit the API at an absolutely minimum during the import job.

Note: It’s against our fair usage policy to do import jobs more than once per night, and never during day hours.

How do I prevent BookingOptions no longer available to appear in my search result?

We have a lightweight API call to get the availability of all the lodgings from the API. This call is allowed to be called every half an hour to get you data in sync. You can easily parse each calendar and mark affected BookingOptions as obsolete in your system.

Read more about calendars here.

How do ensure that the BookingOption is still available during a Booking?

We have a lightweight API call you can use when guests are entering a booking session on your website, to ensure availability.

Read more about how to validate if a BookingOption is available here

Response status codes

The responses returned by the API are accompanied by meaningful HTTP status codes which represent the status of the request. Here's the general approach we take when returning responses:

Success

GET requests will return a "200 OK" response if the resource is successfully retrieved.

POST requests which create a resource we will return a "201 Created" response if successful.

POST requests which perform some other action will return a "200 OK" response if successful.

PUT requests will return a "200 OK" response if the resource is successfully updated.

DELETE requests will return a "200 OK" response if the resource is successfully deleted.

Errors

If there is an error in your input, you'll receive a "400 Bad Request" response, with details of the error. If you attempt to request a resource which doesn't exists, you'll receive a "404 Not Found" response. If an unhandled error occurs on the API server for some reason, you'll receive a "500 Internal Server Error" response.
To handle the errors, you will have to analyze the following response headers, which provides more detailed information:
X-ErrorCode: The unique ErrorCode for the error (see table below).
X-ErrorMessage: The ErrorMessage for the error (see table below). Please note that this message is indicative only and may vary from one resource to another. To handle the error in a robust way, refer to the X-ErrorCode in the headers.

Here are the details of potential error responses for any API request.

ErrorCode HttpCode ErrorMessage
1 500 Internal Server Error.
This errormessage can occur anywhere. No further description is available for the client.
2 401 Unauthorized
Attempt to authenticate with an invalid API key or attempt to use an invalid ID for a resource
3 400 The xml object provided could not be deserialized or is invalid
The Xml provided in the request body is in an invalid format for the current operation or does not follow the rules. Re-check the documentation and your xml.
4 404 We couldn't find the resource you're looking for. Please check the documentation and try again
5 403 Permission denied
You are trying to access a resource to with you are restricted access. The bureau may grant you access to the resource - contact bureau.
6 403 Permission denied for current target group
Target group not set on authenticated user. Please contact BookingStudio A/S
7 422 The failed internal server validation
The failed internal server validation
100 400 Language parameter is required
101 400 Invalid renderformat specified
Typically the resource must end with .xml or .json.
102 400 The request must contain either a BookingProbability or a BookingOption
103 400 The request must contain a customer or a customer id
104 400 Customers first name is required
105 400 Customers last name is required
106 400 Either a BookingOption or BookingProbability can be present - not both.
107 400 You cannot specify items on a BookingProbability
108 400 TargetGroup missing or not configured
109 400 BoardTypeId missing or non-existing
110 400 The creditors paycondition is not set. Please contact the bureau and have them correct the issue
111 400 An item is not available
112 400 An items quantity is out of the allowed range
113 400 The creditor was not found
114 400 The specified bookingprobability is not available
115 400 The specified booking option is not available
116 400 The specified customer was not found
117 400 The page parameter cannot be less than 1
118 400 The durations parameter is required
119 400 The durations provided must be unique and only present once
120 400 Maximum durations exceeded
121 400 The order of the proveded durations must be ordered by the lowest entry first
122 400 The minimumarrivaldate parameter is required
123 400 The maximumarrivaldate parameter is required
124 400 Cannot search more than 730 days (two years)
125 400 The language specified does not exist or is unavailable
126 400 The currency specified does not exist or is unavailable
127 400 LodgingId is required
128 400 LodgingUnitTypeId is required
129 200 The bookingoption is available, but conflicts with rules for winterseasons
The bookingoption is available, but conflicts with rules for winterseasons. Handling this issue should be agreed upon with the bureau.
130 400 The bookingoption conflicts with rules for winterseasons
The bookingoption is not available due to validation of the rules for winterseason
131 400 The bookingoption is no longer available
The lodging may be booked by another client or made unavailable in the meantime. Booking not possible.
132 400 Lodging not found
133 400 No matching target group for this lodging and this user
134 400 Terms and conditions not found
135 400 Terms and conditions not found for this language id
136 400 The id for the current entity cannot be changed
137 400 A proper payment id was not requested prior to Authorizing
138 400 Payment wasn't authorized
139 400 CardTypeNotSupported by Gateway
140 400 Mismatched Currencies
141 400 Transaction ID missing
142 400 Money for CreditCard Payment Posted in the wrong format
143 400 Gateway Id mismatch
144 400 Unable to load Gateway for Id
145 400 Cancel Payment Failed
146 400 Payment Was not found
147 400 Payment requires a booking option
148 400 Payment requires a Permission for the user's role
149 400 An item with charged after attributes cannot be booked ahead
150 400 You must specify an arrivalDate
151 400 Unsupported itemprice specified. Allowed values are All, Mandatory, None (fastest)
152 400 Version not supported
153 400 Filter not allowed
154 400 Cache not preheated
155 400 Adults parameter is required
156 400 Name parameter is required
157 400 Bucket parameter is required
158 400 BookingOption is required
159 400 LodgingUnitType was not found
160 400 The provided price differs from the system price
1002 400 Parameter client_id is required
1003 400 Parameter client_secret is required
1004 400 Parameter code is required
1005 400 ApplicationToken not found
1006 400 Application secret don't match

Backoffice links

You can construct links directly to our customers backend.

Template Parameters
/bs/default.aspx?url=%2Fbs%2FFrontDesk%2FReservationHandle.aspx%3Freservation={reservationId}&mode=arrival reservationId

Enums

FacilityTypes

Id Name
1 Boolean
2 Text
3 Integer

ItemTypes

Id Name
1 Standard
2 Consumption
3 Deposit
4 Insurance
5 Transportation
6 Cleaning

ItemChargeTypes

Id Name Description
1 Ahead The item must be charged ahead of arrival
2 After The item must be charged at departure
3 AfterButShowAhead The item must be charged at departure, but shown ahead
4 AheadHidePrice The item must be charged ahead of arrival, but the price is hidden (obsolete, treat as Ahead)

Resources

This section describes the details about the resources available. BookingStudio is a very dynamic and flexible system, and our clients create and maintains almost every aspect of the data in their system. That means that entities will not be equal across clients, e.g. English language may have id 3 in one installation, and id 5 in another installation (if it exists at all). Only the entities described in the Enum section will be equal across installations. Please also note that nearly all resources returns it's entities localized by the specified language id.

BoardTypes

Returns all boardtypes localized by the specified language id.

Request

GET rest/v1/boardtypes.xml?lan={languageid}
                    

Route values

{languageid} The language of the localized fields (required)
                    

Caching

Caching time: 3600 seconds
VaryByParam: lan
    

Example response

HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
<?xml version="1.0" encoding="utf-8"?>
<BoardTypes>
  <BoardType Id="3" Name="No meals" ShortDescription="No meals served" />
</BoardTypes>
                    

BookingOptions

ALL OTHER VERSIONS THAN VERSION 3 IS PENDING REMOVAL - DON'T USE VERSION 1 OR 2

This collection is used to get all BookingOptions for a specific criteria for the next 3 years. The number of requests that'll appear on each page is variable. The BokingStudio API follows the RFC5988 convention of using the Link header to provide URLs for the next page. Follow this convention to retrieve the next page of data. Please don't build the pagination URLs yourself!

Here's an example response header from requesting the third page of messages:

Link: <https://hostname-api.bookingstudio.dk/rest/v1/bookingoptions.xml?lan=1&pos=2055489e-bd01-4ec4-9ade-a3445d65ade8> rel="next"


If the Link header is blank, that's the last page.

Mandatory Requests Headers

Version: 3
User-Agent: YOURNAME
    

Request

GET /v1/bookingoptions.xml?lan={languageId}&adu={adults}&chi={children}&inf={infants}&pet={pets}&dur={durations}&only_discounts={onlydiscounts}&lod={lodgingids}&page={page}&pagesize={pagesize}

Route values

{languageId} The language to show prices from (required)
{durations} The length of the stays (if not specified 7 is assumed). You can specify multiple durations separated by comma ordered with the lowest duration first. E.g. 7,14,21,28,35
{adults} The number of adults to base the price on (if not specified 2 is assumed)
{children} The number of children to base the price on (if not specified 0 is assumed)
{infants} The number of infants to base the price on (if not specified 0 is assumed)
{pets} The number of pets to base the price on (if not specified 0 is assumed)
{only_discounts} A filter criteria that specifies if only discounts is needed. 0 = return all bookingoptions (default). 1 = return only bookingoptions with discounted prices
{only_regular_weeks} A filter criteria that specifies if only whole regular weeks is needed. 0 = return all bookingoptions (default). 1 = return only bookingoptions with regular weeks (e.g. whole weeks arriving on a valid system change day)
{itp} A filter criteria that specifies what kind of item prices you need. All = return all item prices, Mandatory = return only mandatory item prices (default), None = return no item prices (fastest)
{tag} A filter criteria that scopes the prices returned to a specific tagname.
{lodgingids} Filters result only containing specified lodging id/ids. E.g. 77 or 77,78,19
{page} Controls paging and which page to show. (if not specified 1 is assumed)
{pagesize} Controls the paging pagesize. (if not specified 1000 is assumed. Range is [1000-10000].)
    

Rate Limit

This resource has rate limiting to prevent unfair usage.
    

Caching

This result may use some internal caching for about 30 minutes.
    

Example response

HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
<?xml version="1.0" encoding="utf-8"?>
<BookingOptions>
  <BookingOption Price="3005.03" Currency="DKK" DiscountTags="" NormalPrice="3005.03" Arrival="2011-06-10T00:00:00" Priority="Normal" LodgingId="110" IsAvailable="true" LodgingUnitTypeId="118" Departure="2011-06-17T00:00:00" Duration="7" Adults="2" Children="0" LanguageId="1" Infants="0" Pets="0" HasDiscount="false">
    <ItemPrices>
      <ItemPrice ItemId="75" UnitPrice="199.00" Currency="DKK" IsMandatory="false" MinQuantity="0" MaxQuantity="2" />
      <ItemPrice ItemId="33" UnitPrice="750.00" Currency="DKK" IsMandatory="true" MinQuantity="1" MaxQuantity="1" />
    </ItemPrices>
  </BookingOption>
</BookingOptions>
                    

ALL OTHER VERSIONS THAN VERSION 3 IS PENDING REMOVAL - DON'T USE VERSION 1 OR 2

This collection is used to get all BookingOptions for a specific lodging with the specified criterias for the next 3 years. The number of requests that'll appear on each page is variable. The BokingStudio API follows the RFC5988 convention of using the Link header to provide URLs for the next page. Follow this convention to retrieve the next page of data. Please don't build the pagination URLs yourself!

Here's an example response header from requesting the third page of messages:

Link: <https://hostname-api.bookingstudio.dk/rest/v1/lodgings/1/bookingoptions.xml?lan=1&pos=2055489e-bd01-4ec4-9ade-a3445d65ade8> rel="next"


If the Link header is blank, that's the last page.

Mandatory Requests Headers

Version: 3
User-Agent: YOURNAME
    

Request

GET /v1/lodgings/1/bookingoptions.xml?lan={languageid}&adu={adults}&chi={children}&inf={infants}&pet={pets}&dur={durations}&only_discounts={onlydiscounts}&page={page}&pagesize={pagesize}

Route values

{languageid} The language to show prices from (required)
{durations} The lenght of the stays (if not specified 7 is assumed). You can specify multiple durations separated by comma ordered with the lowest duration first. E.g. 7,14,21,28,35
{adults} The number of adults to base the price on (if not specified 2 is assumed)
{children} The number of children to base the price on (if not specified 0 is assumed)
{infants} The number of infants to base the price on (if not specified 0 is assumed)
{pets} The number of pets to base the price on (if not specified 0 is assumed)
{only_discounts} A filter criteria that specifies if only discounts is needed. 0 = return all bookingoptions (default). 1 = return only bookingoptions with discounted prices
{only_regular_weeks} A filter criteria that specifies if only whole regular weeks is needed. 0 = return all bookingoptions (default). 1 = return only bookingoptions with regular weeks (e.g. whole weeks arriving on a valid system change day)
{itp} A filter criteria that specifies what kind of item prices you need. All = return all item prices, Mandatory = return only mandatory item prices (default), None = return no item prices (fastest)
{tag} A filter criteria that scopes the prices returned to a specific tagname.
{page} Controls paging and which page to show. (if not specified 1 is assumed)
{pagesize} Controls the paging pagesize. (if not specified 1000 is assumed. Range is [1000-10000].)
    

Rate Limit

This resource has rate limiting to prevent unfair usage.
    

Caching

This result may use some internal caching for about 30 minutes.
    

Example response

HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
<?xml version="1.0" encoding="utf-8"?>
<BookingOptions>
  <BookingOption Price="3005.03" Currency="DKK" DiscountTags="" NormalPrice="3005.03" Arrival="2011-06-10T00:00:00" Priority="Normal" LodgingId="110" IsAvailable="true" LodgingUnitTypeId="118" Departure="2011-06-17T00:00:00" Duration="7" Adults="2" Children="0" LanguageId="1" Infants="0" Pets="0" HasDiscount="false" LodgingId="1">
    <ItemPrices>
      <ItemPrice ItemId="75" UnitPrice="199.00" Currency="DKK" IsMandatory="false" MinQuantity="0" MaxQuantity="2" />
      <ItemPrice ItemId="33" UnitPrice="750.00" Currency="DKK" IsMandatory="true" MinQuantity="1" MaxQuantity="1" />
    </ItemPrices>
  </BookingOption>
</BookingOptions>
                    

Validate if a BookingOption is available

Version 1 (deprecated): You can validate a BookingOption by posting it to this endpoint. If the BookingOptions is available the response will be 200 OK, if it's unavailable the response will be 400.

Version 2: You can validate a BookingOption by posting it to this endpoint. If the BookingOption is available the response will be 200 OK, if it's unavailable the response will be 404 Not Found.

We recommend that you use this call when as soon as the guest enters the checkout process on the website

Request

POST /v1/bookingoptions/available.xml
Version: 1 or 2 (Version 1 is deprecated)

<?xml version="1.0" encoding="utf-8"?>
<BookingOption Price="3005.03" Currency="DKK" DiscountTags="" NormalPrice="3005.03" Arrival="2011-06-10T00:00:00" Priority="Normal" LodgingId="110" IsAvailable="true" LodgingUnitTypeId="118" Departure="2011-06-17T00:00:00" Duration="7" Adults="2" Children="0" BoardTypeId="3" LanguageId="1" Infants="0" Pets="0" HasDiscount="false" />
    

Route values

None
    

Example response (Version 1 - deprecated)

HTTP/1.1 200 OK
    

Example response (Version 2)

In version 2 a successful response will return 200 OK with the BookingOption in the response body. The BookingOption will include all the details of the BookingOption, and the ItemPrices with the prices based on the posted BookingOption like adults, children, infants, pets, etc. This is useful for displaying the correct prices for the guest.

HTTP/1.1 200 OK

<?xml version="1.0" encoding="utf-8"?>
<BookingOption Price="3005.03" Currency="DKK" DiscountTags="" NormalPrice="3005.03" Arrival="2011-06-10T00:00:00" Priority="Normal" LodgingId="110" IsAvailable="true" LodgingUnitTypeId="118" Departure="2011-06-17T00:00:00" Duration="7" Adults="2" Children="0" BoardTypeId="3" LanguageId="1" Infants="0" Pets="0" HasDiscount="false">
  <ItemPrices>
    <ItemPrice ItemId="75" UnitPrice="199.00" Currency="DKK" IsMandatory="false" MinQuantity="0" MaxQuantity="1" />
    <ItemPrice ItemId="33" UnitPrice="750.00" Currency="DKK" IsMandatory="true" MinQuantity="1" MaxQuantity="1" />
  </ItemPrices>
</BookingOption>
    

Get the payment rates for a booking option

Request

POST /v1/payrates.xml
<?xml version="1.0" encoding="utf-8"?>
<BookingRequest>
    <Customer FirstName="Tester"
        LastName="Testersen"
        Email="test@test.tst"
        IsoCountry="DK"
        PostalCode="5700"
        City="Svendborg" 
    />
    <BookingOption Priority="Normal"
        Duration="7"
        Departure="2015-06-06T00:00:00"
        Arrival="2015-06-13T00:00:00"
        Currency="DKK"
        Pets="0"
        Infants="0"
        Children="0"
        Adults="2"
        LanguageId="1"
        BoardTypeId="3"
        LodgingId="1"
        LodgingUnitTypeId="71" 
    />
</BookingRequest>
    

Example Result

HTTP/1.1 200 OK
<?xml version="1.0" encoding="utf-8" ?>
<payrates>
    <rate1 paydate="2015-04-21T00:00:00+02:00" amount="8400" currency="DKK" />
</payrates>

BookingProbabilities

PENDING REMOVAL - DON'T USE IT

Returns all bookingprobabilities according to the parameters specified. This list is paginated using offsets. If 1000 elements are returned (the pagesize), use ?page=2 to check for the next 1000 and so on.

Request

GET /v1/bookingprobabilities.xml?lan={languageid}&ari={arrivaldate}&loc={locationids}&adu={adults}&chi={children}&inf={infants}&pet={pets}&dur={duration}&page={page}
or
GET /v1/lodgings/{lodgingid}/bookingprobabilities.xml?lan={languageid}&adu={adults}&chi={children}&inf={infants}&pet={pets}&dur={duration}&page={page}
or
GET /v1/lodgingunittypes/{lodgingunittypeid}/bookingprobabilities.xml?lan={languageid}&adu={adults}&chi={children}&inf={infants}&pet={pets}&dur={duration}&page={page}
                    

Route values

{languageid} The language of the localized fields (required)
{locationids} A comma separated list of location ids
{arrivaldate} Optional arrivaldate in the format mm/dd/yyyy - if not specified you'll get all possible arrivaldates
{lodgingid} The id of the lodging to show probabilities for
{lodgingunittypeid} The id of the lodgingunittype to show probabilities for
{duration} The lenght of the stay (if not specified 7 is assumed). You can specify multiple durations separated by comma ordered with the lowest duration first. E.g. 7,14,21,28,35
{adults} The number of adults (if not specified 2 is assumed)
{children} The number of children (if not specified 0 is assumed)
{infants} The number of infants (if not specified 0 is assumed)
{pets} The number of pets (if not specified 0 is assumed)
{page} The page to retrive (if not specified 1 is assumed)
                    

Caching

Caching time: 3600 seconds
VaryByParam: lodgingid;lodgingunittypeid;lan;loc;ari;adu;chi;inf;pet;dur;page
    

Example response

HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
<?xml version="1.0" encoding="utf-8"?>
<BookingProbabilities>
  <BookingProbability LodgingUnitTypeId="118" LanguageId="1" Adults="2" Children="0" Infants="0" Pets="0" Arrival="2012-01-13T00:00:00" Departure="2012-01-20T00:00:00" Duration="7" />
</BookingProbabilities>
                    

Bookings

Create a Booking

ALL OTHER VERSIONS THAN VERSION 3 IS PENDING REMOVAL - DON'T USE VERSION 1 OR 2

Mandatory Requests Headers

Version: 3
User-Agent: YOURNAME
    

Request

POST /v1/bookings/create.xml?test={test}
<?xml version="1.0" encoding="utf-8"?>
<BookingRequest>
    <!-- You must specify a Customer OR a CustomerId (CustomerId requires special permissions) -->
    <Customer 
        FirstName="Dennis" 
        LastName="Knappe" 
        Email="dennis@email_address.com" 
        IsoCountry="DK" 
        PostalCode="5700" 
        City="Svendborg">
        <CustomFieldValues>
            <CustomFieldValue CustomFieldId="NEWSLETTER_GENERAL" Value="true" />
        </CustomFieldValues>
    </Customer>
    <CustomerId></CustomerId>
    <Note>Note from the customer</Note>
    <BookingOption 
        Price="3005.03" 
        Currency="DKK" 
        DiscountTags="" 
        NormalPrice="3005.03" 
        Arrival="2011-06-10T00:00:00" 
        Priority="Normal" 
        LodgingId="110"
        LodgingUnitTypeId="118" 
        Departure="2011-06-17T00:00:00" 
        Duration="7" 
        Adults="2" 
        Children="0" 
        LanguageId="1" 
        Infants="0" 
        Pets="0" 
        HasDiscount="false" 
        Status="Booking"
    />
    <Items>
        <Item 
            ItemId="5" 
            Quantity="1" 
        />
        <Item 
            ItemId="6" 
            Quantity="2" 
        />
    </Items>
    <Payment
        Status="AUTHORIZED"
        Id="1121"
        CardId="VISA"
        TransactionId="1049755539"
        Amount="3005.03"
        Currency="DKK"
        Fee="183.40"
    />
    <PaymentRates>
        <PaymentRate Amount="2000.00" DueDate="yyyy-MM-ddT00:00:00" />
        <PaymentRate Amount="1005.03" DueDate="yyyy-MM-ddT00:00:00" />
    />
    <AffiliateId>5</AffiliateId>
    <InternalNote>Note that is only visible to the bureau, not the customer.</InternalNote>
</BookingRequest>
                    
Note 1: If no affiliate id is needed the element should be removed from the request.
Note 2: Either a Customer element or a CustomerId should be present.
Note 3: PaymentRates is by default automatically handled by the system. It is possible to get your API configured to provide payment rates (request this from the bureau), and in such case the payment rates must comply to the following rules, otherwise system payment rates will be used:
1) We allow a maximum of two payment rates,
2) The sum of the payment rates must match the total booking price and
3) The DueDates must all be on or before the arrival date
Note 4:CustomFieldValues will only be set on customer if API user has permission to do so.

Route values

{test} When set to true the system will only emulate the booking and not make it for real. The return value will always be <Quote Id="1000" ReservationId="400" /> when running in test mode.
{sendemailtocustomer} When set to true or not set at all (the default is true) the system will send an e-mail to the customer according to the clients preferences. When set to false the system don't send an e-mail to the customer.

Example response (version 2+)

HTTP/1.1 201 Created
Content-Type: text/xml; charset=utf-8
<?xml version="1.0" encoding="utf-8"?>
<OrderItem Type="Quote|Option" Id="40000400" ReservationId="1002" Currency="EUR" RawBookingPrice="995.00" />
    
Important: The Currency and the RawBookingPrice is only returned when the type is Quote. The RawBookingPrice is the value of the bookingprice subtracted any hidden and included items.

Example response (version 1 - legacy)

HTTP/1.1 201 Created
Content-Type: text/xml; charset=utf-8
<?xml version="1.0" encoding="utf-8"?>
<Quote Id="40000400" ReservationId="1002" Currency="DKK" RawBookingPrice="9100.00" />
    

Calendars

Returns calendars for all lodgingunittypes. When requested in the Ical format (ics), only availability data will be returned

Mandatory Requests Headers

Version: 1 or 2
Version 2 gives you an extended date range for results.
    

Request

GET /v1/calendars.xml
or
GET /v1/lodgings/{lodgingid}/calendars.xml
or
GET /v1/lodgingunittypes/{lodgingunittypeid}/calendar.xml
or
GET /v1/lodgings/{lodgingid}/calendars.ics
or
GET /v1/lodgingunittypes/{lodgingunittypeid}/calendar.ics
                    

Route values

{lodgingid} The id of the lodging to show calendars for
{lodgingunittypeid} The id of the lodgingunittype to show calendar for
                    

Caching

Caching time: 3600 seconds
VaryByParam: lan
    

Example response - XML

HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
<?xml version="1.0" encoding="utf-8"?>
<Calendars>
  <Calendar 
        LodgingUnitTypeId="118" 
        AnchorDate="2011-06-08T00:00:00+02:00" 
        Calendar="1,1,1,1,1,0,0,0" 
        SeasonCodes="D,D,D,D,D,D,A,A" />
</Calendars>
                    

Example response - ICS

BEGIN:VCALENDAR
CALSCALE:GREGORIAN
METHOD:PUBLISH
PRODID:-//github.com/rianjs/ical.net//NONSGML ical.net 4.0//EN
VERSION:2.0
BEGIN:VEVENT
DTEND;VALUE=DATE:20180813
DTSTAMP:20180622T112724Z
DTSTART;VALUE=DATE:20180808
SEQUENCE:0
SUMMARY:Unavailable
UID:628f6d87-4fac-4bae-9dab-ad30e345c013
END:VEVENT
BEGIN:VEVENT
DTEND;VALUE=DATE:20180905
DTSTAMP:20180622T112724Z
DTSTART;VALUE=DATE:20180829
SEQUENCE:0
SUMMARY:Unavailable
UID:ea484594-ff21-482c-afa5-c190fbed5773
END:VEVENT
BEGIN:VEVENT
DTEND;VALUE=DATE:20200622
DTSTAMP:20180622T112724Z
DTSTART;VALUE=DATE:20190112
SEQUENCE:0
SUMMARY:Unavailable
UID:734e1a99-b9f4-4071-91b5-c20ebe78fc5b
END:VEVENT
END:VCALENDAR
                    

Currencies

Returns all available currencies.

Request

GET: /v1/currencies.xml
                    

Route values

None
                    

Caching

Caching time: 3600 seconds
VaryByParam: none
    

Example response

HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
<?xml version="1.0" encoding="utf-8"?>
<Currencies>
  <Currency Id="1" Name="DKK" Iso4217Name="DKK" />
  <Currency Id="2" Name="EUR" Iso4217Name="EUR" />
</Currencies>
                    

CustomerAdvisors

Returns all customer advisors. If you supply a lodging id, or a customer id the system can suggest a customer advisor to pick.

Request

GET rest/v1/customeradvisors.xml?lodgingid={lodgingid}&customerid={customerid}
                    

Route values

{lodgingid} If supplied the result will mark the customer advisor attached to that lodging. (optional)
{customerid} If supplied the result will mark the customer advisor attached to that customer, if any. (optional)
                    

Example response

HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
<CustomerAdvisors>
    <CustomerAdvisor Id="1" Name="Bill Person" ImageUrl="..." OnCustomer="false" OnLodging="true" Suggested="true" LodgingIds="1,152,170,172,173,179,180,186,611,743,750,878" DepartmentIds="7,11" />
</CustomerAdvisors>
                

CustomerBlockedValidation

This method is used to check if a new customer exists in the system as a blocked customer. The method cannot be used to check a customer

Request

POST /v1/customers/blockedvalidation.xml
<?xml version="1.0" encoding="utf-8"?>
<Customer 
        FirstName="Dennis" 
        LastName="Knappe" 
        Email="dennis@email_address.com" 
        IsoCountry="DK" 
        PostalCode="5700" 
        City="Svendborg" 
/>
    

Example response

HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
<Result PossiblyBlocked="true|false" />
                

CustomerLogin

Login using a customers name and password returning a customer entity.
Use this resource to retrieve a customer entity including the customerId, which can later be used for operations on a specfic customer (for instance getting all customers reservations).

Request

POST /v1/customers/login.xml
<?xml version="1.0" encoding="utf-8"?>
<CustomerLoginRequest>
    <UserName>secret_username</UserName>
    <Password>secret_username</Password>
</CustomerLoginRequest>
                

Example response

HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
<Customer 
    Id="54123"
    FirstName="Sascha" 
    LastName="Dupont"
    Address="Hogenlietgrund 34" 
    PostalCode="22417" 
    City="Hamburg" 
    IsoCountry="DE" 
    PrivatePhone="+49 xx xx xx xx" 
    PrivateMobile="" 
    Email="email@nonexistingdomain.com" 
    SubscribeToCatalog="false"                        
    SubscribeToNewsletter="true"
    SubscriptionIds="3,5,7"
    <CustomFieldValues>
        <CustomFieldValue Name="NEWSLETTER_LM_FALL" Value="True" />
        ...
    /<CustomFieldValues>
/>
                

CustomerReservations

List all reservations belonging to a specific customer

Request

GET /v1/customers/{customerid}/reservations.xml
                

Route values

{customerid} The id of the customer (required).
                

Example response

HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
<ReservationSummaries>
    <ReservationSummary 
        ReservationId="3077" 
        CustomerId="160983" 
        LodgingId="634" 
        BookingDate="2010-11-22T00:00:00" 
        ArrivalDate="2011-02-12T00:00:00" 
        DepartureDate="2011-02-19T00:00:00" 
        Adults="4" Children="0" 
        Infants="0" 
        Pets="0" 
        BookingPrice="4908.0000" 
        BookingCurrency="DKK" 
        Status="3"
    />
    ...
</ReservationSummaries>
                

Facilities

Returns all facilities localized by the specified language id.

Request

GET /v1/facilities.xml?lan={languageid}
                    

Route values

{languageid} The language of the localized fields (required)
                    

Caching

Caching time: 3600 seconds
VaryByParam: lan
    

Example response

HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
                    
<Facilities>
  <Facility FacilityGroupIds="5" Id="250" TypeId="1" Name="Distance: Beach" Description="" />
  <Facility FacilityGroupIds="5,6" Id="170" TypeId="3" Name="Distance: Restaurant" Description="" />
<Facilities>
                    

FacilityGroups

Returns all facility groups localized by the specified language id.

Request

GET /v1/facilitygroups.xml?lan={languageid}
                    

Route values

{languageid} The language of the localized fields (required)
                    

Caching

Caching time: 3600 seconds
VaryByParam: lan
    

Example response

HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
<?xml version="1.0" encoding="utf-8"?>
<FacilityGroups>
  <FacilityGroup Id="5" Name="Distances" FacilityIds="250,170" />
  <FacilityGroup Id="6" Name="Nightlife" FacilityIds="170" />
</FacilityGroups>
                    

Gateways

Handling credit card payments via the API

Handling payments happens in two steps: Acquire a payment id. This Id must be used to identify the payment with the gateway provider. The result of the authorized payment can then either be provided directly when POSTing a booking or seperately via a PUT call to the payment resource. The payment must be in it's AUTHORIZED state. Bookingstudio will handle capturing the payment

Prepares a payment id to use as the "order id" when processing the payment using the payment provider. You must supply this value when creating a booking with an creditcard payment, or when a manual payment is registered on a reservation.

Request

POST /v1/gateways/{gatewayId}/payments/create.xml?reservationId={reservationId}
    

Route values

{gatewayId} The ID of the payment gateway in BookingStudio
{reservationId} Optional: If this payment is attached to a already created reservation, then supply the reservation id.
    

Example Response

HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
<?xml version="1.0" encoding="utf-8"?>
<int>1140<?/int>

Marks a payment as authorized. If the associated booking has been approved, the payment will also be captured. Otherwise the payment will just be attached to the booking and will captured as part of the regular booking workflow (usually when approving the booking).

Request

PUT /v1/gateways/{gatewayId}/payments.xml
       <?xml version="1.0" encoding="utf-8" ?>
<Payment
    Status="AUTHORIZED"
    Id="1121"
    ReservationId="12345654"
    CardId="VISA"
    TransactionId="1049755539"
    Amount="3005.03"
    Currency="DKK"
    Fee="183.40"
/>
    

Example Response

HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
<?xml version="1.0" encoding="utf-8"?>
<int>1121<?/int>

Gets the status of the payment associated with the provided payment Id.

Request

GET /v1/gateways/{gatewayId}/payments/{paymentId}.xml
    

Example Response

HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
<?xml version="1.0" encoding="utf-8"?>
<Payment
    Status="AUTHORIZED"
    Id="1121"
    ReservationId="12345654"
    CardId="VISA"
    TransactionId="1049755539"
    Amount="3005.03"
    Currency="DKK"
    Fee="183.40"
/>

DEPRECATED - Marks a payment as authorized and captures it at the gateway. This call can only be called on payments created with a reservation id supplied.

Request - DEPRECATED

POST /v1/gateways/{gatewayId}/payments/authorizeAndCapture.xml?reservationId={reservationId}
       <?xml version="1.0" encoding="utf-8" ?>
<Payment
    Status="AUTHORIZED"
    Id="1121"
    CardId="VISA"
    TransactionId="1049755539"
    Amount="3005.03"
    Currency="DKK"
    Fee="183.40"
/>
    

Example Response

HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
<?xml version="1.0" encoding="utf-8"?>
<int>1140<?/int>

Heartbeat

You can use this endpoint to call to see if the API is running. This is not a guarantee that the API is fully operational - but can be used as a baseline to indicate if the API is up an running.

Request

GET /v1/heartbeat.xml
    

Example response

HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
<?xml version="1.0" encoding="utf-8"?>
<Heartbeat>
</Heartbeat>
    

InformationMaterials

An InformationMaterial is an item a customer can subscribe to, ie. catalogues, cd's etc.

Request

GET /rest/v1/informationmaterials.xml
    

Example response

HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
                    <InformationMaterials>
    <InformationMaterial>...</InformationMaterial>
    ...
</InformationMaterials>

For assigning one or more subscriptions to a customer, you need to create a new customer and apply the relevant ids for informationmaterials in the SubscriptionIds attribute.

Use this resource to create a new customer and bind subscriptions to InformationMaterials to the customer.
The resource cannot be used only for creating a customer - at least one SubscriptionId (informationmaterial-id) must be present.

Request

POST /v1/informationmaterials/order.xml
<?xml version="1.0" encoding="utf-8"?>
<Customer 
    Id="54123" 
    FirstName="Sascha" 
    LastName="Dupont"
    Address="Hogenlietgrund 34" 
    PostalCode="22417" 
    City="Hamburg" 
    IsoCountry="DE" 
    PrivatePhone="+49 xx xx xx xx" 
    PrivateMobile="" 
    Email="email@nonexistingdomain.com" 
    SubscribeToCatalog="false"                        
    SubscribeToNewsletter="true"
    SubscriptionIds="3,5,7"
/>

Example response

HTTP/1.1 201 Created
X-Resource-Id: The id of the newly created customer

Items

Request

GET /v1/items.xml?lan={languageid}

Route values

{languageid} The language of the localized fields (required)
                    

Caching

Cached 3600 seconds
    

Caching

Caching time: 3600 seconds
VaryByParam: lan
    

Example response

HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
<?xml version="1.0" encoding="utf-8"?>
<Items>
  <Item IsMandatory="false" Id="3" ChargeType="1" ItemCode="10011" Type="4">
    <Descriptions>
      <Description 
            Name="Feriehuslejerforsikring til kr. 1500" 
            Summary="" 
            Body="" 
            FromDate="2009-01-01T00:00:00" 
            ToDate="9999-12-31T00:00:00" 
        />
    </Descriptions>
    <Definitions>
        <Definition Id="1" Name="Forsikringer" />
    </Definitions>
  </Item>
</Items>
                    

Languages

Returns all available languages.

Request

GET: /v1/languages.xml
                    

Route values

None
                    

Caching

Caching time: 3600 seconds
VaryByParam: none
    

Example response

HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
<?xml version="1.0" encoding="utf-8"?>
<Languages>
  <Language Id="1" Name="Dansk" Culture="da-DK" />
  <Language Id="2" Name="Tysk" Culture="de-DE" />
</Languages>
                    

Locations

Returns all locations localized by the specified language id.

Request

GET /v1/locations.xml?lan={languageid}
                    

Route values

{languageid} The language of the localized fields (required)
                    

Caching

Cached 3600 seconds
    

Caching

Caching time: 3600 seconds
VaryByParam: lan
    

Example response

HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
                    
<Locations>
  <Location Level="0" Id="1" Name="Danmark" ShortDescription="Bemærk: Dette felt anvendes ikke pĂ¥ standard frontend">
    <Locations>
      <Location Level="1" Id="2" Name="Vestjylland" ShortDescription="Bemærk: Dette felt anvendes ikke pĂ¥ standard frontend">
        <Locations>
          <Location Level="2" Id="8" Name="Henne Strand Nord" ShortDescription="Bemærk: Dette felt anvendes ikke pĂ¥ standard frontend" />
          <Location Level="2" Id="3" Name="Henne Strand Syd" ShortDescription="Bemærk: Dette felt anvendes ikke pĂ¥ standard frontend" />
          <Location Level="2" Id="5" Name="Henne Strand Ă˜st" ShortDescription="Bemærk: Dette felt anvendes ikke pĂ¥ standard frontend" />
        </Locations>
      </Location>
    </Locations>
  </Location>
</Locations>
                    

Lodgings

Returns all lodgings localized by the specified language id.

Request

GET /v1/lodgings.xml?lan={languageid}
                    

Route values

{languageid} The language of the localized fields (required)
                    

Caching

Caching time: 3600 seconds
VaryByParam: lan
    

Example response

HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
<?xml version="1.0" encoding="utf-8"?>
<Lodgings>
  <Lodging Rating="4" Id="116" Longitude="8.189657" Latitude="55.738306" Name="108" InternalName="108" Address1="Urfuglevej 21" TypeId="1" LocationId="8" Address2="" Country="Danmark" PostalCode="6854" City="Henne Strand" DepartmentId="4" SortIndex="3" >
    <Descriptions>
      <Description Summary="Vedligeholdt og hyggeligt træhus pĂ¥ en stor ugenert lynggrund omgivet af fyrretræer. Fra stuen udgang til delvis overdækket terrasse, lille terrasse ved køkken." Body="Vedligeholdt og hyggeligt træhus pĂ¥ en stor ugenert lynggrund omgivet af fyrretræer. Fra stuen udgang til delvis overdækket terrasse, lille terrasse ved køkken. Sengestørrellser: enkeltsenge 90x200 cm., enkeltsenge 90x200, køjesenge 90x200 cm." EmbeddedVideoHtml="" FromDate="1753-01-01T00:00:00" ToDate="9999-12-31T00:00:00" />
    </Descriptions>
    <FacilityValues>
      <FacilityValue FacilityId="250" Value="True" FromDate="1753-01-01T00:00:00" ToDate="9999-12-31T00:00:00" />
      <FacilityValue FacilityId="170" Value="True" FromDate="1900-01-01T00:00:00" ToDate="9999-12-31T00:00:00" />
    </FacilityValues>
    <Images>
      <Image Url="https://...." TagIds="1,2..." />
    </Images>
  </Lodging>
</Lodgings>
                    

Returns a single lodging localized by the specified language id.

Request

GET /v1/lodgings/{lodgingId}.xml?lan={languageid}
                    

Route values

{languageid} The language of the localized fields (required)
                    

LodgingTypes

Returns all lodging types localized by the specified language id.

Request

GET /v1/lodgingtypes.xml?lan={languageid}
                    

Route values

{languageid} The language of the localized fields (required)
                    

Caching

Caching time: 3600 seconds
VaryByParam: lan
    

Example response

HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
<?xml version="1.0" encoding="utf-8"?>
<LodgingTypes>
  <LodgingType Id="1" Name="Villa" />
  <LodgingType Id="2" Name="Hotel" />
</LodgingTypes>
                    

LodgingUnitTypeCategories

Returns all lodgingunittype categories localized by the specified language id.

Request

GET /v1/lodgingunittypecategories.xml?lan={languageid}
                    

Route values

{languageid} The language of the localized fields (required)
                    

Caching

Caching time: 3600 seconds
VaryByParam: lan
    

Example response

HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
<?xml version="1.0" encoding="utf-8"?>
<LodgingUnitTypeCategories>
  <LodgingUnitTypeCategory Id="1" Name="Villa" />
  <LodgingUnitTypeCategory Id="2" Name="Twin-room with seaview" />
</LodgingUnitTypeCategories>
                    

LodgingUnitTypes

Returns all lodgingunittypes localized by the specified language id.

Request

GET /v1/lodgingunittypes.xml?lan={languageid}
or
GET /v1/lodgings/{lodgingid}/lodgingunittypes.xml?lan={languageid}
                    

Route values

{languageid} The language of the localized fields (required)
{lodgingid} The id of the parent lodging
                    

Caching

Caching time: 3600 seconds
VaryByParam: lan
    

Example response

HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
<?xml version="1.0" encoding="utf-8"?>
<LodgingUnitTypes>
  <LodgingUnitType Id="118" LodgingId="11" CategoryId="1" Name="108" ShortDescription="x" MaxPersons="6" />
</LodgingUnitTypes>
                    

ReportLists

View available lists

Request

GET /v1/reportlists.xml
                    

Route values

None
                    

Example response

HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
<?xml version="1.0" encoding="utf-8"?>
<ReportLists>
    <ReportList Id="1" Name="Whatever" />
    ...
</ReportLists>
                    

Execute a ReportList

The fields exposed by the result is selected by our client, and can be changed at ANY time

Request

GET /v1/reportlists/{reportlistid}/execute.xml?page={page}
                

Route values

{reportlistid} The id of the reportlist to be executed (required)
{page} The page to retrive (default 1)
                    

Caching

Caching time: 10 minutes per {reportlistid}
    

Example response

HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
<?xml version="1.0" encoding="utf-8"?>
<Result Count="5000" Page="1" PageSize="1000">
    <Rows>
        <Row ..../>
        ...
    </Rows>
</Result>
                    

ReservationSummaries

View detailed information about reservations

When the resource is called using a token identifying a partner (agent or affiliate), only reservations owned by this partner is returned.

Request

GET /v1/reservationsummaries.xml?reservation_id={reservationid}
or
GET /v1/reservationsummaries.xml?lodging_id={lodgingid}
or
GET /v1/reservationsummaries.xml?status={statuscode}
or
GET /v1/reservationsummaries.xml?from={fromdate}&to={todate}&datetype={datetype}
                    

Route values

Following values are optional and can be used to filter the result:
{reservationid} The id of a single reservation to be examined
{lodgingid} The id of a single lodging for which to get reservationsummaries
{statuscode} One of the following codes: 1=Pending, 2=Approved, 3=Canceled
{fromdate} and {todate} Specifies the datescope for which to show reservations. Format for the dates is dd-MM-yyyy.
Both fromdate and todate are included in the result.
{datetype} Used in conjunction with dates to specify which column to filter on. Legal values are 
    booking and arrival.
                    

Example response

HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
<?xml version="1.0" encoding="utf-8"?>
<ReservationSummaries>
  <ReservationSummary ReservationId="597" CustomerId="44321" LodgingId="239" BookingDate="2011-01-01T00:00:00" ArrivalDate="2011-03-11T00:00:00" DepartureDate="2011-03-18T00:00:00" Adults="3" Children="0" Infants="0" Pets="0" BookingPrice="538.0000" BookingCurrency="EUR" Status="2" />
    ...
</ReservationSummaries>
                    

SeasonCalendars

Returns all seasoncalendars for a specified year.

Request

GET /v1/seasoncalendars.xml?year={year}
or
GET /v1/lodgings/{lodgingid}/seasoncalendar.xml?year={year}
or
GET /v1/lodgingunittypes/{lodgingunittypeid}/seasoncalendar.xml?year={year}
                    

Route values

{year} The year of the seasoncalendar (default = current year)
{lodgingid} The id of the lodging
{lodgingunittype} The id of the lodgingunittype
                    

Example response

HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
<?xml version="1.0" encoding="utf-8"?>
<SeasonCalendars>
  <SeasonCalendar Id="7" Year="2012" LodgingUnitTypeId="423" Status="1" >
    >Season SeasonCode="F" ChangeDay="5" MinimumDays="1" From="2012-01-06T00:00:00" To="2012-03-29T00:00:00"/<
    ...
  </SeasonCalendar>
  ...
</SeasonCalendars>
                    

Status is one of the following:

  • NoBookingsAllowed = 0
  • AllowBookings = 1
  • AllowProbabilitiesWithoutPrices = 2
  • AllowProbabilitiesWithPrices = 3

If the status is AllowBookings then the period i open for bookings.

If the status is NoBookingsAllowed then no bookings or probabilities will be returned for the period.

If the status is AllowProbabilitiesWithoutPrices then only probabilities will be returned for the period - without any prices.

If the status is AllowProbabilitiesWithPrices then bookings will be returned of type properbility - complete with price information.

SeasonPrices

Returns all seasonprices for a specified year. The price is always displayed as the dayprice with up to 4 decimals.

Request

GET /v1/seasonprices.xml?year={year}
or
GET /v1/lodgings/{lodgingid}/seasonprices.xml?year={year}
or
GET /v1/lodgingunittypes/{lodgingunittypeid}/seasonprices.xml?year={year}
                    

Route values

{year} The year of the seasonprices (default = current year)
{lodgingid} The id of the lodging
{lodgingunittype} The id of the lodgingunittype
                    

Example response

HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
<?xml version="1.0" encoding="utf-8"?>
<SeasonPrices>
  <SeasonPrice LodgingUnitTypeId="423" SeasonCode="A" BoardTypeId="3" Price="660.00" Currency="DKK" Year="2012"/>
  ...
</SeasonPrices>
                    

Tags

Request

GET /v1/tags.xml
                    

Caching

Not cached
    

Example response

HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
<Tags>
  <Tag Id="1" Description="LastMinute" />
  ...
</Tags>
    

TermsAndConditions

Request

GET /v1/termsandconditions.xml?lan={languageid}[&ari={arrivaldate}]
or
GET /v1/lodgings/{lodgingid}/termsandconditions.xml?lan={languageid}[&ari={arrivaldate}]
or
GET /v1/termsandconditions/{termsandconditionid}.xml?lan={languageid}[&ari={arrivaldate}]
                    

Route values

    {languageid} The language of the localized fields (required).
{lodgingid} The lodging you want to see the terms and conditions for.
{termsandconditionid} The id for a specific TermsAndCondition.
{ari} Optional. The arrivaldate for which the terms and conditions apply. If not supplied, today is assumed.
                    

Caching

Caching time: 3600 seconds
VaryByParam: lan
    

Example response

HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
<TermsAndConditionsList>
  <TermsAndConditions Id="1" Description="The terms..." />
  ...
or
<?xml version="1.0" encoding="utf-8"?>
<TermsAndConditions Id="1" Description="The terms..." />
                    

Texts

Request

GET /v1/texts.xml
or
GET /v1/texts/{systemname}.xml?date={date}
                    

Route values

        {date} - Specifies what date should be used when retreiving the specified text. If not supplied you will get todays current text.
    

Caching

Not cached
    

Example response

HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
<Texts>
  <Text Id="1" Language="1" Name="Terms and conditions" SystemName="Terms" />
    <Note>
        ...
    </Note>
    <Content>
        <![CDATA[...]]>
    </Content>
  </Text>
</Texts>
    

Entities

BoardType

Name Description
Id System id
Name Localized name
ShortDescription Localized brief description

BookingOption

A BookingOption is an available LodgingUnitType that can be booked at the specified price on the specified arrival and departure date, with the specified number of persons and pets.

If a discount is available the field HasDiscount has the value “true" and the NormalPrice contains the price before the discount is applied, and the field Price contains the price after the discount has been applied.

BookingStudio has a very dynamic pricing engine. All prices are pre-calculated according to individual rules specified by our clients. It's not possible to alter the price or any other parameter.

The ItemPrices contains an array of specific itemprices for the BookingOption.

Name Description
Status The status can be either Booking, ProbabilityAsBooking or Probability. Booking means a normal booking, that can be booked with the price specified. ProbabilityAsBooking means it can be booked but the price is only an estimate. Probability means it can be booked but the price has not yet been settled, and therefore is 0, and should be hidden. Both types of probability can be changed or cancelled at any time. The probability features is normally only activated on the clients own website, as it requires specialzed bookingflows.
LodgingUnitTypeId The id of the lodgingunittype this bookingoption can be created on. The LodgingUnitTypeId is not necessarily equal to the LodgingId. They are two different things.
LodgingId The id of the lodgingunittypes parent lodging this bookingoption can be created on. The LodgingId is not necessarily equal to the LodgingUnitTypeId. They are two different things.
LanguageId The ID of the language.
Adults The number of adults the price is calculated for.
Children The number of children the price is calculated for.
Infants The number of infants the price is calculated for.
Pets The number of pets the price is calculated for.
Arrival The arrival date
Departure The departure date
Duration The number of nights between arrival and departure
Price This is the price to pay for the bookingoption. If the bookingoption has a discount this will be the "after price".
NormalPrice This is the "before price", e.g. the price before any discount has been given. If no discount has been given, the Price and the NormalPrice will be equal.
Tags Commaseparated list of tags applied for this specific bookingoption. Please note that tags is controlled by our clients. If your system relies on a special tag please contact our client and make an agreement about that.
HasDiscount Boolean value that tells if a discount has been applied.
DiscountTags Commaseparated list of tags applied for this specific discount, e.g. LastMinute, 2PersonDiscount. Please note that tags is controlled by our clients. If your system relies on a special tag please contact our client and make an agreement about that. Comma separated list of tags for the discount rule. E.g. LastMinute, 2Person. Please note that theese tags is controlled by our clients. If your system relies on a special tag please contact the our client and make an agreement about what tages to apply.
DaysWithDiscount Integer that tells how many days of the duration that has a discounted price.
DaysWithAddition Integer that tells how many days of the duration that has an increased price.
IsAvailable Is the BookingOption available or not (at the query time).
WinterRuleWarning If present and having a value of "true", then the booking option is available, but breaks the rules for rental in the winter season set up by the bureau.
Ask the bureau how to handle this situation as it is a business specific decision.
ItemPrices An array of the items that can be booked with this bookingoption, and the prices for each item. Some items are mandatory and some are optional

BookingRequest

Name Description
CustomerId (Optional) Make booking on an existing customer. Either a Customer or CustomerId element should be present.
Customer (Optional) Information about the customer that is booking. Mandatory attributes are: FirstName, LastName and Email.
For other available fields please refer to the customer entity. Either a Customer or CustomerId element should be present.
Note (Optional) Any comment from the customer regarding this booking. This note can be shown on the invoice and is visible for both customer and bureau.
BookingOption (Required) The bookingoption to be booked.
Items (Optional) An array of items to be booked with the BookingOption (items can't be booked with a BookingProbability).

By default only the items specified in the array will be booked, whether it's mandatory or not. Our clients can configure the API to automatically add mandatory items to the booking if they are not contained in the array.

Allowed attributes are ItemId and Quantity.
AffiliateId (Optional) Optional affiliate id to make this booking on. The API key can be configured with a default affiliate id. If the key is configured with a default affiliate id, then this element override the default value.
InternalNote (Optional) An optional internal note that is only visible to the bureau and NOT shown on the invoice or otherwise visible to the customer.
Payment (Optional) An optional authorized payment. The Payment will only be registered, regardless of the gateway settings
CustomerAdvisorId (Optional) The id of a customer advisor to set on the customer.

Calendar

This is the calendar of a lodgingunittype.

Name Description
LodgingUnitTypeId The id of the lodgingunittype this calendar belongs to.
AnchorDate The start date of the Availability string and the SeasonCode string.
Availabilities Comma separated list of availability data. A value of 1 means the lodgingunittype is free and 0 means it's occupied. The first value matches the AnchorDate and for every value you must add one day to the AnchorDate.
SeasonCodes Comma separated list of seasoncodes. Each value contains a string that represent the seasoncode. The first value matches the AnchorDate and for every value you must add one day to the AnchorDate.

Currency

Name Description
Id System id
Name The name of the currency
Iso4217Name ISO 4217 Name

Customer

Name Description
Id The Id of an existing customer. Read-only.
FirstName The customers firstname. The field is mandatory.
LastName The customers lastname. The field is mandatory.
Address The customers address
City The customers city.
IsoCountry The ISO 3166-1 Alpha Country Code of the country the customer lives in.
PrivatePhone The customers private phone number
PrivateMobile The customers mobile phone number
Email The customers email address. The field is mandatory.
SubscribeToCatalog Does the customer wants to subscribe to a catalog.
SubscribeToNewsletter Does the customer wants to subscribe to a newsletter.
SubscriptionIds A comma-separated list of ids for InformationMaterials to which the customer is subscribed
Origin A text string to label the channel where the customer came from (i.e. website or facebook)
CustomFieldValues An array of custom field values

CustomerAdvisor

Name Description
Id System id
ImageUrl URL To image of the customer advisor - may be null
Name The name of the customer advisor
OnCustomer If a CustomerId was supplied, this will be true if the customer advisor is attached to the customer
OnLodging If a LodgingId was supplied, this will be true if the customer advisor is attached to the lodging
Suggested If either a LodgingId or a CustomerId is supplied, then this will be true, if BookingStudio's internal rules suggest, that the customer gets this CustomerAdvisor attached.
LodgingIds A comma-seperated list of lodging ids, that is attached to this CustomerAdvisor
DepartmentIds A comma-seperated list of department ids, that is attached to this CustomerAdvisor

CustomFieldValue

Name Description
Name The name of the custom field
Value The value of the custom field

Facility

A facility is an attribute that can be applied to a Lodging entity. The facility entity has three different types: Text, Integer and Boolean. It can be used for many different purposes, such as defining if animals are allowed or not, distance to the beach, restaurants, city center etc. A facility can be present in zero or more facility groups.

Name Description
Id System id
Name Localized name
TypeId FacilityType system enum
FacilityGroupIds Comma separated list of the facilitygroup id's this facility belongs to
MasterFacilityId Nullable reference to a master facility Id

FacilityGroup

A facility group is a group of facilities. A facility group can contain zero or more facilities. Our clients create their own facility groups, and they can call them whatever they want.

Name Description
Id System id
Name Localized name
FacilityIds Comma separated list of facility id's this facility group contains.

InformationMaterial

A InformationMaterial is an item to which a customer can subscribe.

Name Description
Id System id
Name Friendly name for the information material
ExpiryDate If present, the latest date the material will be available

Item

Items are things you can buy in addition to a booking like cleaning, insurance, fee for pets, baby cots, water and electricity, just to name a few. Some items are mandatory and some is optional. Not all items are available for all bookings, and the prices may vary depending on the calculation rules picked by the bureau. The item entity does not contain any prices. The prices is found on the BookingOption. Only items that has prices on a BookingOption can be booked with the BookingOption.

Name Description
Id System id.
ItemCode This is the code that our clients assigned to the item
ChargeType System enum telling how to charge the item.
Type System enum telling what type of item it is.
UnitName The name of the unit
MeteredQuantity Boolean specifying if the quantity is specified by a meter, or specified manually by the customer. Normally it's true on items that are invoiced on departure, like water and eletricity.
TermsAndConditionsId Possible reference to a TermsAndCondition entity. Can be null/blank.
Descriptions An array of localized descriptions. Each description has a FromDate and a ToDate. Display the description that has the arrivaldate between it's fromdate and todate.
Definitions An array of item definitions. Item definitions are small items groups of related items. I.e. the bureau might create an item definition for all cleaning items that are for cleaning after the stay. This is different from item types as an item may belong to more than one item definition. Please note that the name of an item definition is not localized.

ItemPrice

An ItemPrice is the price for a specific item on a specific BookingOption. The ItemPrice can vary by adults, children and pets, lenth and many other parameters. The mandatory status can also vary over time.   

Name Description
ItemId The id of the item this price belongs to.
UnitPrice The price if booked by the specific bookingoption.
Currency The currency of the price.
IsMandatory Boolean specifying if the item is mandatory or not.
MinQuantity What is the minimum quantity allowed for this item. If the item has MeteredQuantity this values can be ignored. If both MinQuantity and MaxQuantity is set to 0 the item cannot be booked. The item can be used for display price purpose.
MaxQuantity What is the maximum quantity allowed for this item. If the item has MeteredQuantity this values can be ignored. If both MinQuantity and MaxQuantity is set to 0 the item cannot be booked. The item can be used for display price purpose.

Language

Name Description
Id System id
Name The name of the language
Culture ISO culture code
DefaultCurrency The default sell currency for this language

Location

A location defines the country, destination and area of the Lodging entity. Lodgings are always placed on the third level (area). An area belongs to a destination, and a destination belongs to a country. Our clients create their own location tree, and they can call the levels whatever they want.

Name Description
Id System id
Name Localized name
ShortDescription Localized brief description
Level The level of the location. Value can be 0, 1 or 2
Locations Child locations. Only available on level 0 and 1

Lodging

Name Description
Id System id
TypeId The lodgingtype id this lodging belongs to.
LocationId The location id this lodging belongs to. It can only belong to level 2 locations.
Name The lodging name
Address1 The lodging address
Address2 Additional information about the lodging address
PostalCode
City
Country
PrimaryPhone
SecondaryPhone
PrimaryFax
WebsiteUrl
Email
Rating A number displaying our clients rating of the lodging, e.g. 4.0 or 4.5
Latitude
Longitude
BfeNumber The BFE number for this lodging if any.
DepartmentId The department id for this lodging if any.
Descriptions An array of localized descriptions. Each description has a FromDate and a ToDate. Display the description that has the arrivaldate between it's fromdate and todate.
FacilityValues An array of facility values. Each facility value has a FromDate and a ToDate. Display the facilityvalue that has the arrivaldate between it's fromdate and todate.
Images An array of images. The images comes in the order our clients has specified.

LodgingType

Name Description
Id System id
Name Localized name

LodgingUnitType

A LodgingUnitType is the entity that can be booked. There can be multiple LodgingUnitTypes on a single Lodging, e.g. a hotel having several LodgingUnitTypes like single rooms, twin rooms and a suite. When a Lodging is a summer cottage, apartment or a villa, there is normally a one-to-one relationship between the Lodging and the LodgingUnitType.

Name Description
Id System id
LodgingId The lodging id this lodgingunittype belongs to.
CategoryId The lodgingunittypecategory id this lodgingunittype belongs to.
Name Localized name
ShortDescription Localized brief description
MaxPersons The maximum number of persons allowed to stay in this lodgingunittype. The maximum number is calculated as the sum of adults and children. Infants is not counted against this number.

LodgingUnitTypeCategory

Name Description
Id System id
Name Localized name
ShortDescription Localized brief description

Payment

Name Description
Id The Id of the transaction in bookingstudio. When used to POST Autorized payments it must match with a new Payment created by the /POST/rest/v1/gateways/{gateway_id}/payments/create call
CardId This must match the Internal Name of a Card se up for the gateway of the payment in Bookingstudio
TransactionId The gateways Id for the transaction
Amount Must be of the format #.##
Currency This must match the currency of the related BookingOption
Fee Must be of the format #.##

ReportList

A report list is a list our clients can create inside the system. They can choose between various datasources, and create filters as they wish. A reportlist is private by default, and can be shared throu the API by our clients.

Name Description
Id The unique id of the report list.
Name The name of the report list.

ReservationSummary

Name Description
ReservationId The reservation number
CustomerId The bookings customers id
CustomerFirstName The bookings customers first name
CustomerLastName The bookings customers last name
LodgingId The lodgings id to which the reservation booking belong
BookingDate The date the reservation booking was created
ArrivalDate The arrivaldate for the reservation booking
DepartureDate The departuredate for the reservation booking
Adults Number of adults on the reservation booking
Children Number of children on the reservation booking
Infants Number of infants on the reservation booking
Pets Number of pets in the reservation booking
BookingPrice The price
Status The status of the reservation: 1=Pending, 2=Approved, 3=Canceled

SeasonCalendar

Name Description
Id System id
Year The seasoncalendar year
LodgingUnitTypeId The lodgingunittypes system id
Seasons An array of the seasons for this lodgingunittype, containing SeasonCode, ChangeDay, MinimumDays, From date, and To date

The ChangeDay state what weekday(s) is valid arrivaldays. ChangeDay can be one of the following:
  • Any = -1
  • Sunday = 0
  • Monday = 1
  • Tuesday = 2
  • Wednesday = 3
  • Thursday = 4
  • Friday = 5
  • Saturday = 6

Please note that this is the default changeday. It can be changed on specific searches by custom business rules.

MinimumDays is the the minimum number of days the specified LodgingUnitType can be booked with arrivaldate within the season.

SeasonPrice

Name Description
Year The seasoncalendar year
LodgingUnitTypeId The lodgingunittypes system id
SeasonCode The seasoncode
BoardTypeId The boardtype included in the price
Price The dayprice of the season
Currency The currency of the price

Tags

Tags can be added on different entities like pricerules and images. The same tag name can be added to different entities, resulting in multiple equal tag names with different tag id's

Name Description
Id System id. This id is not equal across different installations.
Name The tag name.

TermsAndConditions

Terms and conditions is a set of legal "Terms and conditions" that every customer must accept to make a booking.

Name Description
Description A localized text of the terms and conditions for a specific lodging.

Texts

Texts denote blocks of text that can be accessed and used in different places. The texts are bound together over different languages through the SystemName property.

Name Description
Id Unique ID of the text
Name Name of the text. This name can be different for each text
LanguageId The ID of the language for the specific text.
SystemName SystenName of the text. This name is the same over all languages on the installation for the same text
Note Note regarding the specific text
Content The content of the text. Note - this is in a CDATA element since it can contain HTML content
ActiveFrom The date the text is active from. If nothing is specified the text is considered active for all times before the activeTo date.
ActiveTo The date the text is active to. If nothing is specified the text is considered active for all times after the activeFrom date.

Master Facilities

Below a the list of available master facilities.

This list is in-sync on all BookingStudio installations - so it can be easier for partners to integrate with multiple BookingStudio installations.

These master facilities must be mapped by the Bureau in their BookingStudio installation. If they are not mapped - then they will not be returned.

Id Name Type Is Mapped
1 Max persons Number Mapped
2 Bedrooms Number Mapped
3 House area Number Mapped
4 Ground area Number Mapped
5 Year of construction Number Mapped
6 Renovated year Number Mapped
7 Pets allowed Boolean Mapped
8 Pets not allowed Boolean Not mapped
9 Number of pets allowed Number Mapped
10 Internet Boolean Mapped
11 Swimmingpool Boolean Mapped
12 Spa bath Boolean Not mapped
68 Spa bath Number Mapped
13 Sauna Boolean Mapped
14 Washing machine Boolean Mapped
15 Dishwasher Boolean Mapped
16 Woodstove Boolean Mapped
17 Smooking allowed Boolean Not mapped
18 Smooking not allowed Boolean Mapped
19 Distance to the sea Number Mapped
20 Bathrooms Number Mapped
21 Rating Number Not mapped
22 Sea view Boolean Not mapped
23 Cleaning inclusive Boolean Mapped
24 Floor heating in bathroom Boolean Mapped
25 German TV Stations Boolean Mapped
26 Dryer Boolean Mapped
27 Enclosed terrace Boolean Mapped
28 No deposit Boolean Not mapped
29 Bathtub Boolean Not mapped
30 Fisher house Boolean Not mapped
31 Car charger Boolean Mapped
32 Heat pump Boolean Mapped
33 Electronic lock Boolean Not mapped
34 Solarium Boolean Not mapped
35 Tv Boolean Not mapped
36 DVD Boolean Not mapped
37 Blu-ray Boolean Not mapped
38 Radio Boolean Mapped
39 Sound system Boolean Not mapped
40 Telephone Boolean Not mapped
41 High chair Boolean Not mapped
42 Play room Boolean Not mapped
43 Intercom Boolean Not mapped
44 Fire pit Boolean Not mapped
45 Fire extinguisher Boolean Not mapped
46 FireAlarm Boolean Not mapped
47 Carbon-monoxide alarm Boolean Not mapped
48 Safe Boolean Not mapped
49 Number of living rooms Number Not mapped
50 Floor Number Not mapped
51 Number of kitchens Number Not mapped
119 Number of beds in living room Number Not mapped
120 Number of beds in sleeping loft Number Not mapped
52 Number of single beds in bedroom 1 Number Not mapped
53 Number of single beds in bedroom 2 Number Not mapped
54 Number of single beds in bedroom 3 Number Not mapped
55 Number of single beds in bedroom 4 Number Not mapped
56 Number of single beds in bedroom 5 Number Not mapped
84 Number of single beds in bedroom 6 Number Not mapped
85 Number of single beds in bedroom 7 Number Not mapped
86 Number of single beds in bedroom 8 Number Not mapped
87 Number of single beds in bedroom 9 Number Not mapped
88 Number of single beds in bedroom 10 Number Not mapped
57 No. of double beds in bedroom 1 Number Not mapped
58 No. of double beds in bedroom 2 Number Not mapped
59 No. of double beds in bedroom 3 Number Not mapped
60 No. of double beds in bedroom 4 Number Not mapped
61 No. of double beds in bedroom 5 Number Not mapped
89 No. of double beds in bedroom 6 Number Not mapped
90 No. of double beds in bedroom 7 Number Not mapped
91 No. of double beds in bedroom 8 Number Not mapped
92 No. of double beds in bedroom 9 Number Not mapped
93 No. of double beds in bedroom 10 Number Not mapped
62 No. of bunk beds in bedroom 1 Number Not mapped
63 No. of bunk beds in bedroom 2 Number Not mapped
64 No. of bunk beds in bedroom 3 Number Not mapped
65 No. of bunk beds in bedroom 4 Number Not mapped
66 No. of bunk beds in bedroom 5 Number Not mapped
94 No. of bunk beds in bedroom 6 Number Not mapped
95 No. of bunk beds in bedroom 7 Number Not mapped
96 No. of bunk beds in bedroom 8 Number Not mapped
97 No. of bunk beds in bedroom 9 Number Not mapped
98 No. of bunk beds in bedroom 10 Number Not mapped
109 No. of three quarter beds in bedroom 1 Number Not mapped
110 No. of three quarter beds in bedroom 2 Number Not mapped
111 No. of three quarter beds in bedroom 3 Number Not mapped
112 No. of three quarter beds in bedroom 4 Number Not mapped
113 No. of three quarter beds in bedroom 5 Number Not mapped
114 No. of three quarter beds in bedroom 6 Number Not mapped
115 No. of three quarter beds in bedroom 7 Number Not mapped
116 No. of three quarter beds in bedroom 8 Number Not mapped
117 No. of three quarter beds in bedroom 9 Number Not mapped
118 No. of three quarter beds in bedroom 10 Number Not mapped
99 No. of double sofa beds in bedroom 1 Number Not mapped
100 No. of double sofa beds in bedroom 2 Number Not mapped
101 No. of double sofa beds in bedroom 3 Number Not mapped
102 No. of double sofa beds in bedroom 4 Number Not mapped
103 No. of double sofa beds in bedroom 5 Number Not mapped
104 No. of double sofa beds in bedroom 6 Number Not mapped
105 No. of double sofa beds in bedroom 7 Number Not mapped
106 No. of double sofa beds in bedroom 8 Number Not mapped
107 No. of double sofa beds in bedroom 9 Number Not mapped
108 No. of double sofa beds in bedroom 10 Number Not mapped
67 Order cleaning at owner blocking Boolean Not mapped
69 Swimmingpool - private Boolean Not mapped
70 Parking Boolean Not mapped
71 Fenced property Boolean Mapped
72 Kitchen Boolean Not mapped
73 Fridge Boolean Mapped
74 Garden Boolean Not mapped
75 Chimney Boolean Not mapped
76 View Boolean Not mapped
77 Grill Boolean Mapped
78 Terrace Boolean Not mapped
79 Air condition Boolean Not mapped
80 Heating Boolean Not mapped
81 Microwave Boolean Mapped
82 Barrier free Boolean Not mapped
83 Bike rental Boolean Not mapped