List Order Shipments
GET/api/sales-orders/:salesOrder/fulfillments
Lists ALL shipments (SalesOrderFulfillments) for a sales order, used by the order's Fulfillment tab. Includes VOIDED shipments: a voided shipment carries a non-null voided_at (plus void_reason and voided_by) and status=canceled — it was reversed and its fulfillment order reopened, but is kept for history. The UI buckets voided shipments into a read-only "Voided" filter and excludes them from the active lifecycle counts. Each shipment exposes its fulfillment_lines, warehouse, shipping method, tracking, and provider-sync timestamps.
orders:readGrant this scope to your token under Settings → Developer → Personal Access Tokens.
Authentication: Requires Bearer token.
Sales-channel cross-links: each shipment exposes sales_channel_fulfillment_link — non-null only when the shipment originated from a sales channel (Shopify or Faire), discriminated by channel. For channel: "shopify" it carries a fulfillment object (deep-link to the Shopify Fulfillment detail page) and a fulfillment_orders array (deep-links to each related Shopify Fulfillment Order detail page); its link_route already includes the required ?filter[integration_instance_ids]=N query param. For channel: "faire" it carries an order object (deep-link to the Faire order detail page) and a shipments array — one entry per package, since Faire splits an order into one label per box, each with its own carrier, tracking_number, and shipping_type. Every link object has link_id, link_reference, link_type_label, and a link_route. Manual / 3PL / FBA shipments return null for this field.
Multi-parcel shipments: each shipment also exposes a parcels array — one entry per shipped carton. A single shipment can span multiple boxes, each with its own carrier tracking number; tracking_number is only the primary (first) carton, while parcels is the full deduped list with the primary first. Each entry has tracking_number, plus delivery_status and carrier when live delivery tracking is connected (otherwise null). Only the tracking numbers are exposed — there is no per-carton line-item breakdown, since carriers return tracking numbers with no item-to-carton mapping. Single-parcel shipments return a one-element parcels array.
Request
Responses
- 200
- 401
- 403
- 404
- 429
OK
Response Headers
Unauthenticated — the bearer token is missing, revoked, expired, or malformed. Never retry automatically; fix the credential. See the Errors guide.
Forbidden — the token lacks a required scope, the endpoint is not available to API tokens, or the user behind the token lacks the permission. A human must adjust the token scopes or user permissions; do not retry.
Not found — no record with the given identifier (or the route does not exist). Verify the ID before retrying.
Rate limited — platform limit is 1,000 requests/min; individual tokens may carry lower limits. Honor the Retry-After header before retrying. See the Rate Limits guide.