Skip to main content
A special closing is a one-off window during which a location is closed, on top of its regular opening hours — think public holidays, private events, renovations, or an unplanned shutdown. Each closing belongs to exactly one location and is bounded by a start and end instant. Special closings live under their parent location. The full path is /v1/locations/{location_id}/special_closings, with individual closings addressed at /v1/locations/{location_id}/special_closings/{special_closing_id}.

The special_closing object

string
Opaque, case-sensitive identifier for the closing.
string
Always "special_closing".
string
The parent location (location ID) this closing applies to.
string
ISO 8601 UTC instant at which the closure begins.
string
ISO 8601 UTC instant at which the closure ends.
string | null
A human-readable explanation for the closure (for example "Public holiday"). It gives the AI clerk the context needed to explain the closure to customers. May be null.
string
ISO 8601 UTC creation timestamp.
string
ISO 8601 UTC last-update timestamp.

Time zones

starts_at and ends_at are absolute UTC instants — the trailing Z is part of the contract. They are not wall-clock times. To present a closing to a restaurant operator, convert each instant into the location’s timezone (an IANA identifier such as Europe/Zurich, available on the location object).
Always send starts_at and ends_at in UTC. If you collect a local date and time from a user, convert it to UTC before calling the API — accounting for daylight saving time in the location’s zone. A closing meant to run “all of December 25th in Zurich” spans 23:00 UTC Dec 24 → 23:00 UTC Dec 25, not midnight to midnight UTC.
The example below converts a local wall-clock window in Europe/Zurich into the UTC instants the API expects.

List special closings

Returns a paginated list of the closings for a location, ordered by created_at.
Endpoint

Query parameters

integer
default:"10"
Number of results per page, between 1 and 100.
string
Cursor for the next page — the id of the last object in the previous page. Mutually exclusive with ending_before.
string
Cursor for the previous page — the id of the first object in the current page. Mutually exclusive with starting_after.
string
Return closings created after this ISO 8601 timestamp.
string
Return closings created before this ISO 8601 timestamp.
string
Return closings updated after this ISO 8601 timestamp.
string
Return closings updated before this ISO 8601 timestamp.
Response

Create a special closing

Creates a closing under a location. This is a resource-creating POST, so an Idempotency-Key header is required.
Endpoint

Body parameters

string
required
ISO 8601 UTC instant at which the closure begins.
string
required
ISO 8601 UTC instant at which the closure ends.
string
Optional human-readable explanation for the closure. It is passed to the AI clerk so it can explain the closure to customers. Omit or send null to leave it unset.
Response
Replaying the same Idempotency-Key with the same body returns the original closing, with the header Idempotent-Replayed: true. Reusing the key with a different body returns 409 idempotency_error, and a concurrent in-flight duplicate returns 409 conflict_error. Keys are retained for 24 hours. See Idempotency.

Retrieve a special closing

Fetches a single closing by id.
Endpoint
Response
A request for an id that does not exist under the location returns 404 not_found_error.

Update a special closing

Updates one or more fields on a closing. Only the fields you send are changed; omitted fields keep their current value.
Endpoint

Body parameters

string
New start instant, ISO 8601 UTC.
string
New end instant, ISO 8601 UTC.
string | null
New reason passed to the AI clerk so it can explain the closure to customers. Send null to clear an existing reason.
Response

Delete a special closing

Permanently removes a closing. The location reverts to its regular opening hours for that window.
Endpoint
Deleting a closing that does not exist returns 404 not_found_error.

Errors

Special closing endpoints use the standard error model. The most common cases:
Example error

Next steps

Opening hours

Special closings sit on top of a location’s regular weekly delivery and pickup schedule.

Locations

Read a location’s timezone to render starts_at and ends_at in local wall-clock time.

Idempotency

Creating a closing requires an Idempotency-Key. Learn how safe retries work.