NAV
shell php

Introduction

Bienvenue sur la documentation de l'API de Likibu!

Cette API vous permet d'avoir accès à (presque) toutes les données que vous pouvez voir sur Likibu.com : recherche de logements, détails des logements, destinations, …

Format

L'API parle le JSON, toutes les réponses sont dans ce format.

Authentification

# Passez simplement votre clé d'API en paramètre de la query string
curl "https://api.likibu.com/path/to/endpoint?key=your_likibu_api_key"
<?php

$client = new Likibu\Client("your_likibu_api_key");

Remplacez your_likibu_api_key avec la clé qui vous a été attribuée.

Vous devez vous authentifier à l'aide d'une clé d'API afin de pouvoir utiliser les services. Cette clé doit être envoyée à chaque requête.

Cette clé authentifie votre application, et ne doit pas être exposée à vos utilisateurs finaux. Toute utilisation abusive de l'API verra sa clé désactivée.

La clé doit être envoyée comme paramètre dans la query string de la requête.

?key=your_likibu_api_key

Ping

Permet de vérifier que l'API est bien en ligne et opérationnelle.

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 – Tout va bien
401 Unauthorized – Clé d'API non renseignée ou erronnée
403 Forbidden – Votre clé d'API ne vous permet pas d'utiliser cette méthode. Veuillez nous contacter pour étendre vos accès.
500 Internal Server Error – Problème serveur. Veuillez nous contacter si le problème persiste.

Recherche en temps réel

Likibu recherche et agrège les logements de nombreux partenaires. Les recherches sont faites en temps réel afin d'obtenir des résultats les plus pertinents possibles et des prix et disponibilités à jour.

Vous devez créer une session de recherche avant de pouvoir obtenir les prix. Une fois la session créée, l'API recherche et aggrège en tâche de fond les résultats de tous les partenaires de Likibu. Veuillez attendre au moins une seconde avant de commencer à récupérer les résultats.

Les recherches peuvent durer entre quelques millisecondes et une quinzaine de secondes.

La recherche s'effectue donc en 3 étapes :

Création de la 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&currency=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"
}

Cette méthode crée la “session” de la recherche. Une recherche est définie par 5 paramètres :

Request

Il s'agit d'une requête POST. La clé d'API doit être envoyée dans la query string, mais les autres données doivent être envoyées dans le data de la requête.

POST https://api.likibu.com/search/?key=my_likibu_api_key

Parameters

Paramètre Obligatoire? Description Format
where Oui * La destination (ville, quartier, région, …) sur laquelle porte la recherche String
destination_id Oui * Identifiant unique de la destination String
lng Oui * Longitude de la recherche -180.0 ≥ x ≤ 180.0
lat Oui * Latitude de la recherche -90.0 ≥ y ≤ 90.0
culture Oui La langue de l'utilisateur Valeurs possibles : fr, en, de, es, it, nl
currency Oui La devise de l'utilisateur Code de la devise en 3 lettres ISO 4217 (EUR, USD, GPB, CAD, …)
checkin Oui La date de checkin Date, au format YYYY-MM-DD. Doit être une date dans le futur.
checkout Oui La date de checkout Date, au format YYYY-MM-DD. Doit être supérieur au checkin. Ne doit pas être plus de 365j après le checkin.

Response

Lorsque la requête a été effectuée avec succès, elle retourne 3 éléments :

Code Description
201 Created – La recherche a été créée avec succès
401 Unauthorized – Clé d'API non renseignée ou erronnée
403 Forbidden – Votre clé d'API ne vous permet pas d'utiliser cette méthode. Veuillez nous contacter pour étendre vos accès.
500 Internal Server Error – Problème serveur. Veuillez nous contacter si le problème persiste..

Sonde du statut

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": { ... }
    }
}

Cette méthode permet de vérifier l'état d'avancement de la recherche. Les recherches effectuées sur des destinations avec peu de résultats peuvent ne prendre que quelques millièmes de seconde. Les recherches effectuées sur des villes où beaucoup d'offres sont présentes, ou sur des régions entières, peuvent mettre jusqu'à 15 secondes.

