Sessions

Update a Session

Updates an in-flight Session occurrence — practitioner, room, times, capacity, waitlist behaviour. Only fields included in the request body are written; everything else is left unchanged.

Note this updates a single occurrence rather than the underlying SessionType or SessionRecurrenceGroup — for repeating session changes use the recurrence-group endpoints instead.

put/shop/sessions/{sessionId}

Request body

idstring required

Stable identifier for the session occurrence. A Session is one scheduled instance of a SessionType — bookings are made against this id, not against the underlying type or recurrence group.

capacityinteger required

The total capacity of the session.

currencystring required

The ISO-4217 currency code in lower case.

durationinteger required

The duration of the session.

end_timestring date-time required

The date and time the session ends.

max_basketsinteger nullable required

The maximum number of baskets that may have bookings for this session.

num_checked_ininteger required

If bookings are included, this is the number of bookings that have been checked in.

num_no_showinteger required

If bookings are included, this is the number of bookings that have marked as no-show.

num_waitlistedinteger required

The number of customers currently on the waiting list for this session.

organisation_idstring required

Organisation the session belongs to. Sessions are scoped to a single organisation and are invisible to API callers from other organisations.

practitioner_idstring nullable required

The practitioner scheduled to lead this session. null for sessions that don't require a specific staff member (e.g. a free-access spa slot). Must reference an active practitioner on site_id.

priceinteger required

The cost of the session, in the smallest denomination (eg pence or cents).

remaining_capacityinteger required

The remaining capacity of the session.

room_idstring required

The room the session takes place in. Must reference a room configured on site_id. Used by the staff console to colour the session in the schedule view and to enforce per-room capacity caps.

session_type_idstring required

The SessionType this session is an occurrence of. Inherits defaults (default capacity, default duration, default price) from this type unless overridden on the session itself.

session_type_namestring required

Cached display name copied from the parent SessionType at the time the session was created. Useful for reporting where the type may since have been renamed.

site_idstring required

Site the session is hosted at. Sessions never span more than one site; bookings on the session inherit this site_id for rota and revenue-reporting purposes.

start_timestring date-time required

The date and time the session starts.

waitlist_enabledboolean required

Whether the waitlist is enabled for this session.

max_waitlist_sizeinteger nullable required

The maximum number of customers allowed on the waitlist for this session. Null means the waitlist is unlimited.

created_atstring date-time required

The date and time the session was created.

deleted_atstring date-time

The date and time the session was deleted (cancelled).

updated_atstring date-time required

The date and time the session was last updated.

Example request

{
  "id": "5dcb47800000000000000010",
  "bookings": [
    {
      "id": "5dcb47800000000000000000",
      "checked_in_at": "2022-03-02T09:00:00+00:00",
      "checked_out_at": "2022-03-02T10:00:00+00:00",
      "customer_id": "5dcb47800000000000000020",
      "email": "janedoe@example.com",
      "first_name": "Jane",
      "guests": [
        {
          "id": "5dcb47800000000000000000",
          "checked_in_at": "2025-10-01T12:00:00+00:00",
          "checked_out_at": "2025-10-01T16:30:00+00:00",
          "customer_id": "5f8a1b2c-9d3e-4a5b-8c6d-7e8f9a0b1c2d",
          "email": "jane.doe@example.com",
          "first_name": "Jane",
          "intake_form_submission_id": "5dcb47800000000000000010",
          "last_name": "Doe",
          "name": "Jane Doe"
        }
      ],
      "intake_form_required": true,
      "last_name": "Doe",
      "order_id": "5dcb47800000000000000009",
      "order_item_id": "5dcb47800000000000000019",
      "order_ref": "TRY00",
      "organisation_id": "00000000-0000-0000-0000-000000000000",
      "phone": "+447727123456",
      "session_id": "5dcb47800000000000001111",
      "session_type_id": "5dcb47800000000000001234",
      "session_type_name": "Spa access",
      "site_id": "00000000-0000-0000-0000-111111111111",
      "status": "none"
    }
  ],
  "capacity": 10,
  "currency": "gbp",
  "duration": 60,
  "end_time": "2019-01-15T12:00:00+01:00",
  "max_baskets": 1,
  "num_checked_in": 12,
  "num_no_show": 2,
  "num_waitlisted": 2,
  "organisation_id": "00000000-0000-0000-0000-000000000000",
  "practitioner": {
    "id": "5dcb47800000000000000000",
    "name": "Jane Doe"
  },
  "practitioner_id": "5dcb47800000000000000010",
  "price": 595,
  "remaining_capacity": 4,
  "room": {
    "id": "5dcb47800000000000000000"
  },
  "room_id": "5dcb47800000000000000010",
  "session_type_id": "5dcb47800000000000000010",
  "session_type_name": "Spa access",
  "site_id": "5dcb47800000000000000010",
  "start_time": "2019-01-15T11:00:00+01:00",
  "waitlist_enabled": true,
  "max_waitlist_size": 10,
  "created_at": "2019-01-15T12:00:00+01:00",
  "deleted_at": "2019-01-15T12:00:00+01:00",
  "updated_at": "2019-01-15T12:00:00+01:00"
}

Response

The Session was successfully updated.

Example response

{
  "data": {
    "id": "5dcb47800000000000000010",
    "bookings": [
      {
        "id": "5dcb47800000000000000000",
        "checked_in_at": "2022-03-02T09:00:00+00:00",
        "checked_out_at": "2022-03-02T10:00:00+00:00",
        "customer_id": "5dcb47800000000000000020",
        "email": "janedoe@example.com",
        "first_name": "Jane",
        "guests": [
          {
            "id": "5dcb47800000000000000000",
            "checked_in_at": "2025-10-01T12:00:00+00:00",
            "checked_out_at": "2025-10-01T16:30:00+00:00",
            "customer_id": "5f8a1b2c-9d3e-4a5b-8c6d-7e8f9a0b1c2d",
            "email": "jane.doe@example.com",
            "first_name": "Jane",
            "intake_form_submission_id": "5dcb47800000000000000010",
            "last_name": "Doe",
            "name": "Jane Doe"
          }
        ],
        "intake_form_required": true,
        "last_name": "Doe",
        "order_id": "5dcb47800000000000000009",
        "order_item_id": "5dcb47800000000000000019",
        "order_ref": "TRY00",
        "organisation_id": "00000000-0000-0000-0000-000000000000",
        "phone": "+447727123456",
        "session_id": "5dcb47800000000000001111",
        "session_type_id": "5dcb47800000000000001234",
        "session_type_name": "Spa access",
        "site_id": "00000000-0000-0000-0000-111111111111",
        "status": "none"
      }
    ],
    "capacity": 10,
    "currency": "gbp",
    "duration": 60,
    "end_time": "2019-01-15T12:00:00+01:00",
    "max_baskets": 1,
    "num_checked_in": 12,
    "num_no_show": 2,
    "num_waitlisted": 2,
    "organisation_id": "00000000-0000-0000-0000-000000000000",
    "practitioner": {
      "id": "5dcb47800000000000000000",
      "name": "Jane Doe"
    },
    "practitioner_id": "5dcb47800000000000000010",
    "price": 595,
    "remaining_capacity": 4,
    "room": {
      "id": "5dcb47800000000000000000"
    },
    "room_id": "5dcb47800000000000000010",
    "session_type_id": "5dcb47800000000000000010",
    "session_type_name": "Spa access",
    "site_id": "5dcb47800000000000000010",
    "start_time": "2019-01-15T11:00:00+01:00",
    "waitlist_enabled": true,
    "max_waitlist_size": 10,
    "created_at": "2019-01-15T12:00:00+01:00",
    "deleted_at": "2019-01-15T12:00:00+01:00",
    "updated_at": "2019-01-15T12:00:00+01:00"
  }
}

Changes