Entitlements
The payload fields#
The signed license payload carries exactly these fields:
| Field | Meaning |
|---|---|
license_id |
Vendor-issued identifier (e.g. abrq-license-XXXX), shown in the UI and API |
customer |
Display name of the licensee |
issued_at |
Issue timestamp; also seeds the monotonic clock anchor on first install |
expires_at |
Expiry timestamp; enforcement is described in Expiry and clock integrity |
features |
Whitelist of licensed feature names (see below) |
fingerprints |
SHA-256 machine-id hashes for hardware binding; empty = unbound |
(A deprecated singular fingerprint field is still accepted for older
licenses; it behaves like a one-entry fingerprints list.)
That is the whole model. There are no other entitlement knobs.
The features whitelist#
features is a whitelist of named feature flags:
| Feature | What it gates |
|---|---|
streams |
The HTTP-API streams surface — its API router and UI pages |
email |
Email-attachment ingestion — inboxes and email feeds |
advanced_connectors |
Reserved |
-
An empty
featureslist means all features are licensed. Most licenses ship this way; per-feature scoping is the exception. -
streamsandemailare enforced at the API: calling a gated endpoint without the feature returns 403 with this detail text (feature name varies):{ "detail": "This feature ('streams') is not enabled by your license. Contact the vendor to add it to your license file, then replace license/license.json and restart the backend." } -
advanced_connectorsis reserved: the flag exists in the payload vocabulary but does not currently gate connector functionality.
Note. The licensed feature set is cached for the lifetime of each backend process. After replacing the license file, restart the backend, worker, and beat for feature gating to pick up the change (the
GET /api/v1/licenseendpoint itself re-reads the file on every call, so it reflects the new file immediately).
What is deliberately not in the license#
Abrq DIP licensing has no capacity entitlements. Explicitly:
- No seat caps — user accounts are not counted or limited by the license.
- No pipeline caps — the number of projects, tasks, CDC tables, streams, or jobs is not license-limited.
- No usage metering — rows, runs, and data volume are never counted against the license.
- No phone-home — verification is offline against the embedded vendor key; the only recurring check is a local hourly re-read of the file on disk. Nothing is transmitted to Abrq or anyone else.
Sizing is an infrastructure decision (worker replicas, database resources), not a licensing one.