Keygen

Keygen is a software licensing, entitlements, and distribution API for desktop, on-prem, IoT, and other installed applications. It issues license keys, activates and tracks machines, enforces policy-based entitlements, and distributes releases and artifacts for auto-updates. Keygen ships as the source-available, self-hostable Keygen CE / EE and as the managed Keygen Cloud, exposing a JSON:API interface under api.keygen.sh.

12 APIs 0 Features
Software LicensingEntitlementsLicense KeysMachine ActivationDistributionAuto-Update

APIs

Keygen Licenses API

Create, retrieve, update, delete, suspend, reinstate, and renew license keys; validate a license key by ID or key, and check licenses out or in for offline use. JSON:API over ap...

Keygen Machines / Activation API

Activate a machine against a license by hardware fingerprint, list and manage activated machines, send heartbeat pings to keep node-locked activations alive, and check machines ...

Keygen Policies API

Define the licensing model - expiration, machine and core limits, floating vs node-locked, check-in cadence, encryption and cryptographic scheme, and overage strategy - that gov...

Keygen Products API

Manage the products (applications) an account licenses and distributes, including distribution strategy, platforms, and the product tokens used for server-side automation.

Keygen Users API

Create and manage end users and license owners, assign roles, ban or unban users, and update passwords - the identities that own and validate licenses.

Keygen Entitlements API

Define named entitlements (feature flags) and attach or detach them from policies and licenses to gate product features and enforce fine-grained permissions per customer.

Keygen Releases / Distribution API

Publish, list, and manage semver-tagged releases for software distribution and auto-update, resolving upgrades for an entitled license across channels (stable, beta, alpha, rc) ...

Keygen Artifacts API

Upload, download, and yank the binary artifacts attached to a release - installers, packages, and update files - with redirect-based downloads gated by license entitlement.

Keygen Tokens / Auth API

Generate, list, retrieve, regenerate, and revoke bearer tokens - admin, environment, product, user, and license tokens - and authenticate via HTTP Basic or license-key auth to o...

Keygen Webhooks API

Register webhook endpoints and consume signed webhook events for license, machine, user, release, and process lifecycle changes; retrieve and retry recorded webhook event delive...

Keygen Machine Components API

Track individual hardware components (CPUs, drives, GPUs) that make up a machine fingerprint for stricter, component-level node-locking and anti-tamper enforcement.

Keygen Machine Processes API

Spawn, heartbeat, and kill concurrent processes running on an activated machine to enforce per-process concurrency limits and meter floating-license usage.

Collections

Keygen API

OPEN

Pricing Plans

Keygen Plans Pricing

5 plans

PLANS

Rate Limits

Keygen Rate Limits

4 limits

RATE LIMITS

FinOps

Keygen Finops

FINOPS

Resources

🔗
TrustCenter
TrustCenter
🔗
VulnerabilityDisclosure
VulnerabilityDisclosure
🔗
DomainSecurity
DomainSecurity
🔑
Authentication
Authentication
👥
GitHubOrganization
GitHubOrganization
🔗
LinkedIn
LinkedIn
🔗
Website
Website
🔗
Documentation
Documentation
🔗
Plans
Plans
🔗
RateLimits
RateLimits
🔗
FinOps
FinOps
📰
Blog
Blog

Sources

Raw ↑
opencollection: 1.0.0
info:
  name: Keygen API
  version: '1.0'
request:
  auth:
    type: bearer
    token: '{{bearerToken}}'
  header:
  - key: Content-Type
    value: application/vnd.api+json
  - key: Accept
    value: application/vnd.api+json
items:
- info:
    name: Tokens
    type: folder
  items:
  - info:
      name: Generate a token
      type: http
    http:
      method: POST
      url: '{{baseUrl}}/v1/accounts/{{account}}/tokens'
    docs: Generate a bearer token using HTTP Basic (user token) or a license key (license token).
  - info:
      name: List all tokens
      type: http
    http:
      method: GET
      url: '{{baseUrl}}/v1/accounts/{{account}}/tokens'
    docs: List all tokens for the account.
  - info:
      name: Retrieve a token
      type: http
    http:
      method: GET
      url: '{{baseUrl}}/v1/accounts/{{account}}/tokens/:id'
      params:
      - name: id
        value: ''
        type: path
        description: The ID of the token.
    docs: Retrieve a token by ID.
  - info:
      name: Regenerate a token
      type: http
    http:
      method: PUT
      url: '{{baseUrl}}/v1/accounts/{{account}}/tokens/:id/actions/regenerate'
      params:
      - name: id
        value: ''
        type: path
    docs: Regenerate a token, invalidating the previous value.
  - info:
      name: Revoke a token
      type: http
    http:
      method: DELETE
      url: '{{baseUrl}}/v1/accounts/{{account}}/tokens/:id/actions/revoke'
      params:
      - name: id
        value: ''
        type: path
    docs: Revoke a token.
- info:
    name: Licenses
    type: folder
  items:
  - info:
      name: Create a license
      type: http
    http:
      method: POST
      url: '{{baseUrl}}/v1/accounts/{{account}}/licenses'
      body:
        type: json
        data: "{\n  \"data\": {\n    \"type\": \"licenses\",\n    \"relationships\": {\n      \"policy\": { \"data\": { \"\
          type\": \"policies\", \"id\": \"{{policyId}}\" } }\n    }\n  }\n}"
    docs: Create a license from a policy.
  - info:
      name: List all licenses
      type: http
    http:
      method: GET
      url: '{{baseUrl}}/v1/accounts/{{account}}/licenses'
    docs: List all licenses for the account.
  - info:
      name: Retrieve a license
      type: http
    http:
      method: GET
      url: '{{baseUrl}}/v1/accounts/{{account}}/licenses/:id'
      params:
      - name: id
        value: ''
        type: path
    docs: Retrieve a license by ID.
  - info:
      name: Update a license
      type: http
    http:
      method: PATCH
      url: '{{baseUrl}}/v1/accounts/{{account}}/licenses/:id'
      params:
      - name: id
        value: ''
        type: path
      body:
        type: json
        data: "{\n  \"data\": { \"type\": \"licenses\", \"attributes\": {} }\n}"
    docs: Update a license.
  - info:
      name: Delete a license
      type: http
    http:
      method: DELETE
      url: '{{baseUrl}}/v1/accounts/{{account}}/licenses/:id'
      params:
      - name: id
        value: ''
        type: path
    docs: Delete a license.
  - info:
      name: Validate a license (by ID)
      type: http
    http:
      method: POST
      url: '{{baseUrl}}/v1/accounts/{{account}}/licenses/:id/actions/validate'
      params:
      - name: id
        value: ''
        type: path
    docs: Validate a license by ID, optionally scoped to a fingerprint or entitlements.
  - info:
      name: Validate a license (by key)
      type: http
    http:
      method: POST
      url: '{{baseUrl}}/v1/accounts/{{account}}/licenses/actions/validate-key'
      body:
        type: json
        data: "{\n  \"meta\": { \"key\": \"{{licenseKey}}\" }\n}"
    docs: Validate a license using its key, without prior authentication.
  - info:
      name: Check-out a license
      type: http
    http:
      method: POST
      url: '{{baseUrl}}/v1/accounts/{{account}}/licenses/:id/actions/check-out'
      params:
      - name: id
        value: ''
        type: path
    docs: Check out a signed license file for offline validation.
  - info:
      name: Check-in a license
      type: http
    http:
      method: POST
      url: '{{baseUrl}}/v1/accounts/{{account}}/licenses/:id/actions/check-in'
      params:
      - name: id
        value: ''
        type: path
    docs: Perform a required license check-in.
