Documentation API Partenaires - Abracadaroom

Points de terminaison de l'API

Introduction

  • L'URL de base pour tous les appels est https://vacation.unicstay.com/api/v1/abcd/v1/
  • Tous les appels sans erreur retournent un code HTTP 200 avec par défaut un objet JSON (sauf si la documentation spécifie un cas particulier).
    Il est possible de recevoir une réponse au format XML en ajoutant le paramètre ?format=xml lors de l'appel de chaque point de terminaison (exemple : https://vacation.unicstay.com/api/v1/abcd/v1/types?format=xml)
  • Tous les points de terminaison de l'API requièrent une authentification (sauf si la documentation spécifie un cas particulier). En cas d'erreur d'authentification, l'appel retourne un code HTTP 403 et un objet JSON avec la propriété "details" contenant le message d'erreur.

Liste des points de terminaison

GET /rentals Obtenir la liste totale des hébergements avec leurs indisponibilités

Retourne la liste totale des hébergements acceptant des réservations dans la langue d'appel, avec leurs caractéristiques et leurs indisponibilités. Ce point de terminaison ne retourne pas les indisponibilités en temps réel, car son résultat est mis en cache pour une durée de 12 heures.

Avec un compte test, ce point de terminaison ne retournera que 20 hébergements maximum.

Paramètres

Aucun

Valeurs de retour

Un tableau de N objets de type Rental

