Skip to content
License Server v1.25.0 · released 28 Oct 2026release notes →
Skip to content

Using the Console ​

The console is where you manage licenses day to day: issue them, find a customer's, change terms, revoke a license and free a seat. Your app never talks to the console. It talks to the License Server API, usually through the SDK: see the Integration overview.

This page describes the hosted console at license-cloud.casazium.com. The self-hosted bundle includes the same console, and everything here applies to it too, except sections marked Hosted only, which say what to use there instead. What's where shows which pages each one has.

Signing in ​

Sign out is at the top right of every page.

What's where ​

Navigation itemHostedSelf-hosted bundle
DashboardYesYes
LicensesYesYes
ReleasesYesYes
ProductsYesYes, with License Server 1.17.0 or later
SettingsYesNo
BillingYesNo

Dashboard ​

Three counts across the top: Active licenses, Active activations and Revoked licenses. Below them, four lists:

  • Recently issued licenses, the five most recent;
  • Recent activations, the five most recent;
  • Expiring soon, the five licenses that expire soonest in the next 30 days;
  • Seats near capacity, up to five licenses whose activations are close to their maximum.

Issuing a license ​

Go to Licenses and choose Issue license. The form's fields:

FieldWhat to enter
Product IDRequired. Your name for the product, such as com.acme.editor. Every license and release with the same Product ID shares one Product UUID.
TierRequired. Any text, such as pro. Your app can read it back when it verifies the key.
Issued toRequired. Who the license is for, usually the customer's email. The Customer filter searches it.
Perpetual (never expires)Tick it for a license that never expires: the expiry fields are hidden and the license is issued with no expiry. Console 1.14.2 or later.
Expires on, At, Time zoneRequired unless Perpetual (never expires) is ticked. Defaults to a year from today at 23:59, Eastern time. The time zones are Eastern, Central, Mountain, Pacific and UTC.
Max activationsHow many machines can hold the license at once. Defaults to 1.
Free inactive machinesNever (the default), After 30 days, After 90 days or Custom (1 to 365 days). A machine that hasn't checked in for that long gives up its seat when another machine needs one: see Seats that free themselves. Shown only with License Server 1.14.0 or later.
NotesOptional. Internal context, visible only in the console and through the admin API. You can edit it later.
Limits (optional)Optional usage limits: Users, Seats, Admins, Projects, Environments, Tenants, API calls / day, Rate limit (req/s) and Concurrent sessions. A blank field means no limit. Features takes feature-flag names: press Enter after each one.

Choose Issue license. The "License issued" page shows:

  • the Key, with a copy button: this is what your customer enters in your app;
  • the Product UUID: the same for every license with this Product ID. Hard-code it in your app, as the SDK's expectedProductUuid. The license's page shows it again later;
  • the Portal link: your customer's link to the license portal, where they can see their license and free a seat. It's shown only this once, so send it to your customer now, with the key. If it's lost, Reissue portal link on the license's page makes a new one.

Continue to license → opens the license's page.

On a hosted account, issuing stops at your plan's license limit, with the message "License quota reached". Billing shows how many you've used.

A license that never expires

Tick Perpetual (never expires) on the issue form, or on Issue your first license when you sign up. The expiry fields are hidden, and the license is issued with no expiry. The checkbox needs Console 1.14.2 or later; self-hosted, update to the current bundle. Through the API, leave out expires_at when you issue it: see Issuing Licenses.

Finding a customer or license ​

