Official Central Bank Exchange Rates
On this page, we’ll dive into the official exchange rates endpoints you can use to retrieve the exchange rates central banks like the ECB, the Federal Reserve or the Bank of England officially publish, including their full history.
Official rates are what accounting, invoicing, tax and customs rules usually refer to. Unlike /latest and /historical, which aggregate market data, these endpoints return each central bank’s own publication: one set of rates per business day, never blended, smoothed or filled in.
Which source should I use?
Many tax authorities prescribe a specific central bank rate, for example the ECB reference rates in the euro area, the NBP rates in Poland or the CNB rates in the Czech Republic. Check which bank, which rate and which day your rules require, then request exactly that source and date.
Sources
35 central banks and official fixing authorities on six continents. Each bank links to its public rate page with today’s rates, charts and yearly averages. More banks are added as they publish machine-readable rates.
Europe
source | Central bank | Against | Rate | Since |
|---|---|---|---|---|
ecb | European Central Bank | EUR | Reference rates | 1999 |
boe | Bank of England | GBP | Spot rates at 16:00 London time | 1975 |
cnb | Czech National Bank | CZK | Exchange rate fixing | 1991 |
nbp | National Bank of Poland | PLN | Average rates (table A) | 2002 |
norges | Norges Bank | NOK | Daily exchange rates | 1980 |
riksbank | Sveriges Riksbank | SEK | Daily middle rates | 1993 |
nationalbanken | Danmarks Nationalbank | DKK | Daily exchange rates | 1977 |
mnb | Magyar Nemzeti Bank | HUF | Official exchange rates | 1949 |
bnr | National Bank of Romania | RON | Reference rates | 2005 |
nbu | National Bank of Ukraine | UAH | Official rates, incl. precious metals | 1996 |
tcmb | Central Bank of the Republic of Türkiye | TRY | Indicative forex buying rates | 2005 |
nbm | National Bank of Moldova | MDL | Official exchange rates | 1995 |
nbrm | National Bank of the Republic of North Macedonia | MKD | Middle rates | 1997 |
cbbh | Central Bank of Bosnia and Herzegovina | BAM | Middle rates | 2003 |
cbr | Bank of Russia | RUB | Official exchange rates | 1998 |
Asia and the Middle East
source | Central bank | Against | Rate | Since |
|---|---|---|---|---|
nbg | National Bank of Georgia | GEL | Official exchange rates | 1995 |
cba | Central Bank of Armenia | AMD | Official exchange rates | 2000 |
cbar | Central Bank of the Republic of Azerbaijan | AZN | Official rates, incl. precious metals | 2006 |
nbk | National Bank of Kazakhstan | KZT | Official market rates | 1999 |
cbu | Central Bank of the Republic of Uzbekistan | UZS | Official exchange rates | 2000 |
nbt | National Bank of Tajikistan | TJS | Official exchange rates | 2000 |
boi | Bank of Israel | ILS | Representative rates | 1985 |
pboc | People's Bank of China | CNY | RMB central parity (CFETS) | 2006 |
bnm | Bank Negara Malaysia | MYR | 12:00 middle rates | 2005 |
bi | Bank Indonesia | IDR | Transaction rates (buying) | 2001 |
nrb | Nepal Rastra Bank | NPR | Buying rates | 2000 |
Oceania
source | Central bank | Against | Rate | Since |
|---|---|---|---|---|
rba | Reserve Bank of Australia | AUD | Indicative rates at 16:00 Sydney time | 2023 |
Americas
source | Central bank | Against | Rate | Since |
|---|---|---|---|---|
fed | Federal Reserve | USD | H.10 noon buying rates, released weekly | 1971 |
boc | Bank of Canada | CAD | Daily average rates | 2017 |
bcb | Banco Central do Brasil | BRL | PTAX closing rates (selling) | 1994 |
bcra | Banco Central de la República Argentina | ARS | Official rates (A 3500 for USD) | 2002 |
bcrp | Banco Central de Reserva del Perú | PEN | Interbank rate, USD only | 1997 |
sfc | Superintendencia Financiera de Colombia | COP | TRM, USD only | 1991 |
Africa
source | Central bank | Against | Rate | Since |
|---|---|---|---|---|
cbn | Central Bank of Nigeria | NGN | Central rates | 2001 |
sarb | South African Reserve Bank | ZAR | Rand rates for USD, GBP, EUR, JPY | 2000 |
The currencies each bank publishes, its publication schedule and the exact first and last date of its history are available from /v3/official/sources. Rates are imported within the hour after a bank publishes them.
How the values work
- Normalised quotation. Banks quote in different directions and units (the CNB publishes CZK per 100 JPY, the Fed publishes USD per EUR but JPY per USD). Every value is normalised to units of currency per 1 unit of
base_currency, like the rest of the API. Apart from that the values are exactly as published. - Official against the bank’s currency. By default
base_currencyis the bank’s own currency (EUR forecb, PLN fornbp, ...) and every value is official. With any otherbase_currencythe values are cross rates calculated from the official ones, andmeta.cross_ratesistrue. The bank’s own currency is included in that case, sosource=nbp&base_currency=USD¤cies=PLNreturns the official PLN rate for 1 USD. - Business days only. Banks do not publish on weekends and holidays. When you request such a
date, you get the bank’s newest publication from up to 14 days before it;meta.datetells you which day the rates are for. The NBU sets a rate for every calendar day, a day in advance. - Publication references. Where a bank numbers its publications,
meta.referencecarries the number, e.g. the NBP table number (188/A/NBP/2026) or the TCMB bulletin number, so you can cite it on invoices and filings. - Buying rates. A few banks (TCMB, Bank Indonesia, Nepal Rastra Bank) publish buying and selling rates but no middle rate. Their buying rate is served, as the rate type says; nothing is averaged.
- Precision. Some banks publish weak currencies with few significant digits (the Riksbank publishes 1 IDR as
0.00055SEK). Those values are served as published, so cross rates derived from them are only as precise as the bank’s figure. Quotations with a single significant digit are too coarse to convert with and are left out.
Official Exchange Rates
This endpoint returns the official exchange rates a central bank published for a date, or its newest publication when no date is given.
Required attributes
- Name
source- Type
- string
- Description
The central bank to get the official rates from:
ecb,fed,boe,boc,cnb,nbp,norges,riksbank,nbu,boiortcmb
Optional attributes
- Name
date- Type
- string
- Description
Date to get the official rates for (format: 2026-09-28) By default the bank’s newest publication is returned
- Name
base_currency- Type
- string
- Description
The currency all values are relative to By default the bank’s own currency, which gives the official values as published
- Name
currencies- Type
- string
- Description
A list of comma-separated currency codes which you want to get (USD,GBP) By default all currencies of the publication will be shown
- Name
format- Type
- string
- Description
json(default) orcsv
Response Structure
The meta key describes the publication: the source, the date the rates are for, the requested_date you asked for (null without one), the base_currency of the values, the bank’s own source_base_currency, whether the values are cross_rates, the bank’s reference for the publication and last_updated_at, when currencyapi last imported it. The data key holds the rates like the /latest endpoint.
Request
curl -G https://api.currencyapi.com/v3/official \
-d source=nbp \
-d date=2026-09-28 \
-d base_currency=USD \
-d currencies=PLN \
-H "apikey: YOUR-API-KEY"
Response
{
"meta": {
"source": "nbp",
"source_name": "National Bank of Poland",
"date": "2026-09-28",
"requested_date": "2026-09-28",
"base_currency": "USD",
"source_base_currency": "PLN",
"cross_rates": true,
"reference": "188/A/NBP/2026",
"last_updated_at": "2026-09-28T10:07:12Z"
},
"data": {
"PLN": {
"code": "PLN",
"value": 3.8478
}
}
}
Official Exchange Rates for a Date Range
This endpoint returns every publication of a central bank between two dates, oldest first, for example to build a monthly average or to fill a ledger. Only the bank’s publication days are included.
Like /range it requires a plan that includes the range endpoint, and plans limited to one currency per range request need exactly one code in currencies.
Required attributes
- Name
source- Type
- string
- Description
The central bank to get the official rates from
- Name
date_from- Type
- string
- Description
First date of the range (format: 2026-09-01)
- Name
date_to- Type
- string
- Description
Last date of the range (format: 2026-09-30), at most 366 days after
date_from
Optional attributes
- Name
base_currency- Type
- string
- Description
The currency all values are relative to By default the bank’s own currency
- Name
currencies- Type
- string
- Description
A list of comma-separated currency codes which you want to get (USD,GBP) By default all currencies of each publication will be shown
- Name
format- Type
- string
- Description
json(default) orcsv
Response Structure
The data key holds one entry per publication with its date, the bank’s reference and the currencies.
Request
curl -G https://api.currencyapi.com/v3/official/range \
-d source=ecb \
-d date_from=2026-09-01 \
-d date_to=2026-09-30 \
-d currencies=USD \
-H "apikey: YOUR-API-KEY"
Response
{
"meta": {
"source": "ecb",
"base_currency": "EUR",
"source_base_currency": "EUR",
"cross_rates": false
},
"data": [
{
"date": "2026-09-25",
"reference": null,
"currencies": {
"USD": {
"code": "USD",
"value": 1.1403
}
}
},
{
"date": "2026-09-28",
"reference": null,
"currencies": {
"USD": {
"code": "USD",
"value": 1.1378
}
}
}
]
}
List Central Bank Sources
This endpoint lists every central bank you can use as source, with the currency it publishes against, the kind of rate, when it publishes, a link to the bank’s own page, the first and last date of the stored history and the currencies of its newest publication.
Request
curl -G https://api.currencyapi.com/v3/official/sources \
-H "apikey: YOUR-API-KEY"
Response
{
"data": {
"ecb": {
"code": "ecb",
"name": "European Central Bank",
"country": "EU",
"region": "europe",
"base_currency": "EUR",
"rate_type": "Euro foreign exchange reference rates",
"schedule": "Every TARGET2 business day at around 16:00 CET",
"website": "https://www.ecb.europa.eu/stats/policy_and_exchange_rates/euro_reference_exchange_rates/html/index.en.html",
"history": {
"from": "1999-01-04",
"to": "2026-09-28"
},
"currencies": ["AUD", "BRL", "CAD", "..."]
},
"...": "34 more central banks"
}
}
Finding a source for a currency
/v3/official/sources?currency=KZT lists every bank that publishes a rate for the tenge (and the National Bank of Kazakhstan, which publishes against it). Add region=asia (or europe, africa, north-america, south-america, oceania) to narrow it down. The endpoint is free: it never counts against your quota.
CSV and caching
- CSV. Add
format=csvto/v3/officialor/v3/official/rangefor one row per currency and publication:date,source,base_currency,currency,value,reference. Values never use exponent notation, so Excel and Google Sheets read them as numbers. - Conditional requests. Every response carries an
ETag. Send it back asIf-None-Matchand an unchanged response comes back as304 Not Modifiedwithout a body.Cache-Controltells you how long a response stays current: 5 minutes for recent publications, a day for settled ones.
Errors
Errors carry a stable, machine-readable error.code next to the human-readable message, and actions with links to the next step.
| Status | error.code | When |
|---|---|---|
403 | plan_upgrade_required | /v3/official/range on a plan without the range endpoint, or with more than one currency on a plan limited to one |
404 | no_rates_published | The bank published nothing on the requested date or in the 14 days before it (e.g. a date before its history starts), or nothing in the requested range |
422 | currency_not_published | base_currency is not a currency the bank published on that date |
422 | invalid_parameters | A parameter is invalid; errors lists the messages per parameter |
404 response
{
"message": "European Central Bank published no official rates on 1998-06-01 or in the 14 days before it.",
"error": {
"code": "no_rates_published",
"message": "European Central Bank published no official rates on 1998-06-01 or in the 14 days before it."
},
"actions": {
"sources": "https://api.currencyapi.com/v3/official/sources",
"docs": "https://currencyapi.com/docs/openapi.yaml"
},
"info": "For more information, see documentation: https://currencyapi.com/docs/official"
}
See Request Status Codes for the errors every endpoint shares.