Esc
POSTAPI key
Compute a load plan
POSTapi.navo24.com/v1/loading/plan
Pack a list of items into equipment and get a 3D plan plus a compliance verdict: utilisation, centre of gravity, crush and securing.
Request body
items
The cargo: each item has id, type (box, pallet, drum, …), length, width and height in mm, weightKg and quantity.
equipmentCode
Target equipment, for example 40HC. Omit to auto-size.
mode
sea or road.
options
Solver options, for example stacking or DG rules.
Response schema
30 fields
Derived from the example response, nested as the JSON is.
ok
Whether the request succeeded.
engine
Solver that produced the plan.
equipmentCode
Target equipment code.
autoSized
True when equipment was chosen automatically.
plan
On LoadingMCP, the computed load plan. Inside a tracking observability lens, true when we hold a schedule for the shipment.
equipmentCode
Target equipment code.
bins
placements
placements[]
itemId
unit
bin
x
y
z
rotation
weightKg
metrics
volumeUtilPct
payloadUtilPct
usedWeightKg
cog
Centre of gravity, normalised 0 to 1.
x
y
z
unplacedItemIds
crushViolations
compliance
ready
blockers
warnings
curl -X POST 'https://api.navo24.com/v1/loading/plan' \
-H "Authorization: Bearer lmcp_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"equipmentCode":"40HC","items":[{"id":"PLT-A","type":"pallet","length":1200,"width":1000,"height":1450,"weightKg":640,"quantity":18}]}'const res = await fetch("https://api.navo24.com/v1/loading/plan", {
method: "POST",
headers: {
"Authorization": "Bearer lmcp_YOUR_API_KEY",
"Content-Type": "application/json"
},
body: JSON.stringify({
"equipmentCode": "40HC",
"items": [
{
"id": "PLT-A",
"type": "pallet",
"length": 1200,
"width": 1000,
"height": 1450,
"weightKg": 640,
"quantity": 18
}
]
})
});
const data = await res.json();import requests
res = requests.post(
"https://api.navo24.com/v1/loading/plan",
headers={"Authorization": "Bearer lmcp_YOUR_API_KEY"},
json={
"equipmentCode": "40HC",
"items": [
{
"id": "PLT-A",
"type": "pallet",
"length": 1200,
"width": 1000,
"height": 1450,
"weightKg": 640,
"quantity": 18
}
]
},
)
data = res.json()Response
{
"ok": true,
"engine": "packingsolver",
"equipmentCode": "40HC",
"autoSized": false,
"plan": {
"equipmentCode": "40HC",
"bins": 1,
"placements": [
{
"itemId": "PLT-A",
"unit": 0,
"bin": 0,
"x": 581.04,
"y": 125,
"z": 0,
"rotation": 0,
"weightKg": 640
},
{
"itemId": "PLT-A",
"unit": 1,
"bin": 0,
"x": 581.04,
"y": 1125,
"z": 0,
"rotation": 1,
"weightKg": 640
}
],
"metrics": {
"volumeUtilPct": 41.1,
"payloadUtilPct": 43.5,
"usedWeightKg": 11520,
"cog": {
"x": 5531.040000000001,
"y": 1175,
"z": 725
},
"unplacedItemIds": [],
"crushViolations": [],
"compliance": {
"ready": true,
"blockers": [],
"warnings": [
"Securing required — Block or lash the tall units: item-0: tipping-unstable under road accelerations as placed (EN 12195-1 statics — 0.8 g forward / 0.6 g sideways exceeds the base edge lever). Units blocked on all sides by adjacent cargo are held by the stow; block or top-over lash any that stand free (end of a row, part-filled tier) before the doors close."
]
}
}
}
}