Skip to content

Managing Licenses ​

LicenseDock issues a license key when an order completes for a product with Requires License set to Yes. Each license belongs to one customer, one product and one subscription record. LicenseDock creates a subscription record for every purchase, including one-time purchases, so the license always has a subscription to follow.

License Key Format ​

Keys are 32 uppercase hex characters in four 8-character segments:

A1B2C3D4-E5F6A7B8-C9D0E1F2-A3B4C5D6

Keys are generated with random_bytes and stored unique. The API matches keys case-insensitively, so a customer who pastes the key in lowercase still validates.

What a License Holds ​

FieldNotes
License KeyThe key above
CustomerOwner of the license
ProductWhat the license unlocks
SubscriptionThe subscription record the license follows
Statusactive, expired, suspended, revoked or cancelled
Activation TypeCopied from the plan: domain, device, seat or instance
Activation LimitCopied from the plan when issued. 0 = unlimited. Editable per license
ActivationsCurrent activations used
ExpiresCopied from the subscription. Empty for lifetime purchases
Last Check / Total ChecksTime, IP and count of validate API calls

For recurring plans the expiry date includes a 2-day buffer past the billing date, so access never lapses while a renewal payment is being confirmed.

Statuses ​

StatusMeaningSet by
activeThe API accepts the keyOrder completion, renewal, dispute won
expiredThe subscription ended without renewalThe Reminders & Expiration task, or a dunning grace period running out
suspendedAccess paused, reversibleA chargeback or dispute being opened, or an admin setting the subscription to Suspended
revokedAccess removed after a full refund, a lost dispute or a voided orderRefund and dispute handling
cancelledReserved as a terminal admin stateNot set by any automatic flow in 1.9.3

Only active licenses can activate, validate as valid or download. A license whose expiry date has passed is treated as expired by the API straight away, even before the scheduled task updates its status.

Licenses are never deleted. Status changes keep the history.

Lifecycle ​

EventSubscriptionLicense
Order completesCreated as active (or trialing)Created as active, expiry from the subscription
Gateway renewal succeedsStays active, dates move forwardExpiry extended
Renewal payment failspast_dueStays active while the gateway retries
Dunning grace period runs outexpiredexpired
Late renewal succeeds after thatBack to activeBack to active
Customer cancels auto-renewalStays active until the paid period ends, then expiredStays active, then expired
Renewal through checkout (Renew button)Back to active, new expiryBack to active, new expiry
Full refundcancelledrevoked
Partial refundUnchangedUnchanged
Dispute openedUnchangedsuspended
Dispute wonUnchangedBack to active
Dispute lostcancelledrevoked

See Subscriptions for the full subscription lifecycle and Dunning for failed payments.

Admin Screen ​

Components → LicenseDock → Licenses lists every license with its key, customer, product, status, activations and expiry.

FilterOptions
SearchLicense ID, key, customer name, customer email, product title
ProductAny product
StatusActive, Expired, Revoked, Suspended, Cancelled
ModeLive (default), Test, All. Test licenses come from test/sandbox orders

Each row's menu has three actions:

ActionWhat it does
ViewOpens License Details: key, product, customer, status, activation type, limit, expiry, creation date, last check and total checks, plus current activations and rejected activation attempts
Manage SubscriptionOpens the linked subscription on the Subscriptions screen
Manage ActivationsAdd or remove activations, change the activation limit. See Activations

Changing status or expiry ​

A license follows its subscription. To extend, suspend or expire a license, edit the subscription on Components → LicenseDock → Subscriptions. Saving a subscription copies its status and expiry onto its licenses:

Subscription status savedLicense status
Active, Trialing, Past dueactive
Suspendedsuspended
Expiredexpired
Pending, CancelledUnchanged. Only the expiry date is copied

Revoked and cancelled licenses are left alone. Subscriptions billed by a gateway can't be edited this way, because the gateway owns their dates. For those, use Cancel Subscription. See Subscriptions.

Issuing a license by hand ​

Create a manual order: Orders → New Order. Pick the customer (or enter a new one), the product and plan, an optional Price override and Subscription start date, and the Order type (Real, Real but complimentary, or Test). Completing the order as paid issues the subscription and license and emails the customer.

Generating missing licenses ​

If completed orders exist for license-issuing products without a license (for example after switching Requires License to Yes), the Licenses screen shows a notice and a toolbar button to generate them. Existing licenses are left untouched and the action is safe to run more than once.

Licenses can also be brought in from another store with Components → LicenseDock → Import.

Customer View ​

Customers see their licenses on the Licenses page of the Customer Portal: key with a copy button, status, activations used against the limit, and the identifiers currently activated.

Next Steps ​

Joomla Extensions by Contona