Dispatch Fulfillments for Sales Order
POST/api/sales-orders/:salesOrder/dispatch-fulfillments
Runs the fulfillment dispatcher for a single sales order: validates that the order is dispatchable (approved, fulfillment status in sync, all lines mapped to products, a shipping method selected, valid addresses), groups the fulfillable allocated lines by warehouse, and submits each warehouse's pending fulfillment order to the shipping provider or fulfillment service configured for that warehouse.
orders:writeGrant this scope to your token under Settings → Developer → Personal Access Tokens.
Authentication: Requires Bearer token.
Request body fields (all optional; each flag bypasses one pre-dispatch check):
- overrideOutOfSync (boolean, default false): Dispatch even when the order's fulfillment status is out of sync with the sales channel.
- overrideSelectShippingMethod (boolean, default false): Dispatch even when no shipping method has been selected or mapped for the order.
- overrideUnmappedLines (boolean, default false): Dispatch even when some order lines are not mapped to products (only mapped lines are dispatched).
- overrideManualDispatch (boolean, default false): Dispatch warehouses that are configured for manual dispatch only.
- overridePartialDispatch (boolean, default false): Allow dispatching when only part of the order's quantity is currently fulfillable.
Behavior:
- Dispatch is treated as user-requested, so warehouse auto-dispatch eligibility rules are bypassed.
- Orders with a pickup shipping method are staged for customer pickup instead of being submitted to a carrier.
- Submitting a fulfillment order to a provider does not create a shipment record; the provider's ship confirmation records the shipment later. The
dataarray therefore contains only fulfillment records created immediately during dispatch and is often empty even after a successful dispatch. - Failed pre-dispatch checks do not error — the order is skipped and a note explaining why is recorded on the order; the response returns an empty
dataarray. - Concurrent dispatch requests for the same order are serialized; if another dispatch is already running the request fails with 409.
Path parameters:
- salesOrder (required): Sales order ID.
Requires permission: sales_orders.fulfill
Request
Responses
- 200
- 401
- 403
- 404
- 409
- 422
- 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.
Conflict
Response Headers
Validation failed — the body is a field → messages map (Laravel shape) or the platform envelope with a stable machine-readable code. Fix the payload and resubmit.
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.