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.
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.
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 | Free key |
/api/compat/exchangerate-host/timeseries?start_date=2026-01-01&end_date=2026-03-31&base=USD | Timeseries shape | Free key, 1 unit per month covered |
/api/compat/exchangerate-host/symbols | Currency list | No key |
Send the key as Authorization: Bearer art_live_…. 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 on the same key.
- Official rates from 116 central banks and tax authorities, not only the ECB: the central bank rates API, with the latest table of every source keyless.
- The full ECB archive as files on Hugging Face and GitHub, 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 latest rates: no API key, no quota, CORS enabled, edge-cached. Dated and range lookups need a free AllRatesToday API key, which takes under a minute and needs no card. 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 work with no key. A free key adds dates and history.
Get a free API key All migration guides