Enterprise licence (self-hosted)¶
A self-hosted Enterprise install takes its plan terms from a signed licence that Preloop issues to you. The licence is checked entirely offline: Preloop never phones home, and the check makes no network call at any point.
Install the licence¶
Set PRELOOP_EE_LICENSE_KEY on every backend process using a Kubernetes Secret.
Store the signed licence in a private file and create the Secret:
kubectl -n preloop create secret generic preloop-license \
--from-file=PRELOOP_EE_LICENSE_KEY=/secure/path/license.key
The distribution's values-minikube.yaml already includes this optional
Secret. For other Helm values, append this entry to extraEnvFrom, preserving
existing entries (including the preloop-network ConfigMap when used):
Pass the private values file with helm upgrade -f; the chart has no
enterprise.licenseKey setting. Keep the licence and private values outside
version control. Roll backend pods after replacing the Secret: environment
variables are loaded when each process starts, including renewals.
For Compose, put PRELOOP_EE_LICENSE_KEY in the private .env file and recreate
backend services after a renewal.
Check its status¶
- Logs. Each process logs one line at startup and the API logs one again
every 24 hours, for example
Enterprise licence lic_... for Acme Ltd verified (plan enterprise, key 2026-10, expires 2027-10-31). A rejected licence logsEnterprise licence rejected: <reason>at ERROR. - API. A superuser can call
GET /api/v1/licence/status. It returns the status (valid,grace,expired,invalidormissing), the customer, plan, limits, capabilities, expiry, grace end and the banner text. It never returns the signature. - Console. Superusers see a banner while the licence is in its grace period, after it has expired, or when it cannot be verified.
What the licence controls¶
The licence sets the plan, the seat count (max_users), max_subaccounts,
max_hierarchy_depth and the capability list (for example multi_account,
account_hierarchy, resource_tags, abac_rules). While a licence is set,
these terms come from the licence alone: plan overrides stored in the
database do not apply. Adding or inviting a user beyond the licensed seat
count is refused with 402, counting each person once across the account tree;
without a licence, or once it has expired, seats are not capped.
| State | When | Effect |
|---|---|---|
| valid | up to and including the expiry date | licence terms |
| grace | the 14 days after expiry | licence terms, banner |
| expired | after the grace period | community feature set, banner |
| invalid | tampered, wrong key, malformed | community feature set, banner |
| missing | variable unset | community behaviour, unchanged |
The community feature set never deletes data. Subaccounts stay readable; changes and runs in them return 402 until a valid licence is installed, and installing one restores access without a migration.