curl --request POST \
--url https://{companyName}.api.joinluminous.com/external/api/v1/sales-orders/{salesOrderId}/simulate-fulfillment \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"skip_status_check": true
}
'import requests
url = "https://{companyName}.api.joinluminous.com/external/api/v1/sales-orders/{salesOrderId}/simulate-fulfillment"
payload = { "skip_status_check": True }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({skip_status_check: true})
};
fetch('https://{companyName}.api.joinluminous.com/external/api/v1/sales-orders/{salesOrderId}/simulate-fulfillment', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{companyName}.api.joinluminous.com/external/api/v1/sales-orders/{salesOrderId}/simulate-fulfillment",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'skip_status_check' => true
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://{companyName}.api.joinluminous.com/external/api/v1/sales-orders/{salesOrderId}/simulate-fulfillment"
payload := strings.NewReader("{\n \"skip_status_check\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://{companyName}.api.joinluminous.com/external/api/v1/sales-orders/{salesOrderId}/simulate-fulfillment")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"skip_status_check\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{companyName}.api.joinluminous.com/external/api/v1/sales-orders/{salesOrderId}/simulate-fulfillment")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"skip_status_check\": true\n}"
response = http.request(request)
puts response.read_body{
"data": {
"results": [
{
"sales_order_id": 12345,
"order_number": "SO-1001",
"channel_id": 123,
"channel_name": "<string>",
"status": "SUCCESS",
"message": "1 Fulfillment Order(s) would be generated.",
"simulated": true,
"simulated_fulfillment_orders": [
{}
],
"has_shortages": true,
"shortage_items": [
{}
],
"detailed_decisions": [
{}
]
}
],
"summary": {
"total_orders_simulated": 1,
"orders_with_fos": 1,
"orders_without_stock": 0,
"orders_with_errors": 0,
"total_simulated_fulfillment_orders": 1
}
}
}{
"message": "<string>"
}{
"message": "<string>"
}Simulate fulfillment for a sales order
Dry-run fulfillment-order generation for a single sales order. Read-only — no
database writes and no inventory allocation take place. Use this to preview which
fulfillment orders would be generated, and whether stock shortages would occur,
before committing with
POST /sales-orders/{salesOrderId}/auto-generate-fulfillment-orders.
This is single-order sugar for POST /fulfillment-orders/simulate and returns the
same response shape.
curl --request POST \
--url https://{companyName}.api.joinluminous.com/external/api/v1/sales-orders/{salesOrderId}/simulate-fulfillment \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"skip_status_check": true
}
'import requests
url = "https://{companyName}.api.joinluminous.com/external/api/v1/sales-orders/{salesOrderId}/simulate-fulfillment"
payload = { "skip_status_check": True }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({skip_status_check: true})
};
fetch('https://{companyName}.api.joinluminous.com/external/api/v1/sales-orders/{salesOrderId}/simulate-fulfillment', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{companyName}.api.joinluminous.com/external/api/v1/sales-orders/{salesOrderId}/simulate-fulfillment",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'skip_status_check' => true
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://{companyName}.api.joinluminous.com/external/api/v1/sales-orders/{salesOrderId}/simulate-fulfillment"
payload := strings.NewReader("{\n \"skip_status_check\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://{companyName}.api.joinluminous.com/external/api/v1/sales-orders/{salesOrderId}/simulate-fulfillment")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"skip_status_check\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{companyName}.api.joinluminous.com/external/api/v1/sales-orders/{salesOrderId}/simulate-fulfillment")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"skip_status_check\": true\n}"
response = http.request(request)
puts response.read_body{
"data": {
"results": [
{
"sales_order_id": 12345,
"order_number": "SO-1001",
"channel_id": 123,
"channel_name": "<string>",
"status": "SUCCESS",
"message": "1 Fulfillment Order(s) would be generated.",
"simulated": true,
"simulated_fulfillment_orders": [
{}
],
"has_shortages": true,
"shortage_items": [
{}
],
"detailed_decisions": [
{}
]
}
],
"summary": {
"total_orders_simulated": 1,
"orders_with_fos": 1,
"orders_without_stock": 0,
"orders_with_errors": 0,
"total_simulated_fulfillment_orders": 1
}
}
}{
"message": "<string>"
}{
"message": "<string>"
}Authorizations
Authenticate using a bearer token. To create a token, navigate to /settings/api-tokens and click Create API Token.
Path Parameters
Sales order ID
Body
When true (default), skip the sales order status gate so orders in any active state can be simulated.
Response
Simulation completed
Result of a dry-run fulfillment-order simulation.
Show child attributes
Show child attributes