Plans and Entitlements
Two plan ladders — one for MSPs, one for the businesses they serve — with every feature and every cap enforced from the same catalogue the sales team quotes from.
The problem
Packaging is where software companies quietly lie to their customers. A feature appears on the pricing page but the code never checks the flag, so it ships to everyone and the tier above it has nothing left to sell. Or the reverse: the gate is real but the plan data never grants it, and a customer who paid for Enterprise finds the button greyed out and opens a support ticket you cannot close without a deploy.
The failure is structural, not careless. The pricing page is a design file, the plan record is a database row, and the gate is an if statement in a service somebody else owns. Nothing makes the three agree, and nothing tells you when they stop.
What Solidlio does about it
One catalogue row per plan carries its prices, its seat rules, its feature flags and its numeric caps. Every gate in every service that has one — ten of them, from ticketing to AI — reads that row through the same shared helpers: no service keeps its own copy of what a plan includes, and no service writes its own comparison. Platform administrators edit the catalogue in the product, and the change applies to running tenants immediately, including to the upgrade offers customers are shown. A published matrix is generated from the same data, with a per-key enforcement badge, so “advertised but not enforced” is a visible state rather than a discovery.
And when a plan does block someone, it does not just refuse. The response carries the name of the cheapest plan that lifts the block, its price in the customer’s currency, and whether that particular user is allowed to buy it — so the interface can offer the upgrade in place instead of showing a red error.
Capabilities
| Capability | What it does |
|---|---|
| Two plan families | Separate five-rung ladders for MSP partners and end customers; an account can only buy within its own family. |
| Hybrid pricing | A base platform fee plus a per-seat price beyond the included seat, billed monthly or annually. |
| Graduated features | Eight capabilities sell by rung rather than on/off — change management alone has four, from read-only to advanced. |
| Twelve numeric caps | Organizations, seats, nesting depth, technician seats, projects, assets, contracts, AI credits, sending and custom domains. |
| In-place upsell | A blocked action returns the target plan, its price and whether the caller can self-serve — not a bare refusal. |
| Live upgrade targets | The plan offered is computed from the current catalogue, so a price or packaging change takes effect the same minute. |
| Prorated self-serve upgrade | Pay only the difference for the remainder of the billing period; entitlements apply on payment, not at renewal. |
| Runtime plan editing | Platform admins retune features, caps and per-currency prices in the product, with a full before/after audit trail. |
| Multi-currency catalogue | Per-currency list prices for USD and EUR; a plan with no price in a currency is never quoted or billed in it. |
| Automatic re-gate | A cancelled, past-due or suspended account drops to its free plan — caps and features together, never one without the other. |
| Client-owned plans | A managed client is its own tenant and upgrades its own plan without the MSP brokering it. |
| Generated gate matrix | The plan/feature/cap matrix is generated from the seed with a per-key enforced / partial / not-enforced badge. |
Built for MSPs and their clients
Two tenants, two plans, one relationship. The MSP’s plan governs its own practice; each client’s plan governs that client. A managed client that has not bought a plan of its own inherits its MSP’s entitlements, so an MSP can bring a client onto the platform before any money changes hands.
| Organization | MSP | |
|---|---|---|
| Owns its plan | Yes — its own subscription and invoices | Yes — separately, on the MSP ladder |
| Buys an upgrade | Its own admins, self-serve and prorated | Its own admins, self-serve and prorated |
| Entitled without a plan | Inherits the managing MSP’s plan | — |
| Commission | — | Accrues on managed-client subscriptions, from Starter up |
| Seat cap | Its own users per organization | Its own technician seats, capped separately |
| Client organizations | — | Capped by the MSP’s plan: 2 on Free up to unlimited |
How it works
- Choose a plan. After signup the plan picker shows the ladder for your business type, priced in your account’s currency, with a seat selector that updates the estimate as you move it.
- Start. Paid plans below Enterprise carry a 14-day trial; the rest invoice immediately. Enterprise is quoted.
- Work. Feature gates and caps apply from that moment. Nothing is checked twice and nothing is cached stale — every gate reads the live plan.
- Hit a wall. Creating a fifty-first asset on a fifty-asset plan returns the cap, the plan that raises it, its monthly price, and whether you personally can buy it. The interface shows an upgrade button or “ask your administrator”, never a stack trace.
- Upgrade. Pay the prorated difference for the rest of the period. The new caps are written in the same transaction, so the action you were blocked on works on the next click.
- Change your mind. Downgrades apply at renewal, through support, so you keep what you have paid for. Nothing is deleted when a plan shrinks — you simply stop being able to add more.
Compliance and audit
Every change to the plan catalogue writes a PlatformAuditLog entry with the acting administrator’s identity and email, the action, the tier, and the complete before and after state of the row. Tier creation and its audit entry are written in one transaction, so a plan cannot exist without a record of who created it. The same applies to per-currency price changes and deletions.
Plan changes on an account are recorded as platform orders and subscription events, so the sequence from trial to paid to upgrade to cancellation can be reconstructed, along with what was charged for each step.
A tier that any account or subscription is using cannot be deleted.
Editions
MSP / IT partner plans:
| Capability | Free | Starter | Growth | Scale | Enterprise |
|---|---|---|---|---|---|
| Client organizations | 2 | 15 | 50 | ∞ | ∞ |
| Technician seats | 1 | 10 | 25 | ∞ | ∞ |
| Assets | 50 | 1,000 | 5,000 | 25,000 | ∞ |
| Contracts | 0 | 10 | ∞ | ∞ | ∞ |
| Active projects | 0 | 5 | 15 | ∞ | ∞ |
| AI credits / month | 50 | 1,000 | 5,000 | 15,000 | ∞ |
| Project management | — | ● | ● | ● | ● |
| Change management | — | View | Basic | CAB | Advanced |
| SLA management | — | Basic | Advanced | Advanced | Advanced |
| Email integration | — | — | M365 | + Gmail/IMAP | + Gmail/IMAP |
| Custom branding | — | — | — | Logo | Full |
| Custom domains | 0 | 0 | 0 | 5 | ∞ |
| Verified sending domains | 1 | 2 | 5 | 10 | ∞ |
| Roll-up reporting | — | — | — | Basic | Full |
| API access | — | — | Read | Full | Full |
| Catalog control | — | Limited | Full | Full | Full |
| Commission accrual | — | ● | ● | ● | ● |
| White-label | — | — | — | — | ● |
| SSO (Entra ID / Google) | — | — | — | — | ● |
End-customer plans:
| Capability | Free | Essentials | Professional | Business | Enterprise |
|---|---|---|---|---|---|
| Organizations | 1 | 1 | 3 | 10 | ∞ |
| Users per organization | 3 | 10 | 25 | 50 | ∞ |
| Assets | 25 | 500 | 2,500 | 10,000 | ∞ |
| Contracts | 0 | 0 | 5 | ∞ | ∞ |
| Active projects | 0 | 0 | 10 | ∞ | ∞ |
| AI credits / month | 25 | 500 | 2,500 | 10,000 | ∞ |
| Project management | — | — | ● | ● | ● |
| Change management | — | View | Basic | CAB | Advanced |
| SLA management | — | — | Basic | Advanced | Advanced |
| Email integration | — | — | M365 | + Gmail/IMAP | + Gmail/IMAP |
| Custom branding | — | — | — | Logo | Full |
| Custom domains | 0 | 0 | 0 | 1 | ∞ |
| Verified sending domains | 1 | 1 | 3 | 5 | ∞ |
| Roll-up reporting | — | — | — | Basic | Full |
| API access | — | — | Read | Full | Full |
| SSO (Entra ID / Google) | — | — | — | — | ● |
| White-label | — | — | — | — | ● |
Every cell above is generated from the plan catalogue and cross-checked against the code that enforces it.
Priority support tiers (email, chat, phone) are a service commitment, not a software gate, and are excluded from these tables deliberately.
“API access” gates whether a plan may issue an API key. The Read/Full distinction sets the key’s recorded scope; it is not yet enforced per request.
Packaging you can change on a Tuesday, enforced everywhere by Wednesday morning — because it was never written down twice.