Vous devez appeler cette méthode de façon régulière jusqu'à ce que la recherche soit terminée, tous les 200ms par exemple.

Request

GET https://api.likibu.com/search/{search_id}?key=my_likibu_api_key

Parameters

Paramètre Obligatoire? Description Format
search_id Oui L'identifiant de la recherche String

Response

Code Description
200 OK
401 Unauthorized – Clé d'API non renseignée ou erronnée
403 Forbidden – Votre clé d'API ne vous permet pas d'utiliser cette méthode. Veuillez nous contacter pour étendre vos accès.
500 Internal Server Error – Problème serveur. Veuillez nous contacter si le problème persiste..

Data

Paramètre Description Format
search_id L'identifiant de la recherche String
bbox “Bounding box” géographique englobant la zone géographique recherchée Array [GeoJSON point (NW), GeoJson point (SE)]
where Nom “intelligible” de la destination recherchée String
checkin Date de checkin YYYY-MM-DD
checkout Date de checkout YYYY-MM-DD
country_code Code pays de la destination recherchée ISO 3166, 2 lettres
status.is_complete Détermine si la recherche est terminée Bool
status.partners État d'avancement de la recherche, détaillé par partenaire Object

Résultats de recherche

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": ...,
    "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 ... }
    }

Utiliser cette méthode pour récupérer les résultats, les filtrer, les trier, etc. Veuillez vous assurer que le statut de la recherche est “complete” avant d'utiliser les filtres etc.

Request

GET https://api.likibu.com/search/{search_id}?key=my_likibu_api_key

Parameters

Paramètre Obligatoire? Description Format
search_id Oui L'identifiant de la recherche String
per_page Non Nombre de résultats à renvoyer, par page Integer, default = 24
page Non Numéro de la page à renvoyer Integer, default = 1
sort Non Tri des résultats Au choix : reco (default), price_asc, price_desc, price_discount
privacy_type ** Non Filtre / privacy_type Voir annexe
type ** Non Filtre / type de logement Voir annexe
amenities ** Non Filtre / amenities Voir annexe
partner_id * Non Filtre / partner_id Integer
price_min Non Prix minimum par nuitée Integer, dans la devise utilisée lors de la création de la session
price_max Non Prix maximum par nuitée Integer, dans la devise utilisée lors de la création de la session

Response

Code Description
200 OK
401 Unauthorized – Clé d'API non renseignée ou erronnée
403 Forbidden – Votre clé d'API ne vous permet pas d'utiliser cette méthode. Veuillez nous contacter pour étendre vos accès.
500 Internal Server Error – Problème serveur. Veuillez nous contacter si le problème persiste..

Data

search_id, bbox, where, checkin, checkout, country_code : Voir chapitre précédent.

Paramètre Description Format
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 Détails des facettes de recherche Facet, see next chapter

Offer

Détail d'une offre

Paramètre Description Format
id Identifiant unique de l'offre String
title Titre de l'offre String
description Description de l'offre String
url URL de redirection String
thumbnails Photos de l'offre (petite taille) Array
photos Photos de l'offre (grande taille) Array
price_sojourn Prix total du séjour Integer
price Prix par nuitée Integer
currency Devise choisie à la création de la session String, ISO 4217
source.id Identifiant unique du partenaire proposant l'offre Integer
source.slug Slug du partenaire proposant l'offre String
source.name Nom du partenaire proposant l'offre String
lat Coordonnée géographique : latitude de l'offre Float
lng Coordonnée géographique : longitude de l'offre Float
rating Note moyenne, sur 5, des avis utilisateurs Float
rating_count Nombre d'avis utilisateurs Integer
max_guests Capacité maximum du logement, en nombre de personnes Integer
is_instant_booking_available Instant booking disponible pour cette offre Boolean
bedrooms Nombre de chambres Integer
bathrooms Nombre de salles de bain Integer
surface Superficie en mètres carrés Integer
amenities Liste des services disponibles Array. Valeurs possibles : Voir annexe
privacy_type Type de logement String. Valeurs possibles : Voir annexe
type Type de propriété String. Valeurs possibles : Voir annexe

