Skip to main content
Sends the next fulfillment status for a placed order. Use the status labels configured for this merchant (for example PREPARING or DELIVERED). Fire spark does not accept a fixed kitchen enum.
Requires an access token with the orders:write scope. See Token to obtain a token.

How this fits the order flow

  1. After checkout, Fire spark sends a webhook when the order reaches a status you subscribed to.
  2. Your POS creates the ticket when order.status.changed arrives with data.status injecting (or whichever status you use for handoff).
  3. Each later kitchen event should PATCH the next fulfillment status. Fire spark updates the order and may send another webhook.
  4. The call is asynchronous. It claims the advance while the fulfillment is WAITING and returns without waiting for the next node, so you can call it from the webhook handler. The order in the response can still be the snapshot from before this advance. A 409 means the row was not WAITING.

When to call this endpoint

The labels below are examples. Use the fulfillment statuses configured for your merchant.
An order can be in more than one fulfillment status at once (for example kitchen and delivery). Send the next status for the work you are advancing. Other in-progress statuses stay until you update them.

Path parameters

Request body

Mark the order paid

While the order is in PAYING, send fulfillment_status PAID when your POS collected the payment. Fire spark marks the tenders of that paying step as paid (one capture per tender, as if each one were marked collected). The order advances to PAID only once every tender of the step is settled. A reserved reward counts as settled; Fire spark confirms reward redemptions.
  • Without tenders: every tender the paying step is still waiting for is marked paid, and the order advances. This is the all-at-once path.
  • With tenders, and the step has one tender: that tender is marked paid when completed is true, and the order advances. Same behavior as before.
  • With tenders, and the step has more than one tender: only items with completed: true change. Tenders you leave out stay as they are. The order does not advance until every tender of the step is in PAID, counting the tenders in this call. Repeat the same call for each tender. The last one advances the order. Each earlier call returns 200, not an error.
Only IDLE or PENDING tenders that charge money can be marked. A tender that is already PAID is not captured again. An unknown id, or an id that is not on this order, returns 404 TENDER_NOT_FOUND. While tenders are still pending, the response includes the order in data plus:
pendingTenders is a count. One tender left uses “1 tender still pending”. When the call that finishes the set advances the order, the same fields come back with pendingTenders 0, transitioned true, and message Tender updated. Order transitioned to PAID. A tender-only update does not send an order webhook or a realtime order event. Those fire only after the order actually advances, once that step has finished its own work.
Repeating the same request is safe: each tender attempt is captured once.

Response

Returns the current order in data. The advance is asynchronous, so this body can still be the snapshot from before the status you just sent.
Pair this endpoint with order webhooks: the webhook delivers the order when it reaches a subscribed status; this endpoint is how your POS reports the rest of the kitchen path. Do not send a terminal status (FULFILLED, VOIDED, REVERSED, REFUNDED) — those nodes are entered automatically. After the last kitchen or delivery status (for example DELIVERED), Fire spark auto-enters FULFILLED. If an awaited callback exhausts retries, it auto-enters VOIDED (unpaid) or REVERSED (paid). Cancel and refund from the dashboard still reach those terminals.

Error responses