Create licenses
Create one or more license keys for an application.
Request body
Example: minimal
Example: all options
Response (201)
Errors
List licenses
List all licenses for an application with cursor-based pagination.
Query parameters
Example
Response (200)
Pagination
Ifcursor is non-null, more results are available. Pass it as a query parameter in the next request:
Get a license
Get full details for a single license including HWID bindings and label.
Example
Response (200)
Errors
Update a license
Perform an action on a license: revoke, activate, extend expiration, or reset HWID bindings.
Request body
Revoke a license
Immediately disables the license. End users fail on their next activation or online check-in; apps running through the grace period without check-ins stop at session expiry. Revoking also blocks new offline license file mints, but files already minted stay valid until their own expiry.Re-activate a revoked license
Restores a previously revoked license back to active status.Extend expiration
Sets a new expiration date. Use for subscription renewals or granting additional time.Reset HWID bindings
Clears all bound hardware IDs, allowing the license to be activated on new devices.Response (200)
Delete a license
Permanently delete a license. This cannot be undone.
Example
Response (200)
Errors
Offline license files
Cloud-minted, Ed25519-signed.authforge files for machines that never connect to the internet. The SDK verifies a file locally with your app public key and the machine HWID; it never contacts AuthForge. This is a separate mode from the grace period. Read Offline license files first, especially the revocation semantics: issued files stay valid until their own expiry; revoking the license only blocks new mints.
Mint an offline license file
Mint a
.authforge file for an active license. Scope write:licenses. 1 credit per successful mint (same debit path as /auth/validate, so your app’s burn caps apply); rejected mints are free.Request body
Headers
The server never stores the file body: on a replay it re-signs the stored payload with your app key (Ed25519 is deterministic), so the bytes match the first response exactly.
Example: bound, 90 days
Example: unbound (explicit acknowledgement)
Response (201)
file to disk as fileName. The server stores only fileSha256, never the file body, so there is no download endpoint; if the response was lost, retry with the same Idempotency-Key within 24h to get the identical file (HTTP 200, meta.idempotentReplay: true, no extra charge).
Errors
List offline file mint history
Newest-first mint records for the license, capped at the 100 most recent (
limit); truncated: true means older mints were omitted and the full trail is in the account audit log. Scope read:licenses. Returns metadata and hashes only; file bodies are never stored.