Interroger la disponibilité via l’API
Après cet article, vous saurez interroger l’API pour savoir si une salle ou toutes les salles d’un workspace sont libres sur une plage horaire, avec la liste des conflits, le tampon en amont, le temps de préparation effectif par salle et le contexte d’occupation.
Avec l’interface GET /api/v1/availability, votre propre système demande à Univents si une période est libre : pour une seule salle ou pour toutes les salles d’un workspace. Votre site web, votre outil de planification ou tout autre système peut ainsi donner une réponse ferme sans déclencher de réservation.
Le résultat est le même que celui utilisé par la page de réservation et le chat : les événements en cours, les points du déroulé, les groupes de salles, les demandes ouvertes et les périodes de blocage sont pris en compte.
Clé et autorisation
Vous avez besoin d’une clé API disposant de l’autorisation Lire les lieux. Vous pouvez la créer sous Intégrations → Développeurs → Clés API ; la configuration est décrite dans l’article sur les clés API. Envoyez-la à chaque requête sous la forme Authorization: Bearer <clé>. Une clé sans cette autorisation reçoit un refus, pas un résultat vide.
La requête
GET /api/v1/availability?from=2026-10-01&to=2026-10-03 GET /api/v1/availability?from=2026-10-01T18:00&to=2026-10-01T23:00&location_id=<Raum-ID> GET /api/v1/availability?from=2026-10-01&to=2026-10-03&buffer_minutes=120&include_soft_holds=false
| Paramètre | Obligatoire | Signification |
|---|---|---|
from | oui | Début de la période. Date (2026-10-01) ou date avec heure (2026-10-01T18:00). |
to | oui | Fin de la période, même notation. Une simple date désigne la journée entière. |
location_id | non | Cette salle précisément. S’il est absent, la réponse porte sur toutes les salles du workspace. |
buffer_minutes | non | Marge avant et après en minutes (montage, démontage). 0 (valeur par défaut) signifie que la période demandée est vérifiée telle quelle. La valeur est un minimum : si une salle indique son propre temps de préparation sous Temps de préparation et de nettoyage (minutes), c’est la plus grande des deux valeurs qui s’applique à cette salle, pas leur somme. La réponse indique, pour chaque conflit, la valeur appliquée (voir effectiveBufferMinutes). |
include_soft_holds | non | Valeur par défaut true : les demandes ouvertes, pas encore tranchées, bloquent la salle, exactement comme lors de l’envoi d’une réservation. |
Sans fuseau horaire, la date et l’heure sont interprétées dans le fuseau de votre workspace. Si vous ajoutez un Z ou un décalage (2026-10-01T18:00Z), la valeur est prise telle quelle.
La réponse
{
"available": false,
"window": {
"requested_from": "2026-10-01",
"requested_to": "2026-10-03",
"from": "2026-09-30T22:00:00.000Z",
"to": "2026-10-03T22:00:00.000Z",
"buffer_minutes": 120
},
"free_location_ids": ["…"],
"locationAvailable": false,
"conflicts": [
{
"type": "event_overlap",
"location_id": "…",
"from": "2026-10-02T15:00:00.000Z",
"to": "2026-10-02T22:00:00.000Z",
"confirmed": true
},
{
"type": "soft_hold",
"location_id": "…",
"from": null,
"to": null
}
],
"notes": ["Soft holds (open, non-archived requests) are counted per day …"]
}
available: libre ou non, pour l’ensemble des salles vérifiées. Si vous avez demandé une seule salle,locationAvailableest ajouté.window: ce qui a réellement été vérifié. Avec un tampon, la fenêtre est plus large que la période demandée de chaque côté ;requested_from/requested_toreprennent à l’identique ce que vous avez envoyé. Votrebuffer_minutesest affiché ici ; le temps de préparation d’une salle n’y figure pas, mais danseffectiveBufferMinutespour chaque conflit.free_location_ids: les salles libres dans la fenêtre.conflicts: ce qui pose problème.typeindique la cause :
type | Signification |
|---|---|
event_overlap | Un événement chevauche la fenêtre. confirmed indique s’il est déjà confirmé. |
schedule_item_overlap | Un point du déroulé (montage, démontage, livraison) occupe la salle. |
group_cascade | Une autre salle du même groupe de salles est occupée : le groupe est bloqué dans son ensemble. |
soft_hold | Une demande ouverte est en attente. |
capacity | La limite de demandes parallèles est atteinte dans la fenêtre. |
blocked_period | Une période de blocage s’applique. location_id vaut ici null lorsque le blocage concerne tout le workspace. |
effectiveBufferMinutes figure sur un conflit d’occupation dès qu’un temps de préparation et de nettoyage était effectif pour cette salle : c’est la valeur en minutes utilisée pour le calcul, soit max(buffer_minutes, temps de préparation de la salle), au maximum 1440. S’il est absent, la vérification a été faite sans tampon. Il n’apparaît pas pour le conflit blocked_period ni pour la limite de demandes (capacity).
degraded: présent uniquement si une partie de la vérification n’a pas pu être lue. La réponse n’est alors pas exhaustive : ne la considérez pas comme une confirmation ferme, interrogez à nouveau.notes: les subtilités à connaître pour lire correctement la réponse ; voir ci-dessous.
Ce que la réponse n’est pas
- Pas une réservation. L’appel ne réserve rien. Entre la requête et la réservation, une autre opération peut occuper la salle ; la réservation elle-même revérifie.
- Aucune donnée personnelle. La réponse indique des identifiants de salle et des périodes, pas de noms, pas de contacts, pas d’interlocuteurs.
- Pas de limite propre à la page. La limite de demandes parallèles se règle par page de réservation ; un appel API n’a pas de lien avec une page. C’est pourquoi elle ne figure pas dans cette réponse : son absence ne signifie pas zéro.
- Pas de précision à la minute pour les périodes de blocage et les demandes ouvertes. Les périodes de blocage et les demandes ouvertes sont évaluées jour par jour dans le fuseau horaire du workspace, tandis que les événements le sont à la minute. Le résultat n’est ainsi jamais plus généreux que celui de la page de réservation, mais il peut être plus strict. Les
notesde la réponse l’indiquent au cas par cas.
Cas d’erreur
| Réponse | Signification |
|---|---|
400 | from/to sont absents, illisibles ou inversés ; location_id n’est pas un identifiant valide ; buffer_minutes est négatif ou supérieur à 1440. La réponse indique la raison. |
401 | Clé absente ou inconnue. |
403 | La clé n’a pas l’autorisation Lire les lieux. |
429 | Trop de requêtes en peu de temps. |
Une fenêtre vide ou une faute de frappe dans la date ne mène jamais à « Libre » : ces requêtes sont rejetées. Vous trouverez la description détaillée de l’interface, avec tous les champs, dans la référence API sous /api/v1/docs.