Overview

A fulfillment order (FO) tells your warehouse or fulfillment channel exactly what to pick, pack, and ship for a given sales order. Luminous can create FOs automatically (using your warehouse priority lists and stock data) or you can trigger the process manually — both from the UI and via the API. Once an FO exists you "confirm" it by pushing it to your fulfillment channel.


Prerequisites

Before an FO can be created the following must be true:

RequirementWhy it matters
Sales order is postedUnposted orders are skipped by the auto-generate engine.
At least one Fulfillment Priority List is configuredThe engine uses these lists to decide which warehouse(s) to assign.
The products have available stock in at least one warehouseUnless your Smart Fulfillment setting Always Create is enabled, orders with zero available stock will not generate an FO.
A fulfillment channel is set upRequired if you intend to push the FO downstream.

Step 1 — Create the fulfillment order

Via the UI

  1. Go to Operations → Sales Orders.
  2. Find the posted sales order you want to fulfill and open it (row ⋮ menu → View Sales Order).
  3. Open the Fulfillment Orders tab, click its Actions menu and select Auto Generate Fulfillment Orders.
  4. A confirmation dialog opens. Confirm to start the process.
  5. Luminous runs the auto-generation engine, which:
    • Separates any items flagged Fulfill Separately into their own FOs.
    • Groups remaining items and tries to consolidate them into a single warehouse (if Consolidate Orders is enabled in Smart Fulfillment Settings).
    • Falls back to splitting items across warehouses if consolidation fails and Allow Line Item Splitting is on.
    • Respects the Partial Fulfillment Threshold (minimum stock percentage) before assigning to a warehouse.
    • Optionally creates the FO even with insufficient stock if Always Create is on.

The resulting FO(s) appear in the Fulfillment Orders tab on the sales order detail page.

Via the API

Use the internal V2 endpoint. This is the same endpoint the UI calls.

Request

POST /v2/api/admin/orders/fulfillment-orders/auto-generate-for-sales-orders
Content-Type: application/json

{
  "salesOrderIds": [12345]
}
Body fieldTypeNotes
salesOrderIdsarray of integersOne or more sales order IDs.
skipStatusCheckboolean (optional)Defaults true. Set false to enforce posted-status validation.
fulfillmentOrderStatusstring (optional)Override the initial FO status. Allowed values: pending, planned, awaiting_shipment, shipped. Omit to use your tenant default.

The response contains a per-order result array indicating success or any shortage/error details for each ID.


Step 2 — Review the created fulfillment order(s)

To list FOs for a sales order via the External V1 API:

GET /external/api/v1/fulfillment-orders?sales_order_id[eq]=12345

Each FO object includes:

  • id — the fulfillment order ID you'll use in the next step.
  • order_status — e.g. pending, awaiting_shipment.
  • warehouse_group_id — which warehouse group was assigned.
  • ship_by_date — auto-populated when splitting by estimated ship date.

Step 3 — Confirm (push) the fulfillment order to your channel

"Confirming" a fulfillment order means pushing it to your downstream fulfillment channel (e.g. a WMS like TrackStar). This is what triggers the warehouse to start picking.

Via the UI

  1. Open the sales order and go to the Fulfillment Orders tab.
  2. Find the FO you want to confirm.
  3. Click Push to Fulfillment Channel.
  4. Luminous transmits the FO to the configured channel. A success message confirms the push; an error message appears if something went wrong (e.g. a duplicate was detected — see the Reconcile section below).

Via the External V1 API

POST /external/api/v1/fulfillment-orders/{fulfillmentOrderId}/push

No required body fields. Optional:

FieldTypeNotes
debugbooleanWhen true, includes outbound HTTP traffic details in the response under data.debug.

Success response (200)

{
  "data": {
    "success": true,
    "message": "Fulfillment order pushed successfully."
  }
}

Failure response (422) — the response also includes a links.reconcile URL you can call if the push failed due to a duplicate order in the destination system.


Optional: Auto-push (no manual push needed)

You can configure a fulfillment channel to push FOs automatically after a set number of minutes. Once enabled, any FO assigned to that channel is pushed automatically without requiring a manual call to the push endpoint. This requires the AUTO_PUSH_FULFILLMENT_ORDERS_SCHEDULED feature flag to be active on your tenant and an autoPushOrderAfterMinutes value set on the channel's integration mapping. Contact your Luminous administrator to configure this.


Complete API sequence at a glance

# 1. Confirm the sales order is posted
GET /external/api/v1/sales-orders/12345

# 2. Auto-generate the fulfillment order
POST /v2/api/admin/orders/fulfillment-orders/auto-generate-for-sales-orders
{ "salesOrderIds": [12345] }

# 3. Find the created FO(s)
GET /external/api/v1/fulfillment-orders?sales_order_id[eq]=12345

# 4. Push (confirm) the FO to the fulfillment channel
POST /external/api/v1/fulfillment-orders/{fulfillmentOrderId}/push

Troubleshooting

SymptomLikely causeFix
No FO was createdSales order not posted, or no priority list existsVerify is_posted = true; check that a default priority list is configured in Settings → Smart Fulfillment.
FO created but stock shortage reportedInsufficient available stock and Always Create is offEnable Always Create in Smart Fulfillment Settings, or replenish stock first.
Push returns 422Duplicate order already exists in the destination WMSUse the links.reconcile URL in the error response to bind the existing remote order.
FO stuck in Error statusPush failed on a previous attemptInvestigate the error, fix the underlying issue, then reset the FO status to retry.