Licenses lists every license, 10 to a page. Choose a column heading (Key, Product, Tier, Status, Issued to, Expires or Seats) to sort by it. The filters above the list:

  • Status: Active or Revoked;
  • Customer: searches Issued to, for example by email;
  • License key: searches by key;
  • Product: the exact Product ID;
  • Mode (License Server 1.20.0 or later): Live, Sandbox (from your storefront's test mode) or Not recorded (issued by hand or through the API, or before License Server 1.20.0).

Type in a text filter and press Enter, or pick a Status or Mode. Choose a key to open that license's page.

A license from a sandbox purchase shows a sandbox badge. If its product refuses sandbox licenses (Products), it shows refused (sandbox) instead of active: your app is told it isn't active. Status: Active still lists it, as the refusal doesn't change the stored status.

The license's page ​

The key is at the top, with a copy button and a status badge: active, revoked, expired for an active license past its expiry date, or refused (sandbox) for a sandbox license its product refuses (with a note on how to restore it). Below it:

  • Product, Tier, Issued to, Issued at and Expires at;
  • Purchase: live or sandbox (test purchase), when the license came from a storefront purchase (License Server 1.20.0 or later);
  • Paid through: the end of the latest period paid for, when the server records it (1.20.0 or later). Your app can read it, for example for update eligibility; a refund can clear or shorten it;
  • Seats: activations against the maximum, such as 2 / 3, or 2 / Unlimited. The badge turns yellow with one seat left and red when every seat is taken;
  • Usage: each limit with its usage so far, such as api_calls_per_day: 120 / 10000, or "No usage limits set";
  • Revoked at, for a revoked license;
  • the Product UUID, with a copy button;
  • Notes: Add note, or Edit, then Save.

Changing terms ​

Edit terms opens "Edit license terms", filled in with the license's current terms:

  • Perpetual (never expires), or an expiry date with Expires on, At and Time zone (UTC unless you change it);
  • Unlimited seats, or Max activations;
  • Free inactive machines, with License Server 1.14.0 or later;
  • Limits (optional). What you save replaces all of the license's limits, so clearing a field removes that limit.

Choose Save. If you lower Max activations below the number of machines already activated, those machines keep working, but no new machine can activate until the count drops below the new maximum. The console warns you when this happens.

Edit terms changes the expiry, seats, Free inactive machines and limits. To change the Product ID, Tier or Issued to, issue a new license.

Revoking, reactivating and deleting ​

  • Revoke stops the license from working: verifying or activating it fails until you choose Unrevoke. A revoked license that has also passed its expiry date can't be unrevoked until you extend it with Edit terms.
  • Reissue portal link makes a new link to the customer's license portal, shown once. The old link stops working.
  • Delete asks you to confirm, then permanently deletes the license and its activations. This can't be undone. To stop a license working while keeping its record, revoke it instead.

Activations ​

The Activations table lists each machine holding a seat:

  • Instance: the instance ID your app sent when it activated;
  • Activated at;
  • Last check-in, only for a license that frees inactive machines. A machine whose lease has run out shows "Inactive — its seat goes to the next machine that needs one". A check-in renews the lease only once less than half of it is left, so this can show about half the period after the machine's last check-in: see Seats that free themselves.

Each row has two actions:

  • Deactivate frees that machine's seat, after you confirm. The machine has to activate again to use the license. This is how you free a seat for a customer who replaced a computer.
  • Reissue token makes a new activation token for that machine, for an app that lost the one it was given. The old token stops working.

Below the table, Activate this license shows the activation request for this key, with your API address filled in on a hosted account. The License Activation guide covers doing it from your app.

Products ​

License Server 1.17.0 or later.

Products sets what your buyers see for each product. A product appears here once a license or release names it, or when you add it with Add product. On a hosted account, the page also says prices and descriptions live in your storefront, and links to Settings → Storefront webhooks to connect it. Each row shows the Display name, the Product ID and whether the License file is Offered or Hidden. Choose Edit to change:

  • Display name: the product's name in the license email and on the license portal, up to 80 characters. Leave it empty to use the Product ID, when that can be shown to buyers. The "Buyers see" box previews the email subject and portal title;
  • Offer the license file in the buyer portal: turn it off if your app takes only the license key;
  • Accept licenses from sandbox purchases (License Server 1.20.0 or later): turn it off once you sell for real, so licenses from your storefront's test mode stop working in your app, update checks and the buyer portal. Before you save, it says about how many of this product's licenses that affects. Offline license files already exported keep working until they expire. Turning it back on restores them. See Refusing sandbox licenses once you go live.

Then choose Save. A product that refuses sandbox licenses shows sandbox refused in the list.

Releases ​

Releases lists the versions your app can update to. Choose Register release and fill in:

  • Product ID, Version, Channel (stable unless you change it) and Platform, such as darwin-arm64;
  • Artifact URL: where you already host the file. Casazium never stores or serves the file itself;
  • Checksum, such as sha256:...;
  • Release notes, optional.

Choose Register release. The list can be filtered by Status (Published or Unpublished), Product, Channel and Platform. Unpublish takes a release out of update checks immediately, after you confirm; to undo it, register the release again. See Software Distribution.

Storefronts and deliveries ​

Hosted only. Self-hosted, set up storefronts through the API: see Storefront Auto-Fulfillment.

Settings → Storefront webhooks connects a Stripe, Lemon Squeezy or Paddle store, so a completed purchase issues a license and emails the buyer their key. Storefront Auto-Fulfillment has the full steps. In brief:

  • Connect Stripe, Connect Lemon Squeezy or Connect Paddle starts a connection, then you map each product or plan you sell to the Product ID, tier and seats a purchase should issue;
  • Deliveries lists each purchase with its outcome and license, and any refund: the purchase's own, and the latest on its subscription (License Server 1.19.0 or later). Checkout or order ID and Find look up one purchase;
  • Refunds not matched, on a Stripe webhook, means refunds of its subscription payments can't be matched yet. The webhook's panel says how to fix it and, when the endpoint's API version is the cause, Replace signing secret saves a new endpoint's secret: see Refunds of subscription payments;
  • Resend email…, in a purchase's ⋯ menu, emails the buyer their key again;
  • Apply to existing subscribers…, in a plan mapping's ⋯ menu, updates the licenses of people who already subscribed: see Existing subscribers;
  • Sending the buyer their license chooses between Casazium emails the buyer and I deliver it myself: see Delivering the key yourself.

Your API key and address ​

Hosted only. Self-hosted, the bundle generates the admin API key: see Installation.

Settings → API access has the two values your own scripts and servers need to call the admin API:

  • Your API key, with a copy button. Use it only on a server, never in code that ships to customers;
  • API base URL, https://license-cloud-api.casazium.com/v1. This is where your app and scripts send requests. It is not the console's address, license-cloud.casazium.com, which you sign in to.

Rotate API key, after you confirm your password, replaces the key. The old key stops working immediately, so update anything that uses it. Licenses you've issued aren't affected. See Rotating your API key.

Billing ​

Hosted only.

Billing shows your Current plan, its status, and Licenses used against your plan's limit. Under "Change plan", choose Monthly or Annual (save ~20%), then a plan. On Free, Select on a paid plan opens checkout. On a paid plan, other plans read Switch and Free reads Downgrade (Manage while a payment is past due or the subscription is set to cancel). Switch opens Stripe's billing portal on your current subscription and shows the prorated amount; Downgrade opens the portal, where you cancel. Your current plan shows Current plan. See Managing your subscription and Plans and quotas.

Your account and data ​

Hosted only. Self-hosted, the console's login is set in the bundle's .env: see Installation.

In the Account section of Settings:

  • Change email sends a confirmation link to the new address. Your email changes when you open it;
  • Change password signs out your other sessions;
  • Download my data, under "Export your data", downloads every license and activation your account owns: see Exporting Your Data;
  • Delete account, under "Danger zone", permanently deletes your account and every license, activation and usage record, and cancels any subscription. Every license you've issued stops working. It asks for your password and can't be undone. See Deleting your account.

What needs the API ​

A few jobs have no console screen. Use the API for:

  • Issuing many licenses at once: see Bulk License Issuance;
  • Resetting a license's usage: POST /v1/admin/reset-usage (see the API Reference);
  • The offline license file: POST /v1/license-export/offline (1.21.0+; or the now-deprecated GET /v1/export-license/:key/offline; see License Verification). Buyers can also download it from the license portal, if the product offers it;
  • Storefront setup on a self-hosted server: see Storefront Auto-Fulfillment.