Licenses

License validation, activation, and device management API

License API

Manage license validation, activation, and device tracking.

Rate Limiting: All license endpoints are protected with rate limiting and progressive blocking. Excessive requests will result in temporary IP blocks with exponentially increasing durations.

Validate License

Validate and activate a license key. This endpoint is rate-limited to 5 requests per minute per IP address.

Endpoint: POST /api/licenses/validate

ParameterTypeRequiredDescription
license_keystringYesLicense key to validate
device_idstringNoUnique device identifier for activation tracking
curl -X POST "$BASE_URL/api/licenses/validate" \
  -H "Content-Type: application/json" \
  -d '{"license_key":"XXXX-XXXX-XXXX-XXXX","device_id":"device_abc123"}'

Response (Success):

{
  "valid": true,
  "license": {
    "id": "uuid",
    "status": "active",
    "product": { "id": "uuid", "name": "PRO", "features": [] },
    "activation_date": "2024-01-01T00:00:00Z",
    "expiration_date": "2025-12-31T23:59:59Z",
    "current_activations": 1
  }
}

Response (Error):

{
  "statusCode": 400,
  "statusMessage": "Invalid license key or validation failed"
}
For security, all license validation errors return the same generic message to prevent enumeration attacks.

Deactivate License

Authentication Required

Deactivate a license from a specific device or all devices.

Endpoint: POST /api/licenses/deactivate

ParameterTypeRequiredDescription
license_keystringYesLicense key to deactivate
device_idstringNoSpecific device to deactivate (omit for all devices)
curl -X POST "$BASE_URL/api/licenses/deactivate" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"license_key":"XXXX-XXXX-XXXX-XXXX","device_id":"device_abc123"}'

Response:

{
  "success": true,
  "message": "Device deactivated successfully",
  "remaining_activations": 4
}

License Status

Authentication Required

Check the current status of a license. Rate-limited to 30 requests per minute per IP.

Endpoint: GET /api/licenses/status

ParameterTypeRequiredDescription
license_keyqueryYesLicense key to check
curl -X GET "$BASE_URL/api/licenses/status?license_key=XXXX-XXXX-XXXX-XXXX" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN"

Response:

{
  "license": {
    "id": "uuid",
    "license_key": "XXXX-XXXX-XXXX-XXXX",
    "status": "active",
    "activation_date": "2024-01-01T00:00:00Z",
    "expiration_date": "2025-12-31T23:59:59Z",
    "days_until_expiration": 365,
    "activation_limit": 5,
    "current_activations": 2,
    "available_activations": 3,
    "is_expired": false,
    "is_active": true,
    "product": { "id": "uuid", "name": "PRO" },
    "user": { "id": "uuid", "email": "user@example.com" }
  },
  "active_devices": [
    {
      "id": "uuid",
      "device_id": "device_abc123",
      "activated_at": "2024-01-01T00:00:00Z",
      "ip_address": "192.168.1.1"
    }
  ]
}

Rate Limiting

All license endpoints include rate limiting headers:

HeaderDescription
X-RateLimit-RemainingRequests remaining in current window
Retry-AfterSeconds until rate limit resets (when blocked)

Rate Limits by Endpoint

EndpointRequests/MinuteBlock Duration
/api/licenses/validate52-60 minutes (progressive)
/api/licenses/status301-10 minutes (progressive)
/api/licenses/deactivate102-30 minutes (progressive)
Repeated violations result in exponentially increasing block durations up to the maximum.

License Types

TypeDescriptionFeatures
TRIAL10-minute trial sessionLimited to single room
PROProfessional licenseUnlimited rooms, custom branding
ENTERPRISEEnterprise licenseAll features, priority support, SSO

Copyright © 2026. All rights reserved.