Fulfill a sales order
Fulfilling an order records the shipment that sends stock to your customer: it consumes allocated inventory, writes the tracking back to the sales channel, and moves the order toward closed. This guide covers recording a shipment by hand, handing an order to a carrier or 3PL, staging items for in-store pickup, and fulfilling many orders at once — plus what happens when you ship part of an order or more than was ordered.
- Fulfillment Order (FO) — the planned, per-warehouse intent to ship. An order that draws from two warehouses has two fulfillment orders. Dispatching and pickup act on the fulfillment order.
- Shipment (SOF) — the executed shipment record that carries the inventory movement and the tracking number. Recording a fulfillment or a provider shipping creates one.
- Allocation — stock committed to a line at a warehouse. You can only ship what's allocated. See Approve, reserve, and allocate stock.
Why two objects? Read Two-tier fulfillment: intent vs execution.
Before you begin
| Requirement | Why it's needed |
|---|---|
Fulfill sales orders permission (sales_orders.fulfill) | The Fulfill, Dispatch, and Mark for Pickup actions only appear when you have it. |
| The order is Open (approved) | You can't fulfill a Draft or a Closed order. Approve it first — see Approve, reserve, and allocate stock. A Reserved order is fulfillable; recording its first shipment flips it to Open. |
| Allocated stock on the lines | You ship what's committed to each line at the chosen warehouse. A line with no allocation can't be selected ("No stock allocated to this line at this warehouse"). |
| Every product line mapped to a product | Unmapped channel lines block fulfillment. Link them first — see Map an unmatched line. |
| The order isn't on hold | A held order can't ship before its hold date. |
The examples below use order SO-DOCS-0001 (customer Blue Bottle Retail, warehouse Main Warehouse) with the products Stainless Water Bottle 750ml, Insulated Tumbler 500ml, and Reusable Straw 4-Pack.
Record a shipment from a warehouse
Use this when you ship the order — from your own warehouse with manual tracking, or to record a shipment that already went out. Each warehouse on the order fulfills separately.
- Open the order and click Fulfill at the top of the page. This jumps you to the Fulfillment tab. (You can also open the Fulfillment tab directly.)
- Find the warehouse's fulfillment card — for example Main Warehouse — and click Fulfill 3/3 (the button shows ready / total units). The Fulfill Items from Main Warehouse dialog opens.
- In Fulfillment Provider, keep Manual Fulfillment to record a shipment you're handling yourself. The helper text confirms this: "Records a shipment that has already happened — this does not submit to the carrier." (To hand the order to a carrier instead, see Dispatch to a shipping provider.)
- Set the Shipping Method. Pick a saved method, or type a custom one and press Enter. The order's own method is pinned to the top with a From order chip.
- Set the Shipment Date. It defaults to today. A date is required for manual fulfillment.
- For manual fulfillment, enter a Tracking Number if you have one.
- In Items Available for Fulfillment, review each line and set its Fulfill quantity. Lines with allocated stock start selected at their full available quantity. Clear a line's checkbox to leave it out, or lower its Fulfill number to ship part of it.
- Click Fulfill (the button reads Create Fulfillment when a provider other than manual is selected).
What you'll see: the shipment is recorded, the dialog closes with "Fulfillment created successfully," and the order refreshes. Each fulfilled line's shipped count goes up, a shipment appears on the Fulfillment tab, and the tracking is written back to the sales channel. If every line is now fully shipped, the order closes; if only some units went out, it stays Open and Partially Fulfilled (see Ship part of an order now).
The items table shows, per line: Available (free stock at this warehouse), Reserved (held across all orders here), On Hand, In Transit, Ordered, This Order (reserved for this order), Remaining (still to fulfill after in-progress shipments), and Fulfill (what you're shipping now). You can't enter more than a line's committed, still-to-fulfill quantity — the field snaps back and flashes red if you try.
If a line is a lot-tracked product, a lot panel opens beneath it — pick the lots (or accept the suggested FEFO order) so the quantities add up to what you're shipping. If the warehouse uses bin locations, a Pick From panel lets you confirm the source bins. Both must reconcile to the fulfill quantity before the Fulfill button enables; hover the disabled button to see what's outstanding.
Fulfill everything in one step
The Fulfill Items dialog pre-selects every line that has stock and pre-fills each with its full remaining quantity, so recording a complete shipment is a matter of opening it and clicking Fulfill. To fully fulfill several orders at once, use the list bulk action — see Fulfill many orders from the list.
Ship part of an order now
You don't have to ship everything at once. Ship the units you have and come back for the rest — the order tracks the balance for you.
- Ship fewer units of a line, or leave a line out entirely. Lower its Fulfill quantity, or clear its checkbox, then fulfill. The order lands at Partially Fulfilled and stays Open so you can fulfill the remainder later.
- Ship the remainder later. Reopen the Fulfill Items dialog whenever more stock is allocated and fulfill the outstanding quantity. Repeat until the order is complete.
- Split across shipments or warehouses. To ship one fulfillment order in more than one parcel, or to move part of a line to another warehouse, use Split and Move on the fulfillment card — see Split, move, and merge fulfillments.
A partially fulfilled order sits at Open / Partially Fulfilled — never closed — until the last unit ships. For how these statuses are derived, see How sales order status works. For how each shipment consumes stock and realizes cost, see How fulfilling moves inventory and realizes COGS.
If the order came from a sales channel and the channel ships part of it — rather than you shipping from SKU.io — SKU.io follows the channel's lead. When the linked channel order reports itself as partially fulfilled, SKU.io pins the order to Partially Fulfilled from that authoritative status instead of inferring it from line quantities. The one exception is an over-shipment: if the channel reports more units shipped than were ordered, that surfaces as Over Fulfilled rather than being masked by the pin.
For some channels, SKU.io also splits the un-shipped remainder onto its own new, operator-dispatchable fulfillment order and trims the original down to exactly what the channel shipped — so the balance becomes a clean fulfillment order you can dispatch or fulfill yourself. See How channel orders sync.
Dispatch to a shipping provider or 3PL
When a warehouse routes to a carrier or 3PL — for example Starshipit, ShipStation, ShipHero, Trackstar, Shipfusion, Veracore, ShipMyOrders, D3, Walmart WFS, Shippit, or Odoo 3PL, among others — you hand the fulfillment order to the provider instead of recording the shipment yourself. The provider picks, packs, and ships — then reports the shipment and tracking back to SKU.io.
There are two entry points:
- One fulfillment order: on the warehouse card, click the Submit to button, which names the warehouse's provider (for example, Submit to Starshipit). Review the recap in the dialog that opens and confirm.
- All ready units at a warehouse: open the warehouse card's overflow (⋮) menu and click Dispatch all ready. The Dispatch Fulfillment dialog lists what will go and, for Amazon MCF, lets you pick a shipping speed. Click Dispatch Order.
What you'll see: SKU.io submits the fulfillment order and reports how many were dispatched. Because the provider ships on its own schedule, no shipment record is created yet — the order sits at Submitted — awaiting shipment (fulfillment status Awaiting Tracking) until the provider confirms it shipped, at which point the shipment and tracking appear automatically.
If some lines at the warehouse aren't ready (insufficient stock), the dialog warns you: those items are skipped and stay pending, and only the ready units dispatch. You can dispatch the rest once they're allocated.
A second dispatch for the same order while one is already running is refused with a "dispatch is in progress" message (HTTP 409). Wait a moment and retry. If provider dispatch is turned off for your account, the action is replaced by a disabled Dispatch Disabled chip.
To dispatch many orders from the list at once — with override switches for out-of-sync orders, unmapped shipping methods, unmapped lines, manual-provider warehouses, and partial dispatch — see Bulk actions on the sales orders list. Editing carrier, service, and rates before dispatch is covered in Split, move, and merge fulfillments.
Mark items for in-store pickup (Click & Collect)
When a customer collects in person, stage the order for pickup instead of shipping it.
- On the Fulfillment tab, open the warehouse card's overflow (⋮) menu and click Mark for pickup.
- Choose the units to stage. You can mark part of the order and ship the rest normally.
- Optionally set an expected pickup date and add a note.
- Confirm.
What you'll see: the fulfillment order parks at Awaiting Pickup and the order's fulfillment status becomes Awaiting Pickup. No shipment is recorded yet — the executed shipment is only created when the customer collects.
- When the customer collects, open the fulfillment card and click Mark as Picked Up. This records the shipment and consumes the stock.
- To undo staging before collection, use Unmark as Picked Up.
Fulfill many orders from the list
To fully fulfill a batch of orders in one action, use the sales orders list rather than opening each order.
- Go to Orders → Sales Orders.
- Select the orders to fulfill (or switch the scope toggle to All Filtered to act on every order matching your current filters).
- In the bulk actions bar, choose Fulfill.
What you'll see: SKU.io fully fulfills each eligible order and reports how many of the total succeeded. If some can't be fulfilled — for example, not enough stock, or unmapped lines — you get a per-order warning naming the ones that were skipped, and the rest still go through. For the full bulk toolbar, see Bulk actions on the sales orders list.
When fulfillment is blocked or over-ships
SKU.io guards against shipping stock you don't have and against shipping more than was ordered.
You can't enter a Fulfill quantity above a line's remaining amount — the dialog blocks it, and the back end rejects a fulfillment that would push a line past what's left to fulfill. If an order does end up over-fulfilled (for example, a channel reports more shipped than ordered), that state is surfaced deliberately — the order is marked Over Fulfilled and closed rather than hidden. Short-shipping has no such guard: shipping fewer units than ordered leaves the order Partially Fulfilled and open. See the status reference.
If the order's allocations don't cover what you're trying to ship, SKU.io returns the shortfall (which SKUs are short, and by how much) and records a note on the order instead of shipping. Allocate more stock — see Approve, reserve, and allocate stock — then fulfill again. A genuine out-of-stock or inventory-integrity problem is reported with the affected SKU.
If a shipping provider is slow to respond, the fulfillment is queued and processed in the background rather than failing — you'll be told it's being processed.
After a line has a shipment at a warehouse, you can't change that line's warehouse — the assignment is frozen so the inventory movement stays consistent. See Warehouse routing and the warehouse lock.
Next steps
- Split, move, and merge fulfillments — reshape the shipment plan: edit carrier and rates, split, move, or merge.
- Void, restore, or reset a shipment — undo a shipment or fix an out-of-sync status.
- Create a dropship request — have a supplier ship directly to the customer.
- Fulfill via Amazon FBA or MCF — ship from Amazon's warehouses.
- Generate invoices, packing slips, and accounting — print for the box and post the sale.
- Two-tier fulfillment: intent vs execution — how fulfillment orders and shipments relate.