List Fulfillment Orders
GET/api/fulfillment-orders/list
Paginated, filtered, sorted list of FulfillmentOrders across ALL sales orders — the data source for the top-level Fulfillment Orders list view (a sibling of the Fulfillments table). Distinct from GET /api/fulfillment-orders (the active dispatch board): this list endpoint includes closed/cancelled FOs and supports the full filter/sort/paginate surface.
orders:readGrant this scope to your token under Settings → Developer → Personal Access Tokens.
Each row eager-loads warehouse, salesOrder (for sales_order_number), lines.salesOrderLine.product (for the expandable line rows), and the requested shipping method.
Filters also accept the Advanced-Filters base64 filter_groups tree (the chips/modal send operator-suffixed keys such as status.is, created_at.between); both flat filter[col] and filter_groups flow through the same Spatie QueryBuilder + GroupedFilterSupport pipeline.
Returns standard Laravel pagination — items directly under data[] (NOT data.data). Authenticate with a Personal Access Token.
New columns (also returned by the dispatch board): sales_order_date, customer_name, sales_channel_name, total_quantity (sum of line quantities), and packing_slip_printed_at (when the FO's packing slip was last printed; null until printed). The customer/sales-channel/sales-order-date columns are filterable via the filters above (customer_name / sales_channel_type_name already exist), and packing_slip_printed_at is sortable.
Shipping method filters: filter[shipping_method] (structured/mapped method) and filter[shipping_method_manual] (free-text "Manual" method). The response exposes shipping_method and shipping_method_manual accordingly - exactly one is populated per FO.
The response is standard Laravel pagination (items under data, plus current_page, last_page, per_page, total) with one extra top-level key: unfiltered_total — the count of all fulfillment orders ignoring filters (used to label the "All records" option in the export modal).
Request
Responses
- 200
- 401
- 403
- 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.
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.