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.