License API Documentation
Server-side API for client software license verification and activation.
Base URL: https://fctisoftware.com/api/v1
Auth: License serial key (no API key required)
Verify License
POST /api/v1/license/verify
Request Body
{
"serial_key": "EDUM-9821-4402-8819",
"product_code": "school-management",
"domain": "example.com",
"device_identifier": "device-abc-123"
}
Success Response
{
"success": true,
"valid": true,
"license": {
"status": "active",
"expiry_date": "2027-01-15",
"grace_period_days": 7,
"max_activations": 5,
"current_activations": 2
},
"timestamp": "2026-09-22T12:00:00Z"
}
Error Response
{
"success": false,
"valid": false,
"error": "License not found or invalid",
"code": 404
}
Activate License
POST /api/v1/license/activate
Request Body
{
"serial_key": "EDUM-9821-4402-8819",
"product_code": "school-management",
"domain": "example.com",
"device_identifier": "device-abc-123"
}
Success Response
{
"success": true,
"activated": true,
"license": { "status": "active", "activation_count": 3, "max_activations": 5 }
}
Limit Reached
{
"success": false,
"activated": false,
"error": "Maximum activations reached",
"code": 400
}
Heartbeat / Status
POST /api/v1/license/heartbeat
Same request/response as Verify. Used for periodic check-ins.
License States
| Status | Description |
|---|---|
| active | License is valid and usable |
| expired | License has passed expiry date (grace period may apply) |
| suspended | Temporarily disabled by administrator |
| revoked | Permanently disabled (cannot be reactivated) |
| pending | License created but not yet activated |
Rate Limiting
60 requests per minute per IP. Exceeding this returns HTTP 429.
