Introduction
Welcome to Likibu’s API documentation!
This API gives you acces to (almost) all data available on likibu.com : vacation rentals search, accommodation details, destinations, …
Format
The API speaks JSON. All responses are in JSON format.
Authentication
# Pass the key as a query string parameter
curl "https://api.likibu.com/path/to/endpoint?key=your_likibu_api_key"
<?php
$client = new Likibu\Client("your_likibu_api_key");
Replace your_likibu_api_key with the key that you were assigned.
You need to authenticate with the API with a key in order to use the services. This key must be sent to each request.
This key authenticates your application and must not be exposed to your end users. All abusive use of the API will see it’s key banned.
The key must be sent as a query string parameter.
?key=your_likibu_api_key
Ping
Checks the API is online and operational.
curl "https://api.likibu.com/ping/?key=your_likibu_api_key"
<?php
$response = $client->ping();
die(json_encode($response));
Response :
"pong"
Request
GET https://api.likibu.com/ping/?key=my_likibu_api_key
Response
Code | Description |
---|---|
200 | OK – Everything’s fine. |
401 | Unauthorized – API key missing or invalid. |
403 | Forbidden – Your API key doesn’t have access to this method. Please contact us if you need more rights. |
500 | Internal Server Error – Server error. Please contact us if the problem persists. |
Real-time search
Likibu searches and agregates accommodations from many partners. The search is done in real time, in order to have the most relevant results and updated prices and availabilities.
You need to create a search session before to get the prices. Once the session is created, the API searches and aggregates the results of all our partners in the background. Please wait at least one second before starting to poll the results.
The searches can last between a few milliseconds and about 15 seconds.
The search process consists in the following steps :
- Search session creation : POST /search/
- (Polling the search status : GET /search/search_id/status )
- Fetching the results : GET /search/search_ids
Create search session
curl "https://api.likibu.com/search/?key=your_likibu_api_key" \
-d "where=Amsterdam&checkin=2016-08-06&checkout=2016-08-13&guests=4&culture=fr¤cy=eur"
<?php
$response = $client->initSearch([
'where' => 'Amsterdam',
'checkin' => '2016-08-06',
'checkout' => '2016-08-13',
'guests' => 4,
'culture' => 'fr',
'currency' => 'eur',
]);
die(json_encode($response));
{
"search_id": "35v4zu17084b74xn1c010",
"search_status_url": "https:\/\/api.likibu.com\/search\/35v4zu17084b74xn1c010\/status",
"search_results_url": "https:\/\/api.likibu.com\/search\/35v4zu17084b74xn1c010"
}
This method creates the search session. A search is defined by 5 parameters :
- Geolocation
- Travel dates : checkin and checkout (optional)
- Number of travelers
- User’s language
- User’s currency
Request
This is a POST request. The API key must be sent in the query string, but the other data have to be sent as the request body.
POST https://api.likibu.com/search/?key=my_likibu_api_key
Parameters
Parameter | Mandatory? | Description | Format |
---|---|---|---|
where | Yes * | Destination (city, neighbourhood, region…) | String |
destination_id | Yes * | Destination’s unique ID | String |
lng | Yes * | Longitude | -180.0 ≥ x ≤ 180.0 |
lat | Yes * | Latitude | -90.0 ≥ y ≤ 90.0 |
culture | Yes | User’s language | Accepted values : fr, en, de, es, it, nl |
currency | Yes | User’s currency | ISO 4217 3 letters currency code (EUR, USD, GPB, CAD, …) |
checkin | Yes | Checkin date | YYYY-MM-DD. Must be a date in the future. |
checkout | Yes | Checkout date | YYYY-MM-DD. Must be greater than the checkin date. Cannot be more than 365 days after checkin date. |
Response
Successful request returns 3 elements :
- Search session ID
- Search status poll url
- Search results url
Code | Description |
---|---|
201 | Created – Search session successfully created. |
401 | Unauthorized – API key missing or invalid. |
403 | Forbidden – Your API key doesn’t have access to this method. Please contact us if you need more rights. |
500 | Internal Server Error – Server error. Please contact us if the problem persists. |
Poll search status
curl "https://api.likibu.com/search/{search_id}/status?key=your_likibu_api_key"
<?php
$response = $client->pollSearch('35v4zu17084b74xn1c010');
die(json_encode($response));
{
"search_id": "35v4zu17084b74xn1c010",
"bbox": [[5.07326326407,52.485816485905],[4.7061137195726,52.262237923337]],
"where": "Amsterdam",
"checkin": "2016-08-06",
"checkout": "2016-08-13",
"country_code":"NL",
"status":{
"is_complete":true,
"partners": { ... }
}
}
This methods checks the status of the search. Searches on small destinations with only a few accommodations can only take a few milliseconds. Searching on big cities or entire regions can take 15 seconds.
You need to periodically call this method until the search is complete. Every 200ms for example.
Request
GET https://api.likibu.com/search/{search_id}?key=my_likibu_api_key
Parameters
Parameter | Mandatory? | Description | Format |
---|---|---|---|
search_id | Yes | Search session ID | String |
Response
Code | Description |
---|---|
200 | OK |
401 | Unauthorized – API key missing or invalid. |
403 | Forbidden – Your API key doesn’t have access to this method. Please contact us if you need more rights. |
500 | Internal Server Error – Server error. Please contact us if the problem persists. |
Data
Parameter | Description | Format |
---|---|---|
search_id | Search session ID | String |
bbox | Bounding box | Array [GeoJSON point (NW), GeoJson point (SE)] |
where | Destination name | String |
checkin | Checkin date | YYYY-MM-DD |
checkout | Checkout date | YYYY-MM-DD |
country_code | Country code | 2 letters ISO 3166 |
status.is_complete | Is the search complete? | Bool |
status.partners | Search status details, partner by partner | Object |
Fetch search results
curl "https://api.likibu.com/search/{search_id}?key=your_likibu_api_key"
<?php
$response = $client->getSearch('35v4zu17084b74xn1c010', [
'type' => ['villa', 'house'],
'privacy_type' => ['entire_home'],
'amenities' => ['pool', 'bbq'],
]);
die(json_encode($response));
{
"search_id": ...,
"status": ...,
"bbox": ...,
"where": ...,
"checkin": ...,
"checkout": ...,
"country_code": ...,
"total_results": ...,
"total_pages": ...,
"min_price": ...,
"max_price": ...,
"offers": [
{ ... Offer ... },
{ ... Offer ... },
{ ... Offer ... }
],
"facets": {
"partner_id": { ... Facet ... },
"privacy_type": { ... Facet ... },
"type": { ... Facet ... },
"amenities": { ... Facet ... },
"is_instant_booking_available": { ... Facet ... }
}
Use this method to fetch the results, filter and sort them. Please make sure the status is “complete” before using filters.
Request
GET https://api.likibu.com/search/{search_id}?key=my_likibu_api_key
Parameters
Parameter | Mandatory? | Description | Format |
---|---|---|---|
search_id | Yes | Search session ID | String |
per_page | No | Number of results, per page | Integer, default = 24 |
page | No | Page number | Integer, default = 1 |
sort | No | Sort type | Possible values : reco (default), price_asc, price_desc, price_discount |
privacy_type ** | No | Privacy type filter | See appendix |
type ** | No | Accommodation type filter | See appendix |
amenities ** | No | Amenities filter | See appendix |
partner_id * | No | Partner ID filter | Integer |
price_min | No | Min price, nightly | Integer, in the currency used at session creation |
price_max | No | Max price, nightly | Integer, in the currency used at session creation |
Response
Code | Description |
---|---|
200 | OK |
401 | Unauthorized – API key missing or invalid. |
403 | Forbidden – Your API key doesn’t have access to this method. Please contact us if you need more rights. |
500 | Internal Server Error – Server error. Please contact us if the problem persists. |
Data
search_id, status, bbox, where, checkin, checkout, country_code : .
Paramètre | Description | Format |
---|---|---|
search_id | see previous chapter | |
status | see previous chapter | |
bbox | see previous chapter | |
where | see previous chapter | |
checkin | see previous chapter | |
checkout | see previous chapter | |
checkout | see previous chapter | |
country_code | see previous chapter | |
total_results | Total results | Integer |
total_pages | Total number of pages | Integer |
min_price | Minimum price | Integer |
max_price | Maximum price | Integer |
offers | Offers details | Offer, see next chapter |
facets | Facets details | Facet, see next chapter |
Offer
Offer details
Parameter | Description | Format |
---|---|---|
id | Offer unique ID | String |
title | Title | String |
description | Description | String |
url | Redirection URL | String |
thumbnails | Thumbnails | Array |
photos | Photos | Array |
price_sojourn | Total price | Integer |
price | Nightly price | Integer |
currency | Currency | String, ISO 4217 |
source.id | Offer’s provider ID | Integer |
source.slug | Offer’s provider slug | String |
source.name | Offer’s provider name | String |
lat | Latitude | Float |
lng | Longitude | Float |
rating | Average user’s rating (/5) | Float |
rating_count | Number of user’s ratings | Integer |
max_guests | Maximum number of guests | Integer |
is_instant_booking_available | Is instant booking available? | Boolean |
bedrooms | Number of bedrooms | Integer |
bathrooms | Number of bathrooms | Integer |
surface | Surface, in sqare meters | Integer |
amenities | Amenities list | Array. See appendix |
privacy_type | Privacy type | String. See appendix |
type | Accommodation type | String. See appendix |
Facet
Number of results per search filter:
Parameter | Description | Format |
---|---|---|
privacy_type | Privacy type | Array. Possibles keys: Voir annexe |
amenities | Amenities list | Array. Possibles keys: Voir annexe |
is_instant_booking_available | Bookable immediately | Array. Possibles keys: “T” (true) & “0” (false) |
partners | Partners | Array |
is_p2p | Particular to particular | Array. Possibles keys: “T” (true) & “0” (false) |
type | Accommodation type | Array. Possibles keys: Voir annexe |
master_type | Global type | Array |
Destinations
Access Likibu’s destinations tree and search for destinations.
Search
Fulltext destinations search. Can be used for autocompletion widgets, to suggest destinations to your users.
curl "https://api.likibu.com/destinations/search?key=your_likibu_api_key&q=Barcel&culture=fr&size=5"
<?php
$response = $client->getDestinationsPredictions('barcel', 'fr', 5);
die(json_encode($response));
{
"results": [
{
"id": 2641,
"name": "Barcelone",
"parent_name": "Catalogne",
"results": 16996,
"country_code": "ES"
}, {
"id": 4157,
"name": "Barcelonnette",
"parent_name": "Alpes-de-Haute-Provence",
"results": 27,
"country_code": "FR"
}, {
"id": 5136,
"name": "Barcellona Pozzo di Gotto",
"parent_name": "Sicile",
"results": 22,
"country_code": "IT"
}, {
"id": 12766,
"name": "Faucon-De-Barcelonnette",
"parent_name": "Alpes-de-Haute-Provence",
"results": 10,
"country_code": "FR"
}, {
"id": 13307,
"name": "Barcelona",
"parent_name": "Venezuela",
"results": 0,
"country_code": "VE"
}
],
"took": 4
}
Request
GET "https://api.likibu.com/destinations/search?key=your_likibu_api_key&q=Barcel&culture=fr&size=5"
Parameters
Parameter | Mandatory? | Description | Format |
---|---|---|---|
q | Yes | Searched destination | String |
culture | Yes | User’s language | String. Accepted values : fr, en, de, it, es, nl |
size | No | Number of results to fetch | Integer. Default = 10 |
Response
Code | Description |
---|---|
200 | OK |
401 | Unauthorized – API key missing or invalid. |
403 | Forbidden – Your API key doesn’t have access to this method. Please contact us if you need more rights. |
500 | Internal Server Error – Server error. Please contact us if the problem persists. |
Data
Parameter | Description | Format |
---|---|---|
results[].id | Destination’s unique ID | Integer |
results[].name | Destination name | String |
results[].parent_name | Destination’s parent name | String |
results[].results | Estimated number of accommodations | Integer |
results[].country_code | Country code | 2 letters ISO 3166 |
took | Execution time, in milliseconds | Integer |
Details
Fetch destination’s details. Allows you to browse the destination tree and see the nearest destinations.
curl "https://api.likibu.com/destinations/5370?key=your_likibu_api_key&culture=fr"
<?php
$response = $client->getDestination(5370, [
'culture' => 'fr',
]);
die(json_encode($response));
{
"id": 5370,
"results": 4350,
"name": "Amsterdam",
"location": [
52.370734222619,
4.9076865975088
],
"Ancestors": [
{
"id": 1,
"name": "Monde"
}, {
"id": 2365,
"name": "Europe de l'ouest"
}, {
"id": 5368,
"name": "Pays-Bas"
}, {
"id": 14141,
"name": "Hollande-Septentrionale"
}
],
"Children": [
{
"id": 16066,
"name": "Jordaan",
"results": 530,
"Children": []
}, {
"id": 16067,
"name": "Centre Historique d'Amsterdam",
"results": 1271,
"Children": []
}, ...
],
"Siblings": [
{
"id": 8668,
"name": "Bloemendaal",
"results": 8
}, {
"id": 8713,
"name": "Hollands Kroon",
"results": 145
}, ...
],
"Nearest": [
{
"id": 8658,
"name": "Amstelveen",
"distance": 11.2,
"results": 20
},
{
"id": 8794,
"name": "Zaandam",
"distance": 12.6,
"results": 33
}, ...
]
}
Request
GET "https://api.likibu.com/destinations/{destination_id}?key=your_likibu_api_key&culture=fr"
Parameters
Parameter | Mandatory? | Description | Format |
---|---|---|---|
destination_id | Yes | Integer | |
culture | Yes | User’s language | String. Possible values : fr, en, de, it, es, nl |
Response
Code | Description |
---|---|
200 | OK |
401 | Unauthorized – API key missing or invalid. |
403 | Forbidden – Your API key doesn’t have access to this method. Please contact us if you need more rights. |
500 | Internal Server Error – Server error. Please contact us if the problem persists. |
Data
Parameter | Description | Format |
---|---|---|
id | Destination’s unique ID | Integer |
name | Translated destination name | String |
parent_name | Translated destinatino’s parent name. | String |
results | Estimated number of accommodations | Integer |
location | Geolocation | GeoJSON point |
Ancestors[] | Parent destinations | { id: Integer, name: String } |
Children[] | Children destinations | { id: Integer, name: String, results: Integer, Children: [{}] } |
Siblings | Sibling destinations | { id: Integer, name: String, results: Integer } |
Nearest | Nearest destinations | { id: Integer, name: String, results: Integer, distance: Integer } |
Accommodations
Accommodations search, listing, details
Accommodations list
Search and list accommodations.
curl "https://api.likibu.com/rooms/?key=your_likibu_api_key&destination_id=5370&culture=fr¤cy=eur"
<?php
$response = $client->search([
'destination_id' => 5370,
'culture' => 'fr',
'currency' => 'eur',
]);
die(json_encode($response));
{
"totalResults": 4510,
"page": 1,
"totalPages": 188,
"priceMin": 8,
"priceMax": 9000,
"results": [
{ ... Offer ... },
{ ... Offer ... },
],
"facets": {
"partner_id": { ... Facet ... },
"privacy_type": { ... Facet ... },
"type": { ... Facet ... },
"amenities": { ... Facet ... },
"is_instant_booking_available": { ... Facet ... }
}
}
Request
GET "https://api.likibu.com/rooms/?key=your_likibu_api_key&..."
Parameters
Parameter | Mandatory? | Description | Format |
---|---|---|---|
where | Yes * | Destination on where to search | String |
destination_id | Yes * | Destination’s unique ID | String |
lng | Yes * | Longitude | -180.0 ≥ x ≤ 180.0 |
lat | Yes * | Latitude | -90.0 ≥ y ≤ 90.0 |
culture | Yes | User’s language | Accepted values : fr, en, de, es, it, nl |
currency | Yes | User’s currency | ISO 4217 3 letters currency code (EUR, USD, GPB, CAD, …) |
checkin | Yes | Checkin date | YYYY-MM-DD. Must be a date in the future. |
checkout | Yes | Checkout date | YYYY-MM-DD. Must be greater than the checkin date. Cannot be more than 365 days after checkin date. |
per_page | No | Number of results, per page | Integer, default = 24 |
page | No | Page number | Integer, default = 1 |
sort | No | Sort type | Possible values : reco (default), price_asc, price_desc |
privacy_type ** | No | Privacy type filter | See appendix |
type ** | No | Filtre / type de logement | See appendix |
amenities ** | No | Amenities filter | See appendix |
partner_id * | No | Partner ID filter | Integer |
guests | No | Number of guests | Integer |
price_min | No | Min price, nightly | Integer, in the currency used at session creation |
price_max | No | Max price, nightly | Integer, in the currency used at session creation |
Response
Code | Description |
---|---|
200 | OK |
401 | Unauthorized – API key missing or invalid. |
403 | Forbidden – Your API key doesn’t have access to this method. Please contact us if you need more rights. |
500 | Internal Server Error – Server error. Please contact us if the problem persists. |
Data
Parameter | Description | Format |
---|---|---|
results[].id | Identifiant unique de la destination | Integer |
results[].name | Nom de la destination, dans la langue choisie | String |
results[].parent_name | Nom de la destination parente du résultat. | String |
results[].results | Estimation du nombre de logements de cette destination | Integer |
results[].country_code | Code pays de la destination | ISO 3166, 2 lettres |
took | Temps d'éxécution de la recherche en millisecondes | Integer |
Accommodation details
Returns accommodation’s details.
curl "https://api.likibu.com/rooms/8742e5ee7b5d5c367ecf54da4266ce7451e14943?key=your_likibu_api_key&culture=fr¤cy=eur"
<?php
$response = $client->getOffer('8742e5ee7b5d5c367ecf54da4266ce7451e14943', [
'culture' => 'fr',
'currency' => 'eur',
]);
die(json_encode($response));
{
"id": "8742e5ee7b5d5c367ecf54da4266ce7451e14943",
"source": { ... Source ... },
"title": "Appartement avec petit-déjeuner et vélos",
"description": "",
"type": "apartment",
"privacy_type": "entire_apartment",
"photos": [
"https://likibu-images.s3.eu-central-1.amazonaws.com/wimdu/874/8742e5ee7b5d5c367ecf54da4266ce7451e14943/0/medium.jpg",
...
],
"rating": 4.7,
"rating_count": 152,
"url": "http://www.likibu.com/fr/r/8742e5ee7b5d5c367ecf54da4266ce7451e14943?",
"partner_url": "http://www.likibu.com/t/8742e5ee7b5d5c367ecf54da4266ce7451e14943/fr?",
"price_nightly": 95,
"price_eur": 95,
"price_sojourn": 95,
"price_weekly": 665,
"price_monthly": 2850,
"currency": "eur",
"location": {
"location": [
4.89514,
52.3428
],
"city": "Amsterdam",
"country": "NL",
"destination_id": [
5370,
14141,
5368,
2365
]
},
"place": {
"rooms": 2,
"bedrooms": 1,
"bathrooms": 1,
"surface": 25,
"amenities": ["family", "kitchen", "tv", "breakfast", "net"]
},
"booking": {
"is_instant_booking_available": true,
"min_nights": 2,
"max_nights": 2,
"checkin_at": "",
"checkout_at": "",
"max_guests": 2,
"booked_at": []
},
"availability": {
"availability": "",
"total_price": 95
}
}
Request
GET "https://api.likibu.com/rooms/{room_id}?key=your_likibu_api_key&..."
Parameters
Parameter | Mandatory? | Description | Format |
---|---|---|---|
culture | Yes | User’s language | Accepted values : fr, en, de, es, it, nl |
currency | Yes | User’s currency | ISO 4217 3 letters currency code (EUR, USD, GPB, CAD, …) |
checkin | Yes | Checkin date | YYYY-MM-DD. Must be a date in the future. |
checkout | Yes | Checkout date | YYYY-MM-DD. Must be greater than the checkin date. Cannot be more than 365 days after checkin date. |
Response
Code | Description |
---|---|
200 | OK |
401 | Unauthorized – API key missing or invalid. |
403 | Forbidden – Your API key doesn’t have access to this method. Please contact us if you need more rights. |
500 | Internal Server Error – Server error. Please contact us if the problem persists. |
Data
Offer object, with the following additionnal parameters :
Paramètre | Description | Format |
---|---|---|
availability.availability | Availability | “available”, “unavailable”, “” |
availability.total_price | Total sojourn price | Integer |
Appendix
“type” List
Code | Description |
---|---|
apartment | Apartment |
house | House |
villa | Villa |
chalet | Lodge, cabin, … |
boat | Boat, house boat, … |
castle | Castle |
bnb | Bed & breakfast |
camping | Camping, mobil-homes, … |
hotel | Appart-hotel |
room | Room |
resort | Vacation residence, club, … |
unusual | Treehouse, yurt, … |
bungalow | Bungalow |
hostel | Hostel |
riad | Riad |
any | Unknown |
“privacy_type” List
Code | Description |
---|---|
entire_apartment | Entire home |
private_room | Private room |
shared_room | Shared room |
any | Unknown |
“amenities” List
Code | Description |
---|---|
ac | Air Conditioning |
accessible | Wheelchair accessible |
babycot | Babycot |
balcony | Balcony |
bbq | Barbecue |
breakfast | Breakfast |
dishwasher | Dishwasher |
elevator | Elevator |
events | Suited for events |
family | Suited for families |
fireplace | Fireplace |
garden | Garden |
golf | Golf |
gym | Gym |
jacuzzi | Jacuzzi |
kitchen | Kitchen |
linen | Linen included |
net | Internet, wi-fi, … |
parking | Parking |
pets | Pets allowed |
pool | Pool |
sauna | Sauna |
seaview | Seaview |
smoke | Smokers allowed |
tv | TV |
washer_dryer | Washer/Dryer |