signing key: … store: …

🔑 Issue licenses

A key is shown once, right here. Only a salted PBKDF2 hash is stored — it cannot be recovered later.

📋 Licenses

KeyPlanCustomerSeatsExpiresStatusCreated

🧾 Audit log

Every issue / activation / validation / admin change, newest first.
WhenActionResultKeyIPDetail

🔌 Add-on integration

Point the client at these endpoints. POST JSON, and store the returned token for offline checks.
POST https://license.theguardiansstudio.com/api/license/activate    { "key": "GUAR-…", "fingerprint": "<machine id>", "label": "Workstation" }
POST https://license.theguardiansstudio.com/api/license/validate    { "key": "GUAR-…", "fingerprint": "<machine id>" }
POST https://license.theguardiansstudio.com/api/license/deactivate  { "key": "GUAR-…", "fingerprint": "<machine id>" }
POST https://license.theguardiansstudio.com/api/license/token/verify { "token": "<signed token>" }   ← offline check

success → { "ok": true, "license": { … }, "token": "<signed>" }
failure → { "ok": false, "code": "SEAT_LIMIT" | "EXPIRED" | "REVOKED" | "UNKNOWN_KEY" | … }
G

The Guardians Studio

Enter the admin token to manage licenses.

🔒 Signed httpOnly session cookie · expires after 12h · 5 wrong tries locks the IP for 15 min