Cartonization you can run yourself.
Cartonization is choosing which box an order goes in before anyone packs it. It is the name warehouse and shipping software gives the job, and underneath it is one question: do these items fit in this box, and which box is the smallest that holds them.
Binacle.Net answers that question in milliseconds, on hardware you control.
What it does
What it does
Give it your box sizes and a list of items. It tells you which of those boxes hold the order and which is the smallest that does. Ask the pack endpoints instead and it also returns the coordinates of every item inside the box.
The answer comes back as JSON your backend can act on: the box, the items that went in, the items that did not, and how full the box ends up.
A worked example
One request, and the answer
Configure your box set once, then send nothing but the order.
/api/v3/fit/by-preset/rectangular-cuboids
{
"parameters": { "algorithm": "FFD" },
"items": [
{ "id": "shoes", "quantity": 1, "length": 33, "width": 22, "height": 13 },
{ "id": "mug", "quantity": 2, "length": 12, "width": 9, "height": 11 }
]
}
{
"result": "Success",
"data": [
{
"result": "NotAllItemsFit",
"bin": { "id": "Small", "length": 60, "width": 40, "height": 10 },
"fittedItems": [],
"unfittedItems": [
{ "id": "shoes", "quantity": 1 },
{ "id": "mug", "quantity": 2 }
],
"fittedBinVolumePercentage": 0,
"fittedItemsVolumePercentage": 0
},
{
"result": "AllItemsFit",
"bin": { "id": "Medium", "length": 60, "width": 40, "height": 20 },
"fittedItems": [
{ "id": "shoes", "length": 33, "width": 22, "height": 13 },
{ "id": "mug", "length": 12, "width": 9, "height": 11 },
{ "id": "mug", "length": 12, "width": 9, "height": 11 }
],
"unfittedItems": [],
"fittedBinVolumePercentage": 24.61,
"fittedItemsVolumePercentage": 100
},
{
"result": "AllItemsFit",
"bin": { "id": "Large", "length": 60, "width": 40, "height": 30 },
"fittedItems": [
{ "id": "shoes", "length": 33, "width": 22, "height": 13 },
{ "id": "mug", "length": 12, "width": 9, "height": 11 },
{ "id": "mug", "length": 12, "width": 9, "height": 11 }
],
"unfittedItems": [],
"fittedBinVolumePercentage": 16.41,
"fittedItemsVolumePercentage": 100
}
]
}
The Medium box is the smallest of the three that holds this order.
Every box in the set comes back with its own verdict, so your code can apply whatever rule it already has - smallest by volume, cheapest to ship, whatever is in stock this morning.
It is free and open source, you host it yourself, and there is no per-call fee. Run it beside your order service and your customers' dimensions never leave your network.
Scope
Where it stops
Binacle.Net works one box at a time.
| It answers | It does not answer |
|---|---|
| Does this order fit in this box? | How do I split an order across boxes? |
| Which of my boxes is the smallest that holds it? | How many boxes do I need? |
| Where does every item sit? | Which carrier or rate is cheapest? |
Carrier selection and rate shopping are a different job and Binacle.Net does not do them. It hands you a box and the placement; what you spend on shipping it is yours to decide.
Get started
Run it
One image, one port.
docker run -d --name binacle-net -p 8080:8080 -e SWAGGER_UI=True -e SCALAR_UI=True -e UI_MODULE=True binacle/binacle-net:3.0
Box sets are configured as presets, which the integration guide covers along with how to get your product dimensions into a shape it can use.
Next
Where to go next
If your customers collect from a locker rather than a doorstep, the same call answers whether an order fits a locker compartment.
If you are evaluating it, how the packing works covers the two functions, the three algorithms, and what a yes and a no each mean.
Under the trade's word, this is a 3D bin packing API - the term most people search for, and the same problem.