Overview
Store custom key/value data on licenses and products, optionally returned on validation.
Variables let you attach arbitrary key/value data to a license or a product. Use them for per-customer settings, feature flags, seat counts, or anything your product needs to read alongside a license check.
This extension depends on core. The
Rules extension can gate validation on a variable with its
require_variable type. See the Configuration and
API Reference.
How it works
- A variable has a scope (global, product, or license), an owner (which product or license), a key, and a JSON value.
- Product variables act as defaults; a license variable of the same key overrides the product's.
- With
INCLUDE_IN_VALIDATIONon, the resolved variables for a key are returned in the validation response, so your product can read them without a second call.
Managing variables
Set variables from the Variables dashboard page, the variables console command, or the
API. License-level variables are managed through the
license endpoint on the core API.
User variables
User variables are a separate, isolated store that the license holder can read and write with their license key, no admin key needed. Use them for per-user state your product or customer keeps, like a usage counter or a saved preference. They never mix with the admin-managed variables above, so a customer can never change anything that gates their own access.
- Isolated: scoped to a single license and only reachable with that license's key.
- User-editable: from the customer's client dashboard ("My Data"), or directly by your product through the user variables API.
- Returned on validation as
user_variableswhenUSER.INCLUDE_IN_VALIDATIONis on. - Countable:
PATCHincrements a numeric value atomically, so "total API calls" is a single call.
Turn them off, or cap how many a license can store, in the configuration.

