Multi-Currency
Quote, invoice and settle in Canadian dollars, US dollars and euros — with every amount labelled with the currency it was actually written in.
The problem
You buy from a distributor who invoices you in US dollars and you sell to a client who pays in Canadian. Somewhere between those two facts is a spreadsheet with a rate somebody typed in last quarter. The quote goes out with a dollar sign and nobody is certain which dollar it means. A client pays in the wrong currency and the invoice sits open because the numbers do not tie out. At month end your revenue figure is the sum of two currencies added together, which is a number in no currency at all — and it is the number on the dashboard everyone plans against.
If you are an MSP the exposure is doubled: you carry the currency risk between what you paid your distributor and what your client agreed to pay you, and you carry it on every line of every order.
What Solidlio does about it
Every money record — invoice, quote, order, contract, credit limit, cart line, payout, dispute — stores the currency it was created in, and that currency is never recalculated afterwards. Conversion happens at four defined points: pricing a product, checking out an order, paying an MSP, and rebilling a foreign vendor invoice. Everywhere else Solidlio refuses to mix currencies rather than guessing a rate, so a US payment cannot silently close a Canadian invoice and a euro sale cannot inflate a Canadian revenue total. Rates refresh daily from European Central Bank reference data, expire after 48 hours, and every money-moving path fails closed rather than converting at a rate nobody can vouch for.
Capabilities
| Capability | What it does |
|---|---|
| Three trading currencies | Price, invoice and settle in CAD, USD and EUR. Unsupported codes are refused, not stored. |
| Per-client currency | Sell one client in USD while the rest of the account trades in CAD, with one setting on that organization. |
| Buy-side currency | Record each distributor’s billing currency; product costs convert to the buyer’s currency before any markup. |
| Point-in-time documents | An invoice, quote or order keeps the currency it was raised in, even after the account’s default changes. |
| Daily ECB rates | Six directed pairs refreshed each morning, with a full history and per-pair provenance. |
| Rate expiry | Rates older than 48 hours are refused by pricing, checkout and payouts — a dead feed stops trade, not accuracy. |
| Audited manual override | Pin a contracted rate for any pair; it beats the live feed, never expires, and is written to the audit log. |
| Currency hedge buffer | Add a configurable percentage to a converted cost on cross-currency sales only, before markup. |
| Regional plan pricing | Set a fixed USD or EUR price per plan tier; an unpriced currency holds the invoice rather than mischarging it. |
| Region-based payouts | Pay each MSP in its own region’s currency, converting every settled sale at payout time. |
| Single-currency reporting | Every dashboard total names its currency and lists the others separately instead of adding them together. |
| Cross-currency rebilling | Mark up a USD distributor bill onto a CAD client invoice, converting first and recording the rate on the link. |
Built for MSPs and their clients
A managed client is a separate Account with its own books. Currency respects that boundary in both directions — and it is genuinely two-sided, because the MSP’s buy currency, the client’s sell currency and the MSP’s payout currency can all be different at once.
| Organization (the client) | MSP | |
|---|---|---|
| Trading currency | Sees every quote, invoice and order in one currency, labelled | Chooses the sell currency per client, overriding its own account default |
| Store prices | Sees prices already converted into its own currency | Sets the markup once; it means the same thing whatever the buy currency |
| Currency risk | None — quoted and billed in one currency | Owns it, and can add a hedge buffer to cross-currency costs |
| Settlement | Pays in the currency the invoice states | Is paid out in its own region’s currency, converted at payout |
| Disputes | Raises a dispute in the currency of the sale | Has it converted into the reserve’s currency before it is deducted |
| Rates | Not exposed | Not writable — rates are platform reference data |
How it works
- The account gets a currency — derived from its data-residency region when it is created: Canada→CAD, United States→USD, Europe→EUR.
- A client can override it — one setting on the organization sells that client in a different currency from the rest of the account.
- Costs convert before markup — a product bought in USD from a distributor is converted into the buyer’s currency first, then the pricing profile, category, brand and vendor markups apply to the converted figure.
- The document is stamped — the quote, order or invoice records the currency it was created in, permanently.
- Settlement matches — a payment must be in the invoice’s currency and a credit note must match what it is applied to; neither is converted at face value.
- The MSP is paid in its own currency — the nightly payout run converts each settled sale from the currency it sold in into the MSP’s region currency, and skips the run entirely rather than transferring at a stale rate.
- Rates stay honest — refreshed daily, expiring after 48 hours, visible with their provenance, and overridable under audit.
Compliance and audit
Every conversion is reconstructable after the fact:
- Orders store the rate table used at checkout alongside the order.
- Chargebacks store the converted amount, Stripe’s original amount, the original currency and the exact rate applied.
- Rebill links store the vendor’s currency, the client’s currency and the rate between them, per line.
- Rate overrides are written to the platform audit log with the operator, the pair, the previous value, the new value and the stated reason.
- Rate history retains every quote ever received, keyed by pair, quote instant and source.
- Reserve movements reconcile: the signed ledger for an MSP’s reserve always sums to its held plus available balance, in one currency.
Editions
Multi-currency carries no plan gate. Every tier that can raise an invoice can raise it in any supported currency, and every tier that can sell through the store gets converted pricing. The capabilities below differ by who can reach them, not by what has been bought.
| Capability | Customer | Organization | MSP | Platform |
|---|---|---|---|---|
| Documents in three currencies | ● | ● | ● | ● |
| Converted store pricing | ● | ● | ● | ● |
| Per-client sell currency | — | ● | ● | ● |
| Distributor buy currency | — | — | — | ● |
| Currency hedge buffer | — | — | ● | ● |
| Region-based payouts | — | — | ● | ● |
| Regional plan pricing | — | — | — | ● |
| Exchange-rate administration | — | — | — | ● |
Integrations
- European Central Bank reference rates, via frankfurter — the daily rate source. No key, no contract.
- Stripe — card and bank-debit charges are submitted in the document’s currency; Connect accounts are opened in the MSP’s own country so payouts settle in its region currency.
- QuickBooks Online — invoices, payments and credit memos carry their currency in both directions; a single-currency QuickBooks company falls back to the organization’s own currency rather than assuming Canadian dollars.
- Ingram Micro and TD Synnex — each distributor’s billing currency is recorded and applied to every product cost synced from it.
Every amount says which currency it is in, and nothing is ever added to something it does not match.