[{
    "id": 8, // Identifiant unique de l'hébergement
    "url": "https://www.abracadaroom.com/en/book-chateau-de-lez-eaux-treehouse-damoiseaux-890", // URL de la page
    "title": "Dam'oiseaux", // Nom de l'hébergement
    "property": "Château de Lez-Eaux", // Nom de la propriété / du domaine
    "type": "Treehouse", // Type d'hébergement. Le texte est localisé selon la langue d'appel.
    "themes": [ // Thèmes (toujours un tableau, peut être vide). Le texte est localisé selon la langue d'appel.
      "Outdoor activities",
      "Seaside",
      "Countryside",
      "Family friendly",
      "Outdoor Markets"
    ],
    "description": "Located approximately one hour from Saint Malo and a bit more than one hour from Rennes by car, le Château de Lez-Eaux presents the Dam'Oiseaux cabin perched on 2 hundred year old oak trees, 6m up over the ground. 27 steps up a spiral staircase give access to the cabin's terrace. An owl invites you to explore its nest: You will feel like a bird... We like:\nThe height of the cabin as well as its size\nThe breathtaking view of the Norman countryside", // Description
    "customers_rating": 4, // Note des clients sur (de 0 à 5). Valeur décimale, peut être égale à null si aucune note
    "main_photo": "https://static.abracadaroom.com/cache/media/i/r/27/damoiseaux-6-2--8-fo-teaser___v_0b3cd4a265b8879d8ddaea08f1aff91a.jpg", // Photo principale, résolution 1920x1440, en JPEG.
    "photos": [  // Tableau de toutes les photos, résolution 900x600 maximum, en JPEG. Le tableau peut être vide.
      "https://static.abracadaroom.com/cache/media/i/r/27/damoiseaux-6-2--8-fo-normal___v_0b3cd4a265b8879d8ddaea08f1aff91a.jpg",
      "https://static.abracadaroom.com/cache/media/i/r/11/damoiseaux-7_2--4555-fo-normal___v_13d9c39da2ad559eb2e7e894e4e2c4f8.jpg",
      "https://static.abracadaroom.com/cache/media/i/r/da/damoiseau2--636-fo-normal___v_f184fb73653ccc7dab3514b478f52513.jpg",
      "https://static.abracadaroom.com/cache/media/i/r/26/damoiseaux-8_2--9-fo-normal___v_a9292c77054ae43d22295902b1cab7bd.jpg",
      "https://static.abracadaroom.com/cache/media/i/r/dc/damoiseaux-5_2--7-fo-normal___v_05c5e61a7d715e7780d71eb56f6e3e87.jpg"
    ],
    "accommodation_details": {
      "capacity": 3, // Capacité d'accueil 
      "minimum_age": 2, // Age minimum des occupants (peut être égal à null si ouvert à tous)
      "rooms": 1, // Nombre de pièces
      "height": 6, // Hauteur (en mètres).
      "access": "stairs", // Type d'accès (peut être égal à null). Le texte est localisé selon la langue d'appel.
      "surface": 20, // Surface en m²
      "wheelchair_friendly": false, // Adapté aux personnes à mobilité réduite (booléen)
      "forbidden_for_pregnant": false, // Interdit aux femmes enceintes (booléen)
      "pets_friendly": false, // Animaux acceptés (booléen)
      "pets_friendly_details": "" // Commentaire éventuel concernant les animaux acceptés. Le texte est localisé selon la langue d'appel.
    },
    "accommodation_facilities": {
      "sanitary_facilities": {
        "restrooms": "ecological dry toilets, inside the accommodation",
        "bathroom": "outside the accommodation",
        "distance": null, // Distance en mètre entre les sanitaires et le logement. Peut être égal à null.
        "towel_set": "non provided", // Informations concernant le linge de toilettes. Le texte est localisé selon la langue d'appel.
        "hair_dryer": false
      },
      "bedding": {
        "bedrooms": 0, // Nombre de chambres
        "beds": {
          "double_beds": 1, // Nombre de lits doubles
          "single_beds": 1, // Nombre de lits simples
          "bunk_beds": 0, // Nombre de lits superposés
          "sofa_beds": 0, // Nombre de canapés-lits
          "baby_beds": 0, // Nombre de lits bébé
          "extra_beds": 0 // Nombre de lits d'appoint
        },
        "baby_bed_extra_charge": false,  // Supplément pour les lits bébé (booléen)
        "bedding_set": "beds ready on arrival" // Commentaire éventuel concernant le supplément pour les lits bébé. Le texte est localisé selon la langue d'appel.
    },
      },
      "kitchen": {
        "coffee_maker": false,
        "kettle": false,
        "microwave": false,
        "cooking_plate": false,
        "fridge": false,
        "oven": false,
        "dishwasher": false,
        "dishes": false,
        "baby_chair": false
      },
      "outdoor": {
        "terrace": true,
        "terrace_surface": null, // Surface de la terrasse en m². Peut être égale à null si non renseignée ou si pas de terrasse.
        "garden_lounge": true,
        "barbecue": false,
        "hammock": false
      },
      "comfort": {
        "electricity": false,
        "water": "", // Information éventuelle sur la disponibilité d'eau dans le logement. Le texte est localisé selon la langue d'appel.
        "spa": false,
        "spa_details": "", // Commentaire éventuel sur l'équipement spa. Le texte est localisé selon la langue d'appel.
        "table_and_chairs": true,
        "air_conditioner": false,
        "heating": false,
        "wood_stove": false,
        "chimney": false,
        "firewood_included": false,
        "wifi": false,
        "tv": false,
        "washing_machine": false,
        "iron": false,
        "hoover": false
      }
    },
    "property_facilities": [ // Equipements du domaine, à l'extérieur du logement. Le texte est localisé selon la langue d'appel. Le tableau peut être vide.
      "Heated pool",
      "Bikes",
      "Ping pong",
      "Hiking",
      "Petanque",
      "Fishing",
      "Water center",
      "Playground",
      "Shop",
      "Convenience Store",
      "Bakery",
      "Waterslide",
      "Fitness room",
      "Football",
      "Paddling",
      "Water games",
      "Volleyball",
      "Inflatables",
      "Billiards",
      "Electronic games"
    ],
    "nearby_facilities": [ // Liste des activités à proximité de l'hébergement, hors domaine. Le texte est localisé selon la langue d'appel (si pas de traduction, la langue par défaut est le français)
      "Le Mont-Saint-Michel",
      "Scriptorial d'Avranches - Musée des Manuscrits du Mont-Saint-Michel",
      "Zoo de Champrépus",
      "Iles anglo Normandes",
      "Musée Christian Dior"
    ],
    "meals": {
      "breakfast": "Breakfast included. Served in your accomodation",  // Information éventuelle sur le petit-déjeuner. Le texte est localisé selon la langue d'appel.
      "other_meals": "Packed lunch available as an extra when booking"  // Information éventuelle sur les autres repas. Le texte est localisé selon la langue d'appel.
    },
    "arrival": {
      "checkin_start": "16:00", // Heure d'arrivée (début), en format 24h. Peut être vide.
      "checkin_end": "19:00", // Heure d'arrivée (fin), en format 24h. Peut être vide.
      "checkout": "9:30" // Heure maximum de départ, en format 24h. Peut être vide.
    },
    "booking": {
      "opening_date": "2018-03-29", // Date d'ouverture annuelle de l'hébergement, au format YYYY-MM-DD. Peut être vide.
      "closing_date": "2018-09-16", // Date de fermeture annuelle de l'hébergement, au format YYYY-MM-DD. Peut être vide.
      "base_night_price": "99.00", // Prix par nuit (pour un nombre de personne maximum égal à la valeur price_scope)
      "currency": "EUR",
      "price_scope": 2, // Nombre de personne compris dans le prix par nuit (si 0, le prix est valable quelque soit le nombre de personne, dans la limite de la capacité du logement)
      "price_per_additional_person": "22.00", // Prix par personne supplémentaire, au delà du price_scope.
      "price_per_additional_person_details": "",  // Information éventuelle concernant le prix par personne supplémentaire. Le texte est localisé selon la langue d'appel.
      "included": "One night, candles, bedlinen and breakfast.",
      "not_included": " Additional options can be chosen and added after checking availability \n",
      "additional_services": "Additional guest  (22€)Gourmet lunch basket for 2 people (59€)Additional vehicle (5€)Lunch basket / child (22€)Aperitif for 2 people (9€)\n",
      "special_offers": "",
      "minimum_stay": "",
      "booking_conditions": ""
    },
    "location": {
      "address": {
        "address": "Château de Lez-Eaux",
        "address2": "",
        "address3": "",
        "zipcode": "50000",
        "city": "Saint Pair Sur Mer",
        "country": "France",
        "area": "Manche",
        "region": "Lower Normandy"
      },
      "coord": {
        "lat": 48.8016,
        "lng": -1.52215
      },
      "access": "Le camping de Lez-Eaux, situé sur la côte sud de la Manche, à l’ouest de la Normandie et aux portes de la Bretagne, entre le Mont Saint Michel et Granville, vous accueille dans un cadre unique. Pour vous y rendre :\n\r\n\n\r\nDepuis Cherbourg :\n\r\n\n\r\nDirection Caen-Paris jusqu’à Valognes.\n\r\nA Valognes, direction le Mont St-Michel via Lessay, Coutances, Granville.\n\r\nA Granville, direction Avranches sur la D 973.\n\r\nA 4 kms après le rond point Géant Casino.\n\r\n\n\r\nDepuis Paris :\n\r\n\n\r\nPrendre A14 en direction de Rouen.\n\r\nContinuer sur A13, suivre la direction Caen.\n\r\nA proximité de Caen, continuer sur N814 en direction de Rennes.\n\r\nContinuer sur A84 / E401, prendre sortie en direction de Granville.\n\r\nA Granville, direction Avranches sur la D 973.\n\r\nA 4 kms après le rond point Géant Casino.\n\r\n\n\r\nDepuis Calais :\n\r\n\n\r\nPrendre A16 / E402 en direction de Rouen.\n\r\nA proximité de Abbeville, continuer sur A28 / E402, suivre la direction Le Havre, Caen.\n\r\nContinuer sur A29 / E44 suivre la direction Caen Lisieux.\n\r\nContinuer sur A13 / E46, prendre sortie en direction de Rennes Cherbourg.\n\r\nA proximité de Caen, continuer sur N814 en direction de Rennes Cherbourg.\n\r\nContinuer sur : A84 / E401, prendre sortie en direction de Granville.\n\r\nA Granville, direction Avranches sur la D 973.\n\r\nA 4 kms après le rond point Géant Casino.\n\r\n\n\r\nDepuis Saint-Malo :\n\r\n\n\r\nPrendre à droite N137 en direction de Rennes.\n\r\nA proximité de Avranches, prendre à droite D973.\n\r\nDirection Granville\n\r\nPasser Marcey les grèves – Sartilly – Saint Pierre Langers\n\r\nAprès Saint Pierre Langers à 500 mètres entrée du Camping sur la gauche juste avant le radar automatique.",
      "distance_parking": 0 // distance entre le parking et le logement, en mètre. Peut être égale à null.
    },
    "unavailabilities": [ // Liste des plages d'indisponibilités, avec la date de début et la date de fin.
      {
        "start": "2018-09-16",
        "end": "2020-12-30"
      },
      {
        "start": "2018-08-30",
        "end": "2018-08-31"
      },
      {
        "start": "2018-06-22",
        "end": "2018-06-24"
      },
      {
        "start": "2018-05-26",
        "end": "2018-05-27"
      },
      {
        "start": "2018-05-05",
        "end": "2018-05-06"
      },
      {
        "start": "2018-04-28",
        "end": "2018-04-29"
      },
      {
        "start": "2018-04-14",
        "end": "2018-04-15"
      },
      {
        "start": "2010-01-02",
        "end": "2018-03-29"
      }
    ]
  },
  {
    ... // autre logement
  }]

