pauseStores
Take one or more storefronts offline, with a typed reason and an optional automatic reopen time (ONE-2620, Phase 1's first WRITE). The guest-facing message on platforms that accept free text is exactly your note — never a synthesized string.
Stores are processed independently: one unsupported storefront in the batch does not fail it. 422 is returned only when NO store in the batch supports the action through the API (today: none of the requested ids has live platform credentials).
Scope: only storefronts your organization owns or operates a brand out of. A storeId that exists but belongs to another organization is INDISTINGUISHABLE from one that does not exist at all — both are simply absent from the response, never mutated.
reason: 'other' requires note.
Request
- storeIdsstring[]
Store.idvalues, 1-100. - reasonstring
Typed reason — required.
'other'requiresnote.Possible values: [closingEarly, problemInRestaurant, outOfItems, tooBusy, other] - notestring
Required when
reasonis'other'; shown where the platform accepts free text. - untilstring<date-time>
Automatic reopen time. Omit for an indefinite pause.
{
"storeIds": [
"<storeIds>"
],
"reason": "closingEarly",
"note": "<note>",
"until": "2026-01-01T00:00:00Z"
}Responses
- statusesobject[]
- storeIdstring
- desiredobject
- statestringPossible values: [open, paused, closedSpecialHours]
- pauseReasonstring
Typed pause reason. Pauses recorded outside this API — or whose free-text reason does not match a typed value — read as
'other', with the operator's original wording folded intopauseNote. Absent for a system-initiated pause with no operator-entered reason at all.Possible values: [closingEarly, problemInRestaurant, outOfItems, tooBusy, other] - pauseNotestring
- pausedUntilstring<date-time>
Absent means the pause is indefinite.
- updatedAtstring<date-time>
- statestring
- observedobject
- statestringPossible values: [online, offline, deactivated, unknown]
- orderableobject
Can a guest place an order right now.
null/absent when the platform does not expose it. - platformReasonstring
The platform's own reason string, where exposed — raw, not the typed
classificationbelow.
- statestring
- discrepancyobject
- hasDiscrepancyobject
- classificationstring
Treat as an OPEN enum — new classifications, including ones outside this list, arrive additively as OneTablet's own taxonomy grows.
- autoRemediableobject
- requiresHumanInterventionobject
No API on either side can fix this — route to a human.
- remediationChannelstringPossible values: [api, merchantPortal, platformSupport]
- lastPolledAtstring<date-time>
When OneTablet last refreshed
observed. Reason about staleness against this before acting. Absent on apauseStores/unpauseStoresresponse, which never re-reads the platform.
About Stores
The places you operate and the brands you operate there.
OneTablet models a restaurant business in three layers, and every other section of this API assumes them. A brand is a menu concept — what a customer sees on a delivery app. A location is a physical address with a kitchen in it. A store is one storefront: a single brand, at a single location, on a single platform — so a location running two brands on three platforms has six stores, each with its own menu, hours and pause state.
The directory reads join on IDS, never on display names: every store carries its location.id and brand.id, and a location carries the id of each brand it runs.
Start here — a location carries the timezone that every schedule, report window and business day elsewhere on this API is interpreted in.
All three reads are org-scoped to the organization your api key resolves to, and all three are reads: nothing here mutates, and nothing here calls out to a delivery platform live (ONE-2618).