---
title: "Central Bank Exchange Rates in Dynamics 365 Business Central"
description: "Configure the Business Central Currency Exchange Rate Service to import official central-bank rates from the AllRatesToday XML feed, with the field mapping for both quoting directions."
canonical: https://allratestoday.com/docs/integrations/business-central/
source: AllRatesToday (https://allratestoday.com/) — Markdown mirror of the page above; index of all pages at https://allratestoday.com/llms.txt
generated: 2026-10-23T18:06:42.241Z
---

# Central Bank Exchange Rates in Dynamics 365 Business Central

Configure the Business Central Currency Exchange Rate Service to import official central-bank rates from the AllRatesToday XML feed, with the field mapping for both quoting directions.

By [Madhushan](https://allratestoday.com/authors/madhushan/), Founder & Lead Developer

  **Which endpoint:** every guide below reads the bank's latest published table from `GET /api/v1/central-bank/{bank}/latest` (free key, one call per fetch) or the keyless evaluation copy at `/api/public/central-bank/{bank}?format=json`. Add `?source=USD&target=EUR` for one resolved pair, `format=xml` or `format=csv` for importers that do not read JSON, and `api_key=` on the URL when the importer cannot send headers. Bank codes are on the [central bank coverage map](https://allratestoday.com/central-bank-rates-api/).

## How Business Central imports rates

Business Central has a built-in importer, the **Currency Exchange Rate Service**, that fetches a URL on a schedule and maps nodes of the response onto the *Currency Exchange Rates* table. It has been in the product since NAV 2015 and needs no extension. Its two limits matter here: it reads XML, and it cannot add request headers. Both are covered by `format=xml` and `api_key=` on the URL.

## 1. Build the feed URL

Pick the bank whose rate your jurisdiction requires and put your key on the query string:

```
https://allratestoday.com/api/v1/central-bank/ecb/latest?format=xml&api_key=art_live_your_key
```

The response is the bank's full latest table:

```
<?xml version="1.0" encoding="UTF-8"?>
<response>
  <bank>ecb</bank>
  <name>European Central Bank</name>
  <rate_date>2026-09-16</rate_date>
  <rates>
    <rate><base>EUR</base><quote>USD</quote><type>reference</type><value>1.1537</value></rate>
    <rate><base>EUR</base><quote>GBP</quote><type>reference</type><value>0.8574</value></rate>
    ...
  </rates>
</response>
```

## 2. Create the service

1. Search for **Currency Exchange Rate Services** and choose **New**.
2. Give it a code such as `ECB-OFFICIAL`, paste the URL from step 1 into **Service URL**, and choose **Preview**. Business Central fetches the feed and shows the XML tree.
3. On the **Field Mapping** FastTab, set the **Parent Node** to the repeating `rate` element, then map the fields as in the table below.
4. Enable the service. Set the **Job Queue** entry to run after the bank's publication time so each run picks up the new table (the ECB publishes around 16:00 CET; the schedule for every source is on its [bank page](https://allratestoday.com/central-bank-rates-api/)).

## 3. Field mapping

Business Central stores each rate as *Exchange Rate Amount* in the foreign currency against *Relational Exch. Rate Amount* in your local currency. Which of our fields goes where depends on which side the bank quotes.

| Business Central field | Bank quotes foreign per 1 home (ECB, BoE, RBA) | Bank quotes home per 1 foreign (RBI, CBN, BSP) |
| --- | --- | --- |
| Currency Code | `quote` | `base` |
| Starting Date | `rate_date` (document level) | `rate_date` (document level) |
| Exchange Rate Amount | `value` | 1 |
| Relational Exch. Rate Amount | 1 | `value` |

Use the left column when your local currency is the bank's home currency and the bank quotes outward, for example a Eurozone company on the ECB. Use the right column for banks that quote their own currency per unit of foreign currency. The direction is printed on every bank page under *Latest published rates*. Constants such as `1` go in the **Default Value** column of the mapping rather than a node.

## 4. Check the first run

Open **Currencies**, choose a currency, and open **Exchange Rates**. You should see one new line dated with the bank's `rate_date`. If the line is dated with the run date instead, the Starting Date mapping is pointing at the wrong node.

## Month-end and tax-authority tables

Sources that publish monthly, such as [HMRC](https://allratestoday.com/tax-authority-rates-api/hmrc/) or the [Swiss National Bank](https://allratestoday.com/central-bank-rates-api/snb/) monthly averages, use the same feed; schedule the job once a month after the publication date. The response's `rate_date` is the first day the table applies.

## Notes

- Each run is one API call regardless of how many currencies the bank publishes. Daily runs for one bank are about 22 calls a month.
- Prefer `Authorization: Bearer` if you are calling from AL or Power Automate instead of the built-in service; the query-string key exists for importers that cannot set headers.
- For the drop-in market-rate feed BC ships with, use [/api/v1/rates](https://allratestoday.com/docs/#rates); this guide is for the official rate a regulation names.
- Working sample: [business-central-central-bank-rates](https://github.com/AllRates-Today/business-central-central-bank-rates), an AL extension that does the import inside BC with Bearer auth instead of the built-in service.

Other systems: [Business Central](https://allratestoday.com/docs/integrations/business-central/) · [Xero](https://allratestoday.com/docs/integrations/xero/) · [QuickBooks Online](https://allratestoday.com/docs/integrations/quickbooks/) · [SAP](https://allratestoday.com/docs/integrations/sap/) · [Odoo](https://allratestoday.com/docs/integrations/odoo/) · [all integrations](https://allratestoday.com/docs/integrations/). Endpoint reference: [Central Bank Exchange Rate API](https://allratestoday.com/docs/#central-bank).
