# IAS License Activator — CLI Reference - **Plugin slug:** `ias-license-activator` - **Version:** 1.1.16 - **CLI namespace:** `wp ias license-activator` - **Tier:** Commercial (licence required) - **Summary:** License server: generate, activate, validate, revoke and track licence keys, webhooks and packages. This reference is generated from the WP-CLI command docblocks (do not edit by hand). Every command accepts `--format=`. Every mutating command supports `--dry-run` (resolve + audit, no writes) and `--yes` (skip the confirmation prompt); destructive commands additionally prompt unless `--yes` is given, and any bulk-delete command refuses to run without an explicit scope argument — a required `--filter` on the record-deletion commands, or another mandatory bound such as `--max-age-days` — rather than defaulting to delete-all. **Authentication / trust model:** these commands run under WP-CLI, whose trust boundary is shell access — there is no separate capability check. Irreversible commands (flagged below) are guarded by `--dry-run`, a confirmation prompt (or `--yes`), a required scope argument on any bulk delete (a `--filter`, or another mandatory bound such as `--max-age-days`), and a before-state entry in the suite-wide CLI audit log. ## Commands ### `wp ias license-activator audit-log list` List entries from the suite-wide CLI audit log. **Synopsis:** `wp ias license-activator audit-log list [--since=] [--user=] [--plugin=] [--page=] [--per-page=] [--format=]` **Options:** - `[--since=]` — Only entries on/after this date (anything strtotime understands). - `[--user=]` — Filter by the WP user ID that ran the command. - `[--plugin=]` — Filter by the plugin slug that emitted the entry. - `[--page=]` — Page of results (1-based). - `[--per-page=]` — Results per page (capped at 1000). - `[--format=]` — Output format. **Examples:** ```bash wp ias license-activator audit-log list --plugin=serial-keys --format=json ``` --- ### `wp ias license-activator check-update` Simulate the REST check-update payload for a product slug (debug aid). **Synopsis:** `wp ias license-activator check-update [--current-version=] [--format=]` **Options:** - `` — Product update slug. - `[--current-version=]` — If given, report whether an update is available relative to this version. - `[--format=]` — Output format. **Examples:** ```bash wp ias license-activator check-update ias-serial-keys wp ias license-activator check-update ias-serial-keys --current-version=1.0.0 ``` **Related:** `wp ias license-activator inspect` --- ### `wp ias license-activator inspect` Report the plugin slug, version and CLI environment. **Synopsis:** `wp ias license-activator inspect [--format=]` **Options:** - `[--format=]` — Output format. **Examples:** ```bash wp ias license-activator inspect ``` **Related:** `wp ias license-activator check-update` --- ### `wp ias license-activator licenses activate` Force-activate a licence key on a site (admin/support tool). Delegates to IAS_Activation_Manager::activate(); honours the licence's activation limit and status exactly as the public REST endpoint does. **Synopsis:** `wp ias license-activator licenses activate [--dry-run] [--yes] [--format=]` **Options:** - `` — The licence key. - `` — The site URL to activate the licence on. - `[--dry-run]` — Report what would happen without recording the activation. - `[--yes]` — Skip the confirmation prompt. - `[--format=]` — Output format. **Examples:** ```bash wp ias license-activator licenses activate IAS-XXXX-YYYY-ZZZZ https://customer.example ``` **Related:** `wp ias license-activator licenses deactivate`, `wp ias license-activator licenses delete`, `wp ias license-activator licenses delete-bulk`, `wp ias license-activator licenses generate`, `wp ias license-activator licenses generate-bulk`, `wp ias license-activator licenses list`, `wp ias license-activator licenses regenerate`, `wp ias license-activator licenses revoke` --- ### `wp ias license-activator licenses deactivate` Force-deactivate a site binding from a licence key (admin/support tool). Delegates to IAS_Activation_Manager::deactivate() with deactivated_by='cli'. **Synopsis:** `wp ias license-activator licenses deactivate [--dry-run] [--yes] [--format=]` **Options:** - `` — The licence key. - `` — The site URL to deactivate. - `[--dry-run]` — Report what would happen without recording the deactivation. - `[--yes]` — Skip the confirmation prompt. - `[--format=]` — Output format. **Examples:** ```bash wp ias license-activator licenses deactivate IAS-XXXX-YYYY-ZZZZ https://customer.example ``` **Related:** `wp ias license-activator licenses activate`, `wp ias license-activator licenses delete`, `wp ias license-activator licenses delete-bulk`, `wp ias license-activator licenses generate`, `wp ias license-activator licenses generate-bulk`, `wp ias license-activator licenses list`, `wp ias license-activator licenses regenerate`, `wp ias license-activator licenses revoke` --- ### `wp ias license-activator licenses delete` > **⚠ Irreversible — `--dry-run` first.** 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. **Synopsis:** `wp ias license-activator licenses delete [--keep-audit] [--dry-run] [--yes] [--format=]` **Options:** - `` — The licence key to delete. - `[--keep-audit]` — Retain the licence's log rows (delete only the licence + activations). - `[--dry-run]` — Resolve and report the planned change without writing anything. - `[--yes]` — Skip the confirmation prompt. - `[--format=]` — Output format. **Returns:** A JSON object: { key_fingerprint — non-reversible key id; license_deleted — bool; activations_deleted — int; logs_deleted — int }. **Examples:** ```bash wp ias license-activator licenses delete IAS-XXXX-YYYY-ZZZZ --yes wp ias license-activator licenses delete IAS-XXXX-YYYY-ZZZZ --keep-audit ``` **Related:** `wp ias license-activator licenses activate`, `wp ias license-activator licenses deactivate`, `wp ias license-activator licenses delete-bulk`, `wp ias license-activator licenses generate`, `wp ias license-activator licenses generate-bulk`, `wp ias license-activator licenses list`, `wp ias license-activator licenses regenerate`, `wp ias license-activator licenses revoke` --- ### `wp ias license-activator licenses delete-bulk` > **⚠ Irreversible — `--dry-run` first.** 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=; 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. **Synopsis:** `wp ias license-activator licenses delete-bulk --filter= [--keep-audit] [--dry-run] [--yes] [--format=]` **Options:** - `--filter=` — A JSON object selecting which licences to delete. Honoured keys: status, product_id, customer_id, search. At least one is required. - `[--keep-audit]` — Retain each licence's log rows (delete only the licence + activations). - `[--dry-run]` — Resolve and report the matched count without deleting anything. - `[--yes]` — Skip the confirmation prompt. - `[--format=]` — 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 }. **Examples:** ```bash wp ias license-activator licenses delete-bulk --filter='{"status":"expired"}' --dry-run wp ias license-activator licenses delete-bulk --filter='{"product_id":42}' --yes ``` **Related:** `wp ias license-activator licenses activate`, `wp ias license-activator licenses deactivate`, `wp ias license-activator licenses delete`, `wp ias license-activator licenses generate`, `wp ias license-activator licenses generate-bulk`, `wp ias license-activator licenses list`, `wp ias license-activator licenses regenerate`, `wp ias license-activator licenses revoke` --- ### `wp ias license-activator licenses generate` Issue one or more new license keys for a product. Delegates to IAS_License_Manager::create() (the same path the admin Generate screen uses); each key is auto-generated, unique and encrypted at rest. **Synopsis:** `wp ias license-activator licenses generate [--customer=] [--quantity=] [--limit=] [--expires=] [--note=] [--dry-run] [--yes] [--format=]` **Options:** - `` — Product reference — numeric ID or SKU. - `[--customer=]` — Assign the new licence(s) to this customer (numeric WP user ID or email). - `[--quantity=]` — Number of licences to issue. - `[--limit=]` — Activation limit per licence (0 = unlimited). Defaults to the product's configured limit, or 1. - `[--expires=]` — Expiry date (anything strtotime understands). Omit for a lifetime licence. - `[--note=]` — Free-text note stored on each licence. - `[--dry-run]` — Validate and report what would be issued without writing anything. - `[--yes]` — Skip the confirmation prompt. - `[--format=]` — Output format. **Examples:** ```bash wp ias license-activator licenses generate 42 --customer=customer@example.com --quantity=3 wp ias license-activator licenses generate SKU-PRO --expires="+1 year" --dry-run ``` **Related:** `wp ias license-activator licenses activate`, `wp ias license-activator licenses deactivate`, `wp ias license-activator licenses delete`, `wp ias license-activator licenses delete-bulk`, `wp ias license-activator licenses generate-bulk`, `wp ias license-activator licenses list`, `wp ias license-activator licenses regenerate`, `wp ias license-activator licenses revoke` --- ### `wp ias license-activator licenses generate-bulk` Bulk-issue licences for a product, optionally one per customer from a file. 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. **Synopsis:** `wp ias license-activator licenses generate-bulk --count= [--customer-list=] [--prefix=] [--dry-run] [--yes] [--format=]` **Options:** - `` — Product reference — numeric ID or SKU. - `--count=` — Number of licences to issue (the cap when --customer-list is also given). - `[--customer-list=]` — Path to a file with one customer reference (ID or email) per line; issues one assigned licence per resolvable line. - `[--prefix=]` — Free-text prefixed to the note stored on each issued licence. - `[--dry-run]` — Resolve and report the planned count without issuing anything. - `[--yes]` — Skip the confirmation prompt. - `[--format=]` — Output format. **Returns:** A JSON object: { product_id — resolved product; planned — licences intended; created — issued count; failed — failed count; keys — issued licence keys }. **Examples:** ```bash wp ias license-activator licenses generate-bulk 42 --count=100 wp ias license-activator licenses generate-bulk SKU-PRO --customer-list=/tmp/customers.txt ``` **Related:** `wp ias license-activator licenses activate`, `wp ias license-activator licenses deactivate`, `wp ias license-activator licenses delete`, `wp ias license-activator licenses delete-bulk`, `wp ias license-activator licenses generate`, `wp ias license-activator licenses list`, `wp ias license-activator licenses regenerate`, `wp ias license-activator licenses revoke` --- ### `wp ias license-activator licenses list` List license keys with filters and pagination. **Synopsis:** `wp ias license-activator licenses list [--customer=] [--product=] [--status=] [--page=] [--per-page=] [--format=]` **Options:** - `[--customer=]` — Filter by customer (numeric WP user ID or email). - `[--product=]` — Filter by product (numeric ID or SKU). - `[--status=]` — Filter by license status (e.g. active, expired, revoked). - `[--page=]` — Page of results (1-based). - `[--per-page=]` — Results per page (capped at 1000). - `[--format=]` — Output format. **Examples:** ```bash wp ias license-activator licenses list --status=active wp ias license-activator licenses list --customer=customer@example.com --format=json ``` **Related:** `wp ias license-activator licenses activate`, `wp ias license-activator licenses deactivate`, `wp ias license-activator licenses delete`, `wp ias license-activator licenses delete-bulk`, `wp ias license-activator licenses generate`, `wp ias license-activator licenses generate-bulk`, `wp ias license-activator licenses regenerate`, `wp ias license-activator licenses revoke` --- ### `wp ias license-activator licenses regenerate` Regenerate the key for an existing licence (key rotation). 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. **Synopsis:** `wp ias license-activator licenses regenerate [--notify-customer] [--dry-run] [--yes] [--format=]` **Options:** - `` — The existing licence key to rotate. - `[--notify-customer]` — Best-effort email the new key to the licence's customer address. - `[--dry-run]` — Report what would happen without issuing or revoking anything. - `[--yes]` — Skip the confirmation prompt. - `[--format=]` — Output format. **Examples:** ```bash wp ias license-activator licenses regenerate IAS-XXXX-YYYY-ZZZZ --notify-customer ``` **Related:** `wp ias license-activator licenses activate`, `wp ias license-activator licenses deactivate`, `wp ias license-activator licenses delete`, `wp ias license-activator licenses delete-bulk`, `wp ias license-activator licenses generate`, `wp ias license-activator licenses generate-bulk`, `wp ias license-activator licenses list`, `wp ias license-activator licenses revoke` --- ### `wp ias license-activator licenses revoke` > **⚠ Irreversible — `--dry-run` first.** 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. Revoke a licence key (admin/support tool). 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. **Synopsis:** `wp ias license-activator licenses revoke [--reason=] [--dry-run] [--yes] [--format=]` **Options:** - `` — The licence key to revoke. - `[--reason=]` — Free-text reason stored on the revocation log entry. - `[--dry-run]` — Resolve and report the planned change without writing anything. - `[--yes]` — Skip the confirmation prompt. - `[--format=]` — 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 }. **Examples:** ```bash wp ias license-activator licenses revoke IAS-XXXX-YYYY-ZZZZ --reason="Chargeback" ``` **Related:** `wp ias license-activator licenses activate`, `wp ias license-activator licenses deactivate`, `wp ias license-activator licenses delete`, `wp ias license-activator licenses delete-bulk`, `wp ias license-activator licenses generate`, `wp ias license-activator licenses generate-bulk`, `wp ias license-activator licenses list`, `wp ias license-activator licenses regenerate` --- ### `wp ias license-activator licenses show` Show the full state of one license key. **Synopsis:** `wp ias license-activator licenses show [--format=]` **Options:** - `` — The license key. - `[--format=]` — Output format. **Examples:** ```bash wp ias license-activator licenses show IAS-XXXX-YYYY-ZZZZ --format=json ``` **Related:** `wp ias license-activator licenses activate`, `wp ias license-activator licenses deactivate`, `wp ias license-activator licenses delete`, `wp ias license-activator licenses delete-bulk`, `wp ias license-activator licenses generate`, `wp ias license-activator licenses generate-bulk`, `wp ias license-activator licenses list`, `wp ias license-activator licenses regenerate` --- ### `wp ias license-activator licenses sites deactivate` Force-deactivate one site binding from a licence key (admin/support tool). 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. **Synopsis:** `wp ias license-activator licenses sites deactivate [--dry-run] [--yes] [--format=]` **Options:** - `` — The licence key. - `` — The site URL to deactivate. - `[--dry-run]` — Resolve and report the planned change without writing anything. - `[--yes]` — Skip the confirmation prompt. - `[--format=]` — Output format. **Returns:** A JSON object: { key_fingerprint — non-reversible key id; site_url — the deactivated site; plus the manager's result data }. **Examples:** ```bash wp ias license-activator licenses sites deactivate IAS-XXXX-YYYY-ZZZZ https://customer.example ``` **Related:** `wp ias license-activator licenses sites list` --- ### `wp ias license-activator licenses sites list` List the site/domain activations bound to a license key. **Synopsis:** `wp ias license-activator licenses sites list [--status=] [--format=]` **Options:** - `` — The license key. - `[--status=]` — Filter activations by status. - `[--format=]` — Output format. **Examples:** ```bash wp ias license-activator licenses sites list IAS-XXXX-YYYY-ZZZZ ``` **Related:** `wp ias license-activator licenses sites deactivate` --- ### `wp ias license-activator package delete-version` > **⚠ Irreversible — `--dry-run` first.** 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 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. **Synopsis:** `wp ias license-activator package delete-version [--dry-run] [--yes] [--format=]` **Options:** - `` — Product update slug. - `` — The version to unpublish (must equal the product's current version). - `[--dry-run]` — Resolve and report the planned change without writing anything. - `[--yes]` — Skip the confirmation prompt. - `[--format=]` — 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 }. **Examples:** ```bash wp ias license-activator package delete-version ias-serial-keys 1.4.2 --yes ``` **Related:** `wp ias license-activator package list-versions` --- ### `wp ias license-activator package list-versions` List the available package version(s) for a product update slug. The server tracks only the current published version (there is no version history table), so this reports a single row for that version. **Synopsis:** `wp ias license-activator package list-versions [--format=]` **Options:** - `` — Product update slug. - `[--format=]` — Output format. **Examples:** ```bash wp ias license-activator package list-versions ias-serial-keys ``` **Related:** `wp ias license-activator package delete-version` --- ### `wp ias license-activator products list` List products that have licensing enabled. **Synopsis:** `wp ias license-activator products list [--format=]` **Options:** - `[--format=]` — Output format. **Examples:** ```bash wp ias license-activator products list --format=json ``` --- ### `wp ias license-activator webhooks delete` > **⚠ Irreversible — `--dry-run` first.** 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. **Synopsis:** `wp ias license-activator webhooks delete [--dry-run] [--yes] [--format=]` **Options:** - `` — The delivery record id to delete. - `[--dry-run]` — Resolve and report the planned change without writing anything. - `[--yes]` — Skip the confirmation prompt. - `[--format=]` — Output format. **Returns:** A JSON object: { id — the deleted record id; deleted — bool; remaining — count of records left }. **Examples:** ```bash wp ias license-activator webhooks delete d1 --yes ``` **Related:** `wp ias license-activator webhooks list`, `wp ias license-activator webhooks rotate-secret` --- ### `wp ias license-activator webhooks deliveries list` List recent webhook delivery attempts. 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. **Synopsis:** `wp ias license-activator webhooks deliveries list [--webhook=] [--status=] [--since=] [--page=] [--per-page=] [--format=]` **Options:** - `[--webhook=]` — Filter to one webhook endpoint ID. - `[--status=]` — Filter by delivery status (e.g. success, failed). - `[--since=]` — Only deliveries on/after this date (anything strtotime understands). - `[--page=]` — Page of results (1-based). - `[--per-page=]` — Results per page (capped at 1000). - `[--format=]` — Output format. **Examples:** ```bash wp ias license-activator webhooks deliveries list --status=failed ``` **Related:** `wp ias license-activator webhooks deliveries retry` --- ### `wp ias license-activator webhooks deliveries retry` Re-dispatch a recorded webhook delivery by its id. 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). **Synopsis:** `wp ias license-activator webhooks deliveries retry [--dry-run] [--yes] [--format=]` **Options:** - `` — The delivery record id to retry. - `[--dry-run]` — Resolve and report the planned retry without sending anything. - `[--yes]` — Skip the confirmation prompt. - `[--format=]` — Output format. **Returns:** A JSON object: { id — the retried record id; retried — bool; host — target host; event — the webhook event }. **Examples:** ```bash wp ias license-activator webhooks deliveries retry d1 --yes ``` **Related:** `wp ias license-activator webhooks deliveries list` --- ### `wp ias license-activator webhooks list` List the configured webhook endpoint (secret is never shown). **Synopsis:** `wp ias license-activator webhooks list [--format=]` **Options:** - `[--format=]` — Output format. **Examples:** ```bash wp ias license-activator webhooks list --format=json ``` **Related:** `wp ias license-activator webhooks delete`, `wp ias license-activator webhooks rotate-secret` --- ### `wp ias license-activator webhooks rotate-secret` Rotate the HMAC signing secret used for outbound webhook deliveries. 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. **Synopsis:** `wp ias license-activator webhooks rotate-secret [--webhook=] [--dry-run] [--yes] [--format=]` **Options:** - `[--webhook=]` — Logical webhook identifier to tag in the audit log (a single endpoint is configured suite-wide; this is recorded for traceability only). - `[--dry-run]` — Report that a rotation would occur without changing the stored secret. - `[--yes]` — Skip the confirmation prompt. - `[--format=]` — Output format. **Examples:** ```bash wp ias license-activator webhooks rotate-secret --yes ``` **Related:** `wp ias license-activator webhooks delete`, `wp ias license-activator webhooks list` ---