Currency Exchange Rates
GETTable: Currency Exchange Rate
"Read-only exchange rate history, one row per currency per starting date. This is what turns the transaction-currency amounts everywhere else in this API into a single reporting currency."
A rate is a pair, not a multiplier
Business Central states a rate as two numbers:
exchangeRateAmount of currencyCode
relationalExchangeRateAmount of relationalCurrencyCodeSo a row reading 100 / 92.5 means 100 units of the currency equal 92.5 of the relational one. Divide. Assuming the numerator is always 1 gives an answer that is wrong by a factor of 100 for exactly the currencies where it matters most.
A blank relationalCurrencyCode means the company local currency.
Pick the rate by date, not by newest
A row applies from its startingDate until the next row for the same currency supersedes it. Translating an amount posted in March means finding the latest row on or before that posting date.
Reading the newest row instead silently restates history: every March figure changes the moment someone enters an April rate, and nothing reports an error.
The adjustment rate is a different number
adjustmentExchangeRateAmount and relationalAdjmtExchRateAmt are the rate Business Central uses when running Adjust Exchange Rates, which can differ from the rate a document posted at. Use the posting pair for translating transactions and the adjustment pair only when reconciling an adjustment run.
Volume
One row per currency per rate change. Even a company that updates daily across ten currencies adds a few thousand rows a year, so a full refresh each cycle is reasonable.