KW Knowledge base

Licence

The platform is licensed by **feature**. Each tenant's enabled [features](19-admin-tenants.md) must be a subset of the licence in effect.

Mitch Wigham
Updated 24 June 2026 · 6 views

21 · Licence

The platform is licensed by feature. Each tenant's enabled features must be a subset of the licence in effect.

Where to find it

/admin/license. Requires an ADMIN or SUPER_ADMIN role.

The page is read-only. Status, features, seat counts and expiry are all set centrally on the licence server — the customer can see what they have but cannot self-edit it. The only action on the page is Refresh.

How licensing works

[license-server.portal.kwgroup.org.uk]
                  │
                  │  hourly poll
                  ▼
        [your platform install]
                  │
       per-tenant licence cache
        (refreshed from poll)

📷 Screenshot placeholder: screenshots/license.png

  • The canonical licence server is always license-server.portal.kwgroup.org.uk. New installations bake this in as their default.
  • The platform polls hourly for updates.
  • Licences are signed (HMAC-SHA256) so they can't be tampered with client-side.
  • Each licence specifies: list of features, max-tenants, max-users, expiry.

On first install

A new install boots, finds it has no licence file yet, and:

  1. Calls the licence server with its install fingerprint.
  2. Receives a 30-day trial licence with all features enabled and the admin tenancy provisioned.
  3. Saves the licence locally + starts the hourly poll loop.

This means a fresh docker compose up produces a working trial without any manual licence step.

What the page shows

+----------------------------------------------------+
| Licence                              [ TRIAL ]      |
| Instance ID: abc123…                                |
| Hostname: portal.kwgroup.org.uk                     |
| Expires 15/05/2026  (17d left)  [↻ Refresh]         |
|----------------------------------------------------|
| Features enabled  |  Max users  |  Max tenants      |
|        27         |     50      |       1           |
|----------------------------------------------------|
| Active features (27)                                |
|  helpdesk  crm  rmm  projects  kb  esign  …         |
+----------------------------------------------------+

A licence has one of four statuses: TRIAL, ACTIVE, EXPIRED, or REVOKED.

Once a trial passes its expiry it becomes EXPIRED and an expired- licence banner appears across the portal for everyone.

To convert to paid, contact your licence provider. They issue/activate a licence on the server side and the next poll (or a manual Refresh) picks it up.

Per-tenant features

The licence sets the maximum feature set. Admin tenancy still picks which subset to enable per tenant via Tenants → Features.

Example: licence allows helpdesk + crm + rmm + projects + kb. Tenant "Acme" only wants helpdesk + RMM → uncheck the others on Acme. They can be re-enabled later without contacting the licence server.

Refreshing manually

If you've just renewed and don't want to wait for the next hourly poll, click ↻ Refresh from licence server on /admin/license. The page re-reads the licence immediately and shows the time it was updated.

There is currently no in-portal upload for a signed licence file and no setting to disable polling. Installs that cannot reach the licence server should speak to their licence provider.

Licence audit

Every poll, refresh, and feature toggle is recorded in the audit log.

Permissions

Action Role
View licence ADMIN / SUPER_ADMIN
Refresh from licence server ADMIN / SUPER_ADMIN
Toggle per-tenant features ADMIN / SUPER_ADMIN

Common workflows

Convert trial to paid

  1. Provider issues/activates a paid licence on the server side.
  2. Admin → Licence → Refresh from licence server.
  3. The expired/trial banner clears.

Add a feature mid-licence

  1. Provider extends the licence to include meetings.
  2. Refresh → meetings is now available to enable per-tenant.
  3. Tenant → Features… → tick meetings. Users see the new launcher tile once the change propagates.

See also

Still need help?

Log a support ticket and the team will pick it up from this page.