Multi-currency
HomeCurrency, FX normalization, USD-settled payouts, and how the IRS 1099-NEC handles non-USD earnings.
If your affiliates sell in more than one currency (or you sell in EUR but report in USD), Rekomi handles the conversion math for you. Conversions are always stored in the currency they came in as. Your dashboards normalize everything to a single home currency so a "$120,400 this quarter" KPI tile means the same thing whether your sales came in USD, EUR, or JPY.
What is HomeCurrency
HomeCurrency is your organization's reporting currency. It defaults to USD for every new account. It affects:
- The total on dashboard KPI tiles (summary cards, leaderboards, time series charts).
- The "home" column in tables that also show the native amount (e.g. a $99 USD row and a 89 EUR row both appear with a converted home-currency value next to them).
- Reports + CSV exports: a summary row in your home currency, plus per-row native amounts so nothing is lost in translation.
What it does not affect:
- The currency of any existing conversion. A 89 EUR sale stays a 89 EUR sale on disk.
- The currency of any existing payout. Payouts settle in USD (see below); already-created payouts keep the currency they were created in.
Changing HomeCurrency is a display recomputation, not a data migration, with one guard: per-click rewards, per-lead bounties and campaign budgets are stored in your home currency, so the change is refused while any active campaign carries one of them. Clear those amounts (or archive the campaign), change the currency, then set them again in the new currency.
How to change it
/dashboard/settings/billing has a Home currency card under the Currency tab.

