Skip to main content

Closed Days

Which dates the business is shut over a window, and why. Three settings can stop a booking being taken on a date, and this folds all three into one answer:

  • a closure (one-off, weekly, or imported from a connected calendar);
  • a date outside every open-dates window (see Open Dates);
  • a special-hours entry whose answer for that weekday is Closed (see Special Hours).

Use this to draw a calendar or to answer "are we open on the 21st". To manage the closure rows themselves, use the closures endpoints, which list and edit rows rather than dates.

Objectโ€‹

FieldTypeDescription
datestringThe closed date, in the business's own timezone (YYYY-MM-DD)
all_daybooleantrue when the business is shut for the whole date
closed_windowsarrayClosed wall-clock windows, e.g. [{ "start": "13:00", "end": "15:00" }]. Empty when all_day is true
reasonsarrayWhat shuts the date. Each carries type, id, label and when

reasons[].type is closure, season (outside your open dates) or special_hours. id is the closure's id, or null for the other two. A date shut by more than one thing lists them all.

Overlapping closed windows are merged, so a date closed 12:00โ€“14:00 and 13:00โ€“15:00 comes back as one window of 12:00โ€“15:00.

List closed daysโ€‹

GET /v1/settings/calendar/closed-days?from=2026-11-01&to=2026-11-30

Requires the calendar:read scope.

Parametersโ€‹

ParameterTypeRequiredDescription
fromstringYesFirst date to check (YYYY-MM-DD)
tostringYesLast date to check (YYYY-MM-DD), on or after from
location_idintegerNoCheck one location. Omit for the whole business, where a closure scoped to a single site does not count as closed

Ask for a year or less at a time; a longer window returns 422.

Only the dates the business is actually shut come back. An open date is absent rather than present with an empty payload.

Success (200 OK)โ€‹

{
"data": [
{
"date": "2026-11-02",
"all_day": true,
"closed_windows": [],
"reasons": [
{
"type": "closure",
"id": 41,
"label": "Public holiday",
"when": "Nov 2, 2026 ยท All day"
}
]
},
{
"date": "2026-11-05",
"all_day": false,
"closed_windows": [
{ "start": "13:00", "end": "15:00" }
],
"reasons": [
{
"type": "closure",
"id": 42,
"label": "Lunch break",
"when": "Nov 5, 2026 ยท 1:00 PM โ€“ 3:00 PM"
}
]
},
{
"date": "2026-11-21",
"all_day": true,
"closed_windows": [],
"reasons": [
{
"type": "season",
"id": null,
"label": "Outside your open dates",
"when": "All day"
}
]
}
],
"meta": {
"request_id": "01JBQ8...",
"timestamp": "2026-11-01T09:12:44+00:00"
}
}

Errorsโ€‹

StatusCodeWhen
422validation_errorfrom or to missing, not YYYY-MM-DD, or to before from
422validation_errorThe window is longer than a year
403insufficient_scopeThe key lacks calendar:read

Locationsโ€‹

With location_id, a closure scoped to other sites is ignored and one scoped to that site shuts it. Without it, only business-wide closures shut the business: one site being closed is not the business being closed.