Skip to content

Documentation

Carton Pack Pro

One cartonization solver, reachable four ways, with one stored history behind all of them.

Surfaces

Web app/packREST APIPOST /api/v1/packMCP serverpack_orderERP hook/ordersSolverresolve SKUs, subtract dunnage,apply plan ceilings,search placements, scorePack plancartons, placements, weights,packing stepsPack jobstored, replayable in 3D,metered once
A pack job created through any door is the same record, metered once.

Quickstart

  1. 1Create an organization at /signup; pick imperial or metric.
  2. 2Load cartons and SKUs under /import.
  3. 3Create a key with the write scope under /api-keys.
  4. 4Set CPP_URL and CPP_KEY, then run this.
Request
curl -X POST "$CPP_URL/api/v1/pack" \
  -H "Authorization: Bearer $CPP_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "reference": "SO-10422",
    "objective": "MIN_CARTONS",
    "lines": [
      { "sku": "KTC-SKLT-12",  "quantity": 2 },
      { "sku": "GLS-TMBL-4PK", "quantity": 1 }
    ]
  }'
Response, abridged
200 OK

{
  "data": {
    "jobId": "clw3k1n2t0004v8hq7x1s9abc",
    "reference": "PJ-4F2A9C",
    "externalId": "SO-10422",
    "unknownSkus": [],
    "result": {
      "success": true,
      "objective": "MIN_CARTONS",
      "unitSystem": "IMPERIAL",
      "cartons": [ /* cartonSku, placements, weights, steps */ ],
      "unpacked": [],
      "summary": {
        "totalCartons": 1,
        "packedItems": 3,
        "averageUtilization": 0.7103,
        "computeMs": 37
      }
    }
  }
}

That call created a durable pack job: open it at /jobs/<jobId>, or find it again with GET /api/v1/jobs?externalId=SO-10422.

Conventions

ConventionRule
EnvelopeSuccess is { data, meta? }, failure is { error }, on every /api/v1 route.
UnitsPlain numbers in your own unit system. Nothing is converted; the response repeats the system so you can label it.
Axeslength on x, height on y (up), width on z. Positions are the item’s minimum corner.
IdentifiersSKUs are unique per organization. externalId is yours; reference (PJ-…) is ours.
PeriodsMetering periods are YYYY-MM in UTC. Monthly allowances reset on the first.
Rate limitsPer key, per minute: 30 on Free, 300 on Pro. Over it is a 429 with Retry-After.
DeterminismThe same request always yields the same plan. Only computeMs varies between runs.
Machine-readable
GET /api/v1/openapi.json   # OpenAPI 3.1, unauthenticated
Docs · Carton Pack Pro