Documentation
Carton Pack Pro
ConceptsFields that change how an order packs, each with a diagram.CartonizationObjectives, search, determinism, speed.CSV importColumn reference and validation rules.REST APIEvery endpoint, errors, limits and webhooks.MCP serverInstall, tools, resources and troubleshooting.ERP integration · NetSuiteThe installer and install steps.
Ways to pack an order
Quickstart
- Create an organization at
/signup; pick imperial or metric. - Load cartons and SKUs under
/import. - Create a key with the
writescope under/api-keys. - Set
CPP_URLandCPP_KEY, then run the request below.
Request
curl -X POST "$CPP_URL/api/v1/pack" \
-H "Authorization: Bearer $CPP_KEY" \
-H "Content-Type: application/json" \
-d '{
"externalId": "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 saved a pack job. Open it at /jobs/<jobId>, or find it with GET /api/v1/jobs?externalId=SO-10422.
Conventions
| Convention | Rule |
|---|---|
| Envelope | Success is { data, meta? }, failure is { error }, on every /api/v1 route except /openapi.json. |
| Units | Numbers are in your organization’s units: inches and pounds, or centimeters and kilograms. A line that sets dimensionUnit or weightUnit is converted to your units before packing. The response’s unitSystem field names the units it uses. |
| Axes | length on x, height on y (up), width on z. A position is the item’s bottom-back-left corner. |
| Identifiers | SKUs are unique per organization. You set externalId. Carton Pack Pro sets reference (PJ-…). |
| Periods | Usage is counted per calendar month in UTC, written YYYY-MM. Monthly allowances reset on the 1st. |
| Rate limits | Per key, per minute: 30 on Free, 300 on Pro, 1,200 on Business and 1,200 on Enterprise. Going over returns a 429 with a Retry-After header. |
| Repeatable results | The same request, catalog and billing plan return the same pack plan. A search stopped at its 5-second limit may differ, and carries a warning. LOWEST_RATE is the exception: its pack plan depends on live rates when the job runs. computeMs changes every run. So does result.reference when no externalId is sent. |
OpenAPI spec
GET /api/v1/openapi.json # OpenAPI 3.1, unauthenticated