Licensing
Vistralio now includes two licensing surfaces:
- Runtime licensing inside the main product at Admin → Advanced → Licensing
- A standalone license server at
https://{host}/license-server
The main instance can license itself for testing, but the license server is designed to run independently so you can issue and inspect keys outside the operator UI.
Automatic 30-day trial on install
On a fresh installation, Vistralio now:
- Starts the main API and standalone license server
- Logs into the local API with the generated admin account
- Creates a trial customer and a 30 Day Trial license through the license server
- Applies that generated key back to the local Vistralio runtime automatically
That means a new instance comes up already licensed for the first 30 days. If the customer later pays for a full license, you can replace that trial key with a paid one from Admin → Advanced → Licensing or generate a new key for them from the license server.
What licensing controls
A license can enable or limit specific parts of the product, including:
- Events
- Object detection
- Motion detection
- Face recognition
- Plate recognition
- Scheduling
- Branding
- SMTP / notifications
- Exports
- User count
- Tenant count
The exact feature list is exposed by the runtime status endpoint and by the license server's feature catalog.
For self-hosted multi-tenant instances, the Max Tenants entitlement controls
how many tenant workspaces may be created on the installation.
Applying a license in Vistralio
Open Admin → Advanced → Licensing and:
- Enter the license key
- Choose the location for this instance
- Apply or refresh the license
Vistralio performs periodic license refresh checks and records the effective feature set locally.
Grace period and free tier behavior
If a license becomes invalid:
- Vistralio shows a warning banner for the first 30 days
- After the grace window, Vistralio drops to the free tier
The free tier is intentionally limited. It keeps the core camera and dashboard experience available, while premium areas such as branding controls, SMTP, exports, and other licensed features are disabled.
License server
Visit https://{host}/license-server while signed in.
The license server supports:
- Creating and storing customers
- Assigning customer contact and address information
- Generating license keys
- Setting maximum activations
- Inspecting activation count and activation history
- Assigning entitlements per license
- Returning license details over authenticated API routes
- Running as a primary licensing authority or as a downstream licensing server
- Registering downstream licensing servers and assigning server entitlements
- Receiving secure upstream usage reports from downstream licensing servers
- Enforcing downstream resale caps such as maximum issued licenses, sold users, and sold cameras when configured
Primary vs downstream licensing servers
Vistralio licensing can now be federated:
- Primary: the central authority you operate to manage reseller/downstream license servers
- Downstream: a reseller or delegated licensing server that issues customer licenses and reports usage back upstream
Downstream sync uses a shared sync token over the licensing API. The local
license server can also run a scheduled upstream sync via
vistralio-ls-sync.timer.
Visibility rules
- Admins can see all customers and licenses
- Standard users only see customers and licenses associated with them
Main runtime API
GET /api/licensing/status— current runtime status, effective features, banner statePOST /api/licensing/apply— apply a license key and locationPOST /api/licensing/refresh— force a fresh license check
License server API
GET /license-server/api/meGET /license-server/api/catalogGET /license-server/api/customersPOST /license-server/api/customersGET /license-server/api/licensesGET /license-server/api/licenses/{license_id}POST /license-server/api/licenses
Permissions
| Action | Permission |
|---|---|
| View license status in Vistralio | licensing.view |
| Apply or change a license | licensing.edit |
| Full admin override | settings.admin |