Licensing
The Suite's surfaces are gated by feature flags carried in a license. A plan bundles a set of flags and limits; a tenant admin or an operator can override a single flag for a tenant or a user. The user-facing view of this — what a reader sees without a flag — is Plans and entitlements; the full flag-to-surface matrix is in the Reference.
Plans
The plan catalog lives in Apiome's licenses table and is attached to tenants (tenant_licenses;
the Free plan is attached automatically when a tenant is created) and to users (user_entitlements).
| Limit | Free | Paid | Sponsor |
|---|---|---|---|
| Tenants | 1 | 5 | 20 |
| Users per tenant | 5 | 25 | 100 |
| Projects | 1 | 10 | unlimited |
| Versions | 3 | 50 | unlimited |
| AI requests | 0 | 1000 | unlimited (not enforced) |
-1 means unlimited; a limit a plan does not name falls back to the Free value.
Bundled flags: Free carries designer. Paid and Sponsor carry designer, paths,
ai_assistant, repositories, primitives-registry, scribe, slate, hosted and authoring.
A Free tenant gets any other flag only through an override.
How a flag is resolved
For each flag, in order: the user's override, then the tenant's override, then the user's
plan bundle. A global master switch can turn a flag off for everyone at once. The seat guard can be
disabled with APIOME_LICENSE_ENFORCEMENT_ENABLED=false; the gating itself cannot.
Feature gates read the user's plan, while the License & Plan panel in the main app reports the tenant's plan. A user whose own plan differs from their tenant's can see a panel that disagrees with what the studio lets them open. This is recorded as unresolved in the licensing model.
Refusals are 403 with a reason: license-seats-exhausted when a plan's seats are used up, and
tenant-cap-reached when a user cannot create another tenant (Tenant limit reached (x of y used) —
upgrade your plan to create more).
What each flag unlocks
| Flag | Surfaces |
|---|---|
designer | The Data Designer canvas and the Workspace |
paths | The Paths editor |
authoring | The Authoring Overview, every call to Spire, and the Authoring, Scribe and Slate home cards. The umbrella flag: without it the Authoring pages show Authoring is not enabled |
scribe | Scribe, Guides and the Changelog |
slate | Slate |
hosted | Releases, Cache, Security, Edge, Insights, and the Publish to production setup step |
The Suite host contributes authoring, scribe, slate and hosted to the main app at runtime, so
the open-source apiome-ui never names a commercial surface; designer and paths are its own.
What a user sees without a flag
| Situation | Copy |
|---|---|
No authoring flag | Authoring is not enabled — "Your plan does not include the Authoring suite (Scribe, Slate, and managed delivery). Ask a tenant admin to enable Authoring to continue." |
| One surface missing | "Surface is not included in your plan. Ask a tenant admin to enable it." |
Guides without scribe | "Guides are part of Scribe, which is not enabled for this tenant." |
| Suite dropdown, not entitled | An access note under the destination: "Included with the Authoring suite. Ask a tenant admin to enable it.", "Available in the Scribe preview. Contact your account team to join.", "Available in the Slate preview. Contact your account team to join.", "Included with a hosted plan. Contact your account team to upgrade." or "Included with the Designer plan. Ask a tenant admin to enable it." |
Not built yet
Billing, checkout and self-service plan changes do not exist; the upgrade call to action is a stub. The AI-request limit is recorded on the plan but not enforced. Licenses are managed from the Apiome admin console and the feature flags page.