Get Fulfillment Order Line Items
GET/api/fulfillment-orders/:fulfillmentOrder/line-items
The FO's lines (sku / name / product_id / quantity / remaining_quantity) for the list view's lazily-loaded expandable rows. Mirrors the SOF / PO line-items endpoints. quantity is the FOL budget; remaining_quantity is the amount still to be fulfilled.
orders:readGrant this scope to your token under Settings → Developer → Personal Access Tokens.
Authenticate with a Personal Access Token.
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). The sibling channel_fulfilled flag answers a different question — whether the sales channel ships THIS ORDER from its own fulfillment centre: a native Amazon order at an FBA warehouse, or any order at AWD / Walmart WFS / Fulfilled-by-Faire. It is an order-level answer, not a warehouse-type one — a Walmart or Shopify order routed to an FBA warehouse is an Amazon Multi-Channel Fulfillment order that SKU.io submits itself, so it reads false there and keeps its submit / cancel / move actions. The two can disagree: Fulfilled-by-Faire stock is counted in SKU.io (tracks_inventory true) but shipped by Faire (channel_fulfilled true), and an order routed to such a warehouse cannot be dispatched through the API.
swapped_from_sku / swapped_from_product_id are set when the line was filled by a substitute product — they identify the SKU the customer originally ordered (null otherwise).
Each line includes requires_pallet_delivery (bool): the buyer chose pallet (freight/LTL) delivery for that line, so it should ship by freight, not parcel.
Required permission: fulfillment_orders.index (Fulfillment Orders → View). A token also needs its orders scope.
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
Response Headers
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.