Toggle menu
Booking Experts logo
Booking Experts
Alles in één reserveringssysteem
 / 

API voor ontwikkelaars

Via onze API kan een ontwikkelaar direct communiceren met het park in Booking Experts.

  • Vakantiehuizen ophalen
  • Beschikbaarheid ophalen
  • Prijzen ophalen​
  • Reserveringen plaatsen

Dit wordt onder andere gebruikt door touroperators zoals Belvilla. De rest van deze pagina is in het Engels geschreven zodat alle programmeurs dit kunnen begrijpen.

Changelog

15-12-2016 Add opt-out for fallback translations on localized fields
13-12-2016 Include location information on a per category basis, and semantic tags
22-04-2016 Add minimum number of nights to categories api
08-02-2016 Add invoiced_by_tour_operator? field
30-09-2015 Add referrer to partial reservations
15-09-2015 Add counts_from, counts_till for extra’s
09-09-2015 Add percentage_over_default_rent as a quantity type for extra’s
22-08-2015 Add apartment as possible rentable type
11-08-2015 Add accommodation as possible rentable type
08-08-2015 Add berth as possible rentable type
22-07-2015 Add google_analytics_id to partial reservations
15-07-2015 Add hidden to required and optional extras
06-07-2015 Add memo to reservations
01-07-2015 Add hotelroom as possible rentable type
23-06-2015 Add return_url to partial reservations
07-05-2015 Add api endpoint for simple pricing
15-04-2015 Added image_season to category images. Image season could be one of [‘whole_year’, ‘winter’, ‘summer’]
08-04-2014 Add rentable type to categories
03-04-2014 Seperate optional and common tags in categories
01-04-2014 Added tags and front_office_url to categories
29-12-2014 Added percentage_over_default_extras as a quantity type for extra’s
02-12-2014 Title and first name fields are added to reserve call. Salutation, initials are deprecated
27-10-2014 Number field is deprecated and its value will be appended to Address for Reservation resources
11-09-2014 Support pets availability within the api call
10-09-2014 Support remote_booking_nr
13-08-2014 Support number_of_pets
14-05-2014 Support specifying number of people in the availability method
14-04-2014 DEPRECATE: www.bookingexperts.nl, use tour-operator-api.bookingexperts.nl instead
06-11-2013 Add partial reservations which can be used to redirect customers to our reservation steps
01-10-2013 Include support for If-Modified-Since header
01-10-2013 Include extra type in extras
30-09-2013 Change way prices are displayed and calculated for extras
30-09-2013 Mention the character encoding in the documentation
07-08-2013 Include stock in the availability call, and categories call
31-07-2013 Include start date and end date with options in the categories call
03-07-2013 More detailed error messages
03-07-2013 Allow specifying both a number_of_people and number_of_adults, or both country and country_code
19-06-2013 Add a note about the exact behavior of the depricated number_of_people
04-03-2013 DEPRECATE: country and move to country_code
19-02-2013 counts_childs should be counts_children
07-02-2013 Added english as possible locale
07-02-2013 Added counts_babies, counts_childs, counts_adolescents and counts_adults to extras
07-02-2013 Added max_baby_age, max_child_age and max_adolescent_age to category
30-01-2013 Added date_of_birth as not required to reservation
30-01-2013 Added number of adults, adolescents, childs, babies but kept number_of_people for backwards compatibility

Introduction

To access the API, you’ll need an API key. On each http request, append the api key as a
query string parameter. If you provide an invalid API key, a http status code 401 (unauthorized)
will be returned.

Localization

https://tour-operator-api.bookingexperts.nl/<locale>/......

Every request needs a locale so you will get the objects in the corresponding language.
Currently you have the availability to use:

nl Dutch translation
de German translation
en English translation
fr French translation
da Danish translation

All strings sent to the API are expected to be in UTF-8 encoding.

Translation fallbacks

By default fallbacks are presented if a localized field has not been populated for the requested locale.
You can opt-out of this behaviour by setting the translation_fallbacks parameter to false.

Categories

You can access a list of all types of bungalows (called categories within bookingexperts) by
doing a http GET on:

https://tour-operator-api.bookingexperts.nl/<locale>/parks/<park_id>/categories.json

Example

curl https://tour-operator-api.bookingexperts.nl/nl/parks/3/categories.json?api_key=123_ABC

