Features
Everything the plan is made of.
01
The 3D pack plan.
- Step scrubber
- Orbit, pan, zoom
- Explode view
- Click to inspect
- SKU labels
- Carton tabs
Printed sheet
- 1GLS-TUMB-12 flat, left-front corner
- 2GLS-TUMB-12 flat, long edge front
- 3BOX-DIV-4 across both, rotated 90°
- 4ACC-CBL-6 on top — fragile
02
Your cartons and your SKUs.
Types
- Box
- Poly bag
- Padded mailer
- Tube
- Envelope
- Custom
| interior L × W × H | What fits |
|---|---|
| outer L × W × H | What is billed |
| maxWeight | Contents cap |
| tareWeight | Added to gross |
| unitCost | Cost objective |
| padding | Dunnage per face |
| quantityAvailable | Stock |
| reorderPoint | Low-stock alert |
| length / width / height | Footprint |
|---|---|
| weight | Gross mass |
| fragile | No load above |
| stackable | Carries nothing |
| maxStackWeight | Top-face cap |
| orientationLock | Permitted rotations |
| groupKey | Ships together |
| hazmatClass | Kept apart |
03
Four things you can ask it to minimize.
Fewest cartons
MIN_CARTONSFewest parcels.
Lowest cost
MIN_COSTCarton cost plus billable weight.
Lowest billable weight
MIN_DIM_WEIGHTLowest max(actual, dimensional).
Tightest fit
BEST_FITHighest volume utilization.
04
What every position is tested against.
| Rule | Field | Value |
|---|---|---|
| Rotations | orientationLock | 6 per item |
| Orientation lock | orientationLock | This side up · Must lie flat · Must stand upright · No rotation |
| Carton weight cap | maxWeight | 0 = unlimited |
| Tare weight | tareWeight | Added to gross |
| Non-stackable | stackable | Space above reserved |
| Top-face load | maxStackWeight | Hard bound |
| Fragile | fragile | Last, and on top |
| Support | supportThreshold | 0.7 of base |
| Dunnage | padding | Every face |
| Stock on hand | quantityAvailable | 0 = unusable |
| Ships-together | groupKey | One carton |
| Hazard class | hazmatClass | Kept apart |
| Dimensional weight | dimWeightDivisor | max(actual, dim) |
| Carton ceiling | maxCartons | 3 Free · 50 Pro |
05
The same solver over HTTP.
/api/v1
POST /pack /orders/pack GET POST /cartons /items POST /cartons/bulk /items/bulk GET PATCH DELETE /cartons/:id /items/:id GET /jobs /jobs/:id GET /usage /health /openapi.json
| Auth | Authorization: Bearer cpp_live_… |
|---|---|
| Scopes | read · write |
| Rate limit | 30/min Free · 300/min Pro |
| Over quota | 402 |
| Over rate | 429 + Retry-After |
06
Eight tools for an AI assistant.
| pack_order | SKUs or inline dimensions |
|---|---|
| list_cartons | Sizes, cost, stock |
| create_carton | Add a carton size |
| find_items | Search sku, name, category |
| create_item | Add a SKU |
| list_pack_jobs | Recent jobs, by order id |
| get_pack_job | One saved plan |
| get_usage | Entitlements and consumption |
Ask
Pack SO-10482 and tell me which box to use.
| Protocol | stdio |
|---|---|
| Backend | REST /api/v1 |
| Credential | Same key, same scopes |
07
One order shape, whatever system sent it.
NormalizedOrder in
External id, source, lines.
Signed inbound
Per-connection URL, HMAC.
pack.completed out
Cartons, billable weight.
Deep links
Stable URL per plan.