Beschikbaarheid opvragen via de API
Na dit artikel kun je via de API opvragen of één ruimte of alle ruimtes van een workspace in een tijdvenster vrij zijn — met conflictenlijst, buffer vooraf, de geldende opbouwtijd per ruimte en context bij de bezetting.
Met de interface GET /api/v1/availability vraagt je eigen systeem bij Univents na of een periode vrij is: voor één ruimte of voor alle ruimtes van een workspace. Zo kan je website, je planningstool of een ander systeem een toezegging doen zonder dat er een boeking wordt aangemaakt.
Het antwoord is hetzelfde als dat de boekingspagina en de chat gebruiken: bezette evenementen, draaiboekpunten, ruimtegroepen, openstaande aanvragen en blokkeringsperiodes tellen mee.
Sleutel en machtiging
Je hebt een API-sleutel nodig met de machtiging Locaties lezen. Aanmaken doe je onder Integraties → Ontwikkelaars → API-sleutels — de installatie staat in het artikel over API-sleutels. Stuur de sleutel bij elke aanvraag mee als Authorization: Bearer <Schlüssel>. Een sleutel zonder deze machtiging krijgt een weigering, geen leeg resultaat.
De aanvraag
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
| Parameter | Verplicht | Betekenis |
|---|---|---|
from | ja | Begin van de periode. Datum (2026-10-01) of datum met tijdstip (2026-10-01T18:00). |
to | ja | Einde van de periode, in dezelfde notatie. Alleen een datum betekent de hele dag. |
location_id | nee | Precies deze ruimte. Ontbreekt deze, dan geldt het antwoord voor alle ruimtes van de workspace. |
buffer_minutes | nee | Tijd vooraf en achteraf in minuten (opbouw, afbouw). 0 (standaardwaarde) betekent: de opgevraagde periode wordt letterlijk gecontroleerd. De waarde is een ondergrens: heeft een ruimte onder Opbouw- en schoonmaaktijd (minuten) een eigen opbouwtijd, dan geldt voor die ruimte de grootste van beide waarden, niet de som. Welke waarde van kracht was, staat in het antwoord bij het conflict (zie effectiveBufferMinutes). |
include_soft_holds | nee | Standaard true: openstaande, nog niet besliste aanvragen houden de ruimte vast — precies zoals bij het versturen van een boeking. |
Zonder tijdzone gelden datum en tijd in de tijdzone van je workspace. Voeg je een Z of een offset toe (2026-10-01T18:00Z), dan geldt de waarde letterlijk.
Het antwoord
{
"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— vrij of niet, over alle gecontroleerde ruimtes heen. Bij één opgevraagde ruimte staat er aanvullendlocationAvailable.window— wat daadwerkelijk is gecontroleerd. Met buffer is het venster aan beide kanten ruimer dan opgevraagd;requested_from/requested_totonen ongewijzigd wat je hebt verstuurd. Jouwbuffer_minuteswordt daarbij getoond; de opbouwtijd van een ruimte zit er niet in, maar staat per conflict ineffectiveBufferMinutes.free_location_ids— de ruimtes die in het venster vrij zijn.conflicts— wat in de weg zit.typegeeft aan waardoor:
type | Betekenis |
|---|---|
event_overlap | Een evenement valt in het venster. confirmed geeft aan of het al bevestigd is. |
schedule_item_overlap | Een draaiboekpunt (opbouw, afbouw, levering) bezet de ruimte. |
group_cascade | Een andere ruimte van dezelfde ruimtegroep is bezet — de groep wordt als geheel vastgehouden. |
soft_hold | Er ligt een openstaande aanvraag. |
capacity | De bovengrens voor parallelle aanvragen is in het venster bereikt. |
blocked_period | Een blokkeringsperiode is van toepassing. location_id is hier null als de blokkering de hele workspace betreft. |
effectiveBufferMinutes staat bij een bezettingsconflict zodra voor die ruimte een opbouw- en schoonmaaktijd van kracht was: de waarde in minuten waarmee is gerekend — max(buffer_minutes, opbouwtijd van de ruimte), maximaal 1440. Ontbreekt de waarde, dan is zonder buffer gecontroleerd. Bij het conflict blocked_period en bij de bovengrens voor aanvragen (capacity) staat hij er niet.
degraded— alleen aanwezig als een deel van de controle niet gelezen kon worden. Het antwoord is dan niet sluitend: behandel het niet als toezegging, maar vraag opnieuw op.notes— de details die je moet kennen om het antwoord goed te lezen; zie hieronder.
Wat het antwoord niet is
- Geen boeking. De aanroep reserveert niets. Tussen opvragen en boeken kan een ander proces de ruimte bezetten — de boeking zelf controleert opnieuw.
- Geen persoonsgegevens. Het antwoord noemt ruimte-ID’s en periodes, geen namen, geen contacten, geen contactpersonen.
- Geen bovengrens per pagina. De bovengrens voor parallelle aanvragen stel je per boekingspagina in; een API-aanroep heeft geen paginabinding. Daarom staat die grens niet in dit antwoord — ontbreekt hij, dan is dat geen nul.
- Geen precisie op de minuut bij blokkeringsperiodes en openstaande aanvragen. Blokkeringsperiodes en openstaande aanvragen worden per dag gewaardeerd in de tijdzone van de workspace, evenementen daarentegen op de minuut nauwkeurig. Het resultaat is daardoor nooit ruimer dan op de boekingspagina, maar kan strenger zijn. De
notesvan het antwoord geven dit per geval aan.
Foutgevallen
| Antwoord | Betekenis |
|---|---|
400 | from/to ontbreken, zijn onleesbaar of staan in de verkeerde volgorde; location_id is geen geldige ID; buffer_minutes is negatief of groter dan 1440. Het antwoord noemt de reden. |
401 | Geen of een onbekende sleutel. |
403 | De sleutel heeft de machtiging Locaties lezen niet. |
429 | Te veel aanvragen in korte tijd. |
Een leeg tijdvenster of een typfout in de datum leidt nooit tot „Vrij” — dergelijke aanvragen worden afgewezen. De uitgebreide beschrijving van de interface met alle velden vind je in de API-referentie onder /api/v1/docs.