Prerequisites
- An organization with at least one resource and one service configured
- Public API endpoints — no authentication required (availability is public by default)
- Organization context is derived from the resource/service being queried
Domain Model
- A resource is the bookable entity (e.g. a meeting room, a therapist). It has schedule groups containing schedules (weekly recurring availability) and/or timeslots (fixed date-time blocks).
- A service defines booking rules: duration constraints, pricing, capacity. Services may optionally have their own schedules/timeslots — when present, a slot is bookable only when the resource’s and service’s availability periods overlap.
- A booking always belongs to both a resource and a service.
- A blocker is a booking without a service, with
is_blockerflag set totrue. It blocks availability on a resource without representing a real booking.
How Availability is Calculated
The availability engine merges a resource’s schedules and timeslots into availability periods (= opening hours). These are then combined with the service’s duration settings to generate bookable intervals. Existing bookings and blockers reduce the remaining capacity.Typical Search Flow
Request path documentation:paths/public/availability.yamlfor all/api/v1/availability/*endpoints in this guidepaths/public/availability.yamlforGET /api/v1/service-configurationpaths/public/availability.yamlforGET /api/v1/intervals/waitlist-startandGET /api/v1/intervals/waitlist-end
1
Get Service Configuration
Retrieve booking rules and the next available date for a service:Response includes:
Use
next_available_date to initialize the calendar view.2
Find Available Dates
Get a list of dates with available slots within a range:Optional parameters:
Response: An array of date strings that have at least one available slot.
3
Get Start Time Intervals
Once the user selects a date, fetch available start times:Optional parameters:
Response: An array of interval objects:
Unavailability Types
4
Get End Time Intervals (Flexible Duration Only)
If the service allows flexible (variable) duration, fetch valid end times after the user picks a start. This lets the user request multiple possible end intervals for the chosen start interval.Optional parameters:
Response: Array of end intervals with availability status.
Skip this step for services with fixed or auto duration — the end time is calculated automatically from
start_date + duration.Additional Endpoints
Next Available Date
Get the absolute next available date without scanning a range:Availability Periods (Opening Hours)
Get raw availability blocks (opening hours) for a resource:Upcoming Intervals
Get the next N available intervals from now. This endpoint allows a list-based selection flow without requiring the user to pick a day in a calendar first:Advanced Scenarios
Recurring Bookings
Recurring Bookings
For bookings that repeat on a schedule:Returns availability data structured for recurring selection (e.g. “every Monday 10:00–11:00”).
Series / Timeslot-Based Bookings
Series / Timeslot-Based Bookings
Some services use predefined timeslot series (e.g. a course with 10 sessions):Get individual intervals within a series:
Waitlist
Waitlist
When a slot is fully booked, the waitlist endpoints provide intervals where customers can register interest:These follow the same pattern as start/end intervals but return waitlist-eligible slots.For the concrete UI rule set, auth requirements, and the
POST /api/v1/waitlist-spots payload, see Waitlist.Timezone Handling
All dates in requests should include timezone offsets (ISO 8601 / Atom format):timezone parameter when the user’s timezone differs from the resource’s configured timezone:
start_date) and local (local_date_time) representations when timezone conversion applies.