Exchange Rate API
Exchange rate API with real-time mid-market rates for 160+ currencies and the official published tables of 100+ central banks and tax authorities. Keyless endpoint for official rates, free key for live rates, JSON, CSV, XML and XLSX.
Quick start, no key
Every institution's latest published table is open. This asks the European Central Bank's reference table for EUR to USD:
curl "https://allratestoday.com/api/open/central-bank/ecb?source=EUR&target=USD" {
"bank": "ecb",
"rate_date": "2026-09-02",
"source": "EUR",
"target": "USD",
"rate": 1.1578,
"rate_type": "reference",
"derived": false,
"method": "published"
}
Swap ecb for fed, boe,
rbi, pboc, hmrc or any of the
100+ sources. The response says
whether the pair was published directly or derived, and on which date,
which is what an invoice or a tax return needs to cite.
Real-time rates, free key
Market rates need a free API key (email, Google or GitHub, no card). One call can quote several targets:
curl "https://allratestoday.com/api/v1/rates?source=USD&target=EUR,GBP,JPY" \
-H "Authorization: Bearer art_live_your_key" [
{ "source": "USD", "target": "EUR", "rate": 0.863707, "time": "2026-09-02T14:00:00Z" },
{ "source": "USD", "target": "GBP", "rate": 0.737735, "time": "2026-09-02T14:00:00Z" },
{ "source": "USD", "target": "JPY", "rate": 146.912, "time": "2026-09-02T14:00:00Z" }
] From JavaScript:
// Official rate, no key
const ecb = await fetch("https://allratestoday.com/api/open/central-bank/ecb?source=EUR&target=USD")
.then(r => r.json());
// Live rate, free key
const live = await fetch("https://allratestoday.com/api/v1/rates?source=USD&target=EUR", {
headers: { Authorization: "Bearer art_live_your_key" }
}).then(r => r.json()); From Python:
import requests
official = requests.get(
"https://allratestoday.com/api/open/central-bank/hmrc",
params={"source": "GBP", "target": "USD"},
).json() # HMRC monthly rate, no key
live = requests.get(
"https://allratestoday.com/api/v1/rates",
params={"source": "USD", "target": "EUR"},
headers={"Authorization": "Bearer art_live_your_key"},
).json()[0] Official SDKs exist for JavaScript, Python, PHP, Go and Rust, plus an MCP server for AI agents.
Endpoints
| Endpoint | Returns | Key |
|---|---|---|
/api/open/central-bank/{bank} | An institution's latest published table, or one pair from it | None |
/api/open/central-banks | Every source with its latest publication date and freshness | None |
/api/v1/rates | Real-time mid-market rate for one or many pairs; add time= for a past date | Free |
/api/v1/symbols | The 160+ supported currencies with names | Free |
/api/v1/central-bank/{bank}/{date} | The official table in force on a date, with weekend and holiday fallback | Paid |
/api/v1/central-bank/{bank}/history | A daily series for one pair over a date range | Paid |
Any table endpoint returns CSV, XML or Excel with
&format=csv|xml|xlsx. The full reference is in the
documentation and the
OpenAPI spec.
What makes an exchange rate API trustworthy
Rates are easy to serve and hard to stand behind. Three things separate a
number you can use from a number you can cite:
- Where it came from. A market rate should name its sourcing and refresh interval. An official rate should be the institution's own published figure, not a market rate relabelled. Every AllRatesToday central bank response carries the bank code, the rate type it printed, and a link to the institution's own page.
- When it was in force. The date on an official rate is the publication date, not the date you asked. Ask for a Sunday and you should get Friday's table, flagged as such. Ask for a rate the bank never printed and you should get a derived flag, not a silent cross-rate.
- What happens when a source breaks. Central bank websites go down and change format. Every table here is checked against the other banks for unit and direction errors, and the freshness feed says out loud when a source is behind its own schedule.
How it compares
Provider Real-time rates Official central bank tables Tax authorities Keyless access CSV / XML / XLSX AllRatesToday 60-second 100+ institutions HMRC, US Treasury, Swiss customs Official rates Yes ExchangeRate-API Daily on free, hourly on paid Blended, not per institution No Yes, daily No Open Exchange Rates Hourly on free No No No No Fixer.io Daily on free, EUR base only No No No No Frankfurter No, daily fixings only 84 institutions No Yes No
Details and caveats for each are in the
alternatives guides and the
state of exchange rate
APIs in 2026.
What it is used for
- Checkout and price display: quote in the visitor's currency from a live rate, refreshed on a schedule, with caching so one fetch serves many users.
- Invoicing and accounting: record the official rate on the invoice date, with the institution and date stored next to the amount.
- VAT, customs and tax filings: the HMRC monthly rate, the US Treasury quarterly rate, or the Swiss customs daily rate, straight from the tax authority endpoints.
- Reporting and audit: pull a bank's daily series as CSV or Excel for a period, with the publication calendar to show which days had a table.
- AI agents: give an assistant a rate it can cite through the MCP servers or the keyless endpoints.
Frequently asked questions
What is an exchange rate API?
A web service that returns currency exchange rates as data, usually JSON,
so software can convert amounts, display prices, or record rates without a
person looking them up. This one serves both real-time market rates and
the official rates institutions publish.
Is it free?
The official central bank endpoint is free with no key. Real-time rates
need a free key with a request quota. Historical data, higher volumes and
commercial use are in the paid plans.
How often are rates updated?
Market rates every 60 seconds. Official tables as each institution
publishes, usually once per business day, and the response always carries
the publication date.
Market rate or official rate?
Pricing and conversion use the market rate. Invoices, tax returns, customs
declarations and audits usually require the official rate a named
institution published for the date. The API serves both, and never labels
one as the other.
Historical rates?
Yes: time= on the rates endpoint for market history, and the
date and history endpoints for official tables, reaching back decades for
many institutions.
Start with the exchange rate API
Official rates need no key. Live rates need a free one, no card.
Get Free API Key Read the Docs Related