setItemAvailability
Mark ONE item available or unavailable at ONE kitchen (ONE-2904).
itemId/sku must resolve to an item whose brand this organization owns, and locationId must be one this organization owns or operates a brand out of; anything that does not resolve is a real HTTP error — 404 for an unowned/unknown item or location (indistinguishable by design, same as fetchLocationItems), 400 for a malformed request, 409 for an ambiguous sku. There is no per-pair status: 'failed' result: a failure is never reported inside a 200.
ONE-2904 REVERSED THE PRIOR BULK DESIGN (ONE-2621 determination, ONE-2578): this operation used to accept items[] x scope{locationIds, brandIds} and fan out to every resulting (item, location) pair server-side, reporting per-pair results in a 200. That shape is DELETED. A partner that wants to 86 an item across many kitchens now discovers the scope itself (fetchLocationItems / fetchStores) and calls this once per (item, location), spending its own ONE-2891 rate budget rather than absorbing the fan-out cost, the partial-failure semantics, and the extra internal hop into this service. This IS a breaking change to a published partner contract, explicitly authorized by Dean on 2026-09-09 (ONE-2904) — do not re-litigate it and do not write an override on his behalf.
Request
- locationIdstring
The location (kitchen) to change availability at. Required; absent is
400. Not yours, or not existing, is404. - itemIdstring
The item to change, by
ItemAvailability.itemId. Set exactly one ofitemId/sku— both or neither is400. An item whose brand your organization does not own is404. - skustring
The item to change, by SKU — the alternate key to
itemId; set exactly one of the two. SKUs are not unique: a SKU matching more than one of your items is409, and nothing is written. - availableboolean
The availability to set:
trueputs the item back in stock,falsemarks it unavailable ("86'd") at the location. Required; absent is400.
{
"locationId": "00000000-0000-0000-0000-000000000000",
"itemId": "00000000-0000-0000-0000-000000000000",
"sku": "<sku>",
"available": true
}Responses
- itemIdstring
OneTablet's identifier for the item — brand-scoped, stable for that brand's catalogue across every location. What
setItemAvailabilityaddresses items by.ALWAYS
Item.id, whether or notisModifieris set (ONE-2621) — a modifier option is an ordinaryItemrow, and this is the SAME id space the write path consumes (StockItem.itemId). The published schema has no second id field, so there is nowhere else for a different id to go. - skustring
Stock-keeping unit. NOT unique — an alternate lookup key on
setItemAvailability. - namestring
The item's display name.
- isModifierboolean
truewhen this item is configured as a modifier option (e.g. a side or topping added to another item) rather than a standalone menu item. Availability works identically for both. - availableboolean
Current availability at the requested location.
About Item availability
Item availability ("86-ing") — mark one item available or unavailable at one kitchen (ONE-2621, single-item shape per ONE-2904).
fetchLocationItems and setItemAvailability are ONE indivisible unit: the write is useless without the discovery read, because a partner cannot know OneTablet's item ids in advance.
NOT IMPLEMENTED ON THIS API: replay via Idempotency-Key (the published contract's parameter promises it, and nothing on the platform implements idempotent replay today; a retried setItemAvailability call re-applies rather than de-duplicating). ONE-2621 research and decision 3.