A Practitioner is a bookable staff member — typically a
therapist, instructor, or stylist — that appointments and
sessions can be assigned to. Practitioners own a working rota,
optional commission rules, and the set of appointment / session
types they're qualified to deliver. The booking flow filters
availability by practitioner, and order line items record the
practitioner who delivered the service for reporting and payroll.
Stable identifier for the practitioner. Used when assigning
sessions, appointments and rotas to the practitioner, and when
the booking storefront resolves a slot to a specific staff
member.
Self-identified gender of the practitioner, surfaced to guests
who filter the booking storefront by practitioner gender. Free
text — common values are female, male and non-binary.
null when the practitioner hasn't supplied a value.
Public display name of the practitioner. Shown to guests on
the booking storefront and on receipts. Should be the name the
practitioner wants to appear in front of guests — typically
first name plus last initial or full name.
Organisation the practitioner belongs to. Practitioners are
scoped to a single organisation and are not visible to API
callers from other organisations.
Staff User linked to this practitioner record, if any.
Linking lets the user manage their own rota and view their
appointments from the staff console. null for practitioners
that don't have a login account.
Creates a new Practitioner attached to one or more sites. The
minimum body is name + site_ids; everything else has a sensible
default or null-equivalent. Returns the freshly created
practitioner.
The first entry in site_ids becomes the practitioner's "default"
site — zones, commission packages, and the user-uniqueness check
are evaluated against this site. The practitioner's timezone is
inherited from the default site at creation time.
Requires the SETTINGS_MANAGE permission on every site listed in
site_ids.
One or more site IDs the practitioner works at. Must contain
at least one site; the first entry becomes the practitioner's
"default" site for zone- and commission-package lookups. The
caller's user must be a member of every site listed.
Optional organisation to attribute this practitioner to. The
caller's user must belong to the organisation. Defaults to
the caller's primary organisation when omitted.
IDs of practitioner tags this person is associated with.
Tags must already exist in the caller's primary organisation
AND be marked applies_to: Practitioner — others are
rejected with 422.
Optional underlying User to link to this practitioner.
The user must share an organisation with the caller. A
given user can be linked to at most one practitioner per
site — attempting to reuse a user on the same site is
rejected with 422.
Identifier of the practitioner. Practitioners are the staff
members or therapists who deliver appointments; this ID is used
to manage their rotas, availability, and assignment to bookings.
Partially updates a Practitioner. Every field is optional; only
fields you send are written. Fields you omit retain their current
values. Requires the SETTINGS_MANAGE permission on the
practitioner's first site.
email (if sent) must be unique across all practitioners in the
caller's organisations — duplicate emails are rejected with 422.
user_id (if sent non-null) must share an organisation with the
practitioner and not already be linked to another practitioner on
the same site.
Identifier of the practitioner. Practitioners are the staff
members or therapists who deliver appointments; this ID is used
to manage their rotas, availability, and assignment to bookings.
Free-form list of tag names the practitioner is qualified
to deliver. Used by older integrations; new callers should
prefer the tag_ids association on
practitioners/{id}/appointment-restrictions instead.
Sort order for the practitioner within the site. Lower
numbers sort first. Use PUT /shop/practitioners/order to
reorder a batch of practitioners in one request.
Optional underlying User to link to. The user must share
an organisation with the practitioner. A given user can be
linked to at most one practitioner per site.
Soft-deletes a Practitioner. Existing past appointments and
sessions are unaffected; the practitioner is removed from new
booking flows.
422 Unprocessable Entity if the practitioner has future
appointments or sessions still on the books — reassign or cancel
those bookings first. The response lists appointments and/or
sessions validation errors so callers know what to clear up.
Requires the SETTINGS_MANAGE permission on the practitioner's
first site.
Identifier of the practitioner. Practitioners are the staff
members or therapists who deliver appointments; this ID is used
to manage their rotas, availability, and assignment to bookings.
Creates a copy of an existing Practitioner. The copy inherits the
source's full configuration (avatar, tags, zones, scheduling rules)
except the underlying user_id association — the new practitioner
starts without a linked user. Useful when staffing up similar roles
or seeding a new site from a model practitioner.
Requires the SETTINGS_MANAGE permission on the source's site.
Identifier of the practitioner. Practitioners are the staff
members or therapists who deliver appointments; this ID is used
to manage their rotas, availability, and assignment to bookings.
Tag names the practitioner can deliver appointments for.
The exact set of tags is controlled by
practitioner-tags; this field references them by name
for back-compat with older callers.
IDs of practitioner tags the new copy belongs to. Tags
must exist in the caller's organisation AND be marked as
applies_to: Practitioner — others are rejected with
422.
ISO 8601 date marking the first week of the practitioner's
recurring schedule. Used together with
scheduling_week_interval to compute multi-week rotas.
Length of the recurring schedule in weeks (1-10). 1
means a weekly schedule; 4 means a 4-weekly rota
repeating cyclically from scheduling_week_interval_start.
Returns the PractitionerAppointmentRestrictions configured on a
practitioner. Restrictions either block the practitioner from
certain appointment types or cap how long those appointments can
be, optionally limited to a date range.
The list is paginated. Requires the RESERVATIONS_VIEW
permission on the practitioner's site.
Identifier of the practitioner. Practitioners are the staff
members or therapists who deliver appointments; this ID is used
to manage their rotas, availability, and assignment to bookings.
Adds a new PractitionerAppointmentRestriction to the
practitioner. Use type: cannot_offer to stop the practitioner
taking matching appointments outright, or type: max_duration
with max_duration (minutes) to cap how long matching
appointments can run.
Requires the SETTINGS_MANAGE permission on the practitioner's
site.
Identifier of the practitioner. Practitioners are the staff
members or therapists who deliver appointments; this ID is used
to manage their rotas, availability, and assignment to bookings.
Returns a single PractitionerAppointmentRestriction belonging
to the given practitioner. Requires the RESERVATIONS_VIEW
permission on the practitioner's site.
Identifier of the practitioner. Practitioners are the staff
members or therapists who deliver appointments; this ID is used
to manage their rotas, availability, and assignment to bookings.
Replaces an existing PractitionerAppointmentRestriction. The
server validates the same shape as on create, so type and
applies_to_type are required and the conditional fields
(appointment_type_ids, category_ids, max_duration) must be
sent based on those values.
Requires the SETTINGS_MANAGE permission on the practitioner's
site.
Identifier of the practitioner. Practitioners are the staff
members or therapists who deliver appointments; this ID is used
to manage their rotas, availability, and assignment to bookings.
Removes a PractitionerAppointmentRestriction from a
practitioner. Future availability checks no longer apply the
rule; existing bookings are unaffected.
Requires the SETTINGS_MANAGE permission on the practitioner's
site.
Identifier of the practitioner. Practitioners are the staff
members or therapists who deliver appointments; this ID is used
to manage their rotas, availability, and assignment to bookings.
Returns the PractitionerCustomAvailability rules for the
practitioner. Each rule is an ad-hoc override to the regular
rota — either opening an extra window (is_available: true) or
blocking one off (is_available: false).
Use the date, date_time_from, date_time_to, and
is_available query parameters to narrow the result set.
Results are paginated.
Identifier of the practitioner. Practitioners are the staff
members or therapists who deliver appointments; this ID is used
to manage their rotas, availability, and assignment to bookings.
Creates a new PractitionerCustomAvailability rule. Use this
to open an extra working window (is_available: true) or to
block one off (is_available: false, e.g. leave or sickness).
The server validates that no confirmed appointments or sessions
fall inside is_available: false windows, and automatically
merges adjacent or overlapping rules with the same
is_available value. The response is the resulting rule, which
may have been merged with neighbours.
Identifier of the practitioner. Practitioners are the staff
members or therapists who deliver appointments; this ID is used
to manage their rotas, availability, and assignment to bookings.
true opens an extra working window; false blocks
bookings (e.g. leave). false rules will fail
validation if existing confirmed appointments or
sessions overlap the window.
Identifier of the practitioner. Practitioners are the staff
members or therapists who deliver appointments; this ID is used
to manage their rotas, availability, and assignment to bookings.
Updates a PractitionerCustomAvailability rule. Every body
field is optional; sent fields replace the existing values.
date_time_to must remain strictly after date_time_from once
the update is applied.
As on create, an update that overlaps or sits adjacent to
another rule with the same is_available value triggers a
merge. The response is the resulting rule.
Identifier of the practitioner. Practitioners are the staff
members or therapists who deliver appointments; this ID is used
to manage their rotas, availability, and assignment to bookings.
Removes a PractitionerCustomAvailability rule. The
practitioner's availability immediately reverts to the regular
rota for the period the rule covered. Existing bookings are not
affected.
Identifier of the practitioner. Practitioners are the staff
members or therapists who deliver appointments; this ID is used
to manage their rotas, availability, and assignment to bookings.
Returns the working schedule for a single date for the given
practitioner. The response blends the recurring rota with any
custom availability rules that cover the date so the caller can
render a day-view UI without doing the reconciliation locally.
for_date.rules_for_date is the recommended field to render —
it points at whichever rule-set (custom_rules or
rota_availability_rules) is authoritative for the day.
Requires the ROTAS_VIEW permission on the practitioner's first
site.
Identifier of the practitioner. Practitioners are the staff
members or therapists who deliver appointments; this ID is used
to manage their rotas, availability, and assignment to bookings.
The ISO 8601 date (YYYY-MM-DD) the caller wants rules for. The
date is interpreted in the practitioner's timezone, NOT the
caller's. There is no range support — pass one date per request.
Sets the working schedule for a single date for the given
practitioner via custom availability rules. The endpoint is
idempotent for the requested date: existing custom rules covering
the date are cleared (or trimmed if they extend beyond the date)
before the new rules are applied.
Submitting an empty availability_rules array — or omitting the
key — blocks the practitioner for the entire day. Submitting
rules that match the regular rota leaves the rota in charge with
no custom rules created.
Returns the same shape as the GET endpoint so callers can re-render
without a follow-up fetch.
Requires the ROTAS_MANAGE permission on the practitioner's first
site.
Identifier of the practitioner. Practitioners are the staff
members or therapists who deliver appointments; this ID is used
to manage their rotas, availability, and assignment to bookings.
The working windows to apply for the date. Each rule
defines a start and end time. Submitting an empty array
(or omitting the key) blocks the practitioner for the
entire date.
Responses
200
The schedule was updated. The response is the same shape as GET /shop/practitioners/{practitionerId}/rota-for-date.
Returns a lightweight, non-paginated list of PractitionerSummary
objects for the given site, sorted by each practitioner's order
field then by name. Use this to render an ordering UI without
pulling the full Practitioner payload for every entry.
Requires the RESERVATIONS_VIEW permission on the site.
Reorders the practitioners at a site in one request. The order of
practitioner_ids in the body determines each practitioner's
order field (first ID → order: 0, second → order: 1, etc.).
IDs not listed are unaffected and keep their existing order.
Returns the full ordered list (same shape as the GET response) so
callers can re-render without a follow-up fetch.
Requires the SETTINGS_MANAGE permission on the site.
Returns the resolved availability windows for one or more
practitioners over the requested date range. Windows mix
rota-derived "regular" availability with CustomAvailabilityRule
overrides (which can be either available or explicitly
unavailable); the response carries an availability_type flag so
consumers can tell them apart.
Use either a date-range (date_from / date_to, inclusive of
whole days in the practitioner's timezone) or a date-time range
(date_time_from / date_time_to, half-open) — supply one pair
or the other, not both.
Practitioners are processed in the order they appear in
practitioner_ids; the response is sorted by start time within
each practitioner. Returns an empty list if no practitioners were
supplied.
Requires the view ability on every supplied practitioner. A
single forbidden practitioner aborts the request with 403.
Comma-separated list of practitioner IDs to compute availability
for. The calling user must be able to view every practitioner;
a single forbidden practitioner returns 403.
Inclusive start timestamp (YYYY-MM-DD HH:mm:ss) to compute
availability for. Required when date_from/date_to are not
supplied. Use this form for sub-day queries.