Facet

Nombre de résultats par filtre de recherche

Paramètre Description Format
privacy_type Type de logement Array. Clés possibles : Voir annexe
amenities Services disponibles Array. Clés possibles : Voir annexe
is_instant_booking_available Réservable immédiatement Array. Clés possibles : “T” (true) & “0” (false)
partners Partenaires Array
is_p2p Particulier à particulier Array. Clés possibles : “T” (true) & “0” (false)
type Type de propriété Array. Clés possibles : Voir annexe
master_type Type global Array

Destinations

Permet d'accéder à l'arborescence des destinations de Likibu et d'éffectuer des recherches de destinations.

Recherche

Recherche fulltext de destinations. Peut être utilisé pour de l'autocomplétion, pour suggérer des destinations à un utilisateur.

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

Paramètre Obligatoire? Description Format
q Oui Destination recherchée String
culture Oui Langue de l'utilisateur String. Valeurs possibles : fr, en, de, it, es, nl
size Non Nombre de résultats retournés Integer. Default = 10

Response

Code Description
200 OK
401 Unauthorized – Clé d'API non renseignée ou erronnée
403 Forbidden – Votre clé d'API ne vous permet pas d'utiliser cette méthode. Veuillez nous contacter pour étendre vos accès.
500 Internal Server Error – Problème serveur. Veuillez nous contacter si le problème persiste.

Data

Paramètre 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

Détails

Voir le détail d'une destination. Permet de naviguer dans l'arborescence des destinations et de voir les destinations les plus proches.

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

Paramètre Obligatoire? Description Format
destination_id Oui Integer
culture Oui Langue de l'utilisateur String. Valeurs possibles : fr, en, de, it, es, nl

Response

Code Description
200 OK
401 Unauthorized – Clé d'API non renseignée ou erronnée
403 Forbidden – Votre clé d'API ne vous permet pas d'utiliser cette méthode. Veuillez nous contacter pour étendre vos accès.
500 Internal Server Error – Problème serveur. Veuillez nous contacter si le problème persiste.

Data

Paramètre Description Format
id Identifiant unique de la destination Integer
name Nom de la destination, dans la langue choisie String
parent_name Nom de la destination parente du résultat. String
results Estimation du nombre de logements de cette destination Integer
location Coordonnées géographiques du centre (centroid du polygone englobant la destination) GeoJSON point
Ancestors[] Destinations au niveau supérieur dans la hiérarchie { id: Integer, name: String }
Children[] Destinations au niveau inférieur dans la hiérarchie { id: Integer, name: String, results: Integer, Children: [{}] }
Siblings Destinations au même niveau dans la hiérarchie { id: Integer, name: String, results: Integer }
Nearest Destinations les plus proches { id: Integer, name: String, results: Integer, distance: Integer }

Logements

Permet de lister des logements, d'effectuer des recherches, et d'afficher les détails d'un logement.

Lister les logements

Permet de lister et rechercher les locations de vacances.

curl "https://api.likibu.com/rooms/?key=your_likibu_api_key&destination_id=5370&culture=fr&currency=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

Paramètre Obligatoire? Description Format
where Oui * La destination (ville, quartier, région, …) sur laquelle porte la recherche String
destination_id Oui * Identifiant unique de la destination String
lng Oui * Longitude de la recherche -180.0 ≥ x ≤ 180.0
lat Oui * Latitude de la recherche -90.0 ≥ y ≤ 90.0
culture Oui La langue de l'utilisateur Valeurs possibles : fr, en, de, es, it, nl
currency Oui La devise de l'utilisateur Code de la devise en 3 lettres ISO 4217 (EUR, USD, GPB, CAD, …)
checkin Non La date de checkin Date, au format YYYY-MM-DD. Doit être une date dans le futur.
checkout Non La date de checkout Date, au format YYYY-MM-DD. Doit être supérieur au checkin. Ne doit pas être plus de 365j après le checkin.
per_page Non Nombre de résultats à renvoyer, par page Integer, default = 24
page Non Numéro de la page à renvoyer Integer, default = 1
sort Non Tri des résultats Au choix : reco (default), price_asc, price_desc
privacy_type ** Non Filtre / privacy_type Voir annexe
type ** Non Filtre / type de logement Voir annexe
amenities ** Non Filtre / amenities Voir annexe
partner_id ** Non Filtre / partner_id Integer
guests Non Nombre de voyageurs Integer
price_min Non Prix minimum par nuitée Integer
price_max Non Prix maximum par nuitée Integer

