Currencies
Admin → Settings → Currencies
Commerce supports multiple currencies. Each currency has its own symbol, formatting rules, and exchange rate relative to your default currency.
Adding a Currency
- Go to Admin → Settings → Currencies.
- Click Add Currency.
- Fill in the fields:
| Field | Description | Example |
|---|---|---|
| Code | ISO 4217 currency code | USD, EUR, GBP |
| Name | Human-readable name | US Dollar |
| Symbol | Short symbol | $, €, £ |
| Prefix | Symbol placed before the amount | $ |
| Suffix | Symbol placed after the amount | USD (optional) |
| Decimal Places | Digits after the decimal point | 2 (use 0 for JPY) |
| Exchange Rate | Rate relative to your default currency | 1.08 (1 EUR = 1.08 USD) |
- Click Save.
[!TIP] Set the default currency exchange rate to
1.000— it is the base all other rates are measured against.
Setting the Default Currency
- Open the currency you want as default.
- Toggle Set as Default.
- Save.
The default currency is used for:
- New client registrations (they can change it on their profile)
- Products and pricing display in the portal catalogue
- Revenue totals in reports (all non-default currency amounts are converted using stored exchange rates for display)
How Clients Choose Their Currency
Clients pick their billing currency on their profile page in the portal (Account → Profile → Billing Currency). Once a client has an unpaid invoice, the currency on that invoice is locked regardless of later profile changes.
[!IMPORTANT] Changing a client's billing currency does not convert or reissue existing invoices. Only new invoices from that point forward use the updated currency.
How Amounts Are Stored
All monetary values in the database are stored as BIGINT cents (integer, smallest currency unit). A currency_code column accompanies every amount column.
invoice.total = 4999 → $49.99 USD
invoice.total = 5000 → £50.00 GBP
This approach eliminates floating-point rounding errors across invoicing, payments, and refunds.
Exchange Rates
Exchange rates in Commerce are manual — there is no automatic feed. Update rates periodically to keep multi-currency reports accurate.
[!WARNING] Exchange rates are only used for display conversion in reports. They do not affect what a client is charged. If a client's billing currency is EUR, they always pay in EUR at the EUR price you set on the product — not a converted USD price.
Removing a Currency
You can remove a currency only if no clients are currently assigned to it and there are no open invoices in that currency.
If existing paid invoices reference the currency, the currency cannot be fully deleted — it is soft-archived instead. Archived currencies:
- No longer appear in client profile dropdowns
- Still render correctly on historical invoice PDFs
- Still appear in historical revenue reports