Orders
Every order across all your clients — read status, drive it through fulfillment, and manage the sales channels feeding it.
Orders is where every order flowing through the warehouse lives, from the moment it lands off a sales channel to the moment it's delivered. As an operator you see orders across all your clients at once, and you have the actions to move an order through fulfillment. Open it from Orders → Manage Orders.
Operator vs. client view
A brand on a client account sees only their own orders and mostly reads them. You see every client's orders (with a Client column and the "All clients" switcher up top), and you get the action buttons below to actually drive an order.
Manage Orders

Each row is one order. Operators get a Client column that client accounts don't:
| Column | What you're looking at |
|---|---|
| Client | Which brand the order belongs to (operator-only). |
| Order # | The order number, with a "Ship by" date underneath when set. |
| Customer | Name and email. |
| Status | Where the order is in fulfillment. A WHL chip marks a wholesale order. |
| Priority | Standard, Expedited, or Rush. |
| Items / Total | Unit count and order value. |
Statuses
| Badge | Meaning |
|---|---|
| Pending | Received, not yet allocated to stock. |
| Allocated | Stock reserved — ready to pick. |
| Picking → Picked → Packing | Moving through the floor. |
| Fulfilled | Packed and labeled. |
| Shipped → Delivered | In the carrier network, then delivered. |
| On Hold | Paused (e.g. payment or address check). |
| Backordered | Waiting on stock. |
| Cancelled | No longer fulfilling. |
| Unfulfillable | Can't be fulfilled as-is. |
| Ext. Fulfilled | Fulfilled outside this warehouse. |
Finding and acting on orders
- Search by order number, customer, or email; filter by status (pick several at once) and SLA (Due to ship today / Past SLA).
- Bulk hold — tick the holdable orders and Hold Selected to pause a batch with a reason and optional release date.
- Create Order enters one manually — useful for a phone or wholesale order that didn't come through a channel.
Create Order opens a sheet for the client, priority, customer and shipping address, and line items:

Order detail
Click a row to open the detail panel. The tabs are the same ones a client sees — Details, Items, Shipments, Returns, Timeline — but the top of the panel carries the operator action bar. Which actions show depends on the order's status:

| Action | What it does |
|---|---|
| Allocate | Reserve stock for a pending or backordered order. |
| Pick Order | Appears on an Allocated order — creates a single-order pick list and sends it into picking. |
| Hold / Release | Pause an order — with a reason and a duration (24h, 48h, a custom date, or Indefinite; timed holds auto-release) — or lift the hold. |
| Reprocess Rules (operator-only) | Re-run the automation rules against the order (only before picking). |
| Mark Wholesale / Unmark Wholesale (operator-only) | Pull the order out of the retail pick pipeline, or return it (only before picking). |
| Edit | Change the order's details (editable fields shrink as the order advances). |
| Re-queue Order | Appears only on an Unfulfillable order — sends it back to Pending for a fresh allocation attempt. |
| Cancel | Cancel the order (won't notify the channel). If units are already picked, their totes are flagged for put-back — it can't be undone. |
Only two are operator-only
Despite the "operator" framing, the Orders module has no blanket role gate — only Reprocess Rules and Mark/Unmark Wholesale are restricted to warehouse staff. The rest (Allocate, Pick, Hold/Release, Edit, Cancel, Postage Override) are not blocked from client users.
The tabs match the client view. Details carries the customer, address, tags, notes, holds, the "Ship by" deadline (which turns red when overdue), and the Postage Type section — where a Override carrier / Change button opens an "Override Carrier" dialog to force a specific postage type (available only before a label is bought; it beats automation and the channel mapping). Items shows per-line status, kit parents with components, and lot badges (see the line-item statuses below); Shipments lists labels + tracking; Returns shows linked RMAs; Timeline is the full audit trail.
Line-item statuses
The Items tab renders its own per-line status — distinct from the overall order status (a line can read Packed while the order is still Packing): Pending, Allocated, Picked, Packed, Fulfilled, Cancelled, Backordered, plus a derived Partial n/m running count and a · ext suffix on a line fulfilled outside Canopy. Each real line with unfulfilled units also has a Mark ext. button (mark externally fulfilled): it closes the line outside Canopy, releases its remaining allocation, and — if already picked — sends those units to put-back.
Sales Channels
Orders → Sales Channels. The stores feeding orders into the warehouse. Unlike a client account (which sees this read-only), operators manage channels here.

Each channel shows its type (Shopify, ShipHero, or Manual), store URL, and last-sync time. Add Channel connects a new store, and each channel can be configured, synced on demand, or disconnected. Pending Shopify connections (visible to Tenant Admins only) — a store you've already registered for a specific client (its client code shows), waiting on the merchant to open the install link and approve it in their own Shopify admin — surface at the top; your only actions are Copy the install link or Revoke it (you don't approve it here).
Add Channel opens a picker of integrations — Shopify via OAuth, ShipHero via API, or a manual channel (more marketplaces are on the way):

Channel settings
The gear icon on a channel row opens its settings, organised into four tabs:
- Orders — toggle auto-import (every 2h), see import status, or Import unfulfilled orders on demand.
- Inventory — map each Shopify location to an internal warehouse (with a primary star), and turn on Inventory Sync to push Canopy's stock levels back to the store (every 15 min, or Sync Now).
- Products — Auto-Create SKUs from the store, a product-mapping table, and Sync Products / Sync Images.
- History — a per-run sync log with expandable per-SKU failure rows.
The first inventory push can zero a live store
Enabling inventory sync (or Sync Now) previews how many SKUs would push 0, and the first sync forces an "I understand this will overwrite live Shopify stock" checkbox. If stock hasn't been received into Canopy yet, confirming will set the brand's storefront to zero. Receive stock first, then enable the push.