Connectez votre application tierce à SuperHote : lisez les hébergements et les réservations, mettez à jour les disponibilités et les prix. Cette documentation couvre tout ce qu'il faut pour intégrer l'API en moins d'une heure.
Sécurité multi-comptes. Chaque token est limité au périmètre de son propriétaire (ses hébergements, ses réservations). Tout accès hors périmètre renvoie 404 — jamais 403, pour ne pas révéler l'existence d'une ressource.
API publique V21 / 6Dans SuperHote : Plateformes → API → Créer un token. Cochez les permissions nécessaires, copiez le token immédiatement — il ne sera plus jamais affiché.
Listez vos hébergements pour vérifier que le token fonctionne :
Si vous recevez 401 → token mal copié. Si 403 → permission manquante (cf. §2).
Chaque requête doit porter l'en-tête :
Un token possède une ou plusieurs permissions (scopes). Chaque endpoint en exige une précise :
| Scope | Ce qu'il permet | Lecture | Écriture |
|---|---|---|---|
| public-api:rentals.read | Voir les hébergements | ✓ | — |
| public-api:calendar.read | Voir dispo, prix, restrictions | ✓ | — |
| public-api:calendar.write | Modifier dispo, prix, restrictions | — | ✓ |
| public-api:reservations.read | Voir les réservations | ✓ | — |
| public-api:all | Tout (raccourci wildcard) | ✓ | ✓ |
Lecture seule par conception : il n'existe pas de scope d'écriture pour les hébergements ni les réservations. Seul le calendrier est modifiable via l'API.
Toutes les réponses ont la même enveloppe — testez toujours success en premier :
✓ Succès
✗ Erreur
| Code | Signification | Que faire |
|---|---|---|
200 | Succès | — |
401 | Token absent / invalide / expiré | Vérifier l'en-tête, régénérer le token |
403 | Scope manquant | Recréer un token avec la bonne permission |
404 | Ressource hors périmètre ou inexistante | Vérifier l'ID et le compte propriétaire du token |
422 | Paramètres invalides | Lire message — il détaille le champ fautif |
API publique V22 / 6Vue d'ensemble des 5 endpoints. public-api:all remplace n'importe quel scope.
| Méthode | Chemin | Usage | Scope |
|---|---|---|---|
| GET | /rentals | Lister les hébergements | rentals.read |
| GET | /rentals/{id} | Détail d'un hébergement | rentals.read |
| GET | /rentals/{id}/calendar | Lire le calendrier | calendar.read |
| PATCH | /rentals/{id}/calendar | Modifier le calendrier | calendar.write |
| GET | /reservations | Lister les réservations | reservations.read |
Liste vos hébergements, triés par nom, paginés.
| Paramètre | Type | Défaut | Note |
|---|---|---|---|
per_page | int | 25 | maximum 100 |
page | int | 1 | — |
Réponse
Détail d'un hébergement. Renvoie l'objet Rental complet (§7.1). 404 si l'ID n'existe pas ou n'appartient pas au compte du token.
Calendrier nuit par nuit entre deux dates incluses : disponibilité, prix, min/max nights, restrictions check-in/out.
| Paramètre | Requis | Format |
|---|---|---|
from | ✓ | YYYY-MM-DD |
to | ✓ | YYYY-MM-DD, ≥ from |
Exemple
Réponse — un objet par nuit
Sans restriction définie, les défauts sont : available = true, le reste null / false.
API publique V23 / 6Applique les champs fournis à toutes les nuits de la plage [from, to]. La synchro vers Airbnb, Booking et PriceLabs est automatique — rien d'autre à faire.
| Champ | Type | Requis | Contraintes |
|---|---|---|---|
from / to | string | ✓ | YYYY-MM-DD, to ≥ from |
available | bool | ① | — |
price | number | ① | ≥ 0 |
min_nights / max_nights | int | ① | [1, 365] · min ≤ max si les deux fournis |
no_checkin / no_checkout | bool | ① | — |
Au moins un des 6 champs modifiables doit être présent, sinon 422. Les champs omis ne sont pas modifiés.
Exemple — fermer juillet et monter le prix
Réponse
Liste paginée des réservations, triées par création (plus récentes d'abord). Tous les filtres sont optionnels et cumulables.
| Filtre | Format | Usage |
|---|---|---|
updated_since | ISO 8601 | Synchro incrémentale — ne récupérer que ce qui a changé |
created_from / created_to | YYYY-MM-DD | Plage de création |
checkin_from / checkin_to | YYYY-MM-DD | Plage d'arrivée |
status | enum | CONFIRMED · UNCONFIRMED · CANCELED |
rental_id | string | Un seul hébergement |
page / per_page | int | max 100, défaut 25 |
Pattern recommandé pour votre synchro : toutes les 5–15 min, appelez /reservations?updated_since=<dernier passage> et stockez l'horodatage de l'appel. Vous ne traitez que le delta — léger et fiable.
Exemple — réservations confirmées modifiées depuis hier
Si le token n'a accès à aucun hébergement, la réponse est un tableau vide (meta.total = 0) — jamais une erreur.
API publique V24 / 6Rental (hébergement)| Champ | Type | Description |
|---|---|---|
id | string | Identifiant unique |
name | string | Nom de l'hébergement |
address · city · zip_code · country | string|null | Adresse complète |
latitude · longitude | float|null | Géolocalisation |
capacity · bedrooms · bathrooms · beds | int|null | Capacités |
min_nights · max_nights | int|null | Règles par défaut (hors restrictions calendrier) |
check_in_time · check_out_time | string|null | Heures, ex. "16:00" |
currency_id · timezone | mixed|null | Devise et fuseau |
enabled | bool | Hébergement actif |
created_at · updated_at | ISO 8601 | Horodatages |
CalendarDay (une nuit)| Champ | Type | Défaut | Description |
|---|---|---|---|
date | string | — | YYYY-MM-DD |
available | bool | true | Nuit ouverte à la réservation |
price | number|null | null | Prix de la nuitée |
min_nights · max_nights | int|null | null | Restrictions de séjour |
no_checkin · no_checkout | bool | false | Arrivée / départ bloqués |
reservation_id | string|null | null | Réservation occupant la nuit |
Reservation| Champ | Type | Description |
|---|---|---|
id · rental_id | string | Identifiants |
status | enum | CONFIRMED · UNCONFIRMED · CANCELED |
platform | mixed | Source (Airbnb, Booking, direct…) |
checkin · checkout | string | YYYY-MM-DD |
nights · adults_count · children_count | int|null | Détails du séjour |
guest_first_name · guest_last_name | string|null | Voyageur — uniquement prénom/nom |
total_price · currency_id | float / mixed | Montant total |
external_id | string|null | ID côté plateforme d'origine |
created_at · updated_at | ISO 8601 | Pour la synchro incrémentale |
Données personnelles (RGPD). L'email et le téléphone du voyageur ne sont jamais exposés par cette API. Seuls le prénom et le nom sont retournés.
API publique V25 / 6| Symptôme | Cause probable | Solution |
|---|---|---|
401 Unauthenticated | Token mal copié, espace parasite, ou expiré | Re-copier le token ; en générer un nouveau si expiré |
403 sur un seul endpoint | Le token n'a pas le scope de cet endpoint | Créer un token avec le scope manquant (ou public-api:all) |
404 sur un rental qui existe | Le rental appartient à un autre compte | Vérifier que le token vient du bon compte SuperHote |
422 sur PATCH calendar | Aucun champ modifiable fourni, ou min > max | Fournir au moins 1 champ ; vérifier les bornes |
Tableau rentals vide | Aucun hébergement actif sur le compte | Vérifier côté dashboard SuperHote |
| Prix non répercuté sur Airbnb | Latence de synchro plateforme | La propagation est automatique mais asynchrone (quelques minutes) |
updated_sinceupdated_since (5–15 min)success avant de lire resultupdated_since + stockage de l'horodatageBesoin d'aide ? Support intégrateurs : [email protected] — précisez « API publique V2 » en objet, avec votre error_code et l'horodatage de la requête.
API publique V26 / 6