What is a fulfillment order in Shopify?
A fulfillment order is Shopify's record of what has to be fulfilled, by which location, for one order. The order is what the customer bought, and the fulfillment order is the work, so one order can have several, one per assigned location. Apps and the admin act on fulfillment orders, not on the order itself.
Order, fulfillment order, fulfillment
Three records, three jobs. Confusing them is what makes multi location shipping look broken.
| Record | What it holds | Who creates it |
|---|---|---|
| Order | What the customer bought, paid and where it goes | The checkout |
| Fulfillment order | Which line items, at which assigned location, in what state | Shopify, from routing and inventory |
| Fulfillment | The shipment: items, tracking number, carrier | You or an app, against a fulfillment order |
Tracking lives on the fulfillment, which is why a split order carries more than one number.
The statuses a fulfillment order can hold
Shopify's API exposes the state of the work, and the admin shows the same thing in plain words on the order.
| Status | Meaning |
|---|---|
| OPEN | Work has not begun |
| SCHEDULED | Work has not begun, a future fulfillment date applies |
| ON_HOLD | Work has not begun, a hold is in place |
| IN_PROGRESS | The fulfillment service accepted the request and is working on it |
| CLOSED | Complete, or marked unable to be fulfilled |
| CANCELED | Cancelled, with a replacement fulfillment order created |
Why an app asks for fulfillment order permissions
A shipping app cannot ship anything with order access alone. To create a fulfillment with tracking against a location you manage yourself, it needs the merchant managed fulfillment order scopes. Shopify separates these from the scopes for work assigned to a fulfillment service or a third party, so an app only touches the work it is meant to touch.
Access to buyer name, address, phone and email is a separate approval Shopify runs on the app, not a permission you can hand over yourself.
Moving a fulfillment order to another location
The assigned location is the location where the fulfillment is expected to happen, and it can be changed while the work has not started. Shopify refuses the move when the fulfillment order is closed, when progress has been manually reported, when the destination location does not stock the item, or while a fulfillment service has been asked to act on it. Line items which have already been fulfilled can never be re-assigned and stay with the original location.
What this means on the packing bench
Read the order as a set of jobs, not one job. If half the items are at a second location, that half is its own fulfillment order with its own status, its own packing slip and its own tracking number. The customer sees two shipments, and Shopify sends a shipping confirmation for each fulfillment you create.
Key takeaways
- One order can hold several fulfillment orders, one per assigned location.
- The fulfillment order carries the status you see on the order: open, scheduled, on hold, in progress.
- A fulfillment is created against a fulfillment order, and it carries the tracking number.
- Moving work to another location means moving the fulfillment order, not editing the order.
We work against the fulfillment order, not the order
The Shopify connection is in early access. Orders sync through webhooks and a 10 to 15 minute poll, and each one arrives in The Workbench with its assigned location and tags read from Shopify.
Labels are bought per shipment, and the fulfillment is created against the matching fulfillment order with the tracking number and carrier, so Shopify sends its own notification. Partial fulfillment is supported, so two boxes from one order stay two records on both sides.
Related questions
Because it has two fulfillment orders, one per assigned location. Shopify splits the work when no single location has enough inventory to fulfill the entire order, and each part is then fulfilled on its own. You mark each section fulfilled separately, and each gets its own tracking number and its own shipping confirmation email.
Not directly. What you can do is move a fulfillment order to a location that stocks all the items, provided work has not begun and no line items have been fulfilled yet. If the destination does not stock an item, Shopify blocks the move. Routing rules that minimize split fulfillments are the way to prevent the split in the first place.
Shopify models the whole fulfillment process with fulfillment orders, and one checkout can include several delivery methods, such as shipping and pickup in the same order. Do not assume one method per order when you read them. Items that need no fulfillment at all leave the order with nothing to ship.
A cancelled fulfillment order is replaced with a new one, which is how Shopify keeps a record of the work that still has to happen. The line items return to an open state so they can be fulfilled again, possibly from a different location. Tracking numbers from the cancelled shipment stay on the cancelled record.