License Activation API
The License Activation API allows you to activate licenses on new machines, list existing activations, and deactivate machines.
Activate License
Activate a license key on a new machine.
Endpoint
POST https://store.gamedna.studio/api/licenses/activateRequest
{ "license_key": "GDNA-XXXX-XXXX-XXXX", "machine_id": "unique-machine-identifier", "machine_name": "John's Development PC", "product_slug": "online-subsystem-blueprintable"}Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
license_key | string | ✅ | The license key to activate |
machine_id | string | ✅ | Unique machine identifier |
machine_name | string | ❌ | Human-readable name for the machine |
product_slug | string | ✅ | Product being activated |
Success Response (201 Created)
{ "success": true, "activation": { "id": "act_xyz789", "machine_id": "unique-machine-identifier", "machine_name": "John's Development PC", "activated_at": "2026-01-22T10:00:00Z", "last_validated": "2026-01-22T10:00:00Z" }, "license": { "id": "lic_abc123", "type": "pro", "seats_used": 3, "seats_total": 5, "remaining_seats": 2 }}Error Responses
Already Activated (409)
{ "error": { "code": "ALREADY_ACTIVATED", "message": "This machine is already activated for this license.", "details": { "activation_id": "act_xyz789", "activated_at": "2026-01-15T08:00:00Z" } }}No Seats Available (403)
{ "error": { "code": "NO_SEATS_AVAILABLE", "message": "All license seats are currently in use.", "details": { "seats_used": 5, "seats_total": 5, "manage_url": "https://store.gamedna.studio/dashboard/licenses/lic_abc123" } }}Example
curl -X POST https://store.gamedna.studio/api/licenses/activate \ -H "Content-Type: application/json" \ -d '{ "license_key": "GDNA-ABCD-1234-EFGH", "machine_id": "my-dev-machine-001", "machine_name": "Development Workstation", "product_slug": "online-subsystem-blueprintable" }'List Activations
List all activations for a license. Requires authentication.
Endpoint
GET https://store.gamedna.studio/api/licenses/{license_id}/activationsAuthentication
Authorization: Bearer YOUR_ACCESS_TOKENResponse (200 OK)
{ "activations": [ { "id": "act_001", "machine_id": "machine-hash-1", "machine_name": "John's PC", "activated_at": "2026-01-10T09:00:00Z", "last_validated": "2026-01-22T08:30:00Z", "is_current": false }, { "id": "act_002", "machine_id": "machine-hash-2", "machine_name": "Build Server", "activated_at": "2026-01-15T14:00:00Z", "last_validated": "2026-01-22T06:00:00Z", "is_current": false }, { "id": "act_003", "machine_id": "machine-hash-3", "machine_name": "Jane's Laptop", "activated_at": "2026-01-20T11:00:00Z", "last_validated": "2026-01-22T10:00:00Z", "is_current": true } ], "meta": { "total": 3, "seats_total": 5, "seats_available": 2 }}Deactivate Machine
Remove an activation to free up a seat.
Endpoint
DELETE https://store.gamedna.studio/api/licenses/activations/{activation_id}Authentication
Authorization: Bearer YOUR_ACCESS_TOKENResponse (200 OK)
{ "success": true, "message": "Activation successfully removed.", "license": { "id": "lic_abc123", "seats_used": 2, "seats_total": 5, "seats_available": 3 }}Error Responses
Not Found (404)
{ "error": { "code": "ACTIVATION_NOT_FOUND", "message": "Activation not found or already deactivated." }}Unauthorized (403)
{ "error": { "code": "UNAUTHORIZED", "message": "You do not have permission to manage this license." }}Offline Activation
For machines without internet access.
Step 1: Generate Request
POST https://store.gamedna.studio/api/licenses/offline/requestRequest:
{ "license_key": "GDNA-XXXX-XXXX-XXXX", "machine_id": "air-gapped-machine-001", "product_slug": "online-subsystem-blueprintable"}Response:
{ "request_code": "REQ-ABCDEFGH12345678", "expires_at": "2026-01-23T10:00:00Z", "instructions": "Visit https://store.gamedna.studio/activate-offline and enter this code."}Step 2: Get Activation Code
User visits the offline activation page with the request code and receives an activation code.
Step 3: Apply Activation Code
POST https://store.gamedna.studio/api/licenses/offline/activateRequest:
{ "request_code": "REQ-ABCDEFGH12345678", "activation_code": "ACT-XYZXYZXYZXYZXYZ..."}Response:
{ "success": true, "activation": { "id": "act_offline_001", "type": "offline", "valid_until": "2027-01-22T00:00:00Z" }}Error Codes
| Code | HTTP Status | Description |
|---|---|---|
ALREADY_ACTIVATED | 409 | Machine already activated |
NO_SEATS_AVAILABLE | 403 | All seats in use |
ACTIVATION_NOT_FOUND | 404 | Activation doesn’t exist |
UNAUTHORIZED | 403 | No permission for this action |
LICENSE_EXPIRED | 403 | Cannot activate expired license |
OFFLINE_CODE_EXPIRED | 400 | Offline request code expired |
INVALID_ACTIVATION_CODE | 400 | Activation code is invalid |
Rate Limits
| Endpoint | Limit | Window |
|---|---|---|
POST /activate | 10 requests | 1 hour |
GET /activations | 60 requests | 1 minute |
DELETE /activations/* | 10 requests | 1 hour |
Related
- License Validation API - Validate existing licenses
- Downloads API - Download plugin files
- Licensing Guide - License types and management