KeyForge

Software Activation & Licensing Platform

Admin Console • Secure Authentication

Administrator Sign In

Please enter your administrative credentials to continue

Invalid username or password.
Encrypted Session Tokens • Protected Management
Protected License Service • activation.hudsmersolutions.com
KeyForge Activation Engine
License Management & Verification Server
API Online • v1.0.0
AD
admin Administrator
Total Codes
--
Generated license keys in database
Active Codes
--
Available for client validation
Seats Consumed
--
Current activations / Total capacity
Approval Rate
--
Valid activation requests ratio

Activation Code Directory

Inspect, edit activation limits, toggle active/deactivated, and revoke seats

Activation Key Product & Client Status Seats Used / Capacity Expires Active Actions
Showing 0 codes

Interactive Client Activation Simulator

Simulate client application requests live against the activation API and inspect approved/disapproved responses.

Client Request Builder POST /api/v1/activate
{}
Server Response Inspector Waiting for request
Click "Send Client Request" to test an activation code.
// Live server response will display here...
Recent 24h Activations
0
Successful activations in past 24 hours
Depleted Codes
0
Codes with 0 available seats remaining
Expired Codes
0
Codes past validity date

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.

Production Server Base URL
https://activation.hudsmersolutions.com
Client vs. Admin API Security
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.
POST /api/v1/activate
Seat Claiming

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.

Idempotent Machine Recognition: If an already activated machine (matching 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 Command
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" }
  }'
Python 3 (requests)
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')}")
JavaScript / Node.js / Electron / Fetch
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 };
  }
}
C# (.NET HttpClient)
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 (cURL)
<?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

HTTP 200 OK — Approved Response
{
  "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"
  }
}
HTTP 403 Forbidden — Disapproved Response (Limit Reached)
{
  "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
}
POST /api/v1/verify
Silent Check

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 Verification Example
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"
  }'
HTTP 200 OK Response
{
  "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"
  }
}
POST /api/v1/deactivate
Seat Release

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 Deactivation Example
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"
  }'
HTTP 200 OK Response
{
  "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
  }
}
GET /api/v1/health
Uptime Probe

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 deviceId from hardware attributes (e.g. BIOS serial or OS installation UUID) rather than transient items like IP addresses.
  • Local State Caching: After a successful /activate call, cache the license token and expiry date in encrypted client storage.
  • Silent Background Verification: On app launch, use /api/v1/verify in 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.

Generate Activation Codes

Edit Activation Code

Admin API Authentication

Admin operations are protected by the x-admin-key header. You can change your local key here if you modified ADMIN_API_KEY on your server.

Delete Activation Code

Are you sure you want to permanently delete activation code ?

This action cannot be undone. All active client device bindings and licenses for this code will be invalidated immediately.