Multi-Currency Handling in the Accounting API
How the Unify Accounting API handles currency data when syncing invoices from ERP systems.
1. Overview
Unify acts as a pass-through for currency data. The platform does not perform currency conversion, FX calculations, or amount normalization. Each invoice carries exactly two currency-related fields:
Field | Type | Description |
|---|---|---|
| string (ISO 4217, nullable) | Currency code for the invoice, e.g. |
| number (nullable) | Exchange rate at the time the invoice was recorded in the ERP |
All monetary fields (total, sub_total, total_tax, balance, deposit) represent the amount in the currency indicated by the currency field. There are no separate base-currency amount fields.
2. Common Questions
Are invoice values returned in the original transaction currency?
Yes, for the vast majority of connectors. The currency field contains the transaction currency as recorded in the ERP, and all amounts correspond to that currency.
Exception - Sage Intacct: Sage Intacct returns the company's home/base currency rather than the transaction currency. For multi-currency Intacct companies, the
currencyfield may not reflect the actual invoice denomination. See section 4 for details.
Can a customer have invoices in multiple currencies?
Yes. Each invoice has its own independent currency field, so a customer can have invoices in USD, EUR, ZAR, or any other currency simultaneously - as long as the underlying ERP supports it. Unify imposes no restriction on this.
Is a base/home currency amount provided?
No. Only the transaction currency amounts are returned. There are no base_total, home_currency_amount, or equivalent fields in the unified schema.
If you need base-currency equivalents, you can calculate them using the currency_rate field where available.
Does Unify convert or calculate amounts?
No. All amounts are passed through from the ERP exactly as received. Unify does not apply exchange rates, convert between currencies, or source FX rates from any external provider.
The currency_rate value, when present, is whatever the ERP recorded at the time of the original transaction.
How are non-standard or unsupported currency codes handled?
Invoices are never excluded due to unrecognized currencies. The invoice will always be returned, but the currency field may be null, UNKNOWN_CURRENCY, or the raw unrecognized value depending on the connector.
Scenario | Behavior |
|---|---|
Connector uses direct pass-through | Raw value from ERP returned as-is, even if non-ISO |
Connector uses normalization helpers | Symbol inputs (e.g. |
Connector resolves via hook (e.g. NetSuite, Zoho Books) | If the internal ID lookup fails, returns |
What currency codes are supported?
The currency field accepts all standard ISO 4217 codes (approximately 170), plus BTC, ETH, and UNKNOWN_CURRENCY as a fallback for unrecognized values.
3. Connector Coverage
Full coverage - currency and exchange rate
Connector | Notes |
|---|---|
QuickBooks | ✓ |
Xero | ✓ |
NetSuite | Currency IDs are resolved to ISO codes via a secondary API call |
Sage Business Cloud Accounting | Both sales and purchase invoices |
Intuit Enterprise Suite | ✓ |
Zoho Books | ✓ |
Workday | Both customer and supplier invoices |
FreeAgent | ✓ |
Access Financials | ✓ |
Campfire | ✓ |
Dualentry | ✓ |
Rillet | ✓ |
Kashflow | ✓ |
Clearbooks UK | Currency IDs resolved to ISO codes, similar to NetSuite |
Exact Online (purchase invoices) | Sales invoices do not include the exchange rate |
Sage Intacct | Returns base currency, not transaction currency — see section 4 |
Partial coverage — currency only, no exchange rate
Connector | Notes |
|---|---|
Freshbooks | ✓ |
Exact Online (sales invoices) | Purchase invoices do include the rate |
Dynamics 365 Business Central | Sales and purchase invoices |
Banqup | ✓ |
Visma Netvisor | Rate available on single-record fetch only, not on list |
Procountor | Both currency and rate available on single-record fetch only, not on list |
No currency data
Connector | Notes |
|---|---|
MYOB AccountRight | Neither |
Acumatica | Neither field is mapped |
4. Important Notes
Sage Intacct returns the base currency, not the transaction currency
Sage Intacct is the only connector where the currency field represents the company's home/base currency rather than the transaction currency.
For single-currency Intacct companies this makes no difference. For multi-currency companies, be aware that the currency field reflects the home currency, and the monetary amounts (total, balance, etc.) are expected to reflect base-currency values, though this is best verified against a live multi-currency Intacct account.
Exchange rate semantics
The currency_rate value is provided by the ERP and reflects the rate at the time of the transaction. The direction of the rate (e.g. "1 USD = X EUR" vs "1 EUR = X USD") depends on the ERP's own convention and is not normalized across connectors.
List vs. single-record responses
A few connectors return currency data only on single-record fetches, not on list endpoints:
Procountor: Both
currencyandcurrency_rateare only available when fetching a single invoiceVisma Netvisor:
currency_rateis only available on single-record fetches
