Skip to main content

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:

AxisDerived fromRecomputed when
Order statusThe lifecycle stage you set, plus fulfillment progressYou approve, close, cancel, or revert; or fulfillment reaches a terminal state
Fulfillment statusShipped quantities across lines, shipments, dropship POs, and fulfillment ordersAny shipment line is written, voided, or deleted
Payment statusTotal captured and total refundedAny 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.

ValueMeaningHow it's reached
DraftCreated 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).
ReservedInventory 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.
OpenActive 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.
ClosedFinalized. 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.
CancelledCancelled and finalized. Surfaced through the cancel date; the stored order status is Closed.Cancel the order (see below).
Cancelled is a stored Closed plus a cancel date

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:

TransitionWhat triggers itWhat happens
Draft → OpenApproving 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 → ReservedApproving with ReserveSame as approve, but stamps the reserved date and holds dispatch.
Open → DraftReverting to draftReverses 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 → ClosedClosing by hand, or automatically on full/over fulfillment, cancel, or full refundThe order is finalized and (for fulfillment-driven closes) the fulfilled date is stamped.
Close is blocked while backorders or unmapped lines remain

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.

ValueMeaningHow it's reached
UnfulfilledNothing is in flight yet.The starting state; also where a reverted or freshly approved order sits.
Partially FulfilledSome 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.
FulfilledEvery line has shipped.All lines reach their processable quantity. Also closes the order and stamps the fulfilled date.
Over FulfilledA 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 TrackingDispatched, 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 PickupA 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 SyncSKU-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 and channel orders can override the ladder

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.

ValueMeaningHow it's reached
UnpaidNo payment has been received.Total paid is zero.
Partially PaidSome payment is captured, but less than the order total.Total paid is above zero but below the order total.
PaidThe order is paid in full.Total paid covers the order total. Stamps the fully paid date.
Partially RefundedA refund exists, but not for the full paid amount.A refund is recorded that's smaller than the total paid.
RefundedThe paid amount has been fully refunded.The refund fully offsets the payment. Also forces order status to Closed.
A full refund is the one payment event that closes the order

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.

ValueOn-screen chipMeaning
submittedSubmittedHanded to a shipping provider and in flight; the provider hasn't confirmed yet. The default for most provider integrations.
acknowledgedAcknowledgedThe provider accepted the order but hasn't shipped it.
pickedPickedDirect-warehouse workflow intermediate — items are picked.
packedPackedDirect-warehouse workflow intermediate — items are packed.
fulfilledFulfilledTerminal shipped state. Consumes inventory (FIFO layers, movements, fulfillment-order budget). The default for manual and channel-imported shipments.
fulfilled_awaiting_infoAwaiting TrackingShipped, but tracking details are still pending. The default for Amazon FBA and MCF shipments.
awaiting_pickupAwaiting PickupA Click & Collect shipment staged for collection. The default for pickup shipments.
canceledCanceledSoft-voided. The row is retained for history and is excluded from the fulfilled and submitted quantity totals.
Only two statuses count as "shipped"

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 typeStarting statusNotes
manualFulfilledOperator-recorded shipment; arrives already shipped.
sales_channelFulfilledChannel reported the order as already shipped (a phantom import).
fbaAwaiting Tracking (fulfilled_awaiting_info)Amazon FBA / MCF; shipped, tracking pending.
pickupAwaiting PickupClick & Collect; no shipment record until collection.
shipstation, starshipit, shipmyorders, veracore, shiphero, shipfusion, walmart_wfs, d3, trackstar, odoo_3pl, shippitSubmittedProvider 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 + AWDquantity − canceled

A non-product line (a charge or financial line) is always treated as fulfilled. These quantity fields together describe where a line stands:

FieldMeaning
quantityOrdered quantity on the line.
fulfilled_quantityUnits shipped through a SKU shipment (clamped at the ordered quantity).
submitted_quantityUnits 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_quantityUnits shipped outside SKU (for example, Amazon FBA), counted toward fulfilled but with no local inventory movement.
canceled_quantityUnits cancelled and no longer expected to ship. Acts as a pseudo-status.
unfulfilled_quantityOrdered minus shipped minus cancelled — what's still outstanding.
available_to_fulfillOutstanding quantity that can ship right now, after subtracting committed and backordered units.
remaining_to_fulfill_quantityQuantity still safe to put on a new shipment line, after subtracting units already on non-cancelled shipments and any pickup awaiting collection.
backordered_quantityPlanned allocation with no PO coverage — a true shortage.
active_backordered_quantityPlanned 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.

Active backorders on a line block the whole order from closing

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 valueOn-screen optionMeaning
allAll ItemsEvery fulfillable line can ship from stock, with no active backorder.
someSome ItemsSome — 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).
noneNo ItemsNothing 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:

GroupSub-reasons (as shown)
All ItemsWas Backordered · Not Backordered · Released by PO
Some ItemsWas Backordered · Not Backordered · Released by PO
No ItemsAwaiting Receipt · Needs Sourcing · Sourcing Scheduled

Find this under the Can Fulfill entry in the orders list's advanced filters. See List columns and filters.

Next steps

Last verified: