Licensing

An Athena server is licensed with a single license certificate — a .lic.cer file issued for your organisation. The server checks it locally against the licensing authority built into Athena: there is no license server, no activation call and no periodic check-in, so licensing works the same on a fully air-gapped network as anywhere else. This page explains the license states, what a lapsed license does and does not stop, the limits and features a license grants, the expiry warnings, and how to install or renew a license from the console, the REST API or PowerShell.

A license problem never takes your server down

A server with a missing, expired or invalid license still starts, still lets you sign in, and keeps receiving agent check-ins and inventory. What stops is new work — see What is blocked. Installing a license is always possible, even on an unlicensed or expired server, because that is exactly when you need to install one.

Viewing the license#

Open Settings → License. The tab shows:

Viewing the tab requires the settings.view permission; installing a license requires settings.manage. In the shipped role bundles both belong to Admin. Neither permission is ever restricted by the license itself. The tab re-reads the license periodically, so a page left open reflects an expiry that happens while you are looking at it.

License states#

Athena works out the state from the expiry date every time it is asked — not from a value captured when the server started — so a license that expires while the server is running is treated as expired straight away, with no restart.

Console labelAPI stateMeaningNew work allowed?
LicensedValidA valid license is in force and has not reached its expiry date (or has none).Yes
Expired — in grace periodGraceThe expiry date has passed but the license's grace period has not ended. Everything still works — this is the signal to renew now.Yes
License expiredExpiredThe expiry date and the grace period are both behind you.No
Not licensedUnlicensedNo valid license is installed — for example a fresh install, or a file that is missing or cannot be verified.No

The length of the grace period is set in the license certificate itself.

What is blocked when the license is not in force#

In the License expired and Not licensed states, Athena refuses to start new work:

These keep working: agent check-in, inventory collection, signing in, and all read access — every page, report and record you already have stays visible. Nothing is deleted.

A refused action returns a message that says why and how to fix it, for example:

Command execution is blocked: this server's license expired on 2026/09/30 00:00:00 and its
grace period has ended. Upload a current license file under Settings to restore it.
Agent check-in, inventory collection and all read access are unaffected.

Each refusal is also written to the audit log as a LicenseBlocked event (see Audit trail).

Agent and user limits#

A license can cap two counts:

LimitChecked when
AgentsA new agent enrolls.
User accountsA console account is created — manually, or automatically for a directory / SSO user at first login.

When a limit is used up, the new agent or account is refused with a message naming the licensed maximum and how many already exist. Existing agents and accounts are untouched and remain fully usable — a limit only stops new ones. The very first administrator account of a fresh install is always created, so a new server can be signed in to and licensed.

Licensed features#

Some capabilities are switched on per license. The Features list on the License tab shows which ones yours includes. They include:

Feature (console label)What it covers
Remote control and screen sharingRemote desktop, session recordings, the screen-share relay, RustDesk, and changes made through the remote file browser, remote registry editor and remote services control.
Report builderReports and report settings.
Server-to-server settings syncPushing settings to peer servers with Settings Sync.
Windows Update / WSUS managementThe Windows Update catalogue and scheduled update scans.

On a valid license, a feature marked Not included is unavailable to every user, whatever their role: its pages and settings tabs are hidden, its API calls return 403 Forbidden, and a scheduled job that depends on it (for example a Windows Update scan) records the refusal as its result. If you open such a page directly, Athena explains that your role or this server's license does not include it.

When the license lapses, Athena does not remove read access to these features — you can still open existing reports, for example. The new-work blocks above apply instead, and changes that depend on a licensed feature (such as a settings-sync push or a remote registry edit) are refused. Separately licensed modules are the exception: see below.

Separately licensed modules

These modules are licensed on their own, apart from the features above:

Module (console label)License featureWhat it covers
BitLockermodule.bitlockerBitLocker Management: encryption status, recovery-key escrow and reveal, policies and enforcement, key rotation, and the BitLocker compliance baseline. Also includes FileVault recovery-key escrow for Macs.
Sysmonmodule.sysmonSysmon Configuration Management: the Policies → Sysmon page, the agent Sysmon tab, the dashboard widget, and Sysmon status and configuration deploys.
Power Managementmodule.powerPower Management: the Policies → Power Management page, the agent Power section, power policies and assignments, and power status and apply requests to agents.
BIOS Configurationmodule.biosBIOS Configuration: the Policies → BIOS page, model catalog, baselines and BIOS compliance view, the agent BIOS section, the Module.bios.* filter fields, the BIOS REST endpoints and cmdlets, BIOS read requests to agents, and BIOS remediation.
Restart Policiesmodule.restartRestart Policies: the Policies → Restart Policies page, the Pending restart page, the agent Restart Policy tab, the Module.restart.* filter fields, the restart REST endpoints, and sending restart policies to agents. Agents that already hold a policy stop restarting when its lease runs out.
Shortcutsmodule.shortcutsShortcuts: the Policies → Shortcuts page and editor, the agent Shortcuts tab, the Module.shortcuts.* filter fields, the shortcuts REST endpoints and cmdlets, and sending shortcut policies to agents. Shortcuts already created stay on machines; agents stop changing them when their policy lease runs out.

Modules follow stricter rules than the other features:

Expiry warnings#

A banner appears at the top of every console page as the expiry date approaches:

