All API reference pages

Kitchen operations resources

The day's work: forecasting, batch production, tasks, and the storeroom.

Forecasts and production

GET  /orgs/{orgId}/forecasts                       — covers per site × date × day part
POST /orgs/{orgId}/forecasts
GET  /orgs/{orgId}/production-runs?siteId&date
POST /orgs/{orgId}/production-runs/generate        — explode the effective menu × forecast
POST /orgs/{orgId}/production-runs                 — ad-hoc run
GET  /orgs/{orgId}/production-runs/{id}/card       — the batch card (scaled recipe)
POST /orgs/{orgId}/production-runs/{id}/status     — planned|prepped|in_progress|holding|done
POST /orgs/{orgId}/production-runs/{id}/events     — temp_check, note, portioned, …
POST /orgs/{orgId}/production-runs/{id}/handoff    — pass to a station
POST /orgs/{orgId}/production-runs/requisition     — draft a requisition from a day's runs
POST /orgs/{orgId}/labels                          — batch-generate prep/use-by/allergen labels

Runs generated from the menu are batch-scaled from the recipe's yield to the forecast. Status writes append to the run's event stream, which is what wallboards render live. Completed (done) runs with a recipe feed theoretical usage into cost variance.

Tasks and routines

GET  /orgs/{orgId}/routines
POST /orgs/{orgId}/routines                        — recurrence rule + items
POST /orgs/{orgId}/routines/{id}/run-now
GET  /orgs/{orgId}/tasks?siteId&status&…
POST /orgs/{orgId}/tasks
GET  /orgs/{orgId}/tasks/{id}                      — resolves photos, linked docs, assignee
POST /orgs/{orgId}/tasks/{id}/complete             — with evidence (scan/photo/temp/note)
POST /orgs/{orgId}/tasks/{id}/reassign             — to a user or a position
POST /orgs/{orgId}/tasks/{id}/photos               — attach; DELETE …/photos/{mediaId}
PUT  /orgs/{orgId}/tasks/{id}/docs                 — link guide documents
GET  /orgs/{orgId}/scan/{tagCode}                  — QR scan hub: context actions for a tag

A task row:

{
  "id": "d93722c6-b167-4f89-9a36-8d07927fb0a2",
  "siteId": "9b80fa65-95e7-4e33-b3ca-846185d84266",
  "title": "Descale steam table",
  "kind": "maintenance",
  "dueAt": "2026-07-09 14:00:00+00",
  "priority": "medium",
  "status": "missed",
  "requiresScan": false,
  "requiresPhoto": false,
  "requiresTemp": false,
  "linkedDocIds": [],
  "attachmentMediaIds": [],
  "source": "manual"
}

source may be manual, a routine, a huddle action, an audit finding, or a sensor alert — one board, many origins. Missed required tasks raise alerts.

Supply chain

GET/POST /orgs/{orgId}/storage-locations           (+ PUT /{id})
GET/POST /orgs/{orgId}/inventory-items             (+ PUT /{id})
GET      /orgs/{orgId}/stock                       — materialized on-hand
POST     /orgs/{orgId}/stock/adjust                — ledger write
GET      /orgs/{orgId}/stock/txns                  — the ledger
GET      /orgs/{orgId}/lots                        — received lots with expiry
GET/POST /orgs/{orgId}/counts                      — count sheets; PUT /{id}/lines, POST /{id}/close
GET/POST /orgs/{orgId}/waste-logs
GET/POST /orgs/{orgId}/vendors                     (+ PUT /{id}; GET/POST /{id}/items)
POST     /orgs/{orgId}/vendors/{id}/import-guide   — CSV order-guide import
GET/POST /orgs/{orgId}/purchase-orders             (+ GET /{id}, POST /{id}/submit, POST /{id}/receive)
GET      /orgs/{orgId}/order-suggestions           — items at/below par or reorder point
GET/POST /orgs/{orgId}/requisitions                (+ POST /{id}/{transition}, /{id}/fulfill, /{id}/to-po)

Receiving a purchase order writes ledger transactions, creates lots, and updates moving-average costs. Requisition transitions: submit (draft → submitted), approve (submitted → approved), cancel; fulfillment requires an approved requisition.

Order lists (Pro+)

POST  /orgs/{orgId}/order-lists/generate           — {siteId, from, to, basis: par|forecast|both, splitByVendor}
GET   /orgs/{orgId}/order-lists                    (+ GET /{id})
PATCH /orgs/{orgId}/order-lists/{id}/lines/{lineId} — edit qty/vendor/include; reprices
POST  /orgs/{orgId}/order-lists/{id}/status        — mark ordered → drafts POs per vendor
GET   /orgs/{orgId}/order-lists/{id}/export        — CSV

Generation rounds up to whole vendor packs and costs at moving-average price; each line carries the needed / on-hand / par math it was computed from.