OneTablet API Documentation

setItemAvailability

POST/management/item-availability/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

application/json
required
  • locationIdstring

    The location (kitchen) to change availability at. Required; absent is 400. Not yours, or not existing, is 404.

  • itemIdstring

    The item to change, by ItemAvailability.itemId. Set exactly one of itemId / sku — both or neither is 400. An item whose brand your organization does not own is 404.

  • 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 is 409, and nothing is written.

  • availableboolean

    The availability to set: true puts the item back in stock, false marks it unavailable ("86'd") at the location. Required; absent is 400.

Responses

200 — OK
  • itemIdstring

    OneTablet's identifier for the item — brand-scoped, stable for that brand's catalogue across every location. What setItemAvailability addresses items by.

    ALWAYS Item.id, whether or not isModifier is set (ONE-2621) — a modifier option is an ordinary Item row, 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

    true when 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.