---
title: "exchangerate.host Alternative: Keyless Again, Same Response Shape"
description: "exchangerate.host went behind an access_key in 2023. AllRatesToday serves its {success, base, date, rates} shape, /timeseries and /symbols keyless for latest rates, over HTTPS, from the ECB reference table."
canonical: https://allratestoday.com/migrate/exchangerate-host/
source: AllRatesToday (https://allratestoday.com/) — Markdown mirror of the page above; index of all pages at https://allratestoday.com/llms.txt
generated: 2026-10-24T23:07:54.063Z
---

# exchangerate.host Alternative: Keyless Again, Same Response Shape

exchangerate.host went behind an access_key in 2023. AllRatesToday serves its {success, base, date, rates} shape, /timeseries and /symbols keyless for latest rates, over HTTPS, from the ECB reference table.

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

# exchangerate.host stopped being keyless. This is the fix.

exchangerate.host was the free, keyless successor many projects moved to when exchangeratesapi.io was sold. In 2023 it too joined apilayer: requests without an `access_key` began failing, the free tier was capped at 100 calls a month, and the response shape changed. Projects that had already migrated once broke a second time.

  **The fix is a hostname change.** Same path, same query parameters, same JSON fields. Latest, dated and range lookups need no key at all.

## Before and after

```
# before
curl "https://api.exchangerate.host/latest?base=USD&symbols=EUR,GBP"

# after
curl "https://allratestoday.com/api/compat/exchangerate-host/latest?base=USD&symbols=EUR,GBP"
```

Response:

```
{"success":true,"base":"USD","date":"2026-09-12","rates":{"EUR":0.8627,"GBP":0.7377}}
```

Python:

```
import requests

# before
# r = requests.get("https://api.exchangerate.host/latest?base=USD&symbols=EUR,GBP").json()
# after
r = requests.get("https://allratestoday.com/api/compat/exchangerate-host/latest?base=USD&symbols=EUR,GBP").json()
print(r["date"], r["rates"])
```

JavaScript:

```
// before
// const r = await fetch("https://api.exchangerate.host/latest?base=USD&symbols=EUR,GBP").then(x => x.json());
// after
const r = await fetch("https://allratestoday.com/api/compat/exchangerate-host/latest?base=USD&symbols=EUR,GBP").then(x => x.json());
console.log(r.date, r.rates);
```

## Endpoints

| Endpoint | Returns | Key |
| --- | --- | --- |
| `/api/compat/exchangerate-host/latest?base=USD&symbols=EUR,GBP` | Latest ECB table, keyless, any base | No key |
| `/api/compat/exchangerate-host/2026-01-15?base=USD` | Table for a date | No key |
| `/api/compat/exchangerate-host/timeseries?start_date=2026-01-01&end_date=2026-03-31&base=USD` | Timeseries shape | No key, up to a year per request |
| `/api/compat/exchangerate-host/convert?from=USD&to=EUR&amount=100` | Conversion with `query`, `info.rate` and `result` | No key |
| `/api/compat/exchangerate-host/symbols` | Currency list | No key |

None of these needs a key. Rates come from the European Central Bank's daily reference table, the same source exchangerate.host used; a non-EUR base is a cross-rate inside that table. Every response also carries the ECB publication date, so the number is citable.

## When you need more than ECB rates

- **Real-time mid-market rates** for 160+ currencies, refreshed every 60 seconds: [the main exchange rate API](https://allratestoday.com/exchange-rate-api/) on the same key.
- **Official rates from [122 central banks and tax authorities](https://allratestoday.com/central-bank-rates-api/institutions/)**, not only the ECB: the [central bank rates API](https://allratestoday.com/central-bank-rates-api/), with the latest table of every source keyless.
- **The full ECB archive as files** on [Hugging Face](https://huggingface.co/datasets/AllRatesToday/central-bank-exchange-rates) and [GitHub](https://github.com/AllRates-Today/central-bank-exchange-rates), refreshed daily, if you would rather not call an API at all.

## Frequently asked questions

### Is the exchangerate.host compatible endpoint really free?

Yes, for everything: latest, dated and range lookups are all keyless, with no quota, CORS enabled and edge-cached. The data is the ECB's public reference table, so it is free for any use, commercial included. Public displays must carry a visible attribution link to allratestoday.com.

### Are the numbers the same?

Yes. Both serve the European Central Bank's daily reference rates. Cross-rates for a non-EUR base are computed inside the same ECB table, exactly as the original API did. Rates change once per business day at about 16:00 CET.

### What is different?

Two additive fields, source and attribution, appear at the top level; every original field is unchanged. HTTPS and any base currency work on the keyless tier. Date ranges are limited to a year per request.

### Can I get real-time market rates too?

Yes, on the same key. GET /api/v1/rates returns mid-market rates for 160+ currencies refreshed every 60 seconds; the compatible endpoints stay ECB-only so existing code keeps its semantics.

## Fix it now

Latest rates, dates and ranges work with no key. A free key adds real-time rates for 160+ currencies.

 [Get a free API key](https://allratestoday.com/register) [All migration guides](https://allratestoday.com/migrate/)

## Related

  [exchangerate.host vs AllRatesTodayFull feature comparison](https://allratestoday.com/compare/exchangerate-host-alternative/) [Migration guidesEvery dead free API, one line each](https://allratestoday.com/migrate/) [Best exchange rate APIs 202610 providers compared](https://allratestoday.com/best/best-exchange-rate-api/) [Open APIKeyless official rates, attribution terms](https://allratestoday.com/open-api/)