Response

Code Description
200 OK
401 Unauthorized – Clé d'API non renseignée ou erronnée
403 Forbidden – Votre clé d'API ne vous permet pas d'utiliser cette méthode. Veuillez nous contacter pour étendre vos accès.
500 Internal Server Error – Problème serveur. Veuillez nous contacter si le problème persiste.

Data

Paramètre Description Format
totalResults Nombre total de résultats Integer
totalPages Nombre total de pages de résultats Integer
priceMin Prix de l'offre la moins chère Integer
proceMax Prix de l'offre la plus chère Integer
results Détails des offres Offer
facets Détails des facettes de recherche Facet, voir chapitre suivant

Détails d'un logement

Retourne le détail d'un logement.

curl "https://api.likibu.com/rooms/8742e5ee7b5d5c367ecf54da4266ce7451e14943?key=your_likibu_api_key&culture=fr&currency=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

Paramètre Obligatoire? Description Format
culture Oui La langue de l'utilisateur Valeurs possibles : fr, en, de, es, it, nl
currency Oui La devise de l'utilisateur Code de la devise en 3 lettres ISO 4217 (EUR, USD, GPB, CAD, …)
checkin Non La date de checkin Date, au format YYYY-MM-DD. Doit être une date dans le futur.
checkout Non La date de checkout Date, au format YYYY-MM-DD. Doit être supérieur au checkin. Ne doit pas être plus de 365j après le checkin.

Response

Code Description
200 OK
401 Unauthorized – Clé d'API non renseignée ou erronnée
403 Forbidden – Votre clé d'API ne vous permet pas d'utiliser cette méthode. Veuillez nous contacter pour étendre vos accès.
500 Internal Server Error – Problème serveur. Veuillez nous contacter si le problème persiste.

Data

Réponse de type offre, auquel s'ajoute les champs suivants :

Paramètre Description Format
availability.availability Si des dates de séjour sont demandées, la disponibilité du logement “available”, “unavailable”, “”
availability.total_price Si des dates de séjour sont demandées, le prix total du séjour dans la devise demandée Integer

Client php

Vous pouvez utiliser le client PHP développé par Likibu : https://github.com/Likibu/Client

Installation

Via composer : composer require likibu/client

Annexes

Liste des “type”

Code Description
apartment Appartement
house Maison
villa Villa
chalet Châlet
boat Bateau, péniche, …
castle Château
bnb Bed & breakfast, chambre d'hôtes
camping Camping, mobil-homes, …
hotel Appart-hotel
room Chambre chez l'habitant
resort Résidence de vacances, club, …
unusual Cabane dans les arbres, yourte, roulotte, …
bungalow Bungalow
hostel Auberge de jeunesse
riad Riad
any Non connu

Liste des “privacy_type”

Code Description
entire_apartment Logement entier
private_room Chambre privée
shared_room Chambre partagée
any Non connu

Liste des “amenities”

Code Description
ac Climatisation
accessible Accessible aux personnes à mobilité réduite
babycot Lit bébé
balcony Balcon, terrasse
bbq barbecue
breakfast Petit-déjeûner inclus
dishwasher Lave-vaisselle
elevator Ascenceur
events Adapté aux événements
family Adapté aux familles
fireplace Cheminée
garden Jardin
golf Golf
gym Salle de sport
jacuzzi Jacuzzi
kitchen Cuisine
linen Linge inclus
net Internet, wi-fi, …
parking Parking
pets Animaux acceptés
pool Piscine
sauna Sauna
seaview Vue sur mer
smoke Fumeurs acceptés
tv Télévision
washer_dryer Lave-linge