AllRatesToday is now listed in the
public-apis directory under Currency
Exchange. Rather than write a post that just says that, here is the part of the API that earns a
place in a list of public APIs: a set of endpoints that need no key at all.
The keyless part
Central banks and tax authorities publish an official exchange rate table, usually once per business
day. That number is not a market rate — it is the figure a VAT return, a customs declaration or a set
of statutory accounts has to use, because the regulation names the institution that published it.
We collect those tables from 116 central banks and 3 tax authorities and serve the latest one for any
source with no key, no signup and CORS wide open:
curl "https://allratestoday.com/api/open/central-bank/ecb"
{
"bank": "ecb",
"rate_date": "2026-09-22",
"age_days": 0,
"stale": false,
"cadence": "daily",
"rates": [
{ "base": "EUR", "quote": "USD", "type": "reference", "value": 1.1463 },
{ "base": "EUR", "quote": "GBP", "type": "reference", "value": 0.8578 }
]
}
Ask for a single pair and you get the pair, plus whether it was published directly or derived:
curl "https://allratestoday.com/api/open/central-bank/cbuae?source=AED&target=USD"
Swap ecb for fed, boe, rbi, pboc, snb, hmrc, ustreasury, bazg or any of the other
codes. The catalogue is keyless too, and tells you how fresh each source is:
curl "https://allratestoday.com/api/open/central-banks"
Every response carries the publication date, the age in days and a stale flag, which matters more
than it sounds: a table that is one day old on a Saturday is correct behaviour, and a table that is
nine days old is a problem. You should be able to tell those apart without guessing.
The condition is attribution — a visible credit linking back — which is the same deal the data
repository carries under CC BY 4.0.
In JavaScript, with no setup
const r = await fetch('https://allratestoday.com/api/open/central-bank/ecb?source=EUR&target=USD');
const { rate, rate_date } = await r.json();
console.log(`ECB reference rate on ${rate_date}: 1 EUR = ${rate} USD`);
CORS is open, so this works from the browser. No proxy, no key in your bundle.
What does need a key
The free key takes a minute and no card, and unlocks the parts that are a database query rather than
one cached object:
- Real-time mid-market rates for 160+ currencies, refreshed every 60 seconds
- A rate on any past date, with the publishing institution's own weekend and holiday rule applied and stated in the response
- Full history and time series, and CSV, XML or XLSX instead of JSON
- Cross rates computed between two currencies neither of which is the bank's home currency
Same data, no API at all
If you would rather not call an API, the whole central-bank archive is a git repository, mirrored to
jsDelivr, Hugging Face and Kaggle and refreshed daily:
https://cdn.jsdelivr.net/gh/AllRates-Today/central-bank-exchange-rates@main/data/ecb/latest.json
There is also an MCP server, so an AI agent can look up a rate and cite the institution and date
instead of inventing one from training data.
One correction to the listing
The directory's generated description says our rates come from Reuters and Refinitiv. They do not,
and we do not license either. The real-time feed is aggregated institutional interbank market data;
the official tables come from each institution's own publication. We had a sentence on our blog that
placed the word "Reuters" next to our own sourcing, which is almost certainly what a crawler merged.
That sentence is now fixed, and I have asked the directory to update the entry. If you are picking a
data provider, "sourced from Reuters" is a claim worth making a vendor prove.
Docs: allratestoday.com/docs ·
OpenAPI ·
llms.txt for agents ·
free key
Top comments (0)