Overview
Public endpoints currently available in your app:
POST /license/activatePOST /license/validatePOST /updates/checkGET /download/{token}
| Field | Used By | Required | Notes |
|---|---|---|---|
product |
activate, validate, updates/check | Yes | Must match products.slug in your licensing server. |
license_key |
activate, validate, updates/check | Yes | Raw license key. Your server hashes and checks it internally. |
domain |
activate, validate | Usually Yes | Used when product has domain locking enabled. |
ip |
activate, validate | Optional / required by config | Used when product has IP locking enabled. |
install_dir |
activate, validate | Optional / required by config | Used when product has directory locking enabled. |
hwid |
activate, validate | Optional / required by config | Used when product has HWID locking enabled. |
software_version |
activate, validate | Recommended | Used for activation tracking. |
local_key |
validate | Optional | Accepted by the endpoint, but not currently used by the validator. |
current_version |
updates/check | Optional | Compared against the latest public version to decide if an update is available. |
Activate License
Required Fields: product, license_key
Optional Fields: domain, ip, install_dir, hwid, software_version
Request JSON
{
"product": "whmcs-module-test",
"license_key": "SHP-WHM-XXXXXXXXXXXX",
"domain": "example.com",
"ip": "1.1.1.1",
"install_dir": "/home/user/app",
"hwid": "server-01",
"software_version": "1.0.0"
}
Success Response
{
"valid": true,
"status": "active",
"support_valid": true,
"updates_valid": true,
"subscription_valid": true,
"features": {},
"limits": {},
"local_key": "encrypted_local_key_here",
"local_key_expires_at": "2026-03-07T10:30:00+05:30",
"message": "License active"
}
Error Responses
{
"valid": false,
"status": "invalid",
"error": "Invalid Key"
}
{
"valid": false,
"status": "reissue_required",
"error": "Domain mismatch"
}
{
"valid": false,
"status": "reissue_required",
"error": "IP mismatch"
}
{
"valid": false,
"status": "reissue_required",
"error": "Directory mismatch"
}
{
"valid": false,
"status": "reissue_required",
"error": "HWID mismatch"
}
{
"valid": false,
"status": "invalid_product",
"error": "Product mismatch"
}
{
"valid": false,
"status": "suspended",
"error": "License not active"
}
{
"valid": false,
"status": "expired",
"error": "License not active"
}
Validate License
Required Fields: product, license_key
Optional Fields: domain, ip, install_dir, hwid, software_version, local_key
Request JSON
{
"product": "whmcs-module-test",
"license_key": "SHP-WHM-XXXXXXXXXXXX",
"domain": "example.com",
"ip": "1.1.1.1",
"install_dir": "/home/user/app",
"hwid": "server-01",
"local_key": "cached-local-key-from-previous-check",
"software_version": "1.0.0"
}
Success Response
{
"valid": true,
"status": "active",
"support_valid": true,
"updates_valid": true,
"subscription_valid": true,
"features": {},
"limits": {},
"local_key": "encrypted_local_key_here",
"local_key_expires_at": "2026-03-07T10:30:00+05:30",
"message": "License active"
}
Error Responses
{
"valid": false,
"status": "invalid",
"error": "Invalid Key"
}
{
"valid": false,
"status": "reissue_required",
"error": "Domain mismatch"
}
{
"valid": false,
"status": "reissue_required",
"error": "IP mismatch"
}
{
"valid": false,
"status": "reissue_required",
"error": "Directory mismatch"
}
{
"valid": false,
"status": "reissue_required",
"error": "HWID mismatch"
}
{
"valid": false,
"status": "invalid_product",
"error": "Product mismatch"
}
{
"valid": false,
"status": "suspended",
"error": "License not active"
}
{
"valid": false,
"status": "expired",
"error": "License not active"
}
Check Updates
Required Fields: product, license_key
Optional Fields: current_version
Request JSON
{
"product": "whmcs-module-test",
"license_key": "SHP-WHM-XXXXXXXXXXXX",
"current_version": "1.0.0"
}
Example Success Response
{
"eligible": true,
"update_available": true,
"latest_version": "1.2.0",
"released_at": "2026-03-07T10:30:00+05:30",
"changelog": "Bug fixes and improvements",
"checksum_sha256": "abc123def456",
"download_url": "https://downloads.example.com/module-1.2.0.zip"
}
Example No Update Response
{
"eligible": true,
"update_available": false,
"latest_version": "1.2.0",
"released_at": "2026-03-07T10:30:00+05:30",
"changelog": "Bug fixes and improvements",
"checksum_sha256": "abc123def456",
"download_url": "https://downloads.example.com/module-1.2.0.zip"
}
Example Entitlement Response
{
"eligible": false,
"update_available": false,
"reason": "Updates expired"
}
Example Error Response
{
"error": "Invalid Key"
}
{
"error": "Product mismatch"
}
{
"error": "License not active",
"status": "suspended"
}
Download Package
The update check response now returns download_url directly. Use that URL in your module or theme UI to let licensed clients download the latest file.
Try API
Paste JSON, run request, and inspect the live response from your licensing server.
Response will appear here...