Sprawdzanie dostępności przez API
Z tego artykułu dowiesz się, jak zapytać przez API, czy jedna sala lub wszystkie sale workspace są wolne w danym przedziale czasu — z listą konfliktów, buforem czasowym, obowiązującym czasem przygotowania każdej sali i kontekstem zajętości.
Za pomocą interfejsu GET /api/v1/availability Twój własny system pyta Univents, czy dany okres jest wolny: dla jednej sali lub dla wszystkich sal workspace. Dzięki temu Twoja strona internetowa, narzędzie do planowania lub inny system może potwierdzić dostępność bez tworzenia rezerwacji.
Odpowiedź jest taka sama, jakiej używają strona rezerwacji i czat: liczą się zajęte wydarzenia, punkty harmonogramu, grupy sal, otwarte zapytania i okresy blokady.
Klucz i uprawnienie
Potrzebujesz klucza API z uprawnieniem Odczyt lokalizacji. Możesz go utworzyć w Integracje → Deweloperzy → Klucze API — konfigurację opisuje artykuł o kluczach API. Wysyłaj go z każdym zapytaniem jako Authorization: Bearer <Schlüssel>. Klucz bez tego uprawnienia otrzyma odmowę, a nie pusty wynik.
Zapytanie
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
| Parametr | Wymagany | Znaczenie |
|---|---|---|
from | tak | Początek okresu. Data (2026-10-01) lub data z godziną (2026-10-01T18:00). |
to | tak | Koniec okresu, w tym samym zapisie. Sama data oznacza cały dzień. |
location_id | nie | Dokładnie ta sala. Jeśli go brak, odpowiedź dotyczy wszystkich sal workspace. |
buffer_minutes | nie | Czas przed i po wydarzeniu w minutach (montaż, demontaż). 0 (domyślnie) oznacza, że żądany okres jest sprawdzany dosłownie. Wartość jest dolną granicą: jeśli sala ma w polu Czas przygotowania i sprzątania (minuty) własny czas przygotowania, dla tej sali obowiązuje większa z obu wartości, a nie ich suma. Którą wartość zastosowano, podaje odpowiedź przy konflikcie (zob. effectiveBufferMinutes). |
include_soft_holds | nie | Domyślnie true: otwarte, jeszcze nierozstrzygnięte zapytania blokują salę — tak samo jak przy wysyłaniu rezerwacji. |
Bez strefy czasowej data i godzina są interpretowane w strefie czasowej Twojego workspace. Jeśli dodasz Z lub przesunięcie (2026-10-01T18:00Z), wartość obowiązuje dosłownie.
Odpowiedź
{
"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— wolne lub nie, łącznie dla wszystkich sprawdzonych sal. Przy zapytaniu o jedną salę dodatkowo pojawia sięlocationAvailable.window— co faktycznie zostało sprawdzone. Przy buforze okno jest po obu stronach szersze niż w zapytaniu;requested_from/requested_topokazują w niezmienionej postaci to, co wysłano. Pokazywany jest przy tym Twójbuffer_minutes; czas przygotowania sali nie jest w nim zawarty, tylko podany przy każdym konflikcie weffectiveBufferMinutes.free_location_ids— sale, które są wolne w tym oknie.conflicts— co stoi na przeszkodzie.typemówi, co dokładnie:
type | Znaczenie |
|---|---|
event_overlap | Wydarzenie przypada w oknie. confirmed wskazuje, czy jest już potwierdzone. |
schedule_item_overlap | Punkt harmonogramu (montaż, demontaż, dostawa) zajmuje salę. |
group_cascade | Inna sala z tej samej grupy sal jest zajęta — grupa jest blokowana jako całość. |
soft_hold | Istnieje otwarte zapytanie. |
capacity | W oknie osiągnięto limit równoległych zapytań. |
blocked_period | Obowiązuje okres blokady. location_id ma tu wartość null, jeśli blokada dotyczy całego workspace. |
effectiveBufferMinutes pojawia się przy konflikcie zajętości, gdy dla danej sali obowiązywał czas przygotowania i sprzątania: wartość w minutach, z którą liczono — max(buffer_minutes, czas przygotowania sali), najwyżej 1440. Jeśli go brak, sprawdzenie odbyło się bez bufora. Przy konflikcie blocked_period oraz przy limicie zapytań (capacity) go nie ma.
degraded— występuje tylko wtedy, gdy nie udało się odczytać części sprawdzanych danych. Odpowiedź jest wtedy niewyczerpująca: nie traktuj jej jako potwierdzenia, tylko zapytaj ponownie.notes— niuanse, które trzeba znać, aby poprawnie odczytać odpowiedź; zob. poniżej.
Czym odpowiedź nie jest
- To nie rezerwacja. Wywołanie niczego nie rezerwuje. Między zapytaniem a rezerwacją inna operacja może zająć salę — sama rezerwacja sprawdza dostępność ponownie.
- Brak danych osobowych. Odpowiedź zawiera identyfikatory sal i okresy, bez imion i nazwisk, kontaktów i osób do kontaktu.
- Brak limitu na poziomie strony. Limit równoległych zapytań ustawia się dla każdej strony rezerwacji; wywołanie API nie ma odniesienia do żadnej strony. Dlatego nie występuje on w tej odpowiedzi — jego brak nie oznacza zera.
- Brak dokładności do minuty przy okresach blokady i otwartych zapytaniach. Okresy blokady i otwarte zapytania są oceniane dzień po dniu w strefie czasowej workspace, a wydarzenia — co do minuty. Dzięki temu wynik nigdy nie jest łagodniejszy niż na stronie rezerwacji, ale może być surowszy. Pole
notesw odpowiedzi informuje o tym w konkretnym przypadku.
Przypadki błędów
| Odpowiedź | Znaczenie |
|---|---|
400 | Brakuje from/to, są nieczytelne lub podane w odwrotnej kolejności; location_id nie jest prawidłowym identyfikatorem; buffer_minutes jest ujemne lub większe niż 1440. Odpowiedź podaje przyczynę. |
401 | Brak klucza lub klucz nieznany. |
403 | Klucz nie ma uprawnienia Odczyt lokalizacji. |
429 | Zbyt wiele zapytań w krótkim czasie. |
Pusty przedział czasu lub literówka w dacie nigdy nie prowadzi do wyniku „Wolne” — takie zapytania są odrzucane. Szczegółowy opis interfejsu wraz ze wszystkimi polami znajdziesz w dokumentacji API pod adresem /api/v1/docs.