Concepts
LicenseManager is built on a handful of objects. Once you know what each one represents and when its settings apply, every screen of the app and every endpoint of the API reads the same way.
The big picture
Think of Acme Studio, a small team selling a photo editor and a video converter for Mac and Windows:
| At Acme Studio | In LicenseManager |
|---|---|
| Acme Studio itself | Your organization: your team, your billing, your API keys. |
| Acme Photo, the photo editor | A product: an app you sell. |
| The offers on the pricing page: Trial, Personal, Business | The policies of the product. |
| A photographer who bought Acme Photo, known by their email | A customer of the product. |
| The key they received after checkout, valid for one year | A license, with its key. |
| Their laptop and their studio desktop, where they entered the key | The machines the license is used on. |
| Acme Photo 1.0, 1.5, 2.0… | The releases of the product, and which ones each license unlocks. |
| The history of every activation, refusal and change | The events. |
| A sandbox copy of Acme Photo the team uses to test checkout and activation | A test product. |
How they fit together
- An organization holds products. Members of the organization see all of them.
- A product holds everything else: its policies, customers, licenses and releases belong to it and to no other product. A customer of one product isn’t a customer of another, even with the same email.
- A policy is a template. When a license is created, it copies the policy’s settings: its expiration, its machine limit, its offline duration and the versions it unlocks. Changing the policy later doesn’t change the licenses already created. See policies and licenses.
- A license belongs to one customer and follows one policy, both for its whole life.
- A machine is created the first time your application validates the license key on a device, and belongs to that license only.
- Releases don’t block anything by themselves: they tell LicenseManager which versions exist, so that version limits can be resolved and errors can suggest the right version to install.
- Events record what happened to policies, licenses and machines, and who did it.

The life of a license
- You create a product. It comes with a default policy.
- You create policies for each offer: Personal, Business, Trial.
- A license is created, by you, the API, or a Stripe payment. Its customer is found or created from the email.
- The customer enters the key in your application, which validates it. The device becomes an active machine, and the application receives a signed token to run offline.
- You publish new releases. The license unlocks them, or not, according to its updates.
- The license expires, or the customer deactivates a machine to move to a new one.
Every step is recorded as an event.