Activation Code Directory
Inspect, edit activation limits, toggle active/deactivated, and revoke seats
| Activation Key | Product & Client | Status | Seats Used / Capacity | Expires | Active | Actions |
|---|
Interactive Client Activation Simulator
Simulate client application requests live against the activation API and inspect approved/disapproved responses.
{}
// Live server response will display here...
Recent License Stream
Real-time audit log snapshot of latest activation transactions
Audit & Activation Activity Logs
Complete historical log of all client validation, activation, and deactivation attempts.
| Timestamp | Status | Action | Code | Device ID | Outcome / Reason |
|---|
API Documentation & Integration Guide
Production reference for integrating software activation, verification, and license lifecycle management.
All Client endpoints under
/api/v1/* (activate, verify, deactivate, health) are public and do not require secret credentials. Admin endpoints under /api/admin/* require the x-admin-key header.
Claims and activates a software license seat for a specific client workstation. If the key is valid, active, and capacity is available (current_activations < max_activations), the server returns an APPROVED response and atomically consumes a seat.
deviceId) sends another activation request (e.g., application restart or reinstall), the server recognizes the existing device, refreshes its last_seen_at timestamp, and returns APPROVED without burning an extra seat!
Request Body Parameters (JSON)
| Field | Type | Requirement | Description |
|---|---|---|---|
| code | string | Required | The activation license key (e.g., PRO-8732-K9X1-V74B). Case-insensitive. |
| deviceId | string | Recommended | Unique hardware or system identifier (e.g., machine UUID, MAC hash). If omitted, an IP/fingerprint hash is auto-generated. |
| deviceName | string | Optional | Human-readable label for the client machine (e.g., Alice's MacBook Pro M2). |
| metadata | object | Optional | Arbitrary telemetry or client version data (e.g., {"os": "Windows 11", "version": "2.4.0"}). |
Integration Code Examples
curl -X POST "https://activation.hudsmersolutions.com/api/v1/activate" \
-H "Content-Type: application/json" \
-d '{
"code": "PRO-8732-K9X1-V74B",
"deviceId": "station-uuid-9842-acme",
"deviceName": "Alice Workstation M2",
"metadata": { "os": "macOS 15.0", "appVersion": "3.1.0" }
}'
import requests
API_URL = "https://activation.hudsmersolutions.com/api/v1/activate"
payload = {
"code": "PRO-8732-K9X1-V74B",
"deviceId": "station-uuid-9842-acme",
"deviceName": "Alice Workstation M2"
}
response = requests.post(API_URL, json=payload, timeout=10)
data = response.json()
if response.status_code == 200 and data.get("status") == "APPROVED":
print("License Approved!")
print(f"Product: {data['data']['productName']}")
print(f"Remaining Seats: {data['data']['remainingActivations']}")
print(f"Expires: {data['data']['expiresAt'] or 'Perpetual'}")
else:
print(f"Activation Disapproved: {data.get('message')}")
print(f"Error Code: {data.get('error')}")
async function activateClientLicense(licenseKey, machineId) {
const url = 'https://activation.hudsmersolutions.com/api/v1/activate';
const response = await fetch(url, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
code: licenseKey,
deviceId: machineId,
deviceName: 'Client Application'
})
});
const resData = await response.json();
if (response.ok && resData.status === 'APPROVED') {
console.log('Activation approved:', resData.data);
// Store activation state locally
return { success: true, license: resData.data };
} else {
console.error('Activation disapproved:', resData.message, resData.error);
return { success: false, error: resData.error, message: resData.message };
}
}
using System;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
public class LicenseManager
{
private static readonly HttpClient client = new HttpClient();
public static async Task ActivateAsync(string activationCode, string deviceId)
{
var payload = new {
code = activationCode,
deviceId = deviceId,
deviceName = Environment.MachineName
};
var content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json");
var response = await client.PostAsync("https://activation.hudsmersolutions.com/api/v1/activate", content);
var jsonResponse = await response.Content.ReadAsStringAsync();
using var doc = JsonDocument.Parse(jsonResponse);
var root = doc.RootElement;
if (response.IsSuccessStatusCode && root.GetProperty("status").GetString() == "APPROVED")
{
Console.WriteLine("License Approved!");
return true;
}
Console.WriteLine($"Disapproved: {root.GetProperty("message").GetString()}");
return false;
}
}
<?php
$url = "https://activation.hudsmersolutions.com/api/v1/activate";
$data = [
"code" => "PRO-8732-K9X1-V74B",
"deviceId" => "server-machine-id-01",
"deviceName" => "Production App Server"
];
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
$result = json_decode($response, true);
if ($httpCode === 200 && ($result['status'] ?? '') === 'APPROVED') {
echo "Activation Approved: Remaining seats: " . $result['data']['remainingActivations'] . "\n";
} else {
echo "Activation Failed: " . ($result['message'] ?? 'Unknown error') . "\n";
}
Sample Responses
{
"success": true,
"status": "APPROVED",
"message": "Activation successful! Your activation code has been approved.",
"data": {
"code": "PRO-8732-K9X1-V74B",
"clientName": "Acme Studio Inc.",
"productName": "Studio Pro Suite 2026",
"deviceId": "station-uuid-9842-acme",
"deviceName": "Alice Workstation M2",
"currentActivations": 2,
"maxActivations": 3,
"remainingActivations": 1,
"expiresAt": "2027-12-31T23:59:59.000Z",
"activatedAt": "2026-10-01T04:45:00.000Z"
}
}
{
"success": false,
"status": "DISAPPROVED",
"error": "ACTIVATION_LIMIT_EXCEEDED",
"message": "Maximum number of activations (3) reached for this code. No activations remaining.",
"currentActivations": 3,
"maxActivations": 3,
"remainingActivations": 0
}
Silently verifies license validity without consuming any seats. Ideal for application startup checks or scheduled daily heartbeats.
Request Body Parameters (JSON)
| Field | Type | Requirement | Description |
|---|---|---|---|
| code | string | Required | The activation key to verify. |
| deviceId | string | Optional | Device identifier to confirm whether this specific machine is actively bound. |
curl -X POST "https://activation.hudsmersolutions.com/api/v1/verify" \
-H "Content-Type: application/json" \
-d '{
"code": "PRO-8732-K9X1-V74B",
"deviceId": "station-uuid-9842-acme"
}'
{
"success": true,
"status": "APPROVED",
"message": "Activation code is valid and active.",
"data": {
"code": "PRO-8732-K9X1-V74B",
"clientName": "Acme Studio Inc.",
"productName": "Studio Pro Suite 2026",
"isDeviceBound": true,
"currentActivations": 2,
"maxActivations": 3,
"remainingActivations": 1,
"expiresAt": "2027-12-31T23:59:59.000Z"
}
}
Releases an active seat from a machine, decrementing current_activations and returning the seat to the available license pool. Essential for machine migrations, uninstalls, and license transfers.
Request Body Parameters (JSON)
| Field | Type | Requirement | Description |
|---|---|---|---|
| code | string | Required | The activation key. |
| deviceId | string | Required | The exact machine identifier to disconnect. |
curl -X POST "https://activation.hudsmersolutions.com/api/v1/deactivate" \
-H "Content-Type: application/json" \
-d '{
"code": "PRO-8732-K9X1-V74B",
"deviceId": "station-uuid-9842-acme"
}'
{
"success": true,
"status": "APPROVED",
"message": "Device deactivated successfully. Activation seat has been released.",
"data": {
"code": "PRO-8732-K9X1-V74B",
"deviceId": "station-uuid-9842-acme",
"currentActivations": 1,
"maxActivations": 3,
"remainingActivations": 2
}
}
Zero-overhead endpoint for health checks, Pingdom, UptimeRobot, or Kubernetes liveness probes.
curl "https://activation.hudsmersolutions.com/api/v1/health"
// Response (HTTP 200):
{
"status": "UP",
"timestamp": "2026-10-01T04:45:00.000Z",
"service": "Activation Code Service API"
}
Standard Error Code Matrix
When a request cannot be fulfilled, the server returns "status": "DISAPPROVED" along with an explicit error code string.
| Error Code | HTTP Status | Cause | Recommended User Guidance |
|---|---|---|---|
| ACTIVATION_LIMIT_EXCEEDED | 403 |
Max capacity reached (current >= max). |
Inform the user all seats are taken; suggest releasing an old machine or upgrading. |
| CODE_DEACTIVATED | 403 |
License suspended by administrator. | Inform the user their license has been administrative suspended; contact support. |
| CODE_EXPIRED | 403 |
Validity expiration date has passed. | Prompt the user to renew their license subscription. |
| CODE_NOT_FOUND | 404 |
Code does not exist in database. | Check for typographical errors in the license key. |
| DEVICE_NOT_ACTIVE | 400 |
Device not currently bound during deactivation. | Device seat is already released. |
| MISSING_CODE | 400 |
No code field in JSON body. |
Ensure client JSON payload contains "code". |
| UNAUTHORIZED | 401 |
Invalid or missing x-admin-key. |
Provide valid admin credentials for management routes. |
Client Integration Best Practices
- Stable Machine Fingerprint: Generate the
deviceIdfrom hardware attributes (e.g. BIOS serial or OS installation UUID) rather than transient items like IP addresses. - Local State Caching: After a successful
/activatecall, cache the license token and expiry date in encrypted client storage. - Silent Background Verification: On app launch, use
/api/v1/verifyin the background to ensure the license hasn't been revoked, without consuming extra seats. - Offline Grace Period: If the user's internet is temporarily down, allow a configurable grace period (e.g., 3-7 days) using the cached verification timestamp before disabling software features.