Skip to main content

Licenses

A license is what lets a deployment run as a product you pay for. It is issued on your account at kuploy.app, carries your Layer 1 tier, and reaches each deployment as a license key (lic_…) that the deployment keeps in sync with kuploy.app.

The Licenses page on kuploy.app: each license, its instances, and when it was created

The same license, claim-code and sync mechanics serve every product. This page covers what they share; each product's own page covers its setup: Kuploy Cloud · Leeram Business · GrowthOps.

Linking a deployment​

There are two ways a deployment gets its key.

A claim code. The deployment asks kuploy.app for a short-lived code and shows it to you. Enter it at kuploy.app/claim, pick the license, and the key travels from kuploy.app straight into the deployment — you never copy it. This works behind firewalls, and it is the only way in for a deployment that must not hold a key in its environment.

Entering a claim code at kuploy.app/claim

A key in the environment, where the product may hold one:

ProductVariableWhen it's honoured
Kuploy CloudLICENSE_KEYAlways; a key saved in the admin UI takes precedence
Leeram BusinessKUPLOY_LICENSE_KEYAlways — it seeds the license on first boot
GrowthOpsKUPLOY_LICENSE_KEYOnly when GROWTHOPS_TRUST=server

Staying in sync​

Once linked, a deployment refreshes its license from kuploy.app on a schedule. That is how plan changes, reassignments and revocations reach it.

ProductHow oftenSync now
Kuploy CloudEvery hour, in-processRetry Sync on the Admin dashboard
Leeram BusinessEvery 30 minutesForce sync on /admin/license
GrowthOpsEvery 30 minutes, from a schedule you set upRe-sync now on /admin/license

If kuploy.app can't be reached, a deployment keeps working from what it last received. It reads stale once that is past its cache window, and frozen once the grace period after that runs out.

StateMeans
freshSynced recently.
stalePast its refresh window, still within the grace period. It keeps retrying.
frozenThe grace period ran out without a successful sync — or the license has never synced at all.
invalidkuploy.app reports the license as revoked, suspended or expired.
unlinkedkuploy.app no longer recognises this instance. Claim it again.
emptyNo license yet.

What a lapsed license does differs by product. Kuploy Cloud blocks new resources when it is frozen or invalid — see Kuploy Cloud licensing. GrowthOps switches nothing off; it only loses the ceiling its plans are checked against.

Who operates a deployment​

Being the owner of an organisation on a deployment never makes you its operator: anyone who signs up owns the organisation they create. Operating a deployment is a separate question, and each product answers it this way:

ProductThe operator is…
Kuploy CloudA platform admin of the instance — see Admin Dashboard.
Leeram BusinessWhoever owns the tenant the license belongs to, signed in with Kuploy.
GrowthOpsWhoever owns the tenant the license belongs to, signed in with Kuploy — or a verified address listed in GROWTHOPS_OPERATOR_EMAILS.

Ownership is checked live against kuploy.app each time, so losing it takes effect within about an hour everywhere. Kuploy staff are not operators of your deployment unless they own your tenant, and you need no Kuploy role to run your own. The claim behind this is documented for integrators in OIDC Custom Claims.

Operator pages don't say "access denied" to anyone else — they return a plain 404, so they look like they don't exist.

Moving a deployment to another license​

A platform admin can reassign an instance to a different license without downtime; it picks the change up on its next sync. See Reassigning an Instance. Every reassignment is listed under Assignment History on the license's page at kuploy.app.

A license key is a credential​

caution

A lic_… key can send branded email as any organisation of the tenant it belongs to. It is a credential, not a configuration value: never put one in a workload you don't control, and never hand your own key to somebody else's deployment.

On a product you run yourself this stays bounded — the key is yours, and so are the organisations it could send as. It stops being bounded the moment the key travels somewhere you don't control. This is why GrowthOps ignores a key in its environment unless you declare that it runs on infrastructure you own.