Local Billing, Base-Currency Settlement
Recurso supports billing in multiple currencies, allowing you to charge customers in their local currency while tracking revenue and settling funds in your base currency. Currency is specified at the plan, invoice, and ledger level, giving you full control over international billing.Key Concepts
All monetary amounts in the Recurso API are expressed in minor units (e.g., cents, paise). An amount of
4999 in INR represents ₹49.99. An amount of 5999 in USD represents $59.99.Setting Your Base Currency
Configure your base currency during tenant setup. This is the currency used for financial reporting and ledger balances.Creating Multi-Currency Plans
Plans can include prices in multiple currencies. When a subscription is created, Recurso selects the appropriate price based on the customer’s currency. A plan’s flat price is one currency. Sell a tier in several currencies with per-currency plan codes — the smart router then picks the gateway per currency (₹ → Razorpay, $/€/£ → Stripe by default):Currency on Subscriptions
When creating a subscription, the currency is determined by the customer’s configured currency or can be explicitly specified:Currency on Invoices
Invoices inherit the currency from the subscription. All line items, taxes, and totals are expressed in the presentment currency.How FX Rates Work
When payments in foreign currencies are received, Recurso records the exchange rate for ledger entries and reporting.Rate Determination
Recurso supports multiple approaches for exchange rates:Configuring FX Rate Source
The FX rate source (live provider vs. fixed rates) is a deployment setting, not a runtime API — configure it via environment / dashboard, not a/v1 call. FX affects reporting only: invoices always bill in the
subscription’s own currency, and MRR/revenue normalize to your reporting
currency at read time.
Currency Conversion in the Ledger
The ledger posts each entry once, in the invoice’s own currency’s minor units — a €49.99 payment posts4999, exactly as billed. There are no
duplicate base-currency entries and no per-currency account balances:
currency normalization happens in reporting (MRR, revenue analytics),
which converts to your reporting currency at read time.
Example: EUR Payment
A customer pays €49.99 for a subscription:Keep an eye on currency exponents: JPY has none (¥500 posts as
500),
KWD/BHD have three. Recurso stores every amount in the currency’s own
minor units.Reporting in Base Currency
All financial reports aggregate to your base currency, giving you a single unified view regardless of how many currencies you bill in.Revenue by Currency
Breakdown by Presentment Currency
To see deferred revenue broken down by the currencies your customers pay in, the revenue-recognition report returns a per-currency split directly:Supported Currencies
Recurso supports all ISO 4217 currencies. Common currencies used by customers:Handling FX Gains and Losses
Because both the invoice and its payment post in the invoice’s own currency, no FX gain or loss ever arises inside the ledger — the receivable and the cash that settles it are the same number of minor units. Rate movement between invoicing and payment shows up only in reports, which convert at read time. If you book realized FX gains/losses for statutory accounts, do it in your accounting system from the GL export, using your own rate policy.Best Practices
Define All Prices Upfront
Add prices for every currency you support when creating a plan. This avoids subscription creation failures.
Use Gateway Rates
Gateway FX rates reflect what you actually receive after conversion, eliminating discrepancies between billed and settled amounts.
Monitor FX Exposure
Track your receivables by currency. Large balances in volatile currencies increase FX risk.
Handle Zero-Decimal Currencies
Validate your amount logic for currencies like JPY and KRW that have no minor unit.