License server: generate, activate, validate, revoke and track licence keys, webhooks and packages.
Namespacewp ias license-activator
Slugias-license-activator
Version 1.1.16
Tier Commercial (licence required)
Commands 23
Conventions on this page
Every command accepts --format=<json|table|csv|yaml>. Commands marked Write accept --dry-run (resolve, audit, write nothing) and --yes (skip the prompt). Commands marked Irreversible additionally prompt unless --yes is passed, and any bulk delete refuses to run without an explicit scope argument rather than defaulting to delete-all.
This command permanently destroys data or applies a terminal state that cannot be undone from the CLI. Preview the exact effect with --dry-run, then re-run with --yes once you are certain.
Permanently delete a licence key and its dependent rows (NON-RECOVERABLE).
Removes the licence row (IAS_License_Manager::delete()) plus its site activations, and — unless --keep-audit is given — its per-licence log rows. This is irreversible: there is no soft-delete. To merely stop a key validating while keeping the record, use licenses revoke instead. Only a non-reversible fingerprint of the key is written to the audit log.
Options
Argument
Required
Type
Description
<key>
yes
positional
The licence key to delete.
[--keep-audit]
no
flag
Retain the licence's log rows (delete only the licence + activations).
[--dry-run]
no
flag
Resolve and report the planned change without writing anything.
[--yes]
no
flag
Skip the confirmation prompt.
[--format=<format>]
no
flag (value)
Output format.
Returns
A JSON object: { key_fingerprint — non-reversible key id; license_deleted — bool; activations_deleted — int; logs_deleted — int }.
This command permanently destroys data or applies a terminal state that cannot be undone from the CLI. Preview the exact effect with --dry-run, then re-run with --yes once you are certain.
Bulk-delete every licence matching a JSON filter (NON-RECOVERABLE).
Requires an explicit --filter=<json>; there is deliberately no "--all" — a bare wildcard is refused. Each matched licence is deleted along with its activations and (unless --keep-audit) its log rows, exactly as licenses delete does per key. Only non-reversible key fingerprints are written to the audit log.
A single run processes at most 1000 licences. The true (uncapped) match count is reported as total_matching and, when it exceeds the per-run cap, capped is true and a warning is emitted — re-run the command after each batch to delete the remainder.
Options
Argument
Required
Type
Description
--filter=<json>
yes
flag (value)
A JSON object selecting which licences to delete. Honoured keys: status, product_id, customer_id, search. At least one is required.
[--keep-audit]
no
flag
Retain each licence's log rows (delete only the licence + activations).
[--dry-run]
no
flag
Resolve and report the matched count without deleting anything.
[--yes]
no
flag
Skip the confirmation prompt.
[--format=<format>]
no
flag (value)
Output format.
Returns
A JSON object: { total_matching — true (uncapped) match count; matched — number selected this run (≤1000); capped — true when total_matching exceeds the per-run cap; deleted — number deleted; activations_deleted — int; logs_deleted — int; fingerprints — non-reversible key ids }.
With --customer-list each non-empty line (a numeric ID or an email) is resolved and gets one assigned licence; the issue count defaults to the line count (capped by --count when both are given). Without a list, --count unassigned licences are issued into the pool. Each licence is created via IAS_License_Manager::create() exactly as licenses generate does. Only non-reversible key fingerprints are written to the audit log.
Options
Argument
Required
Type
Description
<product>
yes
positional
Product reference — numeric ID or SKU.
--count=<n>
yes
flag (value)
Number of licences to issue (the cap when --customer-list is also given).
[--customer-list=<file>]
no
flag (value)
Path to a file with one customer reference (ID or email) per line; issues one assigned licence per resolvable line.
[--prefix=<text>]
no
flag (value)
Free-text prefixed to the note stored on each issued licence.
[--dry-run]
no
flag
Resolve and report the planned count without issuing anything.
License keys are immutable at rest by design (IAS_License_Manager::update() strips the key column), so "regenerate" issues a fresh licence carrying the same entitlement (product, customer, activation limit, expiry) and revokes the old key. The old key stops validating; the customer keeps their entitlement under the new key. Both fingerprints are written to the audit log so support can tell a customer their key changed.
Options
Argument
Required
Type
Description
<key>
yes
positional
The existing licence key to rotate.
[--notify-customer]
no
flag
Best-effort email the new key to the licence's customer address.
[--dry-run]
no
flag
Report what would happen without issuing or revoking anything.
This command permanently destroys data or applies a terminal state that cannot be undone from the CLI. Preview the exact effect with --dry-run, then re-run with --yes once you are certain.
Sets the licence status to "revoked" and deactivates every site bound to it via IAS_License_Manager::revoke(). The key continues to exist (so it stays searchable and auditable) but stops validating. Only a non-reversible fingerprint of the key is written to the audit log.
Options
Argument
Required
Type
Description
<key>
yes
positional
The licence key to revoke.
[--reason=<text>]
no
flag (value)
Free-text reason stored on the revocation log entry.
[--dry-run]
no
flag
Resolve and report the planned change without writing anything.
[--yes]
no
flag
Skip the confirmation prompt.
[--format=<format>]
no
flag (value)
Output format.
Returns
A JSON object: { status_before — licence status prior to revocation; status_after — "revoked"; reason — recorded reason; key_fingerprint — non-reversible key id }.
Delegates to IAS_Activation_Manager::deactivate() with deactivated_by='cli', freeing one activation slot on the licence. Only a non-reversible fingerprint of the key is written to the audit log.
Options
Argument
Required
Type
Description
<key>
yes
positional
The licence key.
<site_url>
yes
positional
The site URL to deactivate.
[--dry-run]
no
flag
Resolve and report the planned change without writing anything.
[--yes]
no
flag
Skip the confirmation prompt.
[--format=<format>]
no
flag (value)
Output format.
Returns
A JSON object: { key_fingerprint — non-reversible key id; site_url — the deactivated site; plus the manager's result data }.
This command permanently destroys data or applies a terminal state that cannot be undone from the CLI. Preview the exact effect with --dry-run, then re-run with --yes once you are certain.
Unpublish a product's current package version (stop advertising updates).
SINGLE-VERSION MODEL: the licence server tracks only one CURRENT published version per product, in the post meta _ias_license_current_version — there is no version-history table. This command therefore only acts when <version> matches that current version: it clears the meta, after which the slug stops advertising an available update via check-update. A non-matching version is rejected (real) or reported as not found (dry-run); there are no older versions to delete.
Options
Argument
Required
Type
Description
<slug>
yes
positional
Product update slug.
<version>
yes
positional
The version to unpublish (must equal the product's current version).
[--dry-run]
no
flag
Resolve and report the planned change without writing anything.
[--yes]
no
flag
Skip the confirmation prompt.
[--format=<format>]
no
flag (value)
Output format.
Returns
A JSON object: { slug — the product slug; product_id — resolved product; version — the requested version; was_current — whether it matched; cleared — bool }.
This command permanently destroys data or applies a terminal state that cannot be undone from the CLI. Preview the exact effect with --dry-run, then re-run with --yes once you are certain.
Delete one recorded webhook delivery row by its id.
Removes a single entry from the ias_license_webhook_deliveries delivery log (the most-recent-500 record of webhook delivery attempts, written automatically at dispatch time). This clears the historical record only; it does not affect webhook configuration. The real path errors if no row matches the id.
Options
Argument
Required
Type
Description
<id>
yes
positional
The delivery record id to delete.
[--dry-run]
no
flag
Resolve and report the planned change without writing anything.
[--yes]
no
flag
Skip the confirmation prompt.
[--format=<format>]
no
flag (value)
Output format.
Returns
A JSON object: { id — the deleted record id; deleted — bool; remaining — count of records left }.
Every webhook delivery attempt (success or failure) is recorded automatically at dispatch time in the ias_license_webhook_deliveries option — a FIFO log of the most recent 500 attempts. Each row reports the delivery id, the webhook id, event, status, response code, duration and timestamp (the full payload and response excerpt are retained in the stored record and surfaced in --format=json). When no deliveries have been recorded this returns an empty list.
Options
Argument
Required
Type
Description
[--webhook=<id>]
no
flag (value)
Filter to one webhook endpoint ID.
[--status=<status>]
no
flag (value)
Filter by delivery status (e.g. success, failed).
[--since=<date>]
no
flag (value)
Only deliveries on/after this date (anything strtotime understands).
[--page=<page>]
no
flag (value)
Page of results (1-based).
[--per-page=<per-page>]
no
flag (value)
Results per page (capped at 1000).
[--format=<format>]
no
flag (value)
Output format.
Example
wp ias license-activator webhooks deliveries list --status=failed
Looks up the delivery row in the ias_license_webhook_deliveries log (every delivery attempt is recorded automatically at dispatch time, retaining its url and payload) and re-sends it through IAS_License_Webhook_Manager::process_webhook() — the same public dispatch path used for live deliveries, so HMAC signing, the SSRF host guard and the retry/backoff schedule all apply. Errors if the record cannot be rebuilt. The audit log records the delivery id, target host and event only (never the full payload).
Options
Argument
Required
Type
Description
<id>
yes
positional
The delivery record id to retry.
[--dry-run]
no
flag
Resolve and report the planned retry without sending anything.
[--yes]
no
flag
Skip the confirmation prompt.
[--format=<format>]
no
flag (value)
Output format.
Returns
A JSON object: { id — the retried record id; retried — bool; host — target host; event — the webhook event }.
Generates a fresh cryptographically-random secret and persists it via IAS_License_Webhook_Manager::save_settings() (preserving every other webhook setting). The NEW secret is printed once so you can update the receiving endpoint; only a non-reversible fingerprint is written to the audit log. After rotation, any receiver still using the old secret will reject deliveries until reconfigured.
Options
Argument
Required
Type
Description
[--webhook=<id>]
no
flag (value)
Logical webhook identifier to tag in the audit log (a single endpoint is configured suite-wide; this is recorded for traceability only).
[--dry-run]
no
flag
Report that a rotation would occur without changing the stored secret.