Licensing

A license key your software can check, in one HTTPS call.

Every product you sell gets its own key format and its own rules. A check comes back valid or refused, with a reason, so your code can decide what to do rather than guess.

What it does

Two ways to hand out a key

Issue a key at the point of sale and have the customer paste it in, or let the app claim one itself on first run. Which one fits depends on whether your software ships as a download or reads a config file: the solutions pages walk through it per case.

Version-aware

Send the running version with the check and decide what an old release gets: still valid, a nudge to update, or refused.

A reason on every answer

A refused check comes back with why: expired, blocked, wrong machine. That is what lets your error message say something true instead of "license invalid".

Nothing to install

It is an HTTPS request. The panel gives you the code in JavaScript, Python, Go, Java, C# or PHP, but any language that can make a web request works.

Validating a key on startup

Your app calls the validate endpoint with the license key. Bloom checks it against your product's rules and answers valid or refused, with a reason.

const res = await fetch('https://bloomcloud.pro/api/v1/licenses/validate', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer ' + process.env.BLOOM_API_KEY,
  },
  body: JSON.stringify({ key: licenseKey, hwid: machineId(), version: app.version }),
});

const result = await res.json();
if (!result.valid) throw new Error('License refused: ' + result.reason);

Who this is for

Read it in the words of what you actually make.