Skip to main content
Calendar event writes are not exposed in Public API v1 because they affect recurrence, calendar projections, notifications, external calendar sync, and booking financial handling. Public API write access is limited to guarded booking, recurring-booking, calendar-task, booking-request, availability template, and availability closure actions.

Scopes

Event types

Event types are calendar labels/categories used by event templates for filtering and display. Public API consumers can manage these directly when an integration needs to keep appointment categories in sync.
Required scopes: event_types:read for reads, event_types:write for writes. Event type DTO fields: Validation:

Event templates

Event templates are the public calendar template resource. They define what can be scheduled or booked: name, duration, default location, capacity, booking rules, visibility, pricing, credits, and the optional eventType label.
Required scopes: event_templates:read for reads, event_templates:write for writes. List response fields: Event template DTO fields: Validation: Omitted: raw media arrays, image/video storage URLs, change history, coach-only notes, product details, provider metadata, and internal recurrence/event documents.

List calendar events

Required scope: calendar_events:read Validation: Range limit: maximum 92 days. Response fields:

Get calendar event

Required scope: calendar_events:read Response fields:

Recurring bookings

Recurring booking endpoints expose operational metadata and guarded chain-level updates. They do not expose raw recurrence internals, external sync state, notification payloads, billing snapshots, or audit history.

List recurring bookings

Required scope: recurring_bookings:read Response fields: Detail response fields:

Update recurring booking

Required scope: recurring_bookings:write Request body: Unknown fields are rejected with PUBLIC_API_UNKNOWN_FIELDS. Response fields:

Cancel recurring booking

Required scope: recurring_bookings:write Request body: The endpoint marks the recurring chain as Cancelled. It does not hard delete the chain and does not retroactively delete existing booking records. Response fields:

Calendar tasks

Required scope: calendar_tasks:read Response fields: GET /public/v1/calendar-tasks/{taskId} returns these fields under data.task.*:

Create calendar task

Required scope: calendar_tasks:write Request body: Unknown fields are rejected with PUBLIC_API_UNKNOWN_FIELDS. Response fields:

Update calendar task

Required scope: calendar_tasks:write Allowed fields: title, startAt, endAt, durationMinutes, notes, and assignedCoachIds. Unknown fields are rejected. Empty updates return NOTHING_TO_UPDATE. Response fields:

Cancel calendar task

Required scope: calendar_tasks:write This uses the existing calendar task cancellation helper. External callers should treat it as a cancel operation, not as a generic hard-delete API. Response fields:

Booking requests

Required scope: booking_requests:read Response fields: Not exposed: client email, client image, location address, lesson descriptions, credit/payment internals, accept/reject mutation internals, or notification payloads.

Approve booking request

Required scope: booking_requests:write Request body: The request must be pending, company-owned, and linked to a client visible to the authenticated Public API client. Response fields:

Reject booking request

Required scope: booking_requests:write Request body: Response fields:

Coach availability

Coach availability endpoints manage the working-time template for one coach. Use these endpoints for the same kind of availability management shown in the coach calendar settings UI. They do not return client-bookable slots.
Required scope: coach_availability:read Response fields:

Replace coach availability

Required scope: coach_availability:write Request body: Unknown top-level fields are rejected. Send the coach ID in the path, not in the body.

Location availability

Location availability endpoints manage the availability template for one location. This is separate from public location opening hours and separate from the final bookable availability feed.
Required scope: location_availability:read Response fields:

Replace location availability

Required scope: location_availability:write Request body: Unknown top-level fields are rejected. Send the location ID in the path, not in the body.

Closure days and absence

These endpoints mirror the company calendar settings panel for availability closures. They manage holiday presets and custom closure or absence dates that block bookable availability for coaches, locations, or both. This is the Public API surface for calendar closure days, not location opening hours.
Required scope: availability_rules:read Response fields:

Replace closure days and absence

Required scope: availability_rules:write Request body: Unknown top-level fields are rejected. Because this is a full replace endpoint, callers should first read the current closure document, apply their intended change locally, and send the complete desired presets and customClosures payload. The update response returns data.availabilityClosures.presets[], data.availabilityClosures.customClosures[], data.availabilityClosures.availablePresets[], and data.availabilityClosures.updatedAt. Not exposed in Public API v1: raw RRULE objects, external calendar sync state, manual waitlist promotion controls, notification payloads, or internal availability derivation metadata.

List bookable availability

Required scope: availability:read Bookable availability is the endpoint for external client booking flows. It combines calendar events, coach availability templates, location availability templates, closure days, booking rules, capacity, and optional client context. It returns only currently bookable or waitlist-available slots and includes a short-lived availabilityToken. The token is signed, company-scoped, expires after 10 minutes, and is not a reservation. POST /public/v1/bookings always revalidates capacity and booking eligibility live. Validation: Range limit: maximum 31 days. Response fields:

List bookings

Required scope: bookings:read Validation: Response fields:

Get booking

Required scope: bookings:read Response fields:

Create booking

Required scope: bookings:write Request body: Availability-token booking validation: Response fields:

Update booking attendance

Required scope: bookings:write Request body: Response fields:

Get booking cancellation context

Required scope: bookings:read Optional query: clientId, instanceDate. Response fields:

Cancel booking

Required scope: bookings:write Request body: Response fields: