Skip to main content
When a license verification fails, the API returns a JSON response with "success": false, an error code, and a human-readable message.

Error Response Format

{
  "success": false,
  "error": "LICENSE_NOT_FOUND",
  "message": "License not found"
}

Error Codes

Error CodeHTTP StatusMessageDescription
LICENSE_NOT_FOUND404License not foundThe license key does not exist for this product ID
LICENSE_EXPIRED403License has expiredThe license has passed its expiry date
LICENSE_REVOKED403License has been revokedThe license has been permanently revoked (e.g. due to refund or manual action)
LICENSE_SUSPENDED403License is suspendedThe license has been temporarily suspended by the store owner
HWID_REQUIRED403HWID is required for this licenseThe product lock type is hwid but no hwid field was included in the request
ACTIVATION_LIMIT429Maximum activations reachedAll activation slots are used. The device cannot be activated.

Handling Errors in Your Software

const result = await verifyLicense(key, hwid);

if (!result.valid) {
  switch (result.error) {
    case "LICENSE_NOT_FOUND":
      console.log("Invalid license key. Please check and try again.");
      break;
    case "LICENSE_EXPIRED":
      console.log("Your license has expired. Please renew.");
      break;
    case "LICENSE_REVOKED":
      console.log("This license has been revoked.");
      break;
    case "LICENSE_SUSPENDED":
      console.log("This license is temporarily suspended. Contact support.");
      break;
    case "HWID_REQUIRED":
      console.log("Hardware ID is required for this product.");
      break;
    case "ACTIVATION_LIMIT":
      console.log("Device limit reached. Deactivate another device first.");
      break;
    default:
      console.log("Verification failed:", result.message);
  }
}

Rate Limiting

The verification endpoint is rate limited to 60 requests per minute per IP address. This is more than sufficient for typical usage — your software usually verifies once on startup or periodically (e.g. every few hours). When the rate limit is exceeded, the API returns:
HTTP StatusDescription
429Too Many Requests
If you receive HTTP 429, implement retry with exponential backoff. Do not immediately retry in a tight loop.
If your software runs on a server with many users behind the same IP, consider caching the verification result locally for a few minutes to reduce API calls.