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 |
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.
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.
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.
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.
To batch import all BookingOptions, you must use the /v1/bookingoption.xml endpoint
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.
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.
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
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:
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.
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 |
You can construct links directly to our customers backend.
Template | Parameters |
---|---|
/bs/default.aspx?url=%2Fbs%2FFrontDesk%2FReservationHandle.aspx%3Freservation={reservationId}&mode=arrival | reservationId |
Id | Name | |
---|---|---|
1 | Boolean | |
2 | Text | |
3 | Integer |
Id | Name | |
---|---|---|
1 | Standard | |
2 | Consumption | |
3 | Deposit | |
4 | Insurance | |
5 | Transportation | |
6 | Cleaning |
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) |
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.
Returns all boardtypes localized by the specified language id.
GET rest/v1/boardtypes.xml?lan={languageid}
{languageid} The language of the localized fields (required)
Caching time: 3600 seconds VaryByParam: lan
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>
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"
Version: 3 User-Agent: YOURNAME
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}
{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].)
This resource has rate limiting to prevent unfair usage.
This result may use some internal caching for about 30 minutes.
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"
Version: 3 User-Agent: YOURNAME
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}
{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].)
This resource has rate limiting to prevent unfair usage.
This result may use some internal caching for about 30 minutes.
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>
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
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" />
None
HTTP/1.1 200 OK
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>
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>
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>
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.
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}
{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 time: 3600 seconds VaryByParam: lodgingid;lodgingunittypeid;lan;loc;ari;adu;chi;inf;pet;dur;page
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>
ALL OTHER VERSIONS THAN VERSION 3 IS PENDING REMOVAL - DON'T USE VERSION 1 OR 2
Version: 3 User-Agent: YOURNAME
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>
{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.
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.
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" />
Returns calendars for all lodgingunittypes. When requested in the Ical format (ics), only availability data will be returned
Version: 1 or 2 Version 2 gives you an extended date range for results.
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
{lodgingid} The id of the lodging to show calendars for {lodgingunittypeid} The id of the lodgingunittype to show calendar for
Caching time: 3600 seconds VaryByParam: lan
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>
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
Returns all available currencies.
GET: /v1/currencies.xml
None
Caching time: 3600 seconds VaryByParam: none
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>
Returns all customer advisors. If you supply a lodging id, or a customer id the system can suggest a customer advisor to pick.
GET rest/v1/customeradvisors.xml?lodgingid={lodgingid}&customerid={customerid}
{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)
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>
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
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" />
HTTP/1.1 200 OK Content-Type: text/xml; charset=utf-8 <Result PossiblyBlocked="true|false" />
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).
POST /v1/customers/login.xml <?xml version="1.0" encoding="utf-8"?> <CustomerLoginRequest> <UserName>secret_username</UserName> <Password>secret_username</Password> </CustomerLoginRequest>
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> />
List all reservations belonging to a specific customer
GET /v1/customers/{customerid}/reservations.xml
{customerid} The id of the customer (required).
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>
Returns all facilities localized by the specified language id.
GET /v1/facilities.xml?lan={languageid}
{languageid} The language of the localized fields (required)
Caching time: 3600 seconds VaryByParam: lan
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>
Returns all facility groups localized by the specified language id.
GET /v1/facilitygroups.xml?lan={languageid}
{languageid} The language of the localized fields (required)
Caching time: 3600 seconds VaryByParam: lan
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>
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.
POST /v1/gateways/{gatewayId}/payments/create.xml?reservationId={reservationId}
{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.
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).
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" />
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.
GET /v1/gateways/{gatewayId}/payments/{paymentId}.xml
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.
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" />
HTTP/1.1 200 OK Content-Type: text/xml; charset=utf-8 <?xml version="1.0" encoding="utf-8"?> <int>1140<?/int>
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.
GET /v1/heartbeat.xml
HTTP/1.1 200 OK Content-Type: text/xml; charset=utf-8 <?xml version="1.0" encoding="utf-8"?> <Heartbeat> </Heartbeat>
An InformationMaterial is an item a customer can subscribe to, ie. catalogues, cd's etc.
GET /rest/v1/informationmaterials.xml
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.
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" />
HTTP/1.1 201 Created X-Resource-Id: The id of the newly created customer
GET /v1/items.xml?lan={languageid}
{languageid} The language of the localized fields (required)
Cached 3600 seconds
Caching time: 3600 seconds VaryByParam: lan
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>
Returns all available languages.
GET: /v1/languages.xml
None
Caching time: 3600 seconds VaryByParam: none
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>
Returns all locations localized by the specified language id.
GET /v1/locations.xml?lan={languageid}
{languageid} The language of the localized fields (required)
Cached 3600 seconds
Caching time: 3600 seconds VaryByParam: lan
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>
Returns all lodgings localized by the specified language id.
GET /v1/lodgings.xml?lan={languageid}
{languageid} The language of the localized fields (required)
Caching time: 3600 seconds VaryByParam: lan
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.
GET /v1/lodgings/{lodgingId}.xml?lan={languageid}
{languageid} The language of the localized fields (required)
Returns all lodging types localized by the specified language id.
GET /v1/lodgingtypes.xml?lan={languageid}
{languageid} The language of the localized fields (required)
Caching time: 3600 seconds VaryByParam: lan
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>
Returns all lodgingunittype categories localized by the specified language id.
GET /v1/lodgingunittypecategories.xml?lan={languageid}
{languageid} The language of the localized fields (required)
Caching time: 3600 seconds VaryByParam: lan
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>
Returns all lodgingunittypes localized by the specified language id.
GET /v1/lodgingunittypes.xml?lan={languageid} or GET /v1/lodgings/{lodgingid}/lodgingunittypes.xml?lan={languageid}
{languageid} The language of the localized fields (required) {lodgingid} The id of the parent lodging
Caching time: 3600 seconds VaryByParam: lan
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>
GET /v1/reportlists.xml
None
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>
The fields exposed by the result is selected by our client, and can be changed at ANY time
GET /v1/reportlists/{reportlistid}/execute.xml?page={page}
{reportlistid} The id of the reportlist to be executed (required) {page} The page to retrive (default 1)
Caching time: 10 minutes per {reportlistid}
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>
When the resource is called using a token identifying a partner (agent or affiliate), only reservations owned by this partner is returned.
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}
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.
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>
Returns all seasoncalendars for a specified year.
GET /v1/seasoncalendars.xml?year={year} or GET /v1/lodgings/{lodgingid}/seasoncalendar.xml?year={year} or GET /v1/lodgingunittypes/{lodgingunittypeid}/seasoncalendar.xml?year={year}
{year} The year of the seasoncalendar (default = current year) {lodgingid} The id of the lodging {lodgingunittype} The id of the lodgingunittype
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:
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.
Returns all seasonprices for a specified year. The price is always displayed as the dayprice with up to 4 decimals.
GET /v1/seasonprices.xml?year={year} or GET /v1/lodgings/{lodgingid}/seasonprices.xml?year={year} or GET /v1/lodgingunittypes/{lodgingunittypeid}/seasonprices.xml?year={year}
{year} The year of the seasonprices (default = current year) {lodgingid} The id of the lodging {lodgingunittype} The id of the lodgingunittype
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>
GET /v1/tags.xml
Not cached
HTTP/1.1 200 OK Content-Type: text/xml; charset=utf-8 <Tags> <Tag Id="1" Description="LastMinute" /> ... </Tags>
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}]
{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 time: 3600 seconds VaryByParam: lan
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..." />
GET /v1/texts.xml or GET /v1/texts/{systemname}.xml?date={date}
{date} - Specifies what date should be used when retreiving the specified text. If not supplied you will get todays current text.
Not cached
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>
Name | Description |
---|---|
Id | System id |
Name | Localized name |
ShortDescription | Localized brief description |
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 |
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. |
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. |
Name | Description |
---|---|
Id | System id |
Name | The name of the currency |
Iso4217Name | ISO 4217 Name |
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 |
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 |
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 |
Name | Description |
---|---|
Name | The name of the custom field |
Value | The value of the custom field |
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 |
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. |
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 |
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. |
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. |
Name | Description |
---|---|
Id | System id |
Name | The name of the language |
Culture | ISO culture code |
DefaultCurrency | The default sell currency for this language |
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 |
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 | |
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. |
Name | Description |
---|---|
Id | System id |
Name | Localized name |
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. |
Name | Description |
---|---|
Id | System id |
Name | Localized name |
ShortDescription | Localized brief description |
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 #.## |
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. |
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 |
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:
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. |
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 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. |
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 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. |
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 |