[
	{
		"id":18,
		"name":"4-persoons chalet, 2 slaapkamers",
		"rentable_type":"bungalow",
		"description":"Twee slaapkamers waarvan \u00e9\u00e9n met een tweepersoonsbed en \u00e9\u00e9n met eenpersoonsbedden en/of stapelbedden.",
		"short_description":"Beleef de natuur van de Veluwe en het Veluwemeer vanuit uw recreatiechalet.",
		"stock":12,
		"front_office_url": "https://app.bookingexperts.nl/nl/front/parks/123:Park/categories/456:4-persoons-chalet",
		"minimum_number_of_nights":2,
		"max_number_of_people":4,
		"max_baby_age":1,
		"max_child_age":11,
		"max_adolescent_age":17,
		"tags":[
			{"name":"Wifi","id":301,"semantic":"wifi",value:null},
			{"name":"Sauna","id":302,"semantic":"sauna",value:null},
			{"name":"Number of toilets","id":303,"semantic":"restrooms",value:2},
			{"name":"Type of cooker","id":303,"semantic":"other",value:"induction"},
		],
		"optional_tags":[
			{"name":"Zwembad","id":304,"semantic":"pool",value:null},
		],
		"images":[
			{"image_url":"https://bookingexperts.s3.amazonaws.com/uploads/image/image/197/101_1034.jpg","image_position":0,"image_season":"whole_year"},
			{"image_url":"https://bookingexperts.s3.amazonaws.com/uploads/image/image/198/_MG_4738.jpg","image_position":1,"image_season":"winter"},
			{"image_url":"https://bookingexperts.s3.amazonaws.com/uploads/image/image/199/_MG_4764.jpg","image_position":2,"image_season":"summer"}
		],
		"required_extras":[
			{"name":"Eindschoonmaak","prices":[{"start_date":"2013-01-01,"price":45.0}],"quantity_type":"fixed","description":"wij maken het huisje voor jou schoon","counts_babies":true,"counts_children":true,"counts_adolescents":true,"counts_adults":true,"counts_from":0,"counts_till":9999,"start_date":"2013-01-01","end_date":"2013-12-31","extra_type":7,"hidden":false, "invoiced_by_tour_operator":true},
			{"name":"Reserveringskosten","prices":[{"start_date":"2013-01-01,"price":10.0}],"quantity_type":"fixed","description":"administratieve kosten die wij inrekening brengen","counts_babies":true,"counts_children":true,"counts_adolescents":true,"counts_adults":true,"counts_from":2,"counts_till":9999,"start_date":"2013-01-01","end_date":"2013-12-31","extra_type":null,"hidden":true, "invoiced_by_tour_operator":true},
			{"name":"Toeristenbelasting","prices":[{"start_date":"2013-01-01,"price":1.25}],"quantity_type":"per_person_per_day","description":"","counts_babies":true,"counts_children":true,"counts_adolescents":true,"counts_adults":true,"counts_from":0,"counts_till":9999,"start_date":"2013-01-01","end_date":"2013-12-31","extra_type":1,"hidden":false, "invoiced_by_tour_operator":true},
			{"name":"Bedlinnenpakket","prices":[{"start_date":"2013-01-01,"price":6.25}],"quantity_type":"per_person","description":"","counts_babies":true,"counts_children":true,"counts_adolescents":true,"counts_adults":true,"counts_from":0,"counts_till":9999,"start_date":"2013-01-01","end_date":"2013-12-31","extra_type":6,"hidden":true, "invoiced_by_tour_operator":true}
		],
		"optional_extras":[
			{"id":65, "name":"Annuleringsfonds","prices":[{"start_date":"2013-01-01","price":6.0},{"start_date":"2013-07-01","price":6.5}],"quantity_type":"percentage_over_total","description":"annuleringsverzekering die 100% dekt","counts_babies":true,"counts_children":true,"counts_adolescents":true,"counts_adults":true,"counts_from":0,"counts_till":9999,"start_date":"2013-01-01","end_date":"2013-12-31","hidden":false, "invoiced_by_tour_operator":true},
			{"id":86, "name":"Opgemaakt bed","prices":[{"start_date":"2013-01-01"."price":3.0}],"quantity_type":"per_person","description":"","counts_babies":true,"counts_children":true,"counts_adolescents":true,"counts_adults":true,"counts_from":0,"counts_till":9999,"start_date":"2013-01-01","end_date":"2013-12-31","extra_type":null,"hidden":false, "invoiced_by_tour_operator":true},
			{"id":69, "name":"Handoekpakket","prices":[{"start_date":"2013-01-01"."price":3.0}],"quantity_type":"per_piece","description":"","counts_babies":true,"counts_children":true,"counts_adolescents":true,"counts_adults":true,"counts_from":0,"counts_till":9999,"start_date":"2013-01-01","end_date":"2013-12-31","extra_type":5,"hidden":false, "invoiced_by_tour_operator":true},
			{"id":99, "name":"Keukendoekpakket","prices":[{"start_date":"2013-01-01"."price":2.5}],"quantity_type":"per_piece","description":"","counts_babies":true,"counts_children":true,"counts_adolescents":true,"counts_adults":true,"counts_from":0,"counts_till":9999,"start_date":"2013-01-01","end_date":"2013-12-31","extra_type":null,"hidden":false, "invoiced_by_tour_operator":true}
		],
		"address": "Dorpstraat 3",
		"city": "Oranje",
		"postalcode": "1234AB",
		"country_code": "NL",
		"latitude": 51.0698988,
		"longitude": 5.88590269999997
	}
]

Here we will describe all the members of a category:

id A unique id for this category. Use this for the availability API.
name The name of this category.
rentable_type The type of this category. Can be either bungalow, camping, hotelroom, accommodation, apartment or berth.
description A detailed description of this category.
short_description A short description of this category (max 140 characters).
stock The total number of bungalows of this type.
front_office_url This is where customers can book this house directly in the bookingexperts system.
minimum_number_of_nights The minimum number of nights people need to book to be allowed to stay in this category.
max_number_of_people Maximum number of people that can stay in a single bungalow of this category at any given time. This includes people of every age category except babies.
max_baby_age Maximum age of a person to be considered a baby. e.g. when this member has a value of 1, babies won’t be considered a baby anymore when they reach an age of 2 years.
max_child_age Maximum age of a person to be considered a child. e.g. when this member has a value of 11, children won’t be considered a child anymore when they reach an age of 12 years.
max_adolescent_age Maximum age of a person to be considered an adolescent. e.g. when this member has a value of 1, adolescents won’t be considered an adolescent anymore when they reach an age of 17 years.
tags A tag is a special feature available in this category (e.g. Wifi, Sauna). These tags apply to all bungalows in the category.
optional_tags A list of tags that only apply to a subset of bungalows in the category. This means that a tag from this list may not be available for a specific date, because all bungalows with that feature are booked.
images An array of photos of this category. These are the full resolution images, you should resize them to fit your need.
required_extras These are costs that will be added to all reservations, in addition to the rent. Things like taxes, cleaning costs etc. For more info see the section extras.
optional_extras These are costs that can be added by the guest to a reservation of this category. Things like towels, insurance etc. For more info see the section extras.
address* the address of this category
postalcode* The postalcode of this category
city* The city of this category
country_code* The ISO 3166-1 country code of this category

tags

Each tag has the following members:

id The id of this tag.
name The name of this tag.
semantic The meaning of this tag. We have a table of predefined tags that are used by a lot of tour operators. See the table below.
value The value of this tag. Will be null if it is a standard tag, but can also be a number or a string for tags that can have different values. See the example above, and the table below for a full listing of semantic tags that have a value.

The following semantic tag types are available:

Naam Type of value Meaning
beds numerical Indicates number of beds
childbeds numerical Indicates number of child beds
childchairs numerical Indicates number of high chairs
showers numerical Indicates number of showers
restrooms numerical Indicates number of restrooms
bathrooms numerical Indicates number of bathrooms
bedrooms numerical Indicates number of bedrooms
airconditioner none Presence of this tag indicates presence of an airconditioner
wifi none Presence of this tag indicates presence of WiFi
pool none Presence of this tag indicates presence of a pool
sauna none Presence of this tag indicates presence of a sauna

Extras

All extra costs have the following members:

id The id of this extra. This is only included in the optional extras, not in the required ones.
name The name of this extra.
prices An array of hashes, each containing a start_date and a price.
quantity_type The way this price is applied to a reservation.
description Short description for the customer.
maximum The maximum possible quantity.
counts_babies Whether or not babies are considered to count against the number of people.
counts_children Whether or not childs are considered to count against the number of people.
counts_adolescents Whether or not adolescents are considered to count against the number of people.
counts_adults Whether or not adults are considered to count against the number of people.
counts_from Count guests from X. For example: if guests counts_from 2 adults and there is a reservation with 3 adults, it will effectively count 1.
counts_till Count guests till Y. For example: if guests counts_till 3 adults and there is a reservation with 4 adults, it will effectively count 1.
start_date The start date of this extra.
end_date The end date of this extra.
extra_type A number that can be used to automatically map this extra cost to some cost you use internally. While the exact name of an extra can be chosen by the park itself, this number will make sure both parties know what this extra actually is, and will specified for the most common extra costs. See the table below. Not all extra costs will have an extra_type: it can also be null.
hidden Whether or not the cost should be paid upon arrival at the accommodation.
invoiced_by_tour_operator Whether or not the cost should be charged by the tour operator. If false, the cost will either be charged on a seperate invoice sent by the park, or will be payable upon arrival at the accommodation. Only if true, should the tour operator ever charge this cost to the customer.

start_date/end_date

Each extra can have a start_date and end_date. Only reservations that overlap, either fully or partially, with this period, can have this extra. start_date and/or end_date can also be null, which indicate that the start or end of this period is not limited. The start_start/end_date feature can be used by parks to include extras that only apply to certain dates, like a christmas dinner.

Besides the start_date and end_date, an extra also has an array of one or multiple prices, each with a start date. Parks can use this to e.g. increase certain prices each year. If an extra has multiple prices, the start_date of the reservation will be used to determine which price will be used. If a price has a start date of “2013-01-01”, a reservation with a start_date of “2013-01-01” or bigger will use this price.

extra_type

The following extra types exist right now. Please be aware that we can choose to add new ones at any time.

1 Tourist taxes
2 Environmental charges
3 Energy (electricity, gas)
4 Deposit
5 Bath linen
6 Bed linen
7 Cleaning
8 Child’s bed
9 Child’s chair
10 Sauna
11 Pets

Quantity_type

The following quantity types exist:

fixed It is just a fixed price per reservation.
per_day A bit of a misnomer, since it is actually per night. The total price will be price times the number of nights in this reservation.
per_person The total price will be price times the number of people in this reservation. This takes in consideration the counts_babies, _counts_children, counts_adolescents, counts_adults, counts_from, counts_till attributes.
per_person_per_day A bit of a misnomer, since it is actually per night. The total price will be price times the number of nights in this reservation times the number of people. This takes in consideration the counts_babies, _counts_children, counts_adolescents, counts_adults, counts_from, counts_till attributes.
per_piece We require the guest to specify a quantity. The total price will be price times this quantity.
per_piece_per_day We require the guest to specify a quantity. The total price will be price times this quantity times the number of nights.
per_pet The total price will be price times the number of pets in this reservation.
per_pet_per_day A bit of a misnomer, since it is actually per night. The total price will be price times the number of nights in this reservation times the number of pets.
percentage_over_total price is not actually a price, but a percentage. The percentage of the invoice total will be the total price of this cost.
percentage_over_rent price is not actually a price, but a percentage. The percentage of the rent will be the total price of this cost. Other extra’s can be considered as rent, for example a fee which should be part of the total rent.
percentage_over_default_extras price is not actually a price, but a percentage. The percentage of the required extra’s will be the total price of this cost.
percentage_over_default_rent price is not actually a price, but a percentage. The percentage of the default rent will be the total price of this cost. This is different from percentage_over_rent because it does not consider other extra’s that are considered as rent.

Availability

You can obtain a list of all possible periods on which a reservation can be made, with the amount of rent,
by doing a http GET on:

https://tour-operator-api.bookingexperts.nl/<locale>/parks/<park_id>/categories/<category_id>/availability.json?start_date=<start_date>&end_date=<end_date>&nights=<number_of_nights_or_period_type>

Dates are given in the format (YYYY-MM-DD). Nights can be either a number of nights, two numbers of nights seperated by a dash, or week, twoweek, threeweek, midweek, weekend . Only periods with this length will be returned. It’s also possible to not specify nights. In that case all predefined periods (week, twoweek, threeweek, midweek, weekend ) will be returned. Specific number of nights ( period_type = custom ), won’t be returned. Examples of valid nights parameters are:

3 Return all periods of 3 nights.
2-21 Return all periods of at least 2 nights, and at most 21 nights.
week Return all periods defined as a week.

The result contains the plain rent prices, without any additional costs the park might charge, like taxes and towel packages.

Optionally, it is possible to specify number_of_adults, number_of_adolescents, number_of_childs, number_of_babies and number_of_pets. If you specify these additional parameters, not only the rent price, but also the all-in prices are returned which include all required additional costs.

Errors

Error are communicated by using http status codes, combined with a json object containing just one key: reason. The following errors can happen:

404 category does not exist The given category does not exist.
400 invalid start_date start_date is not correctly formatted.
400 invalid end_date end_date is not correctly formatted.

Example

curl "https://tour-operator-api.bookingexperts.nl/nl/parks/3/categories/18/availability.json?api_key=ABC_123&start_date=2012-7-15&end_date=2013-7-15&nights=week"
	
[
	{
		"arrival_date":"2012-07-20",
		"checkout_date":"2012-07-27",
		"period_type":"week",
		"price":529.0,
		"original_price":635.0,
		"stock":5,
		"discount_names":"Lustrum actie",
		"available_for_pets":true
	},
	{
		"arrival_date":"2012-07-27",
		"checkout_date":"2012-08-03",
		"period_type":"week",
		"price":635.0,
		"original_price":635.0,
		"stock":3,
		"discount_names":""
		"available_for_pets":false
	}
]

Here we will describe all members of a period:

arrival_date The checkin date (format YYYY-MM-DD)
checkout_date The checkout date (format YYYY-MM-DD)
period_type The period type, possible values are week, twoweek, threeweek, weekend, midweek or custom.
price The total rent for making a reservation from arrival_date till checkout_date.
original_price The total rent without taking the temporary discount actions into account. Use this to display e.g. from 635.00 now 529.00.
all_in_price The total rent, including all required additional costs for making a reservation from arrival_date till checkout_date. This is only returned if at least one of the number_of parameters is specified.
all_in_original_price The total rent without taking the temporary discount actions into account, including all required additional costs for making a reservation from arrival_date till checkout_date. This is only returned if at least one of the number_of parameters is specified.
discount_names A comma seperated list of discount actions that apply to this period.
stock A number indicating the amount of bungalows that are available during this period.
available_for_pets This indicates if this period can be booked for people with pets. It might be that all rentables of this category that allow pets are fully booked in some periods.

Performance

Because of the large number of periods that can be available for a single category, this API call can take a bit of time. To cut down the total amount of time to this call please:

  • For a single category, request the full desired date range at once. Requesting e.g. the complete range from 2013-1-1 to 2014-1-1 at once is faster then e.g. 4 requests of 3 months each.
  • Request all the desired number of nights at once. Requesting e.g. nights=2-21 is faster then 20 requests, one for each duration.

So basically, if you’re interested in e.g. 1.5 year ahead and all periods between 2 and 21 nights, please do so in 1 API call. Depending on the category, server load etc., this call will take somewhere between about 1 and 6 seconds.

Caching

We recommend updating availability often, to keep up to date with availability of the categories, changing prices and discounts. Since this is a relatively slow call, we support the HTTP If-Modified-Since header, which allows you to quickly check whether the availability has changed at all. We strongly recommend using the If-Modified-Since header!

For example:

curl --silent --head "https://tour-operator-api.bookingexperts.nl/nl/parks/3/categories/18/availability.json?api_key=ABC_123&start_date=2013-8-15&end_date=2014-8-15&nights=2-21"
HTTP/1.1 200 OK 
Last-Modified: Wed, 25 Sep 2013 22:00:00 GMT                                                                                                                                                                                                 
Content-Type: application/json; charset=utf-8
Cache-Control: max-age=0, private, must-revalidate
X-Ua-Compatible: IE=Edge
X-Request-Id: 371ff9f5082b4b5bf124c48e785be7e4
X-Runtime: 4.957753
Date: Thu, 26 Sep 2013 13:37:49 GMT
X-Rack-Cache: miss
Content-Length: 0
Connection: Keep-Alive

This request took almost 5 seconds (X-Runtime header). Now use the timestamp in the Last-Modified header upon your next request

curl -I --header 'If-Modified-Since: Wed, 25 Sep 2013 22:00:00 GMT' "https://tour-operator-api.bookingexperts.nl/nl/parks/3/categories/18/availability.json?api_key=ABC_123&start_date=2013-8-15&end_date=2014-8-15&nights=2-21"
HTTP/1.1 304 Not Modified 
Cache-Control: max-age=0, private, must-revalidate
X-Ua-Compatible: IE=Edge
X-Request-Id: 89b83bac25a3ae0556696ce980c7d1a8
X-Runtime: 0.046318
Date: Thu, 26 Sep 2013 13:41:22 GMT
X-Rack-Cache: miss
Connection: Keep-Alive

As long as there are no updates to report, this request will return HTTP status 304 (Not Modified) immediately. If the availability has changed since then, status 200 and the new availability will be returned. When using this mechanism, you can check for updates almost continuously.

Simple prices

Some tour operators do not support arbritray combinations of arrival_date and checkout_date to have different prices. With the above API, it might be that 3 nights cost for example 100 euros, while 4 nights cost 110. If you do not support this way of pricing, you can ask the park to fill in a simple price list for you. With the following API call you should then be able to synchronize prices and availability. Please note, that the categories api call returns minimum_number_of_nights. Even when using simple prices, we don’t allow people to book less than the given number of nights.

https://tour-operator-api.bookingexperts.nl/<locale>/parks/<park_id>/categories/<category_id>/simple_prices.json?start_date=<start_date>&end_date=<end_date>

To be able to use this API call, the park must have configured you to use simple prices. If not, this call will return a http status code 401 (unauthorized). Other errors that can occur are:

404 category does not exist The given category does not exist.
401 unauthorized either your api token is invalid, or the park has not configured you to use simple prices.
400 invalid start_date start_date is not correctly formatted.
400 invalid end_date end_date is not correctly formatted.

Simple prices example

curl "https://tour-operator-api.bookingexperts.nl/nl/parks/3/categories/18/simple_prices.json?api_key=ABC_123&start_date=2012-7-15&end_date=2013-7-15"

[
	{
		"date":"2012-07-20",
		"stock":5,
		"price":25.0
	},
	{
		"date":"2012-07-21",
		"stock":5,
		"price":20.0
	}
]

Here we will describe all members of a date:

date Night to which this stock and price applies (format YYYY-MM-DD). So if it is “2012-07-20”, the night of “2012-07-20” to “2012-07-21” will have the given stock and price.
stock How many of this category are available.
price How much does this night cost.

Prices

You can check what the price including required extras (cleaningcosts, taxes etc) will be by doing a http GET on:

https://tour-operator-api.bookingexperts.nl/<locale>/parks/<park_id>/categories/<category_id>/price.json

This get should supply the following parameters:

start_date* The arrival date of the customer (format YYYY-MM-DD)
end_date* The checkout date of the customer (format YYYY-MM-DD)
number_of_adults* The number of adults.
number_of_adolescents* The number of adolescents, defaults to 0.
number_of_childs* The number of children, defaults to 0.
number_of_babies The number of babies (< 3 years of age), defaults to 0.
number_of_pets The number of pets, defaults to 0.
extras A hash mapping optional extra ids to quantities. For optional extras not requiring a quantity, map the id to 0. See example.

Deprecated

number_of_people The number of adults. This is here for backwards compatibility reasons: for new implementations we recommend using the more explicit number_of_adults instead.

When combining number_of_people and number_of_adults, number_of_people will be ignored. When you do use number_of_people as input to a reserve call, note that it is mapped to number_of_adults.

Errors

Error are communicated by using http status codes, combined with a json object containing just one key: reason. The following errors can happen:

404 category does not exist The given category does not exist.
404 not available Can’t make a reservation on the given category in the given period because it is not possible at all to reserve the given period (e.g. no prices have been specified for that period), or all bungalows are already fully booked in this period.
404 extra does not exist: extra_id One of the specified extra’s does not exist.
400 invalid start_date start_date is not correctly formatted.
400 invalid end_date end_date is not correctly formatted.
400 start_date bigger then end_date start_date should be smaller then the end date
422 Validation error. Check out the response body for more information.

Example

curl "https://tour-operator-api.bookingexperts.nl/nl/parks/3/categories/131/price.json?api_key=ABC_123&start_date=2012-7-15&end_date=2013-7-15&number_of_people=4&number_of_babies=2&extras\[131\]=2"

{
	"category_id":31,
	"arrival_date":"2012-07-23",
	"checkout_date":"2012-07-30",
	"number_of_people":4,
	"number_of_babies":2,
	"number_of_adults":4,
	"number_of_adolescents":0,
	"number_of_childs":0,
	"number_of_pets":0,
	"rent":"500.0",
	"total_price":"540.0",
}

The resulting json response contains the following:

category_id The id of the category of the bungalow.
arrival_date The arrival date (format YYYY-MM-DD)
checkout_date The checkout date (format YYYY-MM-DD)
number_of_people* The number of adults, children and adolescents. Basically all people except babies. This is here for backwards compatibility reasons: for new implementations we recommend using the more explicit number_of_adults instead.
number_of_adults* The number of adults.
number_of_adolescents* The number of adolescents, defaults to 0.
number_of_childs* The number of children, defaults to 0.
number_of_babies The number of babies (< 3 years of age), defaults to 0.
number_of_pets The number of pets, defaults to 0.
rent The total amount of rent, excluding additional costs like tourist taxes, cleaning costs etc.
total_price The total amount the customer has to pay for this reservation. This consists of rent plus the additional costs like tourist taxes, cleaning costs etc.

Note the number_of_people here is supplied solely for compatibility reasons. It will contain the total amount of people excluding babies, but including children and adolescents.

Reserve

Making a reservation is a two step process. First make create a reservation. After making a
reservation, additional information is returned, like the total price of this reservation.

The next step is confirming this reservation. First you should check the total price of the
reservation. This price can be different then you expect it to be, since prices are subject to
changes, and the prices might have changed since the last time you checked the availability.
After checking the price you can use the confirmation api as described in the next section.

To create a reservation, issue a http POST on:

https://tour-operator-api.bookingexperts.nl/<locale>/parks/<park_id>/categories/<category_id>/reservations.json

This post should supply a json object with a reservation key. This key should contain an object
with the following key:value pairs:

start_date* The arrival date of the customer (format YYYY-MM-DD)
end_date* The checkout date of the customer (format YYYY-MM-DD)
remote_booking_nr The booking number of this reservation in your system. This is optional, but by supplying this, there can be easier communication between you and the park, since you can both reference the same booking number.
number_of_adults* The number of adults.
number_of_adolescents* The number of adolescents, defaults to 0.
number_of_childs* The number of children, defaults to 0.
number_of_babies* The number of babies (< 3 years of age), defaults to 0.
number_of_pets* The number of pets, defaults to 0.
email The email of the customer
phone* The phone number of the customer
title The title of the customer (either ‘mr’, ‘ms’ or ‘miss’)
first_name* First name of the customer
last_name* The last name of the customer
address* the address of customer
postalcode* The postalcode of the customer
city* The city of the customer
country_code* The ISO 3166-1 country code of the customer (defaults to “NL”)
extras A hash mapping optional extra ids to quantities. For optional extras not requiring a quantity, map the id to 0. See example.
memo Internal memo to be read by receptionists of the organization.

Deprecated

number House number. Will be appended to Address if present.
number_of_people Mapped to number_of_adults when used as input to a reserve call.
country The country of the customer (defaults to “Nederland”)
salutation Deprecated, use title instead
initials Deprecated, use first_name instead

When combining number_of_people and number_of_adults, number_of_people will be ignored. When you do use number_of_people as input to a reserve call, note that it is mapped to number_of_adults.

Also note that, when both country and country_code are specified, country will be ignored.

Please note
Make sure you specify a Content-Type header in your http request with value application/json.

After creating a reservation, you’ll have 30 minutes to confirm the reservation. If this reservation
is not confirmed within 30 minutes, it will be destroyed.

Errors

Error are communicated by using http status codes, combined with a json object containing just one key: reason. The following errors can happen:

404 category does not exist The given category does not exist.
404 not available Can’t make a reservation on the given category in the given period because it is not possible at all to reserve the given period (e.g. no prices have been specified for that period), or all bungalows are already fully booked in this period.
404 extra does not exist: One of the specified extra’s does not exist.
400 invalid start_date start_date is not correctly formatted.
400 invalid end_date end_date is not correctly formatted.
400 start_date bigger then end_date start_date should be smaller then the end date
422 Validation error when creating this reservation. You probably left out one of the required fields. Check out the response body for more information.

Example

curl -X POST -d '
{
	"reservation": {
		"start_date": "2012-7-1",
		"end_date": "2012-8-1",
		"remote_booking_nr": "BN001",
		"number_of_people": 4,
		"number_of_adults": 4,
		"number_of_adolescents": 0,
		"number_of_childs": 0,
		"number_of_babies": 2,
		"number_of_pets": 0,
		"email": "example@example.com",
		"phone": "0612345678",
		"title": "mr",
		"first_name": "John",
		"last_name": "Doe",
		"date_of_birth": "1989-01-25",
		"address": "Street, #1",
		"postalcode": "1234AB",
		"city": "Enschede",
		"country": "Nederland",
		"memo": "Guest will arrive late",
		"extras": {
			"99": 3,
			"65": 0
		}
	}
}
' https://tour-operator-api.bookingexperts.nl/nl/parks/11/categories/31/reservations.json?api_key=123abc -H 'Content-Type: application/json'

{
	"id":16211,
	"category_id":31,
	"arrival_date":"2012-07-23",
	"checkout_date":"2012-07-30",
	"remote_booking_nr": "BN001",
	"number_of_people":4,
	"number_of_adults": 4,
	"number_of_adolescents": 0,
	"number_of_childs": 0,
	"number_of_babies": 2,
	"number_of_pets": 0,
	"email":"example@example.com",
	"title":"mr",
	"first_name":"John",
	"last_name":"Doe",
	"date_of_birth":"1989-01-25",
	"address":"Street, #1",
	"postalcode":"1234AB",
	"city":"Enschede",
	"country":"Nederland",
	"phone":"0612345678",
	"rent":"500.0",
	"total_price":"520.0",
	"confirmed":false,
	"memo":"Guest will arrive late"
}

This reservation will contain 3 times the extra with id 99, and it will contain the extra with id 65.

The resulting json response contains the following:

id The unique id of the reservation. Store this, as it is required to confirm this reservation.
category_id The id of the category of the bungalow.
arrival_date The arrival date (format YYYY-MM-DD)
checkout_date The checkout date (format YYYY-MM-DD)
remote_booking_nr The booking number as optionally supplied by you.
number_of_adults The number of adults.
number_of_adolescents The number of adolescents, defaults to 0.
number_of_childs The number of children, defaults to 0.
number_of_babies The number of babies (< 3 years of age), defaults to 0.
number_of_pets The number of pets, defaults to 0.
email The email address of the customer.
title The title of the customer (e.g. mr)
first_name First name of the customer
last_name The last name of the customer
date_of_birth The date of birth of the customer
address the address of customer
postalcode The postalcode of the customer
city The city of the customer
country_code The ISO 3166-1 country code of the customer (defaults to “NL”)
rent The total amount of rent, excluding additional costs like tourist taxes, cleaning costs etc.
total_price The total amount the customer has to pay for this reservation. This consists of rent plus the additional costs like tourist taxes, cleaning costs etc.
confirmed Whether or not this reservation has been confirmed. After the reserve step, this will be false, after the confirm step this will be true

Deprecated

number_of_people The number of adults, children and adolescents. Basically all people except babies. This is here for backwards compatibility reasons: for new implementations we recommend using the more explicit number_of_adults instead.
country The country of the customer

Confirmation

To confirm a reservation, issue a http PUT on:

https://tour-operator-api.bookingexperts.nl/<locale>/parks/<park_id>/reservations/<reservation_id>/confirm.json

You only need to supply an api_key. You can only confirm reservations, made with your api_key.

Errors

Error are communicated by using http status codes, combined with a json object containing just one key: reason. The following errors can happen:

404 reservation not found The given reservation cannot be found. Most likely reason is that it is timed out: you only have 30 minutes between creating the reservation and confirming it.
422 Validation error when confirming this reservation. See the response body for details.

Example

curl -X PUT https://tour-operator-api.bookingexperts.nl/nl/parks/11/reservations/16211/confirm.json?api_key=123abc -d ''

{"id":16211,"category_id":31,"arrival_date":"2012-07-23","checkout_date":"2012-07-30","number_of_people":4,"number_of_babies":2,"email":"example@example.com","title":"mr","first_name":"John","last_name":"Doe", "date_of_birth":"1989-01-25", "address":"Street, #1","postalcode":"1234AB","city":"Enschede","country":"Nederland","phone":"0612345678","rent":"500.0","total_price":"520.0","confirmed":true}

The resulting json response will be the same as that described in the reserve section.

Partials

You can also make a partial reservation which can be completed by your customer through our reservation steps.
To create a partial reservation, issue a http POST on:

https://tour-operator-api.bookingexperts.nl/<locale>/parks/<park_id>/categories/<category_id>/partial_reservations.json

This post should supply a json object with a reservation key. This key should contain an object
with the following key:value pairs:

start_date* The arrival date of the customer (format YYYY-MM-DD)
end_date* The checkout date of the customer (format YYYY-MM-DD)
number_of_adults* The number of adults.
number_of_adolescents* The number of adolescents, defaults to 0.
number_of_childs* The number of children, defaults to 0.
number_of_babies* The number of babies (< 3 years of age), defaults to 0.
number_of_pets The number of pets, defaults to 0.
return_url Url to return back to when the user cancels the reservation.
google_analytics_id _ga id so we can trace the client cross domain. Looks like GA1.2.1513880846.1422453617
referrer Referrer code like “my-affiliate-network”. The reservation will be connected to this tour operator. Usable for affiliate networks.

Please note
Make sure you specify a Content-Type header in your http request with value application/json.

After creating a partial reservation, your customer has 20 minutes to confirm the reservation. If this reservation
is not confirmed within 20 minutes, it will be destroyed.

Errors

Error are communicated by using http status codes, combined with a json object containing just one key: reason. The following errors can happen:

404 category does not exist The given category does not exist.
404 not available Can’t make a partial reservation on the given category in the given period because it is not possible at all to reserve the given period (e.g. no prices have been specified for that period), or all bungalows are already fully booked in this period.
400 invalid start_date start_date is not correctly formatted.
400 invalid end_date end_date is not correctly formatted.
400 start_date bigger then end_date start_date should be smaller then the end date
422 Validation error when creating this partial reservation. You probably left out one of the required fields. Check out the response body for more information.

Example

curl -X POST -d '
{
	"partial_reservation": {
		"start_date": "2012-7-1",
		"end_date": "2012-8-1",
		"number_of_adults": 4,
		"number_of_adolescents": 0,
		"number_of_childs": 0,
		"number_of_babies": 2
		"number_of_pets": 0,
    "return_url": "https://www.vacationrental.com/search_and_book"
	}
}
' https://tour-operator-api.bookingexperts.nl/nl/parks/11/categories/31/partial_reservations.json?api_key=123abc -H 'Content-Type: application/json'

{
	"url": "https://app.bookingexperts.nl/nl/parks/11:Testpark/reservations/1/extras?currency=EUR&token=20462af24020ca25b04d17f0fb6ad91fa3e5421b"
}

The resulting json response contains the following:

url Redirect your customer to this url so he or she can complete the reservation through our reservation steps
  1. Bekijk in het Engels
  2. Home
  3. Login
  4. Probeer gratis
  5. Prijzen
  6. Products
  7. Reserveringssysteem
  8. CMS
  9. Services
  10. Zoekmachine optimalisatie
  11. Vertalingen
  12. Professionele fotografie
  13. Other
  14. Touroperators
  15. Ervaringen
  16. Over ons
  17. Contact
  18. Eigenaren
  19. Werken bij ons
  20. Voor ontwikkelaars (API)
  21. Laatste ontwikkelingen
  22. Recrontopleverancier

Meld je aan voor een gratis proefmaand