Skip to main content

Approve, reserve, and allocate stock

Every sales order starts as a Draft — a working copy that holds no stock and can't ship. Approving it moves the order to Open, the active state where SKU.io claims inventory for each line and the order becomes fulfillable. From there you can fine-tune what's committed: allocate on-hand stock to a line, reserve an Open order to hold its stock without letting it ship, or unallocate a line to free its stock for other orders. This guide covers all of those, one at a time and in bulk.

A few terms used on this page
  • Allocation — the record that commits stock (or backordered demand) to a specific order line. Approving an order creates one allocation per line; allocating, reserving, and unallocating adjust them. Allocations are the source of truth for what's claimed — not inventory movements, which are written later at fulfillment.
  • Backorder — demand on a line that isn't covered by on-hand stock. When you allocate more units than are available, the shortfall is backordered at that warehouse until stock arrives. See Inventory allocation and backorders.
  • Reserved — an order status that holds allocated stock but blocks fulfillment, so nothing ships by accident. It's separate from allocating stock to a line.

Before you begin

RequirementWhy it's needed
Approve sales orders permissionThe Approve button and the list's bulk Approve action only appear with it.
Update sales orders permissionReserve, Unreserve, and the per-line and bulk Allocate / Unallocate actions require it.
At least one line itemAn order with no lines can't be approved — the Approve button stays disabled with the tooltip "Add at least one line item before approving."
All products mappedEvery line must resolve to a product. Approval is a no-op while any line is unmapped — map it first (see Manage order lines).
The order isn't closedClosed and cancelled orders can't be re-approved.
tip

The examples below use SO-DOCS-0001 (customer Blue Bottle Retail, warehouse Main Warehouse) so you can follow along.

Approve a sales order

Approving takes a draft to Open and commits inventory to its lines.

  1. Go to Orders → Sales Orders.
  2. Open the order you want to approve — for example, SO-DOCS-0001.
  3. Click Approve in the order header.

What you'll see: the order status changes from Draft to Open. Behind that single click, SKU.io — in one transaction — creates an allocation for every unallocated line, runs warehouse routing so each line knows where it will ship from, recomputes the fulfillment status, caches the order's currency exchange rate, and prepares a per-warehouse fulfillment plan. The order is now fulfillable. For what happens next, see Fulfill a sales order.

Approving from the Fulfillment tab

If you open a draft order's Fulfillment tab, a banner reads "This order is in draft status and must be approved before fulfilling or reserving inventory." with an Approve Order button that does the same thing as Approve in the header.

What allocation does at approval

Each line's allocation covers as much of its quantity as on-hand stock allows. Any shortfall becomes a backorder on that line, so the order can still go Open and ship the units you do have. Non-product lines (charges, shipping) and lines routed to an Amazon FBA warehouse don't consume local stock and are skipped. The full model — Planned, Awaiting Receipt, Allocated, Fulfilled, Cancelled — is explained in Inventory allocation and backorders.

When approval does nothing

Approval is intentionally a no-op (not an error) when the order is closed, has an unmapped line, or has no lines. Nothing changes and the order stays where it was — fix the blocking condition, then approve again.

Re-approving an order only re-allocates released lines

If you revert an order to draft and approve it again, only lines whose allocations were fully Cancelled by the revert are allocated afresh. Lines that still hold live allocations are left as-is, so re-approving won't silently double-commit stock.

Approve several orders at once

  1. Go to Orders → Sales Orders.
  2. Select orders with their checkboxes, or switch the scope toggle to All to act on every order matching your current filters.
  3. In the bulk actions bar, click Approve.

What you'll see: orders that can be approved move to Open. If some can't (a closed order, an unmapped line, an empty order), SKU.io approves the rest and reports how many succeeded out of the total. If none succeed, the action returns an error and nothing changes.

Reserve or unreserve an order

Reserving an Open order holds its allocated stock but stops it from shipping — useful when you want to guarantee inventory for a customer without releasing the order to the warehouse yet. Reserved is a distinct order status, not a per-line action.

  1. Open an Open order.
  2. In the order header's More menu, click Reserve Inventory ("Hold inventory but prevent fulfillment").

What you'll see: the status changes from Open to Reserved, the reservation timestamp is stamped, and a confirmation reads "Inventory reserved — fulfillment is on hold." The order keeps its allocations but is excluded from fulfillment.

To release the hold:

  1. Open the Reserved order.
  2. In the More menu, click Unreserve ("Release hold and allow fulfillment").

What you'll see: the status returns to Open, a confirmation reads "Order unreserved — fulfillment enabled," and the order can ship again.

Put an order on hold

SKU.io holds an order in two independent ways, and they solve different problems:

  • A Hold Until date — a "don't ship before" date you set on any order. The order keeps its current status (it can even be Open), but it can't be fulfilled until that date passes. Use it for preorders or a customer-requested ship window.
  • Reserved status — holds the order's allocated stock and blocks fulfillment outright (covered in Reserve or unreserve an order above). A manually reserved order stays reserved until you release it, but an order synced from Shopify can be reserved on a schedule that opens itself automatically — see Reserved orders that open on a schedule below.

Set a Hold Until date

  1. Open the order and edit its header (see View and edit a sales order).
  2. Set the Hold Until date field to the earliest date the order may ship. A caption under the field reads "Order will not ship before this date."
  3. Save the order.

