Concepts
Organization ─┬─ Products ── Policies ── Licenses ── Machines (activations)
├─ Team members (roles)
└─ API keysOrganization
Your company's account. Everything below belongs to exactly one organization, and organizations are isolated from each other at the database level.
Product
An app you sell, for example "Acme Editor". It has a name and a short code (acme-editor).
Policy
A license template for a product: type (PERPETUAL, SUBSCRIPTION or TRIAL), max machines and duration. Licenses are issued from a policy, so changing the policy's machine limit changes it for every license on that policy.
License
What your customer holds: a key (K7QX-M2PD-9HWT-R4CN), the customer's email, an expiry date from its policy, and a status:
| Status | Validates? | Can change to |
|---|---|---|
ACTIVE | Yes, if not expired and a machine slot is free | SUSPENDED, REVOKED |
SUSPENDED | No (SUSPENDED) | ACTIVE (reinstate), REVOKED |
REVOKED | No (REVOKED) | Nothing. Revocation is permanent |
Machine (activation)
A license in use on one computer, identified by a fingerprint your app sends (any stable machine id). The first validation from a new fingerprint activates it if the policy has a free slot. You can deactivate a machine from the dashboard, or the app can call deactivate when a user moves to a new computer.
Validation result codes
| Code | Meaning | What your app should do |
|---|---|---|
VALID | License is active, not expired, machine allowed | Let the user in |
NOT_FOUND | No license with this key in your organization | Ask the user to check the key |
EXPIRED | Past the license's expiry date | Offer a renewal |
REVOKED | Revoked by you | Block |
SUSPENDED | Temporarily blocked by you | Block, show a support contact |
TOO_MANY_MACHINES | Already active on the maximum number of machines | Ask the user to deactivate another machine |
