API reference: status and licence

Check that the API answers, that protection is enforcing, and the licence state; enter a licence key; and wait for a saved change to be in force with GET /api/config-apply/status.

Wait for a change to be in force

GET /api/config-apply/status

Needs a Viewer or Admin key.

Many changes are saved at once and applied in the background; their reply carries applySeq. The change is in force when completed here reaches that number. outcome is applied, deferred (saved, taken up as soon as it can be) or failed, with message saying why.

Replies

Status Meaning Body
200 OK ConfigApplyStatus

Reply fields

Field Type Description
state string applying while changes are still being applied, idle when nothing is waiting. Always present.
requested integer A counter of the changes asked for since PortWall started. A save returns the number its change was given (applySeq). Always present.
completed integer A counter of the changes applied so far. A change is in force once this reaches the applySeq its save returned. Always present.
outcome string How the latest apply ended: applied, deferred (saved, and taken up as soon as it can be), failed (see message), or none before the first apply. Always present.
message string Why the latest apply was deferred or failed. Null when it was applied or nothing has been applied yet.
completedAt date-time When the latest apply finished. Null until the first apply after PortWall started.
reason string A short label for the change that was last asked for, such as the site it was for. Null before the first change.

Check the licence

GET /api/license

Needs a Viewer or Admin key.

state is Licensed, Grace or Unlicensed. While Unlicensed, enforcementActive is false: attacks are still detected and recorded, but nothing is blocked until the licence is renewed.

Replies

Status Meaning Body
200 OK LicenseView

Reply fields

Field Type Description
licenseKeyMasked string The licence key with all but its last characters hidden, so you can tell which key is in use. Empty when there is none. Always present.
licenseKeyPresent boolean True when a licence key is set. Always present.
licenseKeyFromConsole boolean True when the key in use was entered in the console or through this API; false when it comes from the server's configuration file. Always present.
enabled boolean False only when licensing is not turned on for this installation; then state is Licensed and the other fields are absent. Always present.
state string Licensed (everything active), Grace (the licence could not be confirmed recently; protection stays fully on for at most 72 hours) or Unlicensed (blocking is switched off). Always present.
reason string Why the licence is in this state, in words. Always present.
installId string This installation's ID. Quote it when you write to PortWall about a licence. Always present.
enforcementActive boolean Whether PortWall is blocking attacks. False when Unlicensed: attacks are still detected and recorded, but not blocked. Always present.
scanningActive boolean Whether uploaded-file scanning is allowed by the licence. Always present.
tier string The name of your edition, for example Windows Premium or Appliance Enterprise. Always present.
premium boolean True when your edition is Premium or higher. Always present.
enterprise boolean True when your edition is Enterprise, which adds API protection. Always present.
herdImmunityActive boolean True when this server receives protection from attacker data shared by other PortWall servers (herd immunity). Needs Premium or higher. Always present.
herdImmunityContributing boolean True when this server shares its attack data with other PortWall servers. A Standard server contributes without receiving. Always present.
smartTuningActive boolean True when the Smart Tuning Advisor, which suggests rule exclusions, is available. Always present.
premiumThreatIntelActive boolean True when Premium Threat Intelligence is available. Always present.
managedCertRenewalActive boolean True when PortWall may renew its managed TLS certificates. Always present.
blockStatePreserved boolean Always true: current blocks and your settings are kept when a licence lapses, and work again once it is renewed. Always present.

Enter or replace the licence key

POST /api/license/key

Needs an Admin key.

Saves the key and asks for a licence check at once, so the new state shows within moments on GET /api/license.

Request body: SetLicenseKeyRequest

Field Type Description
licenseKey string The licence key, as shown in the customer portal. Required; at most 200 characters. Optional.

Replies

Status Meaning Body
200 OK SetLicenseKeyResult
400 Bad Request ApiError

Reply fields

Field Type Description
saved boolean True when the key was saved. Always present.
licenseKeyMasked string The saved key with all but its last characters hidden. Always present.
activating boolean True when a licence check was asked for at once, so the new state shows within moments on GET /api/license. False when the key was saved but the check waits for the next scheduled one. Always present.

Check that protection is working

GET /api/protection-status

Needs a Viewer or Admin key.

The same checks as the Overview's Protection status cards. allHealthy is true when every protection that is turned on is enforcing; problems lists those that are on but not working, each with fix.

Replies

Status Meaning Body
200 OK ProtectionStatusView

Reply fields

Field Type Description
available boolean False only for a short time after PortWall starts, before the first check has finished; the other fields are then empty. Always present.
generatedAt date-time When these checks were made. Null while available is false.
summary string One line saying how protection is doing, for example how many protections are on and enforcing. Always present.
criticalCount integer How many protections are turned on but not enforcing anything. Always present.
warningCount integer How many protections are enforcing but degraded. Always present.
problemCount integer criticalCount plus warningCount: the number of protections that need attention. Always present.
allHealthy boolean True when problemCount is 0. Protections that are deliberately off do not count as problems. False while available is false. Always present.
features list of ProtectionFeatureView Every protection and its state. Always present.
problems list of ProtectionFeatureView Only the protections that need attention, most serious first. Each has a fix. Always present.

Check that the API is answering

GET /health

No key needed.

Answers ok while the management service is running. It says nothing about protection: use /api/protection-status for that.

Replies

Status Meaning Body
200 OK HealthView

Reply fields

Field Type Description
status string Always ok while the management service is running. Always present.
Updated 2026-10-27Something unclear or missing? Tell us.