Docs / E-Commerce / License Keys

License Keys

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 character
  • N = Number only
  • A = 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

Last updated on January 26, 2026

Need Help?

Get support from our team or community forum.

Visit Support

Customization

Need custom features? We can help.

Request Quote