Docs

Bookings

Last updated: 26 Oct 2026

A booking is a wellness session (e.g. sauna, yoga) — one record per attendee. This is the booking/visit view; for revenue, follow order_id to Orders.

Requires the bookings:read permission.

Changes on 4 November 2026

Bookings used to be called appointments. On 4 November 2026 the remaining appointment names go:

  • The /admin/v0/appointments and /admin/v0/appointments/{id} paths are removed. Until then they return the same data as the /admin/v0/bookings paths below, with Deprecation and Sunset response headers. Switch to the bookings paths before that date.
  • An order line's purchasable_type becomes Booking instead of Appointment (Orders).
  • Events report resource_type booking instead of appointment, and actions booking.* instead of appointment.*, including events recorded before that date (Events).

List bookings

GET /admin/v0/bookings?visit_from=2026-07-01T00:00:00Z&visit_to=2026-07-08T00:00:00Z
Authorization: Bearer YOUR_API_KEY

Returns bookings newest-first, in the paginated envelope.

Query parameters

ParameterTypeDescription
visit_fromstringISO 8601 timestamp; sessions starting at/after this
visit_tostringISO 8601 timestamp; sessions starting at/before this
updated_sincestringISO 8601 timestamp; for incremental sync
pageintegerPage index (default 1)
per_pageintegerItems per page (default 50, max 200)

Get a booking

GET /admin/v0/bookings/{id}
Authorization: Bearer YOUR_API_KEY

Response

{
  "data": {
    "id": "0ab6af2e-3fed-46f1-86b5-3e507ae3efab",
    "starts_at": "2026-07-04T09:00:00+02:00",
    "ends_at": "2026-07-04T10:00:00+02:00",
    "guest_count": 1,
    "service_id": "2b3c…",
    "service_name": "Public Sauna",
    "variant_name": "Standard Session",
    "status": "Upcoming",
    "order_id": "7eeecefd-…",
    "customer_id": "8f268b4a-…",
    "booked_at": "2026-06-01T10:15:00+02:00",
    "created_at": "2026-06-01T10:15:00+02:00",
    "updated_at": "2026-07-04T10:05:00+02:00",
    "cancelled_at": null
  }
}

Fields

FieldTypeNotes
idstringBooking public id
starts_atstringSession start
ends_atstringScheduled end
guest_countnumberAlways 1: each booking is one attendee
service_idstringPublic id of the service, e.g. Sauna / Yoga
service_namestringe.g. "Public Sauna"
variant_namestringe.g. "Standard Session"
statusstringDisplay label (see note below)
order_idstringThe order this booking belongs to (revenue)
customer_idstringPseudonymous customer id (no PII)
booked_atstringWhen the customer booked
created_atstringWhen the booking reached SERVOS
updated_atstringLast change to the booking
cancelled_atstringWhen it was cancelled; null if not cancelled

status is a human-readable label — one of Upcoming, Starting soon, In progress, Checked in, Completed, No-show, Cancelled. Completed means checked in and ended. No-show covers a booking marked as one and a booking that ended without a check-in, which earlier read Overdue. It's for display, not logic: see Conventions → Status labels.