Exchange Rates API for Dynamics 365 Business Central: Official Central Bank Rates
Import official central-bank and tax-authority exchange rates into Dynamics 365 Business Central: the built-in Currency Exchange Rate Service (no code), an open-source AL extension, or Power Automate. Field mapping for both quoting directions.
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.
Three ways to get official rates into Business Central
| Method | Install | Auth | Best for |
|---|---|---|---|
| Built-in Currency Exchange Rate Service (this guide) | None. Standard BC feature since NAV 2015. | API key on the URL | Any tenant, including ones where you cannot install extensions. |
| Open-source AL extension | Compile and publish from VS Code (MIT licence, no dependencies). | Bearer key in Isolated Storage | Partners who want the import, job queue entry and run diagnostics as an app, and the key out of the URL. |
| Power Automate / custom connector | Flow using the HTTP action or our Power Platform connector. | Bearer key | Teams already orchestrating BC from Power Platform, or pushing to several companies. |
All three read the same endpoint and write the same Currency Exchange Rates lines, dated with the bank's publication date. There is no AppSource subscription to buy: a free key covers the latest table, and the Official Rates plan adds full history and publication-date lookups for audit work.
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
- Search for Currency Exchange Rate Services and choose New.
- 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. - On the Field Mapping FastTab, set the Parent Node to the repeating
rateelement, then map the fields as in the table below. - 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).
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 or the
Swiss National Bank 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: Bearerif 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; this guide is for the official rate a regulation names.
- Working sample: business-central-central-bank-rates, an AL extension that does the import inside BC with Bearer auth instead of the built-in service.
FAQ
Does Business Central come with an exchange rates API?
Business Central ships a Currency Exchange Rate Service that can read any XML feed on a schedule, but Microsoft does not supply a rate source. You point it at a provider. This guide points it at the official table published by the central bank or tax authority your jurisdiction names, for example the ECB for a Eurozone entity or HMRC for UK VAT.
Do I need an AppSource app?
No. The built-in service needs nothing installed. If you prefer an app, the AL extension above is open source and installs from VS Code into any sandbox or production environment with the standard publish flow.
Which bank should a multi-company tenant use?
One service per company, each pointed at the bank or tax authority that company's local regulation names. The finance team guides list the usual source per jurisdiction for VAT, customs, month-end and transfer pricing.
How many API calls does this use?
One call per run, regardless of how many currencies the table contains. A daily job for one bank is about 22 calls a month, which fits the free tier; history and publication-date lookups are on the Official Rates plan.
Other systems: Business Central · Xero · QuickBooks Online · SAP · Odoo · all integrations. Endpoint reference: Central Bank Exchange Rate API.