Overview
License Keys provide software licensing capabilities for your digital products. Generate unique keys, limit activations, track usage, and validate licenses. Essential for selling software, plugins, themes, and other products requiring activation control.
Prerequisites
- WordPress Download Manager installed
- Premium Packages add-on activated
- Product with licensing enabled
Enabling Licensing
Per-Product Setup
- Edit a package
- Find Licensing panel
- Enable license generation
┌─────────────────────────────────────────────────────────────┐ │ License Settings │ ├─────────────────────────────────────────────────────────────┤ │ ☑ Generate license key for this product │ │ │ │ License Key Format: │ │ [XXXX-XXXX-XXXX-XXXX ▼] │ │ │ │ Activations Allowed: │ │ ○ Based on license tier │ │ ○ Custom: [1 ] activations │ │ │ │ License Validity: │ │ ○ Based on license tier │ │ ○ Custom: [365 ] days │ │ ○ Lifetime │ └─────────────────────────────────────────────────────────────┘
Global Settings
At Downloads > Settings > Licenses:
License Settings ───────────────────────────────────── Default Key Format: [XXXX-XXXX-XXXX-XXXX ▼] Key Prefix: [ ] Secret Key: [******************** ] API Endpoint: https://yoursite.com/wpdm-api/license/
License Key Formats
Available Formats
| Format | Example |
|---|---|
| XXXX-XXXX-XXXX-XXXX | A1B2-C3D4-E5F6-G7H8 |
| XXXXXXXX-XXXX | A1B2C3D4-E5F6 |
| XXXX-XXXX-XXXX | A1B2-C3D4-E5F6 |
| Custom | PREFIX-XXXX-XXXX |
Custom Format
Use these placeholders:
X= Alphanumeric characterN= Number onlyA= Letter only
Example:
Format: LIC-NNNN-AAAA-XXXX Result: LIC-1234-ABCD-X7Y8
License Tiers
Overview
Different license tiers with varying limits:
┌─────────────────────────────────────────────────────────────┐ │ License Tiers │ ├─────────────────────────────────────────────────────────────┤ │ │ │ ┌─────────────────────────────────────────────────────────┐ │ │ │ Personal License │ │ │ │ Price: $29.99 | Sites: 1 | Validity: 1 year │ │ │ └─────────────────────────────────────────────────────────┘ │ │ │ │ ┌─────────────────────────────────────────────────────────┐ │ │ │ Business License │ │ │ │ Price: $99.99 | Sites: 5 | Validity: 1 year │ │ │ └─────────────────────────────────────────────────────────┘ │ │ │ │ ┌─────────────────────────────────────────────────────────┐ │ │ │ Developer License │ │ │ │ Price: $199.99 | Sites: Unlimited | Validity: Lifetime │ │ │ └─────────────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────┘
Tier Settings
For each tier:
| Setting | Description |
|---|---|
| Name | Tier display name |
| Price | License price |
| Sites/Activations | Max activation count |
| Validity | How long license is valid |
| Support Period | Support duration |
| Update Period | Update access duration |
License Lifecycle
Generation
When order completes:
- License key generated
- Saved to database
- Linked to order/customer
- Sent via email
Activation
When customer activates:
- Software sends key + site URL
- API validates key
- Activation recorded
- Response returned
Validation
Periodic validation:
- Software checks license status
- API returns: valid/invalid/expired
- Software responds accordingly
Expiration
When license expires:
- Status changes to “Expired”
- Activations blocked
- Customer notified
- Renewal option provided
Managing Licenses
Licenses List
┌─────────────────────────────────────────────────────────────────────────────┐ │ Licenses [Search] [Export] │ ├─────────────────────────────────────────────────────────────────────────────┤ │ License Key │ Product │ Customer │ Sites │ Expires │ Status │ ├─────────────────────────────────────────────────────────────────────────────┤ │ XXXX-XXXX-XXXX │ Software Pro│ John Smith │ 2/5 │ Jan 2027 │ Active │ │ YYYY-YYYY-YYYY │ Software Pro│ Mary Jones │ 1/1 │ Dec 2026 │ Active │ │ ZZZZ-ZZZZ-ZZZZ │ Templates │ Bob Wilson │ 3/3 │ Never │ Active │ │ AAAA-AAAA-AAAA │ Software Pro│ Guest │ 0/1 │ Jan 2025 │ Expired│ └─────────────────────────────────────────────────────────────────────────────┘
License Details
Click a license to view:
┌─────────────────────────────────────────────────────────────────────────────┐ │ License: XXXX-XXXX-XXXX-XXXX │ ├─────────────────────────────────────────────────────────────────────────────┤ │ │ │ Product: Software Pro (Business License) │ │ Customer: John Smith (john@example.com) │ │ Order: #1234 │ │ Status: Active │ │ │ │ Activations: 2 / 5 used │ │ Created: January 24, 2026 │ │ Expires: January 24, 2027 │ │ │ ├─────────────────────────────────────────────────────────────────────────────┤ │ Active Sites │ ├─────────────────────────────────────────────────────────────────────────────┤ │ Site URL │ Activated │ Last Check │ Action │ │ https://example.com │ Jan 24, 2026 │ Jan 24, 2026 │ [Deact] │ │ https://staging.example.com │ Jan 25, 2026 │ Jan 25, 2026 │ [Deact] │ │ │ ├─────────────────────────────────────────────────────────────────────────────┤ │ [Extend License] [Revoke License] [Regenerate Key] [Delete] │ └─────────────────────────────────────────────────────────────────────────────┘
License Actions
| Action | Description |
|---|---|
| View | See full license details |
| Extend | Add time to license |
| Revoke | Disable the license |
| Deactivate Site | Remove an activation |
| Regenerate | Create new key |
| Delete | Remove license |
License API
Endpoints
| Endpoint | Purpose |
|---|---|
/activate |
Activate license |
/deactivate |
Deactivate license |
/check |
Validate license |
/info |
Get license details |
Activation Request
POST https://yoursite.com/wpdm-api/license/activate Parameters: - license_key: XXXX-XXXX-XXXX-XXXX - site_url: https://customer-site.com - product_id: 123 (optional)
Activation Response
{
"success": true,
"message": "License activated successfully",
"data": {
"license_key": "XXXX-XXXX-XXXX-XXXX",
"status": "active",
"activations_used": 2,
"activations_limit": 5,
"expires": "2027-01-24",
"product": "Software Pro"
}
}
Validation Request
POST https://yoursite.com/wpdm-api/license/check Parameters: - license_key: XXXX-XXXX-XXXX-XXXX - site_url: https://customer-site.com
Validation Response
{
"success": true,
"valid": true,
"data": {
"status": "active",
"expires": "2027-01-24",
"days_remaining": 365,
"update_available": true,
"latest_version": "2.1.0"
}
}
Error Response
{
"success": false,
"error_code": "license_expired",
"message": "License has expired. Please renew."
}
Error Codes
| Code | Meaning |
|---|---|
invalid_key |
License key not found |
license_expired |
License has expired |
activation_limit |
Max activations reached |
license_revoked |
License has been revoked |
site_not_registered |
Site URL not activated |
Client Integration
WordPress Plugin Example
class License_Client {
private $api_url = 'https://yoursite.com/wpdm-api/license/';
private $license_key;
private $product_id;
public function activate() {
$response = wp_remote_post($this->api_url . 'activate', [
'body' => [
'license_key' => $this->license_key,
'site_url' => home_url(),
'product_id' => $this->product_id
]
]);
$body = json_decode(wp_remote_retrieve_body($response), true);
if ($body['success']) {
update_option('my_plugin_license_status', 'active');
return true;
}
return new WP_Error($body['error_code'], $body['message']);
}
public function check() {
$response = wp_remote_post($this->api_url . 'check', [
'body' => [
'license_key' => $this->license_key,
'site_url' => home_url()
]
]);
return json_decode(wp_remote_retrieve_body($response), true);
}
public function deactivate() {
$response = wp_remote_post($this->api_url . 'deactivate', [
'body' => [
'license_key' => $this->license_key,
'site_url' => home_url()
]
]);
return json_decode(wp_remote_retrieve_body($response), true);
}
}
JavaScript Example
async function activateLicense(licenseKey) {
const response = await fetch('https://yoursite.com/wpdm-api/license/activate', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
license_key: licenseKey,
site_url: window.location.origin
})
});
return response.json();
}
Customer License Management
Frontend Dashboard
Customers can manage licenses at their dashboard:
┌─────────────────────────────────────────────────────────────┐ │ My Licenses │ ├─────────────────────────────────────────────────────────────┤ │ Software Pro - Business License │ │ Key: XXXX-XXXX-XXXX-XXXX [Copy] │ │ Sites: 2 / 5 | Expires: Jan 24, 2027 │ │ │ │ Active Sites: │ │ • https://example.com [Deactivate] │ │ • https://staging.example.com [Deactivate] │ │ │ │ [Renew License] [View Details] │ └─────────────────────────────────────────────────────────────┘
Self-Service Actions
Customers can:
- View license key
- See active sites
- Deactivate sites
- Renew expired licenses
- Upgrade license tier
License Renewals
Renewal Process
- License approaches expiration
- Reminder email sent
- Customer clicks renew link
- Checkout with renewal discount
- License extended
Renewal Settings
┌─────────────────────────────────────────┐ │ Renewal Settings │ ├─────────────────────────────────────────┤ │ Renewal Discount: [20] % │ │ Early Renewal: [30] days before │ │ Grace Period: [14] days after │ │ │ │ Renewal Reminders: │ │ ☑ 30 days before expiry │ │ ☑ 7 days before expiry │ │ ☑ On expiry date │ │ ☑ 7 days after expiry (grace period) │ └─────────────────────────────────────────┘
Renewal Email
Subject: Your Software Pro license expires in 7 days Your license key: XXXX-XXXX-XXXX-XXXX Expires: January 24, 2027 Renew now and save 20%! [Renew License - $79.99] After expiration, you'll lose access to: • Software updates • Priority support • New features
Reporting
License Statistics
┌─────────────────────────────────────────┐ │ License Overview │ ├─────────────────────────────────────────┤ │ Total Licenses: 1,234 │ │ Active: 1,089 │ │ Expired: 145 │ │ Revoked: 0 │ │ │ │ Expiring This Month: 23 │ │ Renewal Rate: 78% │ └─────────────────────────────────────────┘
Export Licenses
Export to CSV:
- License key
- Customer
- Product
- Status
- Expiration
- Activations
Troubleshooting
License Won’t Activate
Causes:
- Activation limit reached
- License expired
- Wrong product
Solutions:
- Check activations used
- Verify expiration date
- Confirm product matches
Customer Lost License Key
Solutions:
- Lookup by email in Licenses
- Resend order confirmation
- Customer checks their dashboard
Duplicate Activations
Cause: Same site registered twice
Solution:
- Find license
- Deactivate duplicate entries
- Customer re-activates
API Not Responding
Causes:
- Wrong API URL
- SSL issues
- Firewall blocking
Solutions:
- Verify API endpoint URL
- Check SSL certificate
- Whitelist API domain
Related Documentation
Last updated: January 2026
Applies to: WordPress Download Manager 7.x + Premium Packages