Overview
Commerce supports selling products in multiple currencies simultaneously. Each currency is priced independently in the pricing matrix — there is no automatic exchange-rate conversion. You set the exact price in each currency.
Adding Currencies
- Go to Admin → Settings → Currencies.
- Click Add Currency.
- Enter the ISO 4217 code (e.g.
USD,EUR,GBP), symbol, and designate one currency as the default. - Save.
The new currency will immediately appear as a column in every product's pricing matrix.
[!IMPORTANT] Adding a currency does not automatically populate prices. Until you enter prices for the new currency in each product's pricing matrix, those products will not be orderable by clients using that currency.
How Currency Is Resolved at Checkout
When a client places an order, OrderService resolves the price as follows:
- Look up the client's preferred billing currency (set on their profile).
- Find a pricing row matching that currency and the selected billing cycle.
- If no row exists for the client's currency, fall back to the default currency.
[!WARNING] The fallback to the default currency means a client with
EURset as their currency may see aUSDprice if you haven't added EUR pricing for a product. Always complete the pricing matrix for all currencies you intend to support.
Client Currency Preference
Clients can set their preferred currency at Client Area → Profile → Billing Currency. Admins can also set it at Admin → Clients → [client] → Edit.
Currency and Invoices
Invoices are always created in the currency resolved at order time. This has important implications:
| Scenario | Result |
|---|---|
| Client changes currency after ordering | Existing invoices remain in their original currency |
| Client has a mix of USD and EUR services | Separate invoices per currency |
| Admin changes client currency | Future invoices use new currency; past invoices unchanged |
[!TIP] To avoid mixed-currency invoices for a client, set their currency preference before creating any orders.
Displaying Prices in the Store
The public store (/store) displays prices in the visitor's preferred currency if they are logged in, or the default currency if they are not. Currency switching (without login) is not supported by default.
Example Pricing Matrix
| Cycle | USD | EUR | GBP |
|---|---|---|---|
| Monthly | $9.99 | €8.99 | £7.99 |
| Annual | $99.99 | €89.99 | £79.99 |
Each cell is independent — update them separately if exchange rates change.