Sales order status reference
A sales order carries three independent stored status axes — order, fulfillment, and payment — so any real order reads as a combination of all three at once. For example, SO-DOCS-0001 (customer Blue Bottle Retail, store Main Store) might show Open / Awaiting Tracking / Partially Paid all at the same time, because each axis is derived from a different signal.
Two more status surfaces sit beneath the order: each shipment (SalesOrderFulfillment) has its own status, and each order line has a state derived purely from quantities. A sixth surface — the Can Fulfill list filter — is calculated on demand and never stored.
This page is the lookup for every value in each group — plus the shipment type that sets each shipment's starting status, documented as a supporting sub-section of the shipment-status group. For why an order carries three axes and how each is calculated, see How sales order status works.
The three status axes move independently
SKU.io recomputes the three order-level axes from different inputs, so they change on their own schedule:
| Axis | Derived from | Recomputed when |
|---|---|---|
| Order status | The lifecycle stage you set, plus fulfillment progress | You approve, close, cancel, or revert; or fulfillment reaches a terminal state |
| Fulfillment status | Shipped quantities across lines, shipments, dropship POs, and fulfillment orders | Any shipment line is written, voided, or deleted |
| Payment status | Total captured and total refunded | Any payment or refund is recorded, edited, or deleted |
An order can be Open (order status) while Awaiting Tracking (fulfillment status) and Unpaid (payment status) — three unrelated values that never contradict one another because they answer three different questions.
Order status
Order status is the primary lifecycle and the one axis you set directly. New orders start Draft.
| Value | Meaning | How it's reached |
|---|---|---|
| Draft | Created but not yet confirmed. Holds no stock and isn't in the fulfillment order pipeline. A shipping method isn't required while an order is Draft. | The starting state of every new order (and every duplicate). |
| Reserved | Inventory is committed through allocations but fulfillment is held. In the fulfillment pipeline, but dispatch is blocked until you unreserve. | Approve with Reserve, or a hold condition (metafield, ship-by date, on-hold) keeps it here. |
| Open | Active and approved. Items can be allocated, fulfilled, and invoiced. | Approve the order, or edit a Draft order's status. Fulfillment progress also settles a partially shipped order here. |
| Closed | Finalized. No further fulfillment or changes are expected. | Close by hand, ship in full, over-fulfill, cancel, fully refund, or auto-close a non-product order. |
| Cancelled | Cancelled and finalized. Surfaced through the cancel date; the stored order status is Closed. | Cancel the order (see below). |
There is no separate stored cancelled order status. Cancelling stamps a cancel date and stores the order status as Closed; the list and header then label it Cancelled. This is why a cancelled order also reports as fully fulfilled — it has been finalized, so nothing is left outstanding.
How order status changes:
| Transition | What triggers it | What happens |
|---|---|---|
| Draft → Open | Approving the order (or editing its status) | Commits allocations for unallocated lines, syncs coverages, recomputes fulfillment status, and creates the proforma fulfillment orders. Requires every product line mapped and at least one line. |
| Draft → Reserved | Approving with Reserve | Same as approve, but stamps the reserved date and holds dispatch. |
| Open → Draft | Reverting to draft | Reverses inventory movements and FIFO, clears fulfillment records, resets all three statuses, and deletes the accounting transaction. Blocked while fulfillment status is Awaiting Tracking (remove fulfillments first) and blocked once the order is Closed. |
| Open → Closed | Closing by hand, or automatically on full/over fulfillment, cancel, or full refund | The order is finalized and (for fulfillment-driven closes) the fulfilled date is stamped. |
Closing an order refuses while any line has an active backorder queue, or while any product line is unmapped. Resolve the backorder or map the line first. Cancelling is the way to finalize an order you don't intend to fulfill.
Cancelling runs a chain of side effects: it deletes non-shipped shipments, cancels all active allocations, wipes unfulfilled inventory movements (movements on already-shipped lines are kept for COGS history), stamps the cancelled quantity per line, deletes the accounting transaction, and then closes the order. A Closed order can't be re-approved. See Approve, reserve, and allocate stock and Close, cancel, archive, and delete orders.
Fulfillment status
Fulfillment status is calculated from shipped quantities across the order's lines, shipments, dropship POs, and fulfillment orders. You never type it in — record fulfillments and the status follows. New orders start Unfulfilled.
| Value | Meaning | How it's reached |
|---|---|---|
| Unfulfilled | Nothing is in flight yet. | The starting state; also where a reverted or freshly approved order sits. |
| Partially Fulfilled | Some line quantity has shipped, but not every line is complete. | At least one product line has a shipped, externally fulfilled, or AWD quantity above zero. |
| Fulfilled | Every line has shipped. | All lines reach their processable quantity. Also closes the order and stamps the fulfilled date. |
| Over Fulfilled | A line shipped beyond what the order can absorb. | Any single line ships past its processable quantity (checked per line, so a double-ship on one SKU isn't netted against an unshipped SKU). Also closes the order. |
| Awaiting Tracking | Dispatched, but no tracking is back yet. | A shipment is submitted but not shipped, a dropship PO is created but not received, or a fulfillment order was dispatched to its provider before the shipment record exists. |
| Awaiting Pickup | A Click & Collect order is staged for in-person collection. | A fulfillment order sits at awaiting-pickup. No shipment record is minted until the customer collects. |
| Out of Sync | SKU-side shipments were removed while the sales channel still shows the order as fulfilled. | Deleting SKU shipments on a channel order that the channel already marked shipped. |
SKU.io settles fulfillment status by walking a fixed priority ladder — the first matching rule wins:
1. Amazon FBA (AFN), not cancelled → Fulfilled + Closed (pinned; see note)
2. Channel says partial, not over → Partially Fulfilled (channel pin)
3. Over-fulfilled → Over Fulfilled + Closed
4. Fully fulfilled → Fulfilled + Closed
5. Awaiting pickup → Awaiting Pickup + Open
6. Awaiting tracking → Awaiting Tracking + Open
7. Any line partially shipped → Partially Fulfilled + Open
8. Nothing shipped → Unfulfilled
Amazon FBA (AFN) orders are fulfilled entirely by Amazon and carry no SKU-side shipment records, so they're pinned Fulfilled + Closed rather than reverting to Unfulfilled on a recalculation. Certain channels report their own partial-fulfillment view, which pins the order Partially Fulfilled — unless SKU detects an over-fulfillment, which always wins so the surplus surfaces. See Amazon FBA, MCF, and externally fulfilled orders and How channel orders sync.
Out of Sync isn't part of the ladder above — it's set when SKU shipments are deleted out from under a still-fulfilled channel order, and it clears only through the reset fulfillment status action, never on its own. See Void, restore, or reset a shipment.
The same values appear as the Fulfillment Status column and filter on the orders list. See List columns and filters.
Payment status
Payment status is calculated from the total captured and total refunded on the order, independent of order and fulfillment status. New orders start Unpaid.
| Value | Meaning | How it's reached |
|---|---|---|
| Unpaid | No payment has been received. | Total paid is zero. |
| Partially Paid | Some payment is captured, but less than the order total. | Total paid is above zero but below the order total. |
| Paid | The order is paid in full. | Total paid covers the order total. Stamps the fully paid date. |
| Partially Refunded | A refund exists, but not for the full paid amount. | A refund is recorded that's smaller than the total paid. |
| Refunded | The paid amount has been fully refunded. | The refund fully offsets the payment. Also forces order status to Closed. |
Recording a full refund uniquely also sets order status to Closed. Partial refunds and ordinary payments never touch order status. Separately, a Paid order is treated like a closed order by some edit guards — a fully paid order restricts the same edits a closed one does.
Amount due is the order total minus what has been paid minus any applied store credit. See Record payments and apply store credit.
Shipment status (SalesOrderFulfillment)
Each shipment — one SalesOrderFulfillment, the executed counterpart to a fulfillment order — carries its own status. A shipment's starting status depends on its shipment type (see the next section). These values drive the per-shipment chip on the Fulfillment tab.
| Value | On-screen chip | Meaning |
|---|---|---|
| submitted | Submitted | Handed to a shipping provider and in flight; the provider hasn't confirmed yet. The default for most provider integrations. |
| acknowledged | Acknowledged | The provider accepted the order but hasn't shipped it. |
| picked | Picked | Direct-warehouse workflow intermediate — items are picked. |
| packed | Packed | Direct-warehouse workflow intermediate — items are packed. |
| fulfilled | Fulfilled | Terminal shipped state. Consumes inventory (FIFO layers, movements, fulfillment-order budget). The default for manual and channel-imported shipments. |
| fulfilled_awaiting_info | Awaiting Tracking | Shipped, but tracking details are still pending. The default for Amazon FBA and MCF shipments. |
| awaiting_pickup | Awaiting Pickup | A Click & Collect shipment staged for collection. The default for pickup shipments. |
| canceled | Canceled | Soft-voided. The row is retained for history and is excluded from the fulfilled and submitted quantity totals. |
fulfilled and fulfilled_awaiting_info are the shipped states — they're the two that consume a fulfillment order's line budget and realize inventory. Everything else (submitted, acknowledged, picked, packed, awaiting_pickup) is in flight; canceled is reversed. A canceled shipment is ignored when SKU decides whether the order is fully fulfilled, so voiding and re-recording a shipment never leaves the order stuck open.
Voiding is the soft, reversible way to cancel a shipment (the row survives and flips to canceled); deleting hard-removes it. A shipped carrier shipment normally can't be voided and needs a forced local-only void, whereas manual, pickup, and channel-imported shipments stay voidable even when fulfilled because they're operator-recorded phantoms with no real carrier event. See Void, restore, or reset a shipment and Two-tier fulfillment: intent vs execution.
Shipment type (fulfillment_type)
Every shipment records a type that selects both its starting status and which dispatcher SKU.io uses to hand it off. Any type not called out below starts Submitted.
| Shipment type | Starting status | Notes |
|---|---|---|
| manual | Fulfilled | Operator-recorded shipment; arrives already shipped. |
| sales_channel | Fulfilled | Channel reported the order as already shipped (a phantom import). |
| fba | Awaiting Tracking (fulfilled_awaiting_info) | Amazon FBA / MCF; shipped, tracking pending. |
| pickup | Awaiting Pickup | Click & Collect; no shipment record until collection. |
| shipstation, starshipit, shipmyorders, veracore, shiphero, shipfusion, walmart_wfs, d3, trackstar, odoo_3pl, shippit | Submitted | Provider integrations; dispatched to the carrier or 3PL and awaiting confirmation. |
manual and sales_channel both arrive Fulfilled, but they mean different things: manual is a shipment an operator recorded by hand, while sales_channel is one the sales channel told SKU.io had already shipped. See Fulfill a sales order and Fulfill via Amazon FBA or MCF.
Line fulfillment state
An order line has no status column. Its state is derived entirely from quantities, so a line is "fulfilled" when the shipped-and-accounted quantities cover the outstanding quantity:
fulfilled when
fulfilled + externally_fulfilled + AWD≥quantity − canceled
A non-product line (a charge or financial line) is always treated as fulfilled. These quantity fields together describe where a line stands:
| Field | Meaning |
|---|---|
| quantity | Ordered quantity on the line. |
| fulfilled_quantity | Units shipped through a SKU shipment (clamped at the ordered quantity). |
| submitted_quantity | Units committed to an in-flight shipment (submitted or acknowledged, or picked/packed for direct warehouses) that hasn't shipped or been cancelled — a distinct "Submitted" state between allocated and shipped. |
| externally_fulfilled_quantity | Units shipped outside SKU (for example, Amazon FBA), counted toward fulfilled but with no local inventory movement. |
| canceled_quantity | Units cancelled and no longer expected to ship. Acts as a pseudo-status. |
| unfulfilled_quantity | Ordered minus shipped minus cancelled — what's still outstanding. |
| available_to_fulfill | Outstanding quantity that can ship right now, after subtracting committed and backordered units. |
| remaining_to_fulfill_quantity | Quantity still safe to put on a new shipment line, after subtracting units already on non-cancelled shipments and any pickup awaiting collection. |
| backordered_quantity | Planned allocation with no PO coverage — a true shortage. |
| active_backordered_quantity | Planned plus awaiting-receipt allocations — everything currently on the backorder queue. |
Two flags summarize the backorder picture: has_backorder (a persisted flag) and has_active_backorder (a live check — true when a Planned allocation exists with no purchase-order coverage). Because a line has no status of its own, the UI reads these quantities to show whether a line is unfulfilled, submitted, partially shipped, fulfilled, or backordered.
A line with an active backorder queue keeps the order from closing — see the close guard above. Clear the shortage (allocate stock or receive a covering PO), or cancel, to finalize the order.
For the allocation states behind these numbers, see Inventory allocation and backorders. For managing the lines themselves, see Manage order lines.
The Can Fulfill filter
The Can Fulfill advanced filter is a derived list dimension — it's calculated on demand from line-level fulfillability and is never stored on the order. It only ever considers orders that are Open and not yet fully fulfilled, then groups them by how much of the order can ship from stock right now.
| Filter value | On-screen option | Meaning |
|---|---|---|
| all | All Items | Every fulfillable line can ship from stock, with no active backorder. |
| some | Some Items | Some — but not all — lines can ship (the order has at least two unfulfilled lines, at least one that can ship, and at least one that can't). |
| none | No Items | Nothing on the order can ship from stock right now. |
Each group offers sub-reasons that narrow it by why a line can or can't ship:
| Group | Sub-reasons (as shown) |
|---|---|
| All Items | Was Backordered · Not Backordered · Released by PO |
| Some Items | Was Backordered · Not Backordered · Released by PO |
| No Items | Awaiting Receipt · Needs Sourcing · Sourcing Scheduled |
Find this under the Can Fulfill entry in the orders list's advanced filters. See List columns and filters.