# Currency Exchange Rates

`GET` _(Table: Currency Exchange Rate)_

```
eOne/core/v1.0/currencyExchangeRates
```

"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 relationalCurrencyCode
```

So 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.

## Currency Exchange Rates fields

_API column → BC field._

**Legend**

- _(req)_ required on create
- _(res)_ resolver
- _(cur)_ currency-translated
- _(ro)_ read-only
- _(ext)_ added to this endpoint by another extension (BC field name shown; its API column name is not known here)

| API | BC field | Notes |
| --- | --- | --- |
| `id` | SystemId | The Business Central record id. Unique on its own, and the key this feed is written against. _(ro)_ |
| `bcCompanyId` | bcCompanyId | The company this row belongs to - the same GUID that appears in the request URL. Present on every endpoint so a store pooling several companies can keep them apart without relying on which URL it called. _(ro)_ |
| `bcCompanyName` | bcCompanyName | The name of the company this row belongs to. _(ro)_ |
| `currencyCode` | Currency Code | The currency this rate is for. Join it to the currencies endpoint, or to any currencyCode column elsewhere in this API. _(cur)_ |
| `startingDate` | Starting Date | The date this rate takes effect. It stays in effect until the next row for the same currency, so pick the latest row on or before the date you are translating. _(ro)_ |
| `exchangeRateAmount` | Exchange Rate Amount | The numerator of the rate pair: this many units of currencyCode equal relationalExchangeRateAmount units of the relational currency. _(ro)_ |
| `relationalExchangeRateAmount` | Relational Exch. Rate Amount | The denominator of the rate pair, expressed in the relational currency. _(ro)_ |
| `relationalCurrencyCode` | Relational Currency Code | The currency the rate is quoted against. Blank means the company local currency. _(ro)_ |
| `adjustmentExchangeRateAmount` | Adjustment Exch. Rate Amount | The numerator of the rate used when adjusting exchange rates, which can differ from the posting rate. _(ro)_ |
| `relationalAdjmtExchRateAmt` | Relational Adjmt Exch Rate Amt | The denominator of the adjustment rate. _(ro)_ |
| `fixExchangeRateAmount` | Fix Exchange Rate Amount | Which side of the rate pair Business Central holds fixed when recalculating. _(ro)_ |
| `lastModifiedDateTime` | SystemModifiedAt | The last date and time the record was modified. Use it as the watermark for an incremental pull. _(ro)_ |
