Subscriptions

Overview
Subscriptions run sold subscriptions and licences along their lifecycle — from signing through renewals to expiry. A perpetual licence rides along in the same list as the term “perpetual”.
They are the third source of recurring revenue alongside contracts and retainers, and like those they feed billing.
Core tasks
Sign a subscription. Customer, scope and term.
Run the lifecycle. Renew, change plan, suspend, cancel, let expire — the status catalogue lives in the subscription settings.
See the revenue. The revenue view is its own permission: managing subscriptions does not automatically show what they bring in.
Fields in detail
| Field | Required | Values / format | What it does |
|---|---|---|---|
Customer customerId | yes | an existing customer | Who holds the licence. |
Article productId | yes | an existing article | What is licensed. |
Variant variantId or variantUlid | no | a variant of the article | Which version — edition, tier. |
Licence key licenseKey | no | text | The key the customer uses. Left empty the system generates one. |
Seats seats | no | number, greater than 0 | For how many users or devices the licence applies. |
Term term | no | monthly, yearly, perpetual | How long it lasts. Perpetual does not expire and is not renewed. |
Starts on startsAt | no | date | From when it applies. |
Auto-renew autoRenew | no | yes/no | Whether it renews at the end. On means a new period arises and with it an invoice, without anyone acting — the reason the notice period beside it matters. |
Cancel at cancelAt | no | date | When the licence should end. |
Immediate immediate | no | yes/no | Whether cancellation takes effect at once instead of at period end. Immediate means access ends now — with everything that implies for the customer. |
Brand brandId | no | one of your brands | Which brand the licence is kept under. |
Interface and automation only
| Field | Values / format | What it does |
|---|---|---|
currentVersionId | identifier of a version | Which program version the licence covers. |
sourceQuoteId | identifier of a quote | Which accepted quote the licence came from. |
Settings & permissions
- Module
module.licensing. products.license.view,products.license.create,products.license.lifecyclefor
the lifecycle, products.revenue.view for the revenue view, licensing.config.manage for the catalogue.
- Recurring revenue runs through billing.
FAQ & troubleshooting
A subscription keeps being billed. Check its status and the plan in billing.
I see no revenue. Then products.revenue.view is missing — deliberate, not a display fault.
A subscription cannot be renewed. Then products.license.lifecycle is missing.
Subscription or contract? A subscription entitles to use a product and carries MRR/ARR; a contract commits to work — retainer, maintenance, hosting — and runs quotas. Anyone consuming hours or quotas needs the contract.