GET /types Obtenir la liste totale des types d'hébergement utilisés

Retourne la liste totale des types d'hébergement pour lesquels il existe des hébergements acceptant des réservations dans la langue d'appel.

Paramètres

Aucun

Valeurs de retour

Un tableau de N objets de type Type

  [
    {
      "id": 12, // Identifiant unique du type d'hébergement
      "label": "Maisonnette" // Libellé du type
    },
    {
      "id": 23,
      "label": "Tonneau"
    },
    ...
  ]

GET /types/{id}/rentals Obtenir la liste totale des hébergements avec leurs indisponibilités pour un type d'hébergement donné

Retourne, pour un type d'hébergement donné, la liste totale des hébergements acceptant des réservations dans la langue d'appel, avec leurs caractéristiques et leurs indisponibilités. Ce point de terminaison ne retourne pas les indisponibilités en temps réel, car son résultat est mis en cache pour une durée de 12 heures.

Avec un compte test, ce point de terminaison ne retournera que 2 hébergements maximum.

Paramètres

id : Identifiant unique du type d'hébergement (type : entier)

Valeurs de retour

Un tableau de N objets de type Rental (voir GET /rentals   pour voir un exemple d'objet de type Rental)

Authentification

Les appels nécessitant l'authentification attendent un en-tête HTTP Authorization comportant soit un token, soit un couple username / password, selon le format suivant :

Compte de test

Un compte de test est disponible :

  • Username : demo
  • Password : test
  • Token : F8CpmeDJ8yzqk8fejF0cG5Ls7ren

Authentification via token

Authorization: Bearer your_api_token
ou
Authorization: Token your_api_token

Authentification via username / password

Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=

Dans cet exemple, dXNlcm5hbWU6cGFzc3dvcmQ= correspond à 'username:password' encodé en base64.

Vous pouvez également utiliser le couple username / password via l'option -u de cURL, ou via l'option auth de Guzzle.

Localisation des réponses

Les points de terminaison de l'API peuvent être appelées avec un en-tête HTTP Accept-Language. Les réponses renvoyées tiendront compte de cette langue d'appel (texte traduit dans la langue d'appel + accès aux données uniquement disponibles dans la langue d'appel).

Les valeurs autorisées pour l'en-tête Accept-Language sont :

  • fr (par défaut)
  • en
  • nl
  • es

Si aucun en-tête Accept-Language n'est envoyé, la langue par défaut (Français) sera utilisée dans les réponses.

Exemples

Les exemples suivants sont écrits en PHP.

Utilisation de la librairie Guzzle

Via le couple username / password

$client = new GuzzleClient();
$result = $client->request('GET', 'https://vacation.unicstay.com/api/v1/abcd/v1/rentals', [
  'auth' => ['username', 'password'],
  'headers' => [
    'Accept-Language' => 'en',
  ],
]);
$response = json_decode($result->getBody()->getContents());

ou

$client = new GuzzleClient();
$result = $client->request('GET', 'https://vacation.unicstay.com/api/v1/abcd/v1/rentals', [
  'headers' => [
    'Authorization' => 'Basic ' . base64_encode('username:password'),
    'Accept-Language' => 'en',
  ],
]);
$response = json_decode($result->getBody()->getContents());

Via le token d'authentification

$client = new GuzzleClient();
$result = $client->request('GET', 'https://vacation.unicstay.com/api/v1/abcd/v1/rentals', [
  'headers' => [
    'Authorization' => 'Bearer your_api_token',
    'Accept-Language' => 'en',
  ],
]);
$response = json_decode($result->getBody()->getContents());

Utilisation de cURL

Via le couple username / password

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://vacation.unicstay.com/api/v1/abcd/v1/rentals');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
  'Authorization: Basic ' . base64_encode('username:password'),
  'Accept-Language: en',
]);
$result = curl_exec($ch);
curl_close($ch);
$response = json_decode($result);

Via le token d'authentification

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://vacation.unicstay.com/api/v1/abcd/v1/rentals');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
  'Authorization: Bearer your_api_token',
  'Accept-Language: en',
]);
$result = curl_exec($ch);
curl_close($ch);
$response = json_decode($result);