New event (June 2026). Born directly in v1 — no v0 shape exists.
order.status_updated fires when the KDS (Kitchen Display System) reports a kitchen status change: preparation started (preparing), the order is ready (ready), it was dispatched (dispatched), or it was cancelled at the kitchen (cancelled).
For the three advance statuses, Fire applies an anti-regression gate (a status never goes backwards: dispatched does not return to ready) and only emits this event when the status genuinely advances. cancelled is the exception — it bypasses the gate and can arrive from any kitchen state. That is why you receive one event per real change — no duplicates, no rollbacks.
Trigger condition
Fire emitsorder.status_updated when either of the following is true:
- The KDS reported a forward kitchen status (
preparing,ready, ordispatched) that passes the anti-regression gate (preparing→ready→dispatched) - The KDS reported
cancelledfor the order (no anti-regression constraint — can arrive from any kitchen state)
What’s in data
This is a lean (thin) payload — unlike order.completed, it does not carry the full order. It carries what you need to act on a status change: the order’s identity, minimal channel / store refs, the fulfillment type, and the kitchen block (the advance + the full journey). It deliberately omits orderLines, payments, taxes, client, device and the delivery address — you already received those in order.completed; match by orderId / externalOrderId and apply the change.
Identity & context
string
Fire’s order UUID — match against the
order.completed you received.string
Human-readable order code.
string
The order’s id in the channel/aggregator — use it to match on their side.
string
Business status of the order (
COMPLETED / CANCELLED). Context — the kitchen journey is parallel.object
code (canonical, always present — e.g. 99) and uid. The human-readable channel name comes from your channel catalog, not from this event.object
Minimal store ref:
code, name, plus account { uid, name } and vendor { uid, name }.object
service.code — DELIVERY or PICKUP. Gives the status its meaning (a ready for delivery vs pickup).The kitchen block
object
The advance that fired the event + the full journey. Distinct from the
kds block (static order info captured at injection).Typical use cases
- Customer order tracking — “your order is ready” or “your order was cancelled” on the app or pickup screen
- Notify the aggregator — tell iFood/Rappi/99food the order is ready for the courier or that it was cancelled at the kitchen
- Kitchen metrics — preparing→ready times per store/station from
history - Cancellation flow — trigger downstream cleanup (release courier, refund, alert ops) when
kitchen.status = "cancelled"
What it does NOT do
- It does not change the order status — except on cancellation. For advance statuses (
preparing,ready,dispatched),data.statusremains"COMPLETED". Whenkitchen.status = "cancelled",data.statuswill be"CANCELLED". - It never goes backwards for advance statuses. If the KDS reports
readyafterdispatched, Fire discards it (anti-regression gate) and emits nothing.cancelledis exempt from this rule. - It does not replace
order.completed. Subscribe to both:order.completedfor the business fact,order.status_updatedfor physical progress.