What you'll see: the order's Hold Until field shows the date, and while that date is in the future a Held chip appears beside it (tooltip "Order is held — it will not ship before this date"). In the Sales Orders list, the Hold Until Date column shows the date and the Held advanced filter isolates orders that are currently held — see List columns and filters.

A held order can't ship until its date arrives. Both single and bulk fulfillment refuse it — the message names the hold-until date and reads "…cannot be fulfilled before then." The Hold Until date is separate from the order status, so an Open order with a future Hold Until date is fully approved and allocated yet still can't be dispatched. You can also set Hold Until when importing — the hold_until_date column is the "earliest date the order is allowed to ship" (see Import sales orders).

There is no separate free-text reason field for a manual hold. If you need to record why an order is held, add an order note.

Release a Hold Until date

Edit the order and clear the Hold Until date field (it's clearable). Once the field is empty — or once the date passes on its own — the order is no longer held and can be fulfilled.

Reserved orders that open on a schedule

For an order synced from Shopify, being Reserved can be automatic and time-bound. SKU.io derives a hold reason, and where there's a known release moment an opens-at time, from the Shopify integration's settings and the order's metafields — you don't set these by hand. The Sales Orders list surfaces them on the order's status cell:

  • Open delay — the integration's open-delay setting keeps a new order Reserved for a set number of minutes after Shopify processed it. The status cell shows a countdown (tooltip "Held by open delay setting — order will automatically open when the timer expires.").
  • Hold-until date — a Shopify hold-until-date metafield holds the order until that date. The status cell counts down to it (tooltip "Held until the hold-until date — order will automatically open when the date is reached.").
  • On hold — a Shopify hold metafield (or a native Shopify hold) holds the order with no scheduled release. The status cell shows an On Hold badge (tooltip "This order is on hold and will not open automatically. It must be released manually or by a metafield update.").

When the open delay elapses or the hold-until date is reached, SKU.io automatically opens the order and dispatches its fulfillment — no action from you. An On Hold order won't open on its own: release it by unreserving it, or by clearing the hold metafield on the Shopify side. For how these orders flow in from the channel, see How channel orders sync.

Allocate stock to a line

When a line is routed but holds no reservation — for example, a channel order that imported without on-hand coverage — it appears under Unallocated — Needs Allocation at the top of the order's Fulfillment tab. Allocating it runs warehouse routing and reserves stock.

  1. Open the order's Fulfillment tab.
  2. Find the line under Unallocated — Needs Allocation and click Allocate.
  3. In the Allocate line dialog, review the routing suggestion — SKU.io names the warehouse its rules chose and why. Change Allocate from to a different warehouse if you need to.
  4. For a multi-unit line, distribute the quantity across warehouses in the Allocate column until every unit is assigned (the running total turns green at "All units assigned").
  5. Click Allocate.

What you'll see: the line's stock is reserved at the chosen warehouses and it moves out of the unallocated list. If you assign more units than a warehouse has on hand, the dialog warns that the excess "will be backordered there until stock arrives" — the allocation still succeeds, and the shortfall waits in the backorder queue. Warehouse routing is described in Warehouse routing and the warehouse lock.

Reserve or unallocate a line

On the Fulfillment tab you can also adjust a single line's committed quantity — reserve more on-hand units to it, or release what it holds. Reserving to a line uses the Reserve Items dialog; releasing uses Unallocate (or the Unallocate Items dialog for a partial amount).

  • Reserve commits more available stock to the line at its warehouse.
  • Unallocate releases the line's reservation, returning that stock to available inventory. A line reserved only against incoming stock (a backorder) shows Unallocate directly.
You can't unallocate a line that's already dispatched

If a line's inventory backs a fulfillment order that's already been submitted to a shipping provider or 3PL, Unallocate is refused — that stock is load-bearing for an order the carrier already has. Recall the fulfillment order from the provider first (see Split, move, and merge fulfillments). This mirrors the warehouse lock.

Channel lines that are out of sync can't be reserved by hand

A sales-channel line flagged as fulfillment-out-of-sync rejects a manual Reserve with a message that stock "will be automatically allocated when sufficient inventory is available." The inventory pipeline handles these lines on its own once stock arrives.

Releasing stock can free waiting backorders

When you unallocate a line, the freed units may be enough to cover other orders that are backordered for the same product. If so, an Eligible Backorders — Release Now? dialog lists those planned allocations with their priority and quantity.

  • Select the ones to fill and click Release Selected to assign the freed stock and their FIFO layers immediately.
  • Click Skip for Now to leave them pending — they auto-release on the next inventory arrival or manual sweep.

Backorder release order is FIFO by priority; see Inventory allocation and backorders.

Allocate or unallocate in bulk

You can allocate or release stock across many orders from the list.

  1. Go to Orders → Sales Orders.
  2. Select orders with their checkboxes, or set the scope toggle to All for the whole filtered set.
  3. In the bulk actions menu, click Allocate or Unallocate.
  4. In the confirmation dialog, review the eligibility summary — chips show how many orders are fully eligible, partially eligible, and not eligible, plus the total units to be allocated or released.
  5. Confirm to start the job.

What you'll see: the action runs as a background tracked job — track its progress in the job tray. Bulk Unallocate skips lines with any fulfillment activity and only reverses active allocations (Planned, Awaiting Receipt, Allocated); allocations already Fulfilled or Cancelled are left untouched.

Next steps

Last verified: