Plans¶
A plan is a named set of grants. Subscribers receive entitlements by subscribing to a plan (plus optional overrides).
Kinds¶
| Kind | Use |
|---|---|
catalog |
Self-serve / public tiers (Free, Pro, Enterprise) |
custom |
Sales-built packages for one deal or a small set of subscribers |
Both kinds are first-class plans. Custom is not a side channel — it’s the same model with a different kind.
Properties¶
| Field | Description |
|---|---|
id |
Plan id |
key |
Optional stable key for catalog plans (pro) |
name |
Display name |
kind |
catalog or custom |
grants |
List of feature grants |
created_at / updated_at |
Timestamps |
Grants¶
Each grant references a catalog feature and matches its kind:
| Feature kind | Grant shape |
|---|---|
flag |
{ "feature": "sso", "kind": "flag" } |
limit |
{ "feature": "seats", "kind": "limit", "limit": 10 } |
limit unlimited |
{ "feature": "seats", "kind": "limit", "limit": null } |
- Flag grant present → entitled
- Limit grant → entitled amount (
null= unlimited) - Feature absent from grants → not entitled from the plan
Changing a plan’s grants affects all subscribers currently subscribed to that plan (on next check). For one-off deals, use a custom plan or overrides instead of editing a shared catalog tier.
Example¶
{
"key": "pro",
"name": "Pro",
"kind": "catalog",
"grants": [
{ "feature": "sso", "kind": "flag" },
{ "feature": "csv_export", "kind": "flag" },
{ "feature": "seats", "kind": "limit", "limit": 10 },
{ "feature": "storage_gb", "kind": "limit", "limit": 100 }
]
}
Sales pattern¶
- Clone or compose a custom plan with the negotiated grants
- Create a subscription from the subscriber to that plan
- Use overrides only for temporary or tiny deltas (trial SSO, short seat bump)