Skip to content

Activation & machine binding

A license is issued for one machine and proves it belongs there. This page explains how your machine code is computed (safely — it’s a hash, never your raw hardware identifiers), how binding is enforced offline, a planned online check that will add revocation on top, and what it takes to move to a new machine.

Your machine code

The machine code is a SHA-256 hash rendered as 64 lowercase hex characters. The add-in derives it from at least two stable machine signals — drawn from the Windows machine GUID, the system drive’s volume serial, and the first active network adapter’s hardware address — joined and hashed. Two key properties:

  • It is a one-way hash, not your hardware IDs. The raw identifiers are never stored as, or transmitted as, the machine code — only the hash is. You cannot recover the underlying signals from the code.
  • At least two signals are required. If fewer than two stable signals are readable (rare, and most common on heavily locked-down virtual machines), the code shows “Unavailable” and activation can’t proceed until the machine exposes enough signals.

Where to find your machine code

Open ModelXcel Pro → Help → License Status (keytip LS). The dialog shows your read-only machine code with a Copy button. Include it when you request a license — each license is bound to the code it was issued for.

Why a license is bound to one machine

A current (v3) license carries a signed machineCode claim. On every check the add-in re-derives the machine code for the computer it’s running on and compares it (case-insensitively) to the claim. A match is required; a mismatch makes the license invalid for this machine with the message: “This license was issued for a different machine. Copy this machine code and request a reissue.” Because the comparison is over a signed claim, the binding can’t be forged without re-signing — which only the licensing portal can do.

Legacy v2 licenses behave slightly differently: only v2 licenses at schema version 2 are machine-bound (older v2 licenses are accepted without a machine check), and they additionally use an add-in-side move counter — see Moving to a new machine below.

Activating

  1. Copy your machine codeOpen License Status, click Copy, and send the code to support with your license request.
  2. Receive a license issued for that machineYou’ll get a .lic file (or its text) signed for your machine code.
  3. Paste it or browse to the fileIn the same dialog, paste the license key / .lic contents, or use Browse… to pick the file.
  4. Click ActivateThe add-in verifies the signature, confirms it was issued for this machine, checks the dates, and saves it locally. Features unlock immediately.

There is no account to sign into — activation is entirely local. The step-by-step dialog walkthrough lives on the Activation & licensing page.

What happens at every startup (offline)

Activation isn’t a one-time unlock — the license is re-checked, offline, each time Excel starts. No network is required to keep working.

  1. Clock-rollback checkThe add-in keeps a monotonic “last seen” watermark. If the system clock appears set backwards (beyond a 60-second tolerance), the license is marked Invalid until the clock is corrected.
  2. Load & verifyIt loads the stored license and verifies its signature against the public keys built into the add-in.
  3. Confirm machine & datesIt re-derives the machine code, requires a match, and checks expiry — resolving Licensed / Trial / Grace / Expired / Invalid.

The add-in only auto-opens the activation dialog when the state is Unlicensed, Expired, or Invalid. A normal Trial / Licensed / Grace launch doesn’t prompt. The license and its metadata are stored per user under %LocalAppData%\Modelxcel\ModelxcelPro\ and the current-user registry; the watermark is read as the maximum of the file and registry values so a single rollback can’t defeat the clock check.

The online freshness check (planned)

Today, activation and every re-check are fully offline: the signed .lic verified locally is the activation artifact, and the add-in makes no routine license network call. Separately, the website exposes a freshness/revocation endpoint, /api/license/validate, designed to add two things a static signed file can’t express on its own — a revoked license and a lapsed subscription. The add-in’s use of that endpoint is a planned layer, not implemented in the current build; for now the offline check is the only check.

The endpoint is built so it will be safe to depend on once the add-in adopts it:

  • Rare and cached. Designed to be called about once per session, with the answer cached for roughly 14 days.
  • Fail-open. If it’s unreachable, the caller is expected to assume valid — a network outage must never block an offline-activated license.
  • Privacy-preserving. It accepts only a licenseId and returns booleans (valid, revoked, subscriptionActive, expired) plus a reason code — no customer data. It never signs anything and is rate-limited.

Revocation will be “soft”, not an instant kill switch

By design a signed .lic keeps verifying offline until it expires. So even once the freshness check is in use, revoking a license will take effect only when the cached check next refreshes (up to ~14 days) — not instantly. The model leans on short validity windows rather than a real-time kill switch, which is what keeps the add-in fully usable offline.

Moving to a new machine

Licenses are machine-bound, so a license activates only on the machine whose code it was issued for. How a move is handled depends on the format:

  • Current (v3) licenses do not use any local move counter. Moving to a new machine requires a new or rotated signed license issued for that machine’s code — governed by the portal’s seat / move policy (a customer can have a bounded number of distinct machines in a rolling window; see Admin & signing). Copy the new machine’s code and request a reissue.
  • Legacy (v2) licenses additionally use an add-in-side counter allowing up to 2 machine changes per 365 days; beyond that, activation on a new machine is refused (“already been activated on 2 other machines in the past year”).

Common activation messages

What you see“This license is not valid for this machine.”
What it meansThe license was issued for a different machine code than this computer’s.
What to do nextCopy this machine’s code from the dialog and request a reissue for it.
What you see“Already been activated on 2 other machines in the past year.”
What it meansA legacy (v2) license’s move allowance (2 per 365 days) is exhausted.
What to do nextRequest a current (v3) license for this machine via the portal/seat policy.
What you seeMachine code shows “Unavailable”.
What it meansFewer than two stable machine signals could be read (common on locked-down VMs).
What to do nextContact support — the machine isn’t exposing enough signals to bind a license.
What you see“System clock appears to have been set backwards.”
What it meansThe clock is earlier than the add-in’s last-seen watermark (beyond 60s).
What to do nextCorrect the system clock, then reopen Excel (or reactivate).
What you see“This license has already expired.”
What it meansThe license’s last valid day (plus any paid grace) has passed.
What to do nextRequest a renewal; paste the new key in the same dialog.

Where to go next