License
Slotting is licensed per installation with a license key: one line of text (SL2.<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 every change through the API: every POST, PUT, PATCH and DELETE under /api/ (layouts,
waves, scans, undo, complete, release, close, imports and POST /api/plan). Reading (every GET) always works.
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 | changes carry "license": { "trial": true } |
| Components | unchanged | show a TRIAL mark |
| After expiry | changes through the API answer 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). Several instances sharing one Redis count as several installations. Set SLOTTING_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 slotting instances 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 SL2., 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 layouts and waves stay as they are (they live in your Redis). 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 successful change through the API has a top-level
"license": { "trial": true }in its response; - the components show a TRIAL 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 (every instance, when you run several):
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, every change
through the API answers 402 until you install a renewed key. That includes scans, so the put walls stop: renew in
time. 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 reference › Errors):
{"error":"The license of this slotting installation expired on 2027-10-31, so the slotting API (POST, PUT, PATCH and DELETE under /api/) is disabled. Install a renewed license key with LICENSE_KEY or LICENSE_FILE and restart the slotting 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 slotting |
These keep working, so you can always see why: every GET under /api/ (layouts, waves, bins), the admin page at /,
these pages, the Status page, /widget/, GET /healthz and GET /v1/info. The components show a "not
licensed, contact your administrator" notice. A running service notices the expiry by itself (it checks on every request
and at least once an hour) and logs it. Nothing stored is lost: after you install a renewed key, the waves continue where
they stopped.
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 operators see when it expires? The station shows the "not licensed" notice, and scans are refused with
402. Your backend gets402from every change; show your users the message you choose for it.