Orders & fulfillment
Every sale — tasting room, storefront, club, phone — becomes an order,
and orders are worked from the Commerce menu: the company-wide list at
/admin/orders, the shipping queue at /admin/shipments (subtitle:
"Track shipments across orders, and manage notification & carrier
health."), and channel routing at /admin/fulfillment-routing. Guests
follow their package on a public tracking page at /track/:token — no
sign-in needed.
Who can use it
- View orders and shipments —
orders.read: Managers, Concierges, Ambassadors, and Wine Associates (and Admins). - Fulfill lines (reserve, pick, ship, pickup) —
orders.fulfill(Managers, Concierges); overriding a pick past inventory needsorders.override_inventory(Managers). - Cancel / refund / edit addresses / returns —
orders.cancel,orders.refund,orders.edit_address, and theorders.returns.*set: Managers and Admins (Concierges can receive returns). - Fulfillment routing — viewing needs
locations.read; changing a channel's default location needslocations.update(Managers, Admins). - Cart profiles —
cart_profiles.readto view; create/update/delete are Manager and Admin only.
The all-orders list
/admin/orders (Orders) lists every order across channels. Columns:
Order #, Channel, Status, Fulfillment, Total, Placed
At. Club orders carry a wine-glass Club badge whose tooltip shows the
shipment, status, and delivery method.

The Orders admin — every channel in one list, with filters.
Filter and find:
- Search — "Order number or customer name".
- Channel — All Channels, Club, Tasting Room, Web, Inbound. (Tasting Room is the in-person POS channel; Web is the storefront.)
- Fulfillment Status — All Statuses, Fulfilled, Not Fulfilled, No Fulfillment Required.
- Fulfillment Type — Any Type, Shipping, Pickup, Local Delivery, Carry Out, No Fulfillment Required, Unknown.
- A Location filter (only with multiple locations), a date-range picker (defaults to the last 30 days), and sorts from Placed (newest) to Total (high to low).
Rows page 25 at a time (Previous / Next). Each row's menu offers View order and Copy order number (toast: "Copied"). Nothing matching? "No orders found" — "Try adjusting your filters or search term".
/orders (POS Orders) is the location-scoped operational twin —
tabs for Open Carts, Completed, and Closed Checks, plus an
Order Insights drawer. Completed rows link straight into
/admin/orders/:id. For building and settling the carts themselves, see
Take an order (POS).
The order detail
/admin/orders/:id is the whole order on one page. The header shows
the order number, status, channel, and a lock badge — Editable,
Locked, or Shipped — with a Why locked? button that lists the
lock reasons. POS-born orders also show their originating Check number
and the Closed by staff member.

The order detail — items, fulfillment, payment, and the activity timeline.
- Items — the line items with quantities and prices.
- Fulfillment — a per-line worklist: Product, Ordered,
Reserved, Picked, Shipped, Picked Up, Actions. The
actions (needs
orders.fulfill) are Reserve, Release, Pick, Ship, and Pickup; Override Pick (needsorders.override_inventory) picks past the reservation. Ship stays disabled without an address — "Shipping address required". - Shipments — the order's shipments with provider, carrier, tracking
link, and recent tracking events, plus a View shipment link into
/admin/shipments/:id. Request Shipment hands the order to the shipping pipeline — "Shipment Requested", "Shipment has been created and queued for processing." - Returns — Create Return authorizes a return; Receive records the items back with a condition (Restockable, Damaged, Defective); Link Refund ties the return to a refund. Empty state: "No returns for this order".
- Activity — the full timeline, filterable by Fulfillment, Lock, Audit, Order, Payment, Return.
- Addresses — the shipping/billing snapshots with Edit (needs
orders.edit_address). Locked and shipped orders resist edits — "Shipped orders cannot be edited" — unless a Manager flips Override Lock and supplies an Override Reason. - Payment — Authorized, Captured, Refunded, and
Refundable amounts, plus Issue Refund (needs
orders.refund). Stripe-processed orders refund automatically — "This refund will be processed automatically through Stripe." — others are recorded as manual refund requests. The refund history shows each attempt's status (Succeeded, Submitted, Processing, Requested, Failed, Manual Action) with a Cancel action while still pending.
Cancel Order (needs orders.cancel) is disabled once the order is
shipped, or locked without an override — the button's tooltip reads
"Cannot cancel in current lock state". Check Why locked? first.
The shipments queue
/admin/shipments (Shipments) has two tabs — Shipments and
Settings & Health. (The old /admin/settings/shipping address
redirects to the Settings & Health tab.)

The Shipments queue — status, provider, carrier, and tracking per shipment.
The worklist filters by Status (Submitted, In Transit, Delivered, Exception), Provider (FORT WMS, ShipStation), and a From / To date range, over columns Order, Status, Provider, Carrier, Tracking, Notifications, Last poll, Date. A shipment moves through Created → Submitted → Picking → Packed → Label Created → In Transit → Delivered, with Exception and Canceled as the off-ramps. The tracking cell links to the carrier's own site.
There are deliberately no manual shipment buttons here — no "create label", "mark shipped", or "assign tracking". A shipment is created from the order detail's Request Shipment (or automatically for club releases), and labels, carriers, tracking numbers, and status updates flow back on their own from the warehouse and carrier feeds.
Each row's View opens /admin/shipments/:id — the status and
provider badges, an Open in carrier button, and three tabs:
Notifications (each customer email event, with failures marked "— re-fires
on the next status change."), Tracking ("Carrier tracking events"),
and Audit (with an "Open full Audit log" link).
Settings & Health shows whether "Customer shipping notifications are ON" (or OFF — the switch is environment-level, read-only here), the last-24h notification counts, the carrier poll worker's recency, and the provider health cards. The notification events are Tracking assigned, Shipped, Out for delivery, Delivery attempted, Exception, and Delivered.
Which provider ships an order is an integration setting, not a per-order
choice: connect and configure FORT at /admin/integrations/fort (map
your SKUs at /admin/integrations/fort/products, watch submissions at
/admin/integrations/fort/health). If FORT is switched off you'll see
"FORT outbound shipping is disabled for this winery (kill switch). Enable
it under Integrations → FORT once sandbox validation has passed."
Fulfillment routing — which location fulfills a channel
/admin/fulfillment-routing (Fulfillment Routing — "Set the
default fulfillment location for each sales channel.") holds one card per
channel: Web ("Online store orders"), Club ("Wine club
shipments"), Inbound ("Phone and email orders"), and Wholesale
("Wholesale and B2B orders"). Pick a Default Location and Save —
the toast confirms, e.g. "Web routing updated".

Fulfillment Routing — a default location per sales channel.
Only locations with that channel's fulfillment role qualify — otherwise: "No eligible locations. Assign the web fulfillment role to a location first." (Web additionally requires the location to have shipping or pickup enabled.) Fulfillment roles live on the location's settings under Locations.
That's the whole engine: an order's channel picks the default location you set here, and inventory is drawn from that location. There are no destination- or weight-based rules.
Public tracking for guests
Every shipment gets a private tracking link. When shipping notifications
are on, the customer's email includes "Track your shipment:" with their
link to /track/:token — Track Your Shipment — showing the status
badge, Carrier, Tracking Number, Shipped / Delivered
dates, an estimated delivery line, a "Track on [carrier] website" link,
and the Tracking History timeline. The page needs no account; the link
itself is the key. A dead link shows "Tracking Not Found" — "The
tracking information you requested could not be found. Please check the
URL and try again."
Cart profiles — what each register can sell
/admin/cart-profiles (Cart Profiles — "Configure which product
collections are available for sale by location, surface, and channel.")
scopes the sellable catalog. A profile maps a Channel (POS
(In-Person) or E-Commerce), an optional Location and Surface,
to a checklist of Collections; Priority breaks ties ("Lower number
= higher priority. Used when multiple profiles match the same context.")
and only Active profiles apply.
Create one with Create Profile (e.g. name it "Tasting Room POS"). If the collections list is empty: "No collections found. Create collections in the Storefront admin first." — collections come from Your online storefront. Deleting warns: "This will permanently delete this cart profile and its collection assignments. Existing checks that reference this profile will not be affected."
Reference
| Control | Where | What it does |
|---|---|---|
| View order | Orders row menu | Opens the full order detail. |
| Why locked? | Order detail header | Lists the reasons an order resists edits. |
| Reserve / Pick / Ship / Pickup | Fulfillment card | Moves a line through fulfillment (needs orders.fulfill). |
| Request Shipment | Order detail | Creates the shipment and queues it with the shipping provider. |
| Issue Refund | Payment card | Refunds up to the refundable amount (needs orders.refund). |
| Create Return | Returns card | Authorizes a return; Receive books items back by condition. |
| Cancel Order | Order detail header | Cancels an unshipped, unlocked order (needs orders.cancel). |
| Open in carrier | Shipment detail | Jumps to the carrier's own tracking page. |
| Default Location | Fulfillment Routing card | Which location fulfills that channel's orders. |
| Create Profile | Cart Profiles | Scopes sellable collections by location, surface, and channel. |
Troubleshooting
- "No orders found" — widen the date range first; it defaults to the last 30 days.
- Ship is disabled with "Shipping address required" — add the address on the Addresses card, then ship.
- "Cannot cancel in current lock state" — the order is shipped or locked; open Why locked? for the reasons.
- "Order lock prevents this change. Check lock reasons." — an address edit raced the lock; use Override Lock with a reason if you must.
- "No eligible locations. Assign the … fulfillment role to a location first." — give a location that channel's fulfillment role in its location settings, then pick it here.
- "FORT outbound shipping is disabled for this winery (kill switch)…" — re-enable FORT under Integrations → FORT once it's been validated.
- A guest's tracking page says "Tracking Not Found" — the link is wrong or stale; resend the tracking URL from the shipment's carrier details.
Related
- Your online storefront — where Web orders come from, and the collections cart profiles use.
- Products & inventory — the stock that fulfillment reserves and picks.
- Releases & shipments — club releases; their shipments land in this same queue automatically after charging.
- Payments & refunds — where the refunded money lives.
- Take an order (POS) — the register side, and the checks that become orders.