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.

POST /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 }
  ]
}
RESPONSE
{
  "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.