Packing plans across shipping sites
Choose the shipping site and the box in the same request.
Compare sites that can supply the order before stock is reserved, with each location's inventory kept separate.
The decision
Choose the site and carton together.
Send stock and available cartons for each site. StoaPack returns allocation and packing plans together.
Send each site's own stock and carton list.
Compare allocation before reserving inventory.
Keep reservations in your order system.
A practical boundary
A stock snapshot, not a reservation.
Your OMS can use the returned allocation and packing plans in its existing reservation flow.
Before work starts
Compare allocation before reserving stock.
Review the site assignments and package count, then reserve units through your order system.
Checked placement view
A joint request can change the carton count.
Both sites hold the two units. The recorded joint request can use West's two-unit carton.
2 units in 1 package. The response includes item positions and dimensions.
- Pair box, 20 × 10 × 10 cm at West — 100.0% of its volume used.
- Retail unit × 2
| Plan | Packages | Shipping sites |
|---|---|---|
| Pre-allocate one unit to each site | 2 | East + West |
| Joint StoaPack request | 1 | West |
The baseline uses two calls with the original stock and cartons. The joint request keeps demand and stock while leaving allocation open.
StoaPack plans from the supplied stock snapshot and does not reserve inventory. The East and West drawings use a separate recorded order.
For your existing workflow
Send an order. Review the placements.
Show the cURL request for this checked order
Try the same order from your server
Create a key in your dashboard, then replace the key variable below. This request calls the published API directly and leaves AI review off.
curl -X POST "https://stoapack.stoalogistics.com/api/v1/optimize" \
-H "Content-Type: application/json" \
-H "X-API-Key: $STOAPACK_API_KEY" \
-d '{
"items": [
{
"id": "cube",
"width": 10,
"height": 10,
"depth": 10,
"weight": 100,
"quantity": 2,
"name": "Retail unit"
}
],
"warehouses": [
{
"id": "east",
"inventory": {
"cube": 2
},
"available_boxes": [
{
"id": "single",
"width": 10,
"height": 10,
"depth": 10,
"quantity": 2,
"max_weight": 1000
}
]
},
{
"id": "west",
"inventory": {
"cube": 2
},
"available_boxes": [
{
"id": "pair",
"width": 20,
"height": 10,
"depth": 10,
"quantity": 2,
"max_weight": 1000
}
]
}
],
"unit": "cm",
"weight_unit": "g",
"ai_review": false,
"optimization_goal": "minimize_boxes_then_volume"
}'