- info:
    name: Machines
    type: folder
  items:
  - info:
      name: Activate a machine
      type: http
    http:
      method: POST
      url: '{{baseUrl}}/v1/accounts/{{account}}/machines'
      body:
        type: json
        data: "{\n  \"data\": {\n    \"type\": \"machines\",\n    \"attributes\": { \"fingerprint\": \"{{fingerprint}}\" },\n\
          \    \"relationships\": {\n      \"license\": { \"data\": { \"type\": \"licenses\", \"id\": \"{{licenseId}}\" }\
          \ }\n    }\n  }\n}"
    docs: Activate a machine for a license by fingerprint.
  - info:
      name: List all machines
      type: http
    http:
      method: GET
      url: '{{baseUrl}}/v1/accounts/{{account}}/machines'
    docs: List all machines.
  - info:
      name: Retrieve a machine
      type: http
    http:
      method: GET
      url: '{{baseUrl}}/v1/accounts/{{account}}/machines/:id'
      params:
      - name: id
        value: ''
        type: path
    docs: Retrieve a machine by ID.
  - info:
      name: Update a machine
      type: http
    http:
      method: PATCH
      url: '{{baseUrl}}/v1/accounts/{{account}}/machines/:id'
      params:
      - name: id
        value: ''
        type: path
    docs: Update a machine.
  - info:
      name: Deactivate a machine
      type: http
    http:
      method: DELETE
      url: '{{baseUrl}}/v1/accounts/{{account}}/machines/:id'
      params:
      - name: id
        value: ''
        type: path
    docs: Deactivate (delete) a machine.
  - info:
      name: Ping a machine (heartbeat)
      type: http
    http:
      method: POST
      url: '{{baseUrl}}/v1/accounts/{{account}}/machines/:id/actions/ping'
      params:
      - name: id
        value: ''
        type: path
    docs: Send a heartbeat ping to keep the machine's activation alive.
- info:
    name: Components
    type: folder
  items:
  - info:
      name: Create a component
      type: http
    http:
      method: POST
      url: '{{baseUrl}}/v1/accounts/{{account}}/components'
    docs: Create a machine component.
  - info:
      name: List all components
      type: http
    http:
      method: GET
      url: '{{baseUrl}}/v1/accounts/{{account}}/components'
    docs: List all machine components.
- info:
    name: Processes
    type: folder
  items:
  - info:
      name: Spawn a process
      type: http
    http:
      method: POST
      url: '{{baseUrl}}/v1/accounts/{{account}}/processes'
    docs: Spawn a concurrent process on an activated machine.
  - info:
      name: List all processes
      type: http
    http:
      method: GET
      url: '{{baseUrl}}/v1/accounts/{{account}}/processes'
    docs: List all processes.
  - info:
      name: Ping a process (heartbeat)
      type: http
    http:
      method: POST
      url: '{{baseUrl}}/v1/accounts/{{account}}/processes/:id/actions/ping'
      params:
      - name: id
        value: ''
        type: path
    docs: Send a heartbeat ping for a process.
- info:
    name: Policies
    type: folder
  items:
  - info:
      name: Create a policy
      type: http
    http:
      method: POST
      url: '{{baseUrl}}/v1/accounts/{{account}}/policies'
    docs: Create a policy.
  - info:
      name: List all policies
      type: http
    http:
      method: GET
      url: '{{baseUrl}}/v1/accounts/{{account}}/policies'
    docs: List all policies.
  - info:
      name: Retrieve a policy
      type: http
    http:
      method: GET
      url: '{{baseUrl}}/v1/accounts/{{account}}/policies/:id'
      params:
      - name: id
        value: ''
        type: path
    docs: Retrieve a policy by ID.
  - info:
      name: Update a policy
      type: http
    http:
      method: PATCH
      url: '{{baseUrl}}/v1/accounts/{{account}}/policies/:id'
      params:
      - name: id
        value: ''
        type: path
    docs: Update a policy.
  - info:
      name: Delete a policy
      type: http
    http:
      method: DELETE
      url: '{{baseUrl}}/v1/accounts/{{account}}/policies/:id'
      params:
      - name: id
        value: ''
        type: path
    docs: Delete a policy.
- info:
    name: Products
    type: folder
  items:
  - info:
      name: List all products
      type: http
    http:
      method: GET
      url: '{{baseUrl}}/v1/accounts/{{account}}/products'
    docs: List all products.
  - info:
      name: Retrieve a product
      type: http
    http:
      method: GET
      url: '{{baseUrl}}/v1/accounts/{{account}}/products/:id'
      params:
      - name: id
        value: ''
        type: path
    docs: Retrieve a product by ID.
- info:
    name: Users
    type: folder
  items:
  - info:
      name: Create a user
      type: http
    http:
      method: POST
      url: '{{baseUrl}}/v1/accounts/{{account}}/users'
    docs: Create an end user / license owner.
  - info:
      name: List all users
      type: http
    http:
      method: GET
      url: '{{baseUrl}}/v1/accounts/{{account}}/users'
    docs: List all users.
  - info:
      name: Retrieve a user
      type: http
    http:
      method: GET
      url: '{{baseUrl}}/v1/accounts/{{account}}/users/:id'
      params:
      - name: id
        value: ''
        type: path
    docs: Retrieve a user by ID.
- info:
    name: Entitlements
    type: folder
  items:
  - info:
      name: Create an entitlement
      type: http
    http:
      method: POST
      url: '{{baseUrl}}/v1/accounts/{{account}}/entitlements'
    docs: Create a named entitlement (feature flag).
  - info:
      name: List all entitlements
      type: http
    http:
      method: GET
      url: '{{baseUrl}}/v1/accounts/{{account}}/entitlements'
    docs: List all entitlements.
  - info:
      name: Retrieve an entitlement
      type: http
    http:
      method: GET
      url: '{{baseUrl}}/v1/accounts/{{account}}/entitlements/:id'
      params:
      - name: id
        value: ''
        type: path
    docs: Retrieve an entitlement by ID.
- info:
    name: Releases
    type: folder
  items:
  - info:
      name: Create a release
      type: http
    http:
      method: POST
      url: '{{baseUrl}}/v1/accounts/{{account}}/releases'
    docs: Create a semver-tagged release.
  - info:
      name: List all releases
      type: http
    http:
      method: GET
      url: '{{baseUrl}}/v1/accounts/{{account}}/releases'
    docs: List all releases.
  - info:
      name: Retrieve a release
      type: http
    http:
      method: GET
      url: '{{baseUrl}}/v1/accounts/{{account}}/releases/:id'
      params:
      - name: id
        value: ''
        type: path
    docs: Retrieve a release by ID.
  - info:
      name: Upgrade a release
      type: http
    http:
      method: GET
      url: '{{baseUrl}}/v1/accounts/{{account}}/releases/:id/actions/upgrade'
      params:
      - name: id
        value: ''
        type: path
    docs: Resolve the next available upgrade for auto-update.
- info:
    name: Artifacts
    type: folder
  items:
  - info:
      name: Upload an artifact
      type: http
    http:
      method: POST
      url: '{{baseUrl}}/v1/accounts/{{account}}/artifacts'
    docs: Create an artifact for a release; response includes a pre-signed upload URL.
  - info:
      name: List all artifacts
      type: http
    http:
      method: GET
      url: '{{baseUrl}}/v1/accounts/{{account}}/artifacts'
    docs: List all artifacts.
  - info:
      name: Download an artifact
      type: http
    http:
      method: GET
      url: '{{baseUrl}}/v1/accounts/{{account}}/artifacts/:id'
      params:
      - name: id
        value: ''
        type: path
    docs: Retrieve an artifact; redirects to a pre-signed download URL when entitled.
  - info:
      name: Yank an artifact
      type: http
    http:
      method: DELETE
      url: '{{baseUrl}}/v1/accounts/{{account}}/artifacts/:id'
      params:
      - name: id
        value: ''
        type: path
    docs: Yank (delete) an artifact.
- info:
    name: Webhooks
    type: folder
  items:
  - info:
      name: Create a webhook endpoint
      type: http
    http:
      method: POST
      url: '{{baseUrl}}/v1/accounts/{{account}}/webhook-endpoints'
    docs: Register a webhook endpoint.
  - info:
      name: List all webhook endpoints
      type: http
    http:
      method: GET
      url: '{{baseUrl}}/v1/accounts/{{account}}/webhook-endpoints'
    docs: List all webhook endpoints.
  - info:
      name: List all webhook events
      type: http
    http:
      method: GET
      url: '{{baseUrl}}/v1/accounts/{{account}}/webhook-events'
    docs: List recorded webhook events.
  - info:
      name: Retry a webhook event
      type: http
    http:
      method: POST
      url: '{{baseUrl}}/v1/accounts/{{account}}/webhook-events/:id/actions/retry'
      params:
      - name: id
        value: ''
        type: path
    docs: Retry delivery of a webhook event.
bundled: true