Multi-Currency Handling in the Accounting API

Edited

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

currency

string (ISO 4217, nullable)

Currency code for the invoice, e.g. USD

currency_rate

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 currency field 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. , $, £) are converted to ISO codes. Unrecognized values return UNKNOWN_CURRENCY

Connector resolves via hook (e.g. NetSuite, Zoho Books)

If the internal ID lookup fails, returns null

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 currency nor currency_rate is returned for invoices

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 currency and currency_rate are only available when fetching a single invoice

  • Visma Netvisor: currency_rate is only available on single-record fetches


5. Resources

Was this article helpful?

Sorry about that! Care to tell us more?

Thanks for the feedback!

There was an issue submitting your feedback
Please check your connection and try again.