---
title: "Exchange Rate API Benchmark: Latency, Uptime and Freshness of the Free APIs, Updated Hourly"
description: "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."
canonical: https://allratestoday.com/benchmarks/exchange-rate-api/
source: AllRatesToday (https://allratestoday.com/) — Markdown mirror of the page above; index of all pages at https://allratestoday.com/llms.txt
generated: 2026-10-24T17:05:03.330Z
---

# 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.

By [Madhushan](https://allratestoday.com/authors/madhushan/), Founder & Lead Developer

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.

  **Last run:** 2026-10-24 14:30 UTC · **measuring since:** 2026-09-19 · **runs in the last 7 days:** 39 · **vantage:** GitHub Actions hosted runner (ubuntu-latest, US East)

## Results

| API | Rates | Status now | Latency now | 7-day median | 7-day p90 | 7-day uptime | Rates dated | Currencies |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| [AllRatesToday (open central-bank endpoint)](https://allratestoday.com/central-bank-rates-api/) | Official table | OK | 66 ms | 62 ms | 125 ms | 100% | 2026-10-23 (1 day) | 29 |
| [Frankfurter](https://frankfurter.dev/) | Official table | OK | 261 ms | 315 ms | 412 ms | 100% | 2026-10-23 (1 day) | 29 |
| [ExchangeRate-API (open endpoint)](https://www.exchangerate-api.com/) | Market blend | OK | 139 ms | 102 ms | 156 ms | 100% | 2026-10-24 (today) | 166 |
| [fawazahmed0/currency-api (jsDelivr)](https://github.com/fawazahmed0/exchange-api) | Market blend | OK | 13 ms | 13 ms | 21 ms | 100% | 2026-10-23 (1 day) | 339 |
| [FloatRates](https://www.floatrates.com/) | Market blend | OK | 251 ms | 295 ms | 389 ms | 100% | 2026-10-23 (1 day) | 146 |
| [ECB eurofxref-daily.xml (the source itself)](https://www.ecb.europa.eu/stats/policy_and_exchange_rates/euro_reference_exchange_rates/html/index.en.html) | Official table | OK | 257 ms | 374 ms | 545 ms | 100% | 2026-10-23 (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](https://allratestoday.com/best/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](https://github.com/AllRates-Today/central-bank-exchange-rates/blob/main/.github/workflows/benchmark.yml) at 13 minutes past every hour. Results are committed to [the benchmark folder](https://github.com/AllRates-Today/central-bank-exchange-rates/tree/main/benchmark) 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](https://allratestoday.com/register) [See the API](https://allratestoday.com/exchange-rate-api/)

## Related

  [Best exchange rate APIs 2026Ten providers compared on price, limits and data](https://allratestoday.com/best/best-exchange-rate-api/) [Free currency APIs10 free tiers compared](https://allratestoday.com/blog/best-free-currency-exchange-api-2026/) [Exchange rate APIEndpoints, formats and a keyless first call](https://allratestoday.com/exchange-rate-api/) [Data sourcesWhere every rate comes from](https://allratestoday.com/data-sources/) [Central bank data repositoryDaily JSON and CSV, no key](https://github.com/AllRates-Today/central-bank-exchange-rates) [All comparisonsOne page per competitor](https://allratestoday.com/compare/)
