InvoicingCurrencies and exchange rates

Invoicing

Currencies and exchange rates

Invoice in any currency. Amounts are exact integer minor units, and when a document's currency differs from your business currency, the exchange rate is frozen on it.

You can bill each client in the currency they pay in. Every document has one currency, every amount on it is stored exactly in that currency's smallest unit, and when the currency differs from your business's base currency, the exchange rate of the day is frozen on the document so your reports never shift later.

Money is exact

Amounts are never floating-point numbers. Each one is a whole number of the currency's minor unit plus a three-letter currency code:

AmountStored as
1,200.00 USD"total_minor": "120000", "currency": "USD"
1,250.00 PKR"total_minor": "125000", "currency": "PKR"
5,000 JPY (no decimals)"total_minor": "5000", "currency": "JPY"
12.500 KWD (three decimals)"total_minor": "12500", "currency": "KWD"

Currencies with 0 or 3 decimal places work exactly like two-decimal currencies; the number of decimals comes from the currency data. In the API, money is always a string, so very large amounts are never cut by number limits in JavaScript or other languages. See Money and currencies.

Which currency a document uses

The currency is chosen when the document is created. If you do not pick one, it is resolved in this order, the first that has a value wins:

  1. the currency you set on the document;
  2. the client's default currency;
  3. the business setting;
  4. the account setting;
  5. the business's base currency.

Your business's base currency is set on the business profile. Reports total amounts in it.

Exchange rates

When a document's currency is different from the business's base currency, an exchange rate to the base currency is frozen on the document. It never changes after that, so:

  • the document's stored totals never move when markets do;
  • reports show amounts per currency, plus a total in your base currency at each document's own frozen rate (reports arrive in the week of 25 January 2027);
  • the PDF, pay page and API always agree.

Rates are fetched once a day from the exchange-rate provider. The default provider is the European Central Bank reference rates. Each business may also enter a rate by hand when it needs a specific one, for example the rate its bank used.

The exchange rate is for your records and reports. Your client always pays the amount in the document's own currency.

Set the currency in the web app

1

Set the business base currency

In the business profile, choose the currency your books are kept in.

2

Give clients a default

On a client who always pays in another currency, set their default currency. New documents for that client use it.

3

Change it on one document

In the editor, choose the currency for this document while it is a draft. If it differs from the base currency, the exchange rate is shown and frozen with the document.

Through the API and MCP

Send currency with every document, and every money field as a string of minor units:

curl -X POST "https://api.freeinvoiceautomation.com/v1/documents" \
  -H "Authorization: Bearer $FIA_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: 8e1f3a5c-eur-invoice" \
  -d '{
    "type": "invoice",
    "client_id": "0193f2a1-0c11-7d2e-9a40-1b2c3d4e5f60",
    "currency": "EUR",
    "lines": [
      { "description": "Translation, 4,000 words", "quantity": "1", "unit_price_minor": "48000" }
    ]
  }'

The returned document includes fx_rate, the frozen rate to your base currency, when the currencies differ. Filter lists by currency with ?currency=EUR on List documents.

Rules and edge cases

  • One currency per document. All lines, payments and credit notes of a document are in its currency.
  • Payment methods follow currency. Local QR payments are shown only when the currency matches the rail: UPI for INR, and Raast, JazzCash and Easypaisa for PKR (from the week of 25 January 2027). A mismatch is refused with currency_mismatch. See Local QR payments.
  • Client credit is per currency. Credit kept from a credit note is held per client and per currency, and is applied to a later invoice in the same currency. See Client credit.
  • Saved items carry a currency. An item's price is in its own currency. If you use it on a document in another currency, check the line price before sending.
  • The rate is frozen, not the currency list. You can still create new documents in any currency at any time.
  • Changing the currency after sending is part of a revision, like any change to a sent document.

Permissions

ActionPermission key
Choose a currency on a documentdocuments.create or documents.edit
Change a client's default currencyclients.edit
Change business and account settingssettings.manage
Change the business profilebusinesses.manage

Errors you may see

CodeMeaning
validation_failedThe currency is not a three-letter code, or an amount is not a whole number of minor units.
currency_mismatchA payment method or credit does not match the document's currency.