License
Cartonization is licensed per installation with a license key: one line of text (CZ2.<payload>.<signature>) that says who
it is licensed to, until when, and for how many installations. It is checked offline with a digital signature: nothing is
sent anywhere, so it works in networks without internet access.
The license covers the packing API: POST /api/pack, POST /api/capacity and POST /api/pack/multi-level.
Licenses at a glance#
| Production license | Evaluation (trial) license | |
|---|---|---|
| Comes with | the key you receive when you buy | the download (bundled), or a trial key from us |
| Expiry | always has an expiry date | may have none |
| API responses | unchanged | carry "license": { "trial": true } |
| Display components | unchanged | show a TRIAL mark (Summary, Ranking, Containers and over the 3D View) |
| After expiry | the packing API answers 402 (no grace period) |
the same, if it has an expiry date |
Your key also states the number of installations it covers. Each running install shows its installation id on the
Status page; keep the number of installs you run within your license (it is part of the license terms, not a
technical limit). Set CARTONIZATION_INSTANCE_ID if you want a fixed id, for example for containers that are recreated often.
How to get a license#
Email support@wms-utils.com with:
- Company name: the licensee, exactly as it should appear in the license and on the Status page;
- Number of installations: how many cartonization installs you will run, including test and staging;
- Term and start date: how long the license should run and from when.
We reply with your license key: one line of text that starts with CZ2., valid through its expiry date. Install it as
described in Install your license.
Renewals#
Ask for a renewed key before your license expires; the Status page shows the expiry date and the days left. Install the new key the same way and restart the service: nothing else changes, and your integration keeps working. There is no grace period, so renew in time (see When a license expires).
Changes#
More installations or a new company name need a new key. Email us with your license id (shown on the Status page) and the change; install the new key and restart.
Lost key#
Email us your company name and, if you have it, the license id from the Status page. We keep a record of every key we issue.
The evaluation license#
The download includes an evaluation (trial) license, so everything works right away. On a trial license:
- every response of the packing API has a top-level
"license": { "trial": true }(in a multi-level response, every level has it too); - the display components show a TRIAL mark when they display such a response: a label in Summary, Ranking and Containers, and a
large mark over the 3D View. A bare
Solution(for example a storedbest) has no marker and shows no mark.
A trial license you receive from us works the same way; it may have an end date. A production license removes the marker and the mark.
Install your license#
To switch to your production license, set one of these environment variables and restart the service:
LICENSE_KEY: the license key itself;LICENSE_FILE: the path of a file that holds it, for example a mounted secret.
As soon as one of them is set, that license decides, and the evaluation license is no longer used, also when the configured
key is expired or not valid. The Status page (and GET /v1/info) shows the license in use: where it comes from
(bundled evaluation license or configured license), whether it is a trial, the licensee, license id, expiry date and days
left, the number of installations, and this installation's id. The service also logs one line about the license when it
starts, and one whenever its status changes.
When a license expires or is not valid#
A license works through the end of its expiry date (UTC). There is no grace period: from the next day on, the packing API
answers 402 until you install a renewed key. The same happens at once when no key is set or the configured key is not
valid (mistyped, truncated, or a LICENSE_FILE that cannot be read). The 402 body has a code and a message that says what
to do (API › Errors):
{"error":"The license of this cartonization installation expired on 2027-10-31, so packing (POST /api/pack, /api/capacity and /api/pack/multi-level) is disabled. Install a renewed license key with LICENSE_KEY or LICENSE_FILE and restart the cartonization service.","code":"license_expired"}code |
When |
|---|---|
license_required |
No license key is set, or the configured key is not valid (the reason is in the server log) |
license_expired |
The license expired (after the end of its expiry day, UTC) |
product_not_licensed |
The license does not include cartonization |
These keep working, so you can always see why: the playground at /, these pages, the Status page,
/widget/, GET /api/algorithms, GET /health and GET /v1/info. A running service notices the expiry by itself (it
checks on every request and at least once an hour) and logs it.
Before the expiry date there are no warnings in the components or the API: check the Status page or GET /v1/info
(license.daysLeft) in your monitoring, and renew in time.
Questions#
- Does the service contact you to check the license? No. The key is checked offline; nothing is sent anywhere.
- How do I know when to renew? The Status page and
GET /v1/infoshow the expiry date and the days left (license.daysLeft). There are no reminders in the components or the API, so add it to your monitoring. - Can I move my license to another server? Yes: install the same key there and stop the old install. The key is not tied to a machine.
- Can I edit the key, for example to extend the date? No. Any change breaks the signature and the key is rejected.
- What do my users see when it expires? The components never call the API, so they keep showing what they were given.
Your backend gets a
402fromPOST /api/pack; show your users the message you choose for it.