What a plan changes, exactly
Every row below is a limit the site's code enforces, rendered from the same constants the code reads (ENTITLEMENTS.md). If it is not in a row, no plan sells it.
A signed statement about a plan
attestations_per_dayThe Ed25519 private key never leaves this deployment, so nobody else can produce one — and anyone can check it, free, at /verify or offline with the CLI. The proof pack puts it in the shape you would actually send: the plan, both exports, the statement and a README that tells the recipient how to check every part without us.
Plans kept, and addressable by their hash
plan_historyA plan you can point somebody at months later, without running a service to keep it. Self-hosting gets you the same artifacts; keeping, backing up and serving them is the part you would be operating.
A credential you can hand to an integration
api_keysYour WMS, your CI job or an agent calls /api/v1 with a key whose owner you can downgrade or revoke in one place. The alternative is standing up and securing the endpoint yourself.
Planning on our hardware, at a stated rate
compute_per_minOrders of thousands of cases, from a phone, a spreadsheet macro or a hosted agent with no machine of its own. Limits are published per plan and enforced in code, not discovered under load.
URScript and CSV exports from the API
exportsConvenience, and it says so: the files are byte-identical to what `palletizer export` writes for free. You pay to not run the CLI in the loop, never for a different engine.
- Cases per optimize request
- 500
- Pallets per order, in one request
- 3
- Compute requests per minute
- 60
- Model-written answers per day (assistant, co-pilot)
- 20
- Plans kept in history
- —
- Exports from the site and API (URScript pose list, placement CSV)
- —
- API keys for /api/v1
- —
- API-key requests per day
- —
- Signed verification attestations per day
- —
- Cases per optimize request
- 2,000
- Pallets per order, in one request
- 50
- Compute requests per minute
- 120
- Model-written answers per day (assistant, co-pilot)
- 200
- Plans kept in history
- 500
- Exports from the site and API (URScript pose list, placement CSV)
- urscript, csv
- API keys for /api/v1
- 2
- API-key requests per day
- 5,000
- Signed verification attestations per day
- 200
- Cases per optimize request
- 5,000
- Pallets per order, in one request
- 200
- Compute requests per minute
- 300
- Model-written answers per day (assistant, co-pilot)
- 500
- Plans kept in history
- 5,000
- Exports from the site and API (URScript pose list, placement CSV)
- urscript, csv
- API keys for /api/v1
- 10
- API-key requests per day
- 50,000
- Signed verification attestations per day
- 2,000
- Cases per optimize request
- 5,000
- Pallets per order, in one request
- 200
- Compute requests per minute
- 300
- Model-written answers per day (assistant, co-pilot)
- 500
- Plans kept in history
- 5,000
- Exports from the site and API (URScript pose list, placement CSV)
- urscript, csv
- API keys for /api/v1
- 10
- API-key requests per day
- 50,000
- Signed verification attestations per day
- 2,000
- — The engine, the CLI and the MCP server — Apache-2.0, on your own machines, with no limits from this page
- — Planning in the browser on /demo, and checking a plan file on /plan
- — Downloading any plan as its JSON artifact, which `palletizer validate` and `palletizer export` accept
The site's exports are the files palletizer export writes, byte for byte; a paid plan buys the convenience of the hosted API and history, not a different engine. The API is described at /api/v1/openapi.json.
On the 300-case mixed reference order in this repository (examples/orders/mixed_order_300.csv), the engine packs 6 pallets where the first version of the splitter used 7, with every pallet admissible — against a lower bound of 4, which is published next to every result so you can see what is left. That figure is recomputed from the shipped engine on every test run.
What a pallet is worth is your number, not ours — freight, wrap, labour, a truck slot. This project has no customers and no measured savings, so it does not put a currency figure on that. Do the arithmetic with your own inputs, or run your own order and compare it with what you ship today.
No plan authorizes robot motion — only the safety gate does, and it does not read your plan. Nothing here is certified. Canadian customers are charged Ontario HST (13%), calculated at checkout by Stripe Tax.