List Fulfillment Orders for a Sales Order
GET/api/sales-orders/:salesOrder/fulfillment-orders
Lists every FulfillmentOrder attached to a SalesOrder with eager-loaded lines + warehouse. Powers the Pending sub-tab in the application UI SO detail page.
orders:readGrant this scope to your token under Settings → Developer → Personal Access Tokens.
Channel double-fulfillment coverage (F6): each FO carries a transient boolean has_channel_covered_units — true when an still-open sales-channel (Shopify) fulfillment order may yet ship some of this FO's units. When present, every line carries channel_covered: true for a line the channel may still ship ("awaiting channel"), false for a line safe to dispatch natively ("dispatchable"). Both fields are stamped only by this list endpoint (not the single-FO detail endpoint) and omitted on FOs whose lines are not loaded. They drive the per-line awaiting-channel vs dispatchable badges and the submit-time guardrail.
Returns 404 if the feature flag is off.
Response is a JSON:API-style resource collection (no pagination — typically a handful of FOs per SO).
Fulfillability: each line carries fulfillable_quantity and unfulfillable_quantity, computed against the FulfillmentOrder's own (intent) warehouse — not the SalesOrderLine's warehouse_id. The warehouse block's tracks_inventory flag is false for externally-managed warehouses (Amazon FBA/AWD).
Line field executed_quantity (per FO line): the physically-executed quantity — the sum of non-voided child SalesOrderFulfillmentLine quantities. Distinct from the accounting figure quantity - remaining_quantity; when the two disagree the line carries a masked shortfall (e.g. a bundle line grown to its component quantity with remaining_quantity = 0 though fewer component units actually shipped).
provider_order_link (object|null): INTERNAL cross-link to this FO's registered shipping-provider order detail page inside SKU — { link_reference, link_type_label, link_id, link_route }. Distinct from the EXTERNAL provider_order_url. Populated for providers with an in-app per-order page (ShipStation, ShipHero, Starshipit, Trackstar, VeraCore, Shipfusion); null for providers with no detail page (ShipMyOrders), for pre-submit FOs, and for FBA/Manual FOs with no provider order. link_route is a application UI path, e.g. /integrations/shipstation/4/orders/92532.
Line field sales_order_fulfillment_lines (per FO line): the child SalesOrderFulfillmentLine (execution) records for this FOL — a debug aid so support can trace SOL → FOL → SOFL on any line. Each entry is { id, sales_order_fulfillment_id, voided }; voided reflects the parent SalesOrderFulfillment's voided_at (a voided SOFL can pin its FOL at quantity 0). Empty array until the FO is submitted into a carrier shipment. Example populated value: [{ "id": 1194390, "sales_order_fulfillment_id": 685484, "voided": false }].
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
Response Headers
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.