Exchange Rate API Benchmark: Latency, Uptime and Freshness of the Free APIs, Updated Hourly
Hourly measurements of the keyless exchange rate APIs: AllRatesToday, Frankfurter, ExchangeRate-API open endpoint, fawazahmed0/currency-api, FloatRates and the ECB XML. Response time, 7-day uptime, publication date and currency count, with the raw data and method published.
Every exchange rate API says it is fast and reliable. This page measures it instead. Once an hour a public GitHub Action calls each keyless exchange rate API three times, records the response time, whether the call succeeded, the publication date the API returned and how many currencies it served, and commits the result. The table below is the latest run plus the rolling seven-day picture.
Disclosure: AllRatesToday publishes this benchmark and is one of the providers in it. The script, the raw history and this page's source are public; the method is the same for every row.
Results
| API | Rates | Status now | Latency now | 7-day median | 7-day p90 | 7-day uptime | Rates dated | Currencies |
|---|---|---|---|---|---|---|---|---|
| AllRatesToday (open central-bank endpoint) | Official table | OK | 25 ms | 25 ms | 25 ms | 100% | 2026-09-18 (1 day) | 29 |
| Frankfurter | Official table | OK | 256 ms | 256 ms | 256 ms | 100% | 2026-09-18 (1 day) | 29 |
| ExchangeRate-API (open endpoint) | Market blend | OK | 110 ms | 110 ms | 110 ms | 100% | 2026-09-19 (today) | 166 |
| fawazahmed0/currency-api (jsDelivr) | Market blend | OK | 9 ms | 9 ms | 9 ms | 100% | 2026-09-19 (today) | 341 |
| FloatRates | Market blend | OK | 223 ms | 223 ms | 223 ms | 100% | 2026-09-18 (1 day) | 146 |
| ECB eurofxref-daily.xml (the source itself) | Official table | OK | 282 ms | 282 ms | 282 ms | 100% | 2026-09-18 (1 day) | 29 |
Latency is the median of three sequential GETs from the runner, so it includes network distance from US East. Compare rows against each other, not against your own region. "Rates dated" is the date in the response body; official tables publish once per business day.
What exactly is called
- AllRatesToday (open central-bank endpoint):
https://allratestoday.com/api/open/central-bank/ecb - Frankfurter:
https://api.frankfurter.dev/v1/latest?base=EUR - ExchangeRate-API (open endpoint):
https://open.er-api.com/v6/latest/EUR - fawazahmed0/currency-api (jsDelivr):
https://cdn.jsdelivr.net/npm/@fawazahmed0/currency-api@latest/v1/currencies/eur.min.json - FloatRates:
https://www.floatrates.com/daily/eur.json - ECB eurofxref-daily.xml (the source itself):
https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml
Not measured, and why
These are real options and some are good ones, but they cannot be called without a credential, so they are outside a benchmark anyone can reproduce. The best exchange rate API guide compares them on price, limits and data.
- Fixer.io: free plan needs a key.
- currencylayer: free plan needs a key.
- Open Exchange Rates: free plan needs a key.
- CurrencyAPI: free plan needs a key.
- ExchangeRatesAPI.io: free plan needs a key.
- exchangerate.host: keyless access ended; now returns missing_access_key.
- XE Currency Data: contract only.
Method
3 sequential GETs per provider per run, cache-busting query string, 15s timeout; median reported. Freshness = publication date in the response vs the run date (UTC). Uptime = share of hourly runs with an HTTP 2xx and a parseable body.
The probe runs in a GitHub Actions workflow at 13 minutes past every hour. Results are committed to
the benchmark folder of the central-bank data repository: latest.json for the current state and rolling summaries, history.csv for every measurement since 2026-09-19. This page caches the JSON for 15 minutes.
Link to or cite this benchmark
The data is CC BY 4.0. One line is enough:
Exchange rate API benchmark: [AllRatesToday](https://allratestoday.com/benchmarks/exchange-rate-api/), measured hourly, CC BY 4.0. Frequently asked questions
Which free exchange rate API is the fastest?
It changes hour to hour, which is why this page is measured rather than claimed. Endpoints served from a CDN edge (AllRatesToday's open central-bank endpoint on Cloudflare, fawazahmed0/currency-api on jsDelivr) usually answer in tens of milliseconds from the runner; origin-served APIs take 100 to 600 ms. Read the 7-day median, not a single run.
Why measure only keyless APIs?
A benchmark that anyone can re-run must not depend on our credentials or on a plan tier that changes the answer. Every URL probed here works with a plain GET. Keyed providers are listed separately so nobody mistakes their absence for a failure.
What does freshness mean here?
The publication date the API itself returns for its rates, compared with the run date. Official-rate feeds (ECB, Frankfurter, AllRatesToday central-bank tables) publish once per business day, so a one-day age on a Saturday is correct behaviour, not staleness. Market feeds are expected to show today's date.
Where is the raw data and how do I cite it?
Every run is appended to benchmark/history.csv and summarised in benchmark/latest.json in the AllRates-Today/central-bank-exchange-rates repository on GitHub, under CC BY 4.0. Cite it as "AllRatesToday, Exchange Rate API Benchmark, https://allratestoday.com/benchmarks/exchange-rate-api/" with the date you read it.
Is this fair, given AllRatesToday runs it?
The method, code and every measurement are public and identical for all providers. The AllRatesToday endpoint probed is the same keyless URL any visitor can call. If you find a bias in the script, open an issue on the repository and we will fix it in public.
The keyless endpoint in the table is yours to use
Official central-bank tables need no key. Real-time market rates need a free one, no card.
Get free API key See the API