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.