Skip to content

Status Reference

Last updated October 20, 2026

Two vocabularies, never mixed within a single field. Orders and shipments speak the Omnishelf vocabulary. Parcels speak the carrier vocabulary. Both are lowercase snake_case strings.


Order and shipment status

Value Meaning What causes it
awaiting_shipment The order exists but no label has been produced yet. Still yours to prepare. The starting state for retailers whose labels are bought on their own carrier account. Included in the default status filter. An order waiting for a label Omnishelf has to upload by hand is not shown on the API at all until the label arrives.
processing Actionable. Omnishelf is generating the label, a label exists, or tracking has been submitted, but no carrier scan has arrived. The starting state for every order whose label Omnishelf generates, and the state after you submit tracking. Also covers an order marked shipped upstream without tracking. No event is emitted for this transition.
shipped At least one parcel has a genuine carrier scan and the order is in the carrier network, or part of it is delivered. A carrier scan other than pending or info_received lands on a parcel.
exception A parcel has a delivery problem that needs attention. Any parcel reports failed_attempt or exception. Takes precedence over every other rollup.
delivered Complete. Every parcel has been delivered. All parcels report delivered.
on_hold Paused. Do not ship. Held in the fulfilment system. Lifts, and the order returns to its rollup, as soon as that hold is released. Fires fulfilment_order.on_hold.
cancelled Terminated. Do not ship, and destroy or return any label already printed. Cancelled by Omnishelf or upstream. Final. Fires fulfilment_order.cancelled.

Shipment status uses the same vocabulary but is scoped to one shipment's parcels, and is computed at read time rather than stored. Only awaiting_shipment, processing, on_hold, and cancelled are accepted by the status filter on the list endpoint.

on_hold and cancelled are set on the order and override its rollup. A cancelled order reports every one of its shipments as cancelled too. An on-hold order doesn't: its shipments keep the status their parcels roll up to, so a shipment can read shipped or delivered while the order is on_hold.


Parcel tracking status

Carrier vocabulary, normalised to the values in the table below. Casing and separators are normalised (In Transit and in-transit both become in_transit), and provider-specific values are mapped to the documented value closest in meaning. For example, pre_transit is returned as pending. A parcel with no tracking data yet has tracking_status: null.

Value Meaning Counts as a scan?
pending Tracking number issued; the carrier has no data for it yet. No
info_received The carrier has label data on file but has not physically taken the parcel. No
in_transit Moving through the carrier network. Yes
out_for_delivery On a vehicle for delivery today. Yes
failed_attempt Delivery was attempted and failed. Rolls the whole order up to exception. Yes — problem state
to_pick_up Awaiting collection at a carrier access point or locker. Yes
delivered Delivered. Terminal state. Yes
exception Damage, loss, customs hold or another carrier-reported problem. Rolls the whole order up to exception. Yes — problem state
return_to_sender The carrier is returning the parcel to the sender. No
cancelled The label or tracking was cancelled; the parcel is not moving. No

tracking_status only returns values from this table. Still, treat an unrecognised value as "in transit, unknown detail" rather than failing, because new values may be added within v1.


How statuses roll up

Parcels roll up into a shipment status, and shipments into an order status. Both are evaluated top to bottom and the first rule that matches wins. A shipment's status:

# Condition Result
1 Any parcel is failed_attempt or exception exception
2 Every parcel that has a status is delivered delivered
3 Any parcel is in_transit, out_for_delivery or to_pick_up shipped
4 Any parcel is pending or info_received, the shipment has a tracking number but no status yet, or a parcel has a label processing
5 Otherwise awaiting_shipment

A shipment of a cancelled order reads cancelled. The order's own status starts from its shipments:

# Condition Order status
1 The order is cancelled cancelled
2 The order is held in the fulfilment system on_hold
3 Any shipment is exception exception
4 Every shipment is delivered delivered
5 Any shipment is shipped or delivered shipped
6 Any shipment is processing processing
7 The order is marked shipped upstream but has no tracking yet processing
8 The retailer buys its labels on its own carrier account awaiting_shipment
9 Otherwise — Omnishelf generates the label processing

Every order has at least one parcel

Omnishelf creates a shipment with a single placeholder parcel the moment an order is created, so shipments and parcels are never empty arrays. The placeholder is promoted in place — same parcel_id — as soon as a real label or tracking number arrives, so it is safe to key your own records off it.

pending and info_received are not carrier scans

A shipment whose parcels are all pending is processing, not shipped — the label exists but the carrier has not taken the box. The same applies to info_received. If you treat "has a tracking number" as "shipped", your status will diverge from Omnishelf's on every order that has a label printed but not yet collected.

Shipment rule 1 also means one exceptional parcel makes the whole order exception, even if every other parcel is already delivered. A partly delivered order, by contrast, reads shipped until every shipment is delivered.