1
Find free slots
unavailable_dates lists days in the range with nothing free — handy for greying out a calendar without a request per day.2
Book one of them
start, end, practitioner_id, location_id and appointment_type_id straight from the slot. For a group slot send its group_master_id instead of start/end — you are taking a place in an existing session.3
Handle a clash
Someone may book the same time between your two calls.
POST /appointments checks the practitioner’s diary at the moment of writing and answers 409 with code slot_unavailable if the time is no longer free (or group_full for a group). Re-query availability and offer the next slot — the Idempotency-Key makes a retry of the same booking safe, but a new time is a new request.Parameters
Two views of the diary
visibility=online (default)
What a patient sees when booking online. The location, appointment type and (if given) practitioner must be enabled for online booking — otherwise
422 not_online_bookable — and every online-booking rule applies: minimum advance notice, how far ahead, daily caps, online-only availability guides, slot clustering. Use this for websites, apps and marketplaces.visibility=all
What the front desk could book: every open slot for practitioners who provide the type, subject only to physical capacity (columns / resources). No online-booking rules. Use this for staff-facing tools and internal automations.
Deliberate overbooking
The clash check exists to protect the diary from integrations that cannot see it. If you mean to book over an existing appointment — a data migration, a practice that double-books on purpose — send"allow_clash": true and the appointment is written wherever you say, exactly as a staff member clicking the calendar would.
Not the same as practitioner_availabilities
practitioner_availabilities is a resource: the raw working-hours records (who is in, where, when). GET /availability is a computation over those records, existing appointments, closures, resources and the appointment type — the free time that is left. Read the first to know when someone works; call the second to know when they can be booked.