User guide
Commissions
Looking for what it does rather than how to use it? Read the Commissions overview .
Partner commissions: what Solidlio owes an MSP for the client subscriptions it brings in, what that MSP owes Solidlio in platform fees, and how the two are netted and paid.
What it is
When an MSP’s managed client subscribes to a paid Solidlio plan, the MSP earns a commission on that subscription. Commissions accrue per sale, are approved by a platform administrator, are batched into a payout for a period, and are paid.
Commissions run in the other direction from invoicing. Invoicing is what an MSP bills its clients. Commissions are what Solidlio pays the MSP. Platform fees are what the MSP owes Solidlio, and they are deducted from the commission payout before it goes out.
Concepts
| Concept | What it is |
|---|---|
| Commission rule | The terms for one account: a percentage rate, an optional fixed amount per sale, optional per-transaction floor and ceiling, a scope, and a date window. |
| Commission earning | One booked commission for one sale. Records the base amount, the rate applied, the arithmetic, and the rule it came from. This is the line item. |
| Commission payout | A batch of approved earnings for one account over one period, with a payment method and reference once settled. |
| Commission dispute | A contest raised against a single earning. Carries a reason, a priority, and a resolution. |
| Platform fee | What the account owes Solidlio — 15% on MSP support-package sales, plus escalation and service-order fees. Netted against the payout. |
| Net payout | Approved unpaid commissions for a period, minus pending platform fees for that period, floored at zero. |
percentageRate is a fraction, not a percent
Every rate in this system is stored as a fraction: 0.10 means 10%. The API rejects any rate above 1 with a 400. Every display surface multiplies by 100.
Earning lifecycle
PENDING ──approve──► APPROVED ──batched into payout──► (payout PENDING)
│
process payout
▼
PAID
- PENDING — booked when the sale happened. Not yet payable.
- APPROVED — a platform admin has signed it off. Eligible for a payout batch.
- PAID — the payout that contained it was processed.
- CANCELLED — reserved; nothing sets it today. See §9.
A payout moves PENDING → COMPLETED when processed.
How a figure is calculated
For a sale of baseAmountCents under a matched rule:
percentageAmount = round(baseAmountCents × percentageRate)
total = percentageAmount + fixedAmountCents
total = clamp(total, minCommissionCents, maxCommissionCents)
Rounding is half-up on whole cents. The ceiling is applied before the floor, and the result is never negative. Worked example — a $200.00 subscription under a 20% rule with a $5.00 fixed amount and an $18.00 ceiling:
20000 × 0.20 = 4000 (+ 500 fixed) = 4500 → capped to 1800
The earning stores all four numbers, so the MSP can check the arithmetic rather than trust the total.
Which rule applies
For each sale the engine looks at the account’s rules that are active and whose effective window contains the sale date, then picks:
- a rule scoped to that sale’s service or category, otherwise
- a rule marked “apply to all”.
Ties break on the latest Effective from, then the newest rule — so adding a rule to supersede an older one works without deleting the old one. If nothing matches, the platform default of 10% applies, recorded against a per-account rule named “MSP Client Subscription Commission”.
Roles and permissions
| Action | platform administrator | MSP administrator | MSP technician | organization administrator and below |
|---|---|---|---|---|
| Create and edit commission rules | ● | — | — | — |
| Approve an earning | ● | — | — | — |
| Create and process a payout | ● | — | — | — |
| Record and settle a platform fee | ● | — | — | — |
| Resolve a dispute | ● | — | — | — |
| View own commission earnings | ● | ● | — | — |
| View own payouts and net payout | ● | ● | — | — |
| View own effective rate | ● | ● | — | — |
| Open a dispute on own earning | ● | ● | — | — |
Two rules hold this shape:
- An MSP cannot set its own rate. Rules are platform-authored. An MSP reads its effective terms and nothing more.
- An MSP cannot mark its own commission paid. Payout processing is a platform action for the same reason.
The MSP surface is floored at MSP administrator because it is revenue-bearing — an MSP technician does not see the firm’s commission ledger, and the sidebar link is hidden for that role rather than shown and then refused.
Walkthroughs
A. Set partner terms for an MSP
- Go to Platform → Commission Rules (or the Rules tab of Platform → Commissions).
- + Create Rule.
- Search for and select the MSP account. (No typing raw account ids.)
- Name the rule, e.g.
Acme partner terms 2026. - Enter the Percentage Rate as a decimal —
0.15for 15%. The form rejects anything above 1. - Optionally add a fixed amount per sale, and a floor and ceiling in cents.
- Leave Apply to all ticked for blanket terms, or untick it and list the category ids the rule covers.
- Set Effective from. Leave Effective until empty for open-ended terms.
- Create Rule.
The next client subscription that MSP sells is booked under this rule. Existing earnings are not retroactively changed.
B. Approve and pay a period
- Platform → Commissions → Earnings. Review the rows; each shows the base amount, the rate applied and the resulting commission.
- Approve each earning that is correct.
- Platform → Commissions → Settlements → + Create Settlement.
- Select the MSP account and the period. Every approved, unpaid earning created inside that window is pulled into the batch and its total computed. If there are none, you get “No approved earnings found for this period”.
- Add a note if you want one recorded against the batch.
- Create Settlement.
- Check the Platform Fees tab for anything that account owes and settle it as Net against payout so it comes off the payment.
- Back on Settlements, Process the payout: record the payment method, the reference, and a settlement note. Every earning in the batch flips to
PAID.
C. Handle a dispute
- Platform → Commissions → Earnings → Dispute on the row in question, or wait for the MSP to raise one from its own portal.
- Describe what is wrong. ✨ Suggest categorises the text and proposes a priority; you can override it.
- Open dispute.
- On the dispute, AI Triage produces a legitimacy assessment and a suggested resolution from the earning, the rule and the account’s dispute history.
- Response drafts a reply in a professional, empathetic or technical tone. Anything you type into Additional Context is used in the draft.
- Set the status to
RESOLVEDorREJECTEDand record the resolution. The time and the resolver are stamped automatically.
D. Check your commission as an MSP
- Commissions in the MSP sidebar lists every earning with its client, base amount, rate and status.
- Open one to see the full arithmetic, the rule it was calculated under, and the payout that settled it.
- Dispute this commission if the number is wrong. One open dispute per earning; a second returns “This commission already has an open dispute under review”.
- Settings → Billing shows the commission terms Solidlio will apply to your next sale, and whether your plan is commission eligible.
Configuration
| Setting | Where | Effect if unset |
|---|---|---|
| Percentage rate | Commission rule | Defaults to 0. A 0-rate rule books nothing — it is not a fallback. |
| Fixed amount per sale | Commission rule | 0. |
| Min / max commission | Commission rule | No floor / no ceiling. |
| Apply to all | Commission rule | Off. A rule with no scope and no “apply to all” matches nothing. |
| Category / service scope | Commission rule | Empty. See above. |
| Effective from | Commission rule | Now. |
| Effective until | Commission rule | Open-ended. |
| Active | Commission rule | On. An inactive rule is skipped entirely. |
commissionEligible | The MSP’s service tier | Absent or no tier at all is treated as eligible. |
Plan eligibility
Commission accrual is gated on the MSP’s own plan. If the MSP’s service tier declares commissionEligible: false, no earning is booked and the reason recorded is “MSP plan is not commission eligible”. An account with no tier is treated as eligible — the platform account itself carries no tier and must never be plan-gated.
| MSP plan | Commission eligible |
|---|---|
| Free | — |
| Starter | ● |
| Growth | ● |
| Scale | ● |
| Enterprise | ● |
Troubleshooting
| Message | Cause |
|---|---|
No approved earnings found for this period | Nothing in the window is APPROVED and unpaid. Approve the earnings first, and check the dates. |
Earning is not in pending status | Already approved or already paid. Approval is one-way. |
Payout is not in pending status | Already processed. Processing is one-way. |
Fee is not in pending status | Already settled, waived or refunded. |
An open dispute already exists for this earning | One open dispute per earning. Resolve or reject the first. |
This commission already has an open dispute under review | The same rule, from the MSP portal. Returned as a 409. |
MSP plan is not commission eligible | The MSP’s tier sets commissionEligible: false. Nothing is booked. |
Account is not an MSP/IT Partner | isMspItPartner is false on the account being credited. |
Tone must be one of: PROFESSIONAL, EMPATHETIC, TECHNICAL | Invalid tone. The platform route also rejects it locally with a 400. |
Format must be csv or pdf | Unsupported export format. |
Invalid reportType. Must be earnings, payouts, or rules | Unsupported export report type. |
A 400 on a rate of 15 | Rates are fractions. Send 0.15. |
Where commissions come from
Only one path books a commission today: an MSP’s managed client moving onto a paid plan. It fires from two places, both of which pass the tier being sold so a tier-scoped rule can match:
- Plan upgrade — a managed client upgrades and the platform charges it.
- Sell plan — an MSP sells a plan to a client from the MSP portal.
Platform fees are written from three places: MSP support-package sales (15%), escalation billing, and service orders.
Nothing books those today. Paid integration activation is deliberately refused rather than granted for free while owing an uncollectable commission.
Limits and known behaviour
- One accrual source. Only client subscriptions book commissions.
CANCELLEDearnings. The status exists and is filterable but nothing sets it. To reverse a commission today, resolve a dispute against it.- Payout currency.
CommissionPayout.currencydefaults toUSDwhile accounts default toCAD. Exports report each payout’s own value; nothing converts between currencies on a payout. - Rules are not retroactive. Editing a rule changes future accrual only. Booked earnings keep the rate they were calculated at.
- Rule scope matching is exact-id.
categoryIdsandserviceIdsare matched by identity, not by hierarchy — a parent category does not imply its children. - No approval threshold. Every earning needs a manual approval regardless of size; there is no auto-approve.
- Disputes do not hold payment. An earning with an open dispute can still be approved and paid. Nothing blocks it.
- Fee settlement is a status change. Settling a platform fee as “Net against payout” records the intent and links the payout id; it does not itself reduce a payout total.
GET /msp/net-payoutis what nets the two. - The MSP cannot self-serve a rate change. By design. Terms are negotiated with Solidlio and entered by a platform administrator.