Skip to main content

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

If cursor 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)

Write 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.

Response (200)

Use this to track which files are outstanding for a license and when each one lapses; it is the operator-side half of the re-issue workflow described in Offline licensing best practices.