- Pro or Enterprise plan required to change it. New workspaces start on USD. Starter and Growth workspaces cannot pick a non-USD home currency; a workspace that set one while on Pro keeps it after a downgrade and needs Pro again to change it. Workspaces trialing the Pro plan can change it during the trial; Starter and Growth trials cannot.
- Only workspace owners and admins can change the home currency.
- Pick from the supported currency list. Save. The dashboard re-renders against the new home currency on next page load.
- Changes are audit-logged (who, when, old → new) under Settings > Audit Log.
- The change re-renders all dashboard rollups, past and future, in the new home currency; each conversion is still valued at the reference rate on its own date, never at today's rate. Historical conversions keep their original native currency.
FX rates and refresh cadence
- Sources: the European Central Bank and Xe. Major currencies use the ECB's published daily reference rates (via the Frankfurter API); every other supported currency uses mid-market rates from Xe, the same class of no-spread reference rate.
- Refresh: daily at 06:00 UTC via a background job. The full matrix of supported currencies is stored locally so the dashboard never has to call out to FX on a page render.
- Rate dates: each stored rate carries the date its source published it. The ECB fixes its rates in the afternoon (CET) and the next 06:00 UTC refresh picks them up, so the newest ECB rate available on any given day is dated the previous business day (or the Friday before, over a weekend); Xe rates carry the day they were locked in. Wherever Rekomi records a rate date, that recorded date is the one that governs.
- Rate used for a conversion: the reference rate on the conversion's
CreatedAtdate. This is stable: re-loading a six-month-old dashboard view shows the same converted total it showed six months ago. - Stale-cache fallback: if the daily refresh fails (a rate-provider outage, our job error), the previous day's rates are used and an alert fires to Rekomi's on-call. Your dashboard keeps working. A rate is served for at most 7 days past its publication date; beyond that, affected amounts are held out of the home-currency totals rather than being valued at old math, and listed per currency in their native amounts under the Reports KPI tiles, on Insights (revenue and commission separately), in the campaign budget card, and in the run-payout dialog; they return to the totals automatically when rates resume.
- No spread, no fee. These are published mid-market reference rates, used exactly as published: Rekomi adds no margin to the rate and charges nothing for the conversion math. This normalization is reporting-only and never moves real money. Where an actual currency conversion happens in the money flow, it is the payment processor's own cost, never Rekomi's: an international funding debit and a bank-deposit payout arriving in the affiliate's local currency are passed through at cost and itemized, and a Stripe Express or PayPal recipient who converts the USD they receive pays that provider's own rate and conversion charge on their side; see funding your payouts and the affiliate withdrawal fee.
Supported currencies
135+ currencies are supported: every currency Stripe can present a price in, plus the three-decimal Gulf currencies (BHD, JOD, KWD, OMR, TND) common on other gateways. The full list, with each currency's flag, code, name, symbol, and decimal places:
| Code | Currency | Symbol | Decimals |
|---|---|---|---|
| AED | UAE Dirham | د.إ | 2 |
| AFN | Afghan Afghani | ؋ | 2 |
| ALL | Albanian Lek | L | 2 |
| AMD | Armenian Dram | ֏ | 2 |
| AOA | Angolan Kwanza | Kz | 2 |
| ARS | Argentine Peso | AR$ | 2 |
| AUD | Australian Dollar | A$ | 2 |
| AWG | Aruban Florin | ƒ | 2 |
| AZN | Azerbaijani Manat | ₼ | 2 |
| BAM | Bosnia-Herzegovina Convertible Mark | KM | 2 |
| BBD | Barbadian Dollar | Bds$ | 2 |
| BDT | Bangladeshi Taka | ৳ | 2 |
| BHD | Bahraini Dinar | .د.ب | 3 |
| BIF | Burundian Franc | FBu | 0 |
| BMD | Bermudian Dollar | BD$ | 2 |
| BND | Brunei Dollar | B$ | 2 |
| BOB | Bolivian Boliviano | Bs | 2 |
| BRL | Brazilian Real | R$ | 2 |
| BSD | Bahamian Dollar | B$ | 2 |
| BWP | Botswanan Pula | P | 2 |
| BYN | Belarusian Ruble | Br | 2 |
| BZD | Belize Dollar | BZ$ | 2 |
| CAD | Canadian Dollar | CA$ | 2 |
| CDF | Congolese Franc | FC | 2 |
| CHF | Swiss Franc | CHF | 2 |
| CLP | Chilean Peso | CL$ | 0 |
| CNY | Chinese Yuan | CN¥ | 2 |
| COP | Colombian Peso | CO$ | 2 |
| CRC | Costa Rican Colon | ₡ | 2 |
| CVE | Cape Verdean Escudo | Esc | 2 |
| CZK | Czech Koruna | Kč | 2 |
| DJF | Djiboutian Franc | Fdj | 0 |
| DKK | Danish Krone | kr | 2 |
| DOP | Dominican Peso | RD$ | 2 |
| DZD | Algerian Dinar | د.ج | 2 |
| EGP | Egyptian Pound | E£ | 2 |
| ETB | Ethiopian Birr | Br | 2 |
| EUR | Euro | € | 2 |
| FJD | Fijian Dollar | FJ$ | 2 |
| FKP | Falkland Islands Pound | £ | 2 |
| GBP | Pound Sterling | £ | 2 |
| GEL | Georgian Lari | ₾ | 2 |
| GIP | Gibraltar Pound | £ | 2 |
| GMD | Gambian Dalasi | D | 2 |
| GNF | Guinean Franc | FG | 0 |
| GTQ | Guatemalan Quetzal | Q | 2 |
| GYD | Guyanese Dollar | G$ | 2 |
| HKD | Hong Kong Dollar | HK$ | 2 |
| HNL | Honduran Lempira | L | 2 |
| HTG | Haitian Gourde | G | 2 |
| HUF | Hungarian Forint | Ft | 2 |
| IDR | Indonesian Rupiah | Rp | 2 |
| ILS | Israeli New Shekel | ₪ | 2 |
| INR | Indian Rupee | ₹ | 2 |
| ISK | Icelandic Krona | kr | 0 |
| JMD | Jamaican Dollar | J$ | 2 |
| JOD | Jordanian Dinar | د.ا | 3 |
| JPY | Japanese Yen | ¥ | 0 |
| KES | Kenyan Shilling | KSh | 2 |
| KGS | Kyrgystani Som | с | 2 |
| KHR | Cambodian Riel | ៛ | 2 |
| KMF | Comorian Franc | CF | 0 |
| KRW | South Korean Won | ₩ | 0 |
| KWD | Kuwaiti Dinar | د.ك | 3 |
| KYD | Cayman Islands Dollar | CI$ | 2 |
| KZT | Kazakhstani Tenge | ₸ | 2 |
| LAK | Laotian Kip | ₭ | 2 |
| LBP | Lebanese Pound | ل.ل | 2 |
| LKR | Sri Lankan Rupee | Rs | 2 |
| LRD | Liberian Dollar | L$ | 2 |
| LSL | Lesotho Loti | L | 2 |
| MAD | Moroccan Dirham | د.م. | 2 |
| MDL | Moldovan Leu | L | 2 |
| MGA | Malagasy Ariary | Ar | 2 |
| MKD | Macedonian Denar | ден | 2 |
| MMK | Myanmar Kyat | K | 2 |
| MNT | Mongolian Tugrik | ₮ | 2 |
| MOP | Macanese Pataca | MOP$ | 2 |
| MUR | Mauritian Rupee | Rs | 2 |
| MVR | Maldivian Rufiyaa | Rf | 2 |
| MWK | Malawian Kwacha | MK | 2 |
| MXN | Mexican Peso | MX$ | 2 |
| MYR | Malaysian Ringgit | RM | 2 |
| MZN | Mozambican Metical | MT | 2 |
| NAD | Namibian Dollar | N$ | 2 |
| NGN | Nigerian Naira | ₦ | 2 |
| NIO | Nicaraguan Cordoba | C$ | 2 |
| NOK | Norwegian Krone | kr | 2 |
| NPR | Nepalese Rupee | Rs | 2 |
| NZD | New Zealand Dollar | NZ$ | 2 |
| OMR | Omani Rial | ر.ع. | 3 |
| PAB | Panamanian Balboa | B/. | 2 |
| PEN | Peruvian Sol | S/ | 2 |
| PGK | Papua New Guinean Kina | K | 2 |
| PHP | Philippine Peso | ₱ | 2 |
| PKR | Pakistani Rupee | Rs | 2 |
| PLN | Polish Zloty | zł | 2 |
| PYG | Paraguayan Guarani | ₲ | 0 |
| QAR | Qatari Riyal | ر.ق | 2 |
| RON | Romanian Leu | lei | 2 |
| RSD | Serbian Dinar | din | 2 |
| RUB | Russian Ruble | ₽ | 2 |
| RWF | Rwandan Franc | FRw | 0 |
| SAR | Saudi Riyal | ﷼ | 2 |
| SBD | Solomon Islands Dollar | SI$ | 2 |
| SCR | Seychellois Rupee | Rs | 2 |
| SEK | Swedish Krona | kr | 2 |
| SGD | Singapore Dollar | S$ | 2 |
| SHP | St. Helena Pound | £ | 2 |
| SLE | Sierra Leonean Leone | Le | 2 |
| SOS | Somali Shilling | Sh | 2 |
| SRD | Surinamese Dollar | $ | 2 |
| SZL | Swazi Lilangeni | E | 2 |
| THB | Thai Baht | ฿ | 2 |
| TJS | Tajikistani Somoni | SM | 2 |
| TND | Tunisian Dinar | د.ت | 3 |
| TOP | Tongan Pa'anga | T$ | 2 |
| TRY | Turkish Lira | ₺ | 2 |
| TTD | Trinidad & Tobago Dollar | TT$ | 2 |
| TWD | New Taiwan Dollar | NT$ | 2 |
| TZS | Tanzanian Shilling | TSh | 2 |
| UAH | Ukrainian Hryvnia | ₴ | 2 |
| UGX | Ugandan Shilling | USh | 0 |
| USD | US Dollar | $ | 2 |
| UYU | Uruguayan Peso | $U | 2 |
| UZS | Uzbekistani Som | so'm | 2 |
| VND | Vietnamese Dong | ₫ | 0 |
| VUV | Vanuatu Vatu | VT | 0 |
| WST | Samoan Tala | WS$ | 2 |
| XAF | Central African CFA Franc | FCFA | 0 |
| XCD | East Caribbean Dollar | EC$ | 2 |
| XCG | Caribbean Guilder | Cg | 2 |
| XOF | West African CFA Franc | CFA | 0 |
| XPF | CFP Franc | ₣ | 0 |
| YER | Yemeni Rial | ﷼ | 2 |
| ZAR | South African Rand | R | 2 |
| ZMW | Zambian Kwacha | ZK | 2 |
The CFA franc zones (XAF, XOF), the East Caribbean dollar (XCD), and the CFP franc (XPF) each serve several countries; the flag shown is the seat of the issuing central bank.
Conversions sent through the API in any other currency are rejected at ingest (see the developer docs). Stripe-driven conversions arrive in whatever currency Stripe charged and are stored as-is in that currency. One transitional alias: amounts arriving in ANG (the retiring Netherlands Antillean guilder) are recorded as XCG, its one-to-one successor.
How payouts work in multi-currency
Earnings accrue per (affiliate, currency) in the currency each sale came in, and the run dialog shows you those native balances per currency. Payouts themselves settle in USD: when a batch runs, each non-USD commission converts to USD at the most recent published mid-market reference rate available when the payout runs (never more than seven days old), with no Rekomi markup, and the payout records the native amount, the applied rate, and the rate's publication date on every line, so the conversion is fully auditable. This mirrors how creator deals have always settled (quote in any currency, settle in USD at a disclosed rate) and is what makes every balance payable through a single funded run:
- The affiliate sees exactly what they earned (native amounts stay on every commission and payout line) and exactly what rate applied.
- One USD run funds everything. There is no per-currency funding, so a EUR or JPY balance never waits for its own batch.
- The rate is the same mid-market reference used across reporting: the most recent published rate available when the run happens, disclosed with its date on every line, never a spread.
A currency with no fresh exchange rate is held out of the run automatically (the dialog tells you) and becomes payable again when rates resume. What arrives on the affiliate's side then follows their payout method as usual: Stripe Express receives USD (if their bank is in another currency, Stripe converts on receipt at Stripe's own rate and conversion charge), bank deposits convert to their local currency at send as part of the disclosed at-cost withdrawal fee, and PayPal receives USD to their balance (any conversion from there is at PayPal's own rate and charge).
In the dashboard you'll see the per-currency split on the Payouts page. Your home currency total on the KPI strip aggregates conversions at the reference rate on each conversion's date.
Creator deals and proposals in multi-currency
Deal and proposal amounts can be quoted in any supported currency. The quote is what both sides see everywhere (the proposal page, the emails, and the invoice); settlement is always in USD. The conversion locks at the moment you fund the escrow, using that day's rate, and the invoice records the quoted amount, the USD amount, and the locked rate. The $50 to $50,000 deal bounds apply to the USD value.
Tax forms in multi-currency
U.S. tax law (IRS 1099-NEC) requires reporting in USD regardless of the currency a payment was actually made in. Rekomi's 1099-NEC candidates export works in USD terms:
- Non-USD earnings count toward an affiliate's USD-equivalent total using the reference rate on each conversion's date (never today's rate; payments are valued separately, see below).
- The candidates export reports year-to-date totals in USD. Rows without a USD reference rate for their date are left out of those totals rather than guessed; the export counts them and names the currencies in a
# NOTEline at the bottom of the CSV, and the same warning is flagged on the tax page, so the totals can understate until FX coverage is restored. - Payments made during the year count separately, at the USD amount actually paid. Because payouts settle in USD, that is the rate locked on each payout line (see How payouts work above), which can differ from the conversion-date rate used for earnings.
- An affiliate appears on the worksheet when either total crosses the $600 candidate threshold, regardless of which currency their conversions came in as. The CSV carries both figures,
year_to_date_cents(earned, conversion-date rate) andpaid_ytd_cents(paid, rate locked at payout), so the two can be reconciled.
See Tax forms for the full export flow.
When to change HomeCurrency
The honest answer: most brands never need to. USD is a fine reporting currency even for non-U.S. businesses because every comparable benchmark (PartnerStack, Rewardful, your own SaaS metrics) is reported in USD too.
Change it when:
- You report financials to investors in a non-USD currency.
- Your primary cost base is in a non-USD currency and you want the affiliate program P&L to match the rest of the business.
- You acquired a brand whose ledger is in another currency and you're consolidating.
Otherwise, the per-row native amount is shown everywhere it matters, so a USD home currency does not hide your non-USD revenue from you.
Limits and edge cases
- Exactly 3 letters, exactly the supported codes above. No crypto. No legacy codes (e.g. ZWL, VEF). No currency-substitute tokens.
- Minor units follow each currency's real exponent. JPY, KRW, VND and the other zero-decimal currencies display whole amounts (a 1,000 JPY conversion shows as 1,000 JPY, not 10.00 JPY); the Gulf three-decimal currencies (BHD, JOD, KWD, OMR, TND) keep all three decimals.
- Per-currency unconvertible amount. If we have a balance in a currency with no usable rate (a rate more than 7 days stale, or, rarely, a code that reached storage before it was on the allowlist at the time of FX refresh), you'll see a warning in the run-payout dialog with the per-currency breakdown, and the same per-currency marker appears under the Reports overview tiles, on Insights (revenue and commission separately), and in the campaign budget card, so nothing is silently swept under the rug.