BlockedTimes

Create a blocked time

Carves a window out of one or more resource calendars (practitioners, rooms, or bookable areas). At least one of practitioner_ids, room_ids, or area_ids must be non-empty.

If recurrence.weekdays is set, the server fans the block out across matching weekdays within recurrence.date_from..recurrence.date_to (max 366 days). The first ~30 occurrences are created synchronously; the remainder are queued via an async job.

Requires the RESERVATIONS_MANAGE permission on the site.

post/shop/blocked-times

Query parameters

site_idstring required

Filter results by the site they belong to

Request body

start_timestring date-time required

Start of the blocked window. ISO-8601, in the site's timezone.

end_timestring date-time required

End of the blocked window. Must be strictly after start_time.

type'cleaning' | 'break' | 'meeting' | 'other' required

The kind of block. Drives the calendar icon.

labelstring nullable

Optional short label shown on the calendar tile.

notesstring nullable

Optional longer note (plain text).

colorstring nullable

Optional hex colour override. Format #rrggbb (lower-case).

practitioner_idsstring[]

Practitioners whose calendars should be blocked. Required unless room_ids or area_ids is provided.

room_idsstring[]

Rooms to block. Required unless practitioner_ids or area_ids is provided.

area_idsstring[]

Bookable areas to block. Required unless practitioner_ids or room_ids is provided.

Example request

{
  "start_time": "2026-06-01T09:00:00+01:00",
  "end_time": "2026-06-01T09:30:00+01:00",
  "label": "Lunch",
  "notes": "Cover the front desk with reception.",
  "color": "#ff8800"
}

Response

A single BlockedTime.

Example response

{
  "data": {
    "id": "65f1234567890abcdef12345",
    "start_time": "2026-06-01T09:00:00+01:00",
    "end_time": "2026-06-01T09:30:00+01:00",
    "type": "cleaning",
    "label": "Deep clean",
    "notes": "Used the extra steamer",
    "color": "#ff8800"
  }
}

Changes