WhenBannerCan be hidden?
14 days or fewer before expiry (more urgent styling at 7 and at 3 days)License expires in N days / tomorrow / todayYes, for the rest of the day
In the grace periodLicense EXPIRED — N days of grace remainYes, for the rest of the day
Expired past graceLicense expired — deployments and enrollment are disabledNo
No license installedNo license installed — deployments and enrollment are disabledNo

Users who can view settings also get a View license link that opens Settings → License. A license with no expiry date never shows a banner. If you hide the banner and it moves to a more serious stage, it reappears.

Installing or renewing a license#

  1. Copy the .lic.cer file you received to a machine that can reach the Athena console. On an air-gapped network, bring it in on approved media as you would any other file.
  2. Open Settings → License and, under Install a license, click Choose license file.
  3. Select the file. Athena shows Verifying and installing… and then either License installed. or the reason it was refused.

What happens when you upload:

There is no “remove license” action: you replace a license by installing its successor. The upload accepts files up to 64 KB — a license certificate is only a few kilobytes.

If the upload is refused

Every refusal leaves the current license in force and tells you what was wrong:

Reason shownWhat to do
No file, or the file was emptySelect the .lic.cer certificate issued for this server.
Not an X.509 certificateUpload the file exactly as issued — not a renamed, edited, re-saved or truncated copy.
Not issued by the licensing authority this build trustsCheck the file came from your Athena supplier and was not modified in transit.
A genuine license, but not for AthenaThe message lists the products it does cover. Ask your supplier for an Athena license.
Already expired and past its grace periodThe message gives the expiry date. Upload the renewal instead.
Refused for another reasonCheck whether the license has been revoked, is bound to different hardware, or is restricted to an older Athena version.
The file could not be written to diskMake sure the license directory is writable.
Written, but could not be put into forceThe previous license is still in effect. Restart Athena to load the new file, and check the server log for the reason.

Where the license file lives#

Uploading through the console or API writes the certificate to the server's license path, which is also where the server looks for it at startup:

DeploymentDefault path
Virtual appliance/data/athena/license.lic.cer — alongside the database, so it survives appliance updates. Shown for reference; the appliance has no shell, so install the license from the web console.
WindowsC:\ProgramData\Athena\license.lic.cer
Linux/usr/share/Athena/license.lic.cer

To use a different location, set Licensing:FilePath in appsettings.json, or the environment variable Licensing__FilePath. The directory is created on first install if it does not exist, and must be writable by the account the server runs as. You can also place the certificate at this path before the server starts; it is loaded at startup. Include this file (and its .bak copies, if you want them) in your data backups.

REST API#

Method & pathPermissionPurpose
GET /api/licensesettings.viewCurrent licensing state. Always 200 — an unlicensed server answers with isLicensed: false, not an error.
POST /api/license/uploadsettings.manageInstall a license. Multipart form upload with the certificate in a field named file.
curl -k -H "Authorization: Bearer $TOKEN" https://athena.example.local:8443/api/license

curl -k -H "Authorization: Bearer $TOKEN" \
     -F "file=@renewal.lic.cer" \
     https://athena.example.local:8443/api/license/upload

The data object returned by both calls includes:

FieldMeaning
stateValid, Grace, Expired or Unlicensed. The one field that tells “never licensed” apart from “lapsed”.
isLicensedtrue when new work is allowed (Valid or Grace).
isExpired / isInGracePeriodThe expiry date has passed / the server is inside the grace period.
licenseType, customerNameAs shown on the License tab.
expiresAt, daysUntilExpiryExpiry date and days left (negative once expired; empty when the license has no expiry).
agentLimit, userLimitLicensed maximums; 0 means no cap.
remoteControlEnabled, reportsEnabled, settingsSyncEnabled, wsusEnabledWhether each licensed feature is included.
modulesOne entry per separately licensed module installed on the server, each with id (for example bitlocker), name (BitLocker), feature (module.bitlocker) and enabled (whether the license includes it). Modules that are not licensed separately are not listed.

A successful upload returns 200 with the new state, so you do not need a second call to confirm it. A refused file returns 400 with the reason in message; a file larger than 64 KB is rejected with 413; and 500 means the file was written but not put into force (restart the server, as described above).

PowerShell#

The Athena PowerShell module has two license cmdlets:

# Show everything, including limits and feature flags
Get-AthenaLicense | Format-List

# Warn when the license has lapsed or has less than 30 days left
$license = Get-AthenaLicense
if (-not $license.IsLicensed -or $license.DaysUntilExpiry -lt 30) {
    Write-Warning "Athena license: $($license.State), $($license.DaysUntilExpiry) day(s) left"
}

# Install a renewal and report what it grants
$new = Install-AthenaLicense -Path "D:\renewal.lic.cer"
"Now $($new.State), expires $($new.ExpiresAt), $($new.AgentLimit) agents"

Audit trail#

Licensing activity is recorded in the audit log, so it can be filtered and forwarded to your SIEM:

Event typeRecorded when
LicenseUploadedEvery install attempt, successful or refused, with who made it and from where. A successful install records the previous and new license IDs, the new expiry, every limit and every feature's on/off state, and where the previous file was backed up.
LicenseExpiringThe license enters a new warning stage before expiry, or enters its grace period. Checked hourly.
LicenseLapsedThe license stops being in force, or the server is found running without a valid license. Checked hourly.
LicenseBlockedAn action is refused because of the license — lapsed, over a limit, or a feature not included.