License Management

A license ties a customer to one plugin and (once activated) one domain. This page covers the full lifecycle: generating, activating, expiring, and revoking keys.

Key format

Keys are generated with crypto.randomBytes and look like:

DW-A3F9-KX2M-9PLQ-77TN

Uppercase alphanumeric, grouped in fours, prefixed DW-. The API normalizes and validates this format before any lookup.

Generating a license

From Licenses → Generate License(or the button on a plugin's detail page), choose the plugin and optionally set:

  • Customer name / email — for your records; shown in the table and logs.
  • Expiry date — leave empty for a lifetime license, or set a date for a subscription. After that date, verification fails and the status flips to expired.

A freshly generated key starts as inactive and has no domain — it becomes active and binds to a domain on first activation from a WordPress site.

Statuses

StatusMeaning
inactiveIssued but never activated, or manually deactivated. Not bound to a domain.
activeActivated and bound to a domain. Verification and updates succeed.
expiredPast its expiry date or revoked. Verification and downloads are refused.

Domain binding

Each license is single-site. On activation the submitted domain is normalized (protocol, www., path, and port stripped) and stored. If a different domain later tries to activate or verify the same key, it is rejected with a domain-mismatch error.

To move a license to a new domain, use Deactivate (clears the bound domain), then let the new site activate it.

Row actions

  • Activate — force a license to active without a site call (rarely needed).
  • Deactivate — clear the domain and set inactive, freeing the key for another site.
  • Revoke — set expired and unbind the domain. Takes effect immediately: the next verification or update download fails.
  • Delete — permanently remove the license and its logs.

Activity & logs

Every activation, verification, deactivation, and download is written to license_logs with the domain, IP address, user agent, and a note. View them per-license on the license detail page, or across all plugins under Logs.