Skip to content

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):

extraEnvFrom:
  - secretRef:
      name: preloop-license

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 logs Enterprise licence rejected: <reason> at ERROR.
  • API. A superuser can call GET /api/v1/licence/status. It returns the status (valid, grace, expired, invalid or missing), 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.