Pause stores
Take one or more storefronts offline, with a typed reason and an optional automatic reopen time. 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.
Safe to retry: this operation changes state but is idempotent.
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
Headers
- x-mealco-tx-idstringoptional
The correlation id for this call, echoed on every response — a 200 exactly as much as a 400, 401 or 500. Quote it when reporting a problem and we can find every log line for the request, in every service it touched. You may also send your own x-mealco-tx-id on the request and we adopt it, so your correlation id becomes ours. Not marked required for one reason: a request whose JSON body is malformed is rejected before it reaches an operation, so no id exists yet and that single response carries neither this header nor the txId field of the error body. Everything that reaches an operation carries it.
- statusesStoreStatus[]
One entry per requested storefront your organization operates that supports pausing through the API, carrying only
storeIdand thedesiredstate just written. Requested ids that are not yours, or not integrated, are omitted.
About Store status
Whether each storefront is actually taking orders — and whether OneTablet and the delivery platform agree about it.
Separate from Stores, which is the identity map: the brands, kitchens and storefronts you operate, which changes when your estate changes. This section is the OPERATIONAL layer on top of it — one read (fetchStoreStatuses), two writes (pauseStores, unpauseStores) and the store.status.changed webhook — all addressed by the Store.id values fetchStores hands you. Same api key, same org scoping, same ids; a different job, and a different route prefix (/management/store-status) so the url says which.
Three things are kept distinct throughout, and conflating them is the mistake this section exists to prevent: desired is what OneTablet is configured to do, observed is what the platform reports, and discrepancy is the classified disagreement between the two.
Org-scoped to the organization your api key resolves to, exactly as the directory reads are.