Comparison/Comparison

exchangerate.host alternatives, now that it requires a key

exchangerate.host used to answer requests with no signup at all. It is now operated by APILayer, and the free plan caps out at 100 requests a month behind a key. Here is what changed and where developers are moving.

ERexchangerate.dev·Aug 1, 2026·7 min read

If a script that ran fine for years suddenly returns 401s or a "quota exceeded" message, the cause is almost certainly this: exchangerate.host moved under APILayer, and what was a keyless, effectively unlimited endpoint now requires signup and gives you 100 requests a month on the free plan. Paid tiers start at $14.99/month for 10,000 requests. Below are the realistic options, including the case where you should stop looking and use the free one.

Key points
exchangerate.host now requires an APILayer key; free plan is 100 requests/month, paid starts at $14.99/mo for 10,000.
If you only need a once-daily ECB rate and no key at all, Frankfurter covers that for free with no signup.
ExchangeRate-API's open-access endpoint is also keyless but updates once a day and requires attribution text and a link.
Open Exchange Rates gives 1,000 free requests a month, but the free plan is locked to a USD base.
Fixer's free plan is 100 calls a month, EUR base only, with no conversion endpoint.
Every limit here was checked in August 2026 and providers change terms without much notice — verify before you build on a number.

What actually changed

exchangerate.host built a reputation as the free, keyless option: no signup, just a GET request. That version is gone. It is now operated by APILayer, and every request needs an apikey header tied to an account.

The free plan allows 100 requests a month. For a project that used to make a few hundred calls a day, that ceiling arrives before the first week is out. Paid access starts at $14.99/mo for 10,000 requests.

Verify before you build on this
Free-tier limits change without a changelog entry half the time. The numbers here were checked in August 2026 — confirm current terms on each provider's own pricing page before committing code to a specific quota.

If a once-daily ECB fix is all you need

Before comparing the paid options, weigh whether you need one at all. Frankfurter is open-source and requires no API key. It wraps European Central Bank reference rates, published once per business day around 16:00 CET, with no weekend data — Saturday shows Friday's close, and it now ships its own MCP server at mcp.frankfurter.dev.

For a dashboard, a report, or a batch job that only ever needs "today's official rate," that once-daily cadence may be enough on its own. A full migration guide with an endpoint mapping is linked below if you decide it is not.

The realistic alternatives, side by side

The field splits by what each free tier restricts: base currency, call count, or both.

ProviderFree tierWhat it locks you out of
exchangerate.host (APILayer)100 requests/month, key requiredNo keyless access anymore; paid starts at $14.99/mo for 10,000 requests
FrankfurterUnlimited, no keyOnce-daily ECB rate only; no intraday, no weekend data
ExchangeRate-API (open access)No key, updates once/dayAttribution required ("Rates By Exchange Rate API" + link); redistribution prohibited; 429 after rate limit, clears in 20 min
Open Exchange Rates1,000 requests/monthUSD base only; no time-series or conversion endpoint on free
Fixer100 calls/monthEUR base only; no conversion endpoint until BASIC tier

ExchangeRate-API: keyless, but read the attribution terms

ExchangeRate-API runs an open-access endpoint at open.er-api.com needing no key, updating once a day like Frankfurter. But display "Rates By Exchange Rate API" with a link back, and do not redistribute the raw data. A hit rate limit returns a 429 that clears in 20 minutes. A keyed tier exists too, at 1,500 requests a month.

Open Exchange Rates: 1,000 requests, but pinned to USD

Open Exchange Rates gives 1,000 free requests a month with hourly updates and daily history included. The catch: the free plan is fixed to USD. IDR or GBP as the base means converting client-side, or paying $12/mo for any base plus time-series and conversion calls.

Fixer: 100 calls, EUR only, no conversion endpoint

Fixer's free plan allows 100 API calls a month with hourly updates and history included. The base currency is locked to EUR, with no conversion endpoint until BASIC — /convert?from=USD&to=IDR will not work, you fetch and multiply yourself.

Where exchangerate.dev sits in this

exchangerate.dev's free tier gives 10,000 calls a month at 12 requests a minute, with no card required to sign up. Anonymous keyless calls work too, for quick evaluation, capped per IP. There is no base-currency restriction on any tier — any of the 465 pairs in the catalog can be the base. Daily history back to 1999 is included free on every tier, not gated behind a paid plan.

Major pairs update roughly every 60 seconds through the trading week; most other pairs do too, with ECB and FRED reference rates filling in the rest. Every response carries source, market_session, timestamp, data_updated_at, and a notice field, so your code can tell a live spot rate from a daily fix without guessing off the clock. A keyed MCP server ships on every plan including Free, at the same quota as the REST API.

curl · exchangerate.dev latest ratecopy
curl "https://api.exchangerate.dev/v1/latest/USD?symbols=EUR,GBP" \
  -H "Authorization: Bearer exr_live_..."

# {
#   "base": "USD",
#   "rates": { "EUR": 0.87531, "GBP": 0.7412 },
#   "source": "live",
#   "market_session": "open",
#   "timestamp": "2026-08-01T09:14:02Z",
#   "data_updated_at": "2026-08-01T09:13:58Z",
#   "notice": "Indicative rates for reference and analytics; not a dealing quote."
# }

What actually breaks in the migration

Moving off a keyless endpoint touches more than the URL. Add an Authorization header or apikey parameter, since every option above except Frankfurter and the open-access ExchangeRate-API endpoint requires one. Field names are not standardized either, so a script reading rates.EUR off one API can silently break if the new provider nests the data differently.

Rate limits deserve retry logic, not a shrug. A free tier measured in the low hundreds per month means a single retry loop with no backoff can burn a day's budget in minutes. Cache aggressively and treat the monthly count as a hard ceiling.

Picking one

Match the restriction that affects your code. A once-daily ECB rate with zero setup: Frankfurter. Willing to add attribution text: ExchangeRate-API's open endpoint. Need a base other than USD or EUR, or intraday movement: that is the gap the keyed options, including exchangerate.dev, fill.

Indicative rates only
Every provider here, including exchangerate.dev, publishes reference rates for display and analytics. None are a dealing quote, and none should settle a trade.
ER
exchangerate.dev
Notes for developers migrating between FX-rate APIs after a provider changes terms.

Keep reading

GuideComing from Frankfurter? Here is the mappingRead ComparisonHow to compare free exchange-rate APIs in 2026Read Compareexchangerate.host vs exchangerate.devRead DocsAPI referenceRead
More ComparisonsFixer vs exchangerate.devOpen Exchange Rates vs exchangerate.devCurrencylayer vs exchangerate.devCurrencylayer vs ExchangeRate-API
LearnReading source and market_session in your pipelineIndicative vs executable FX rates: what a rates API actually gives youECB reference rates, explained
Live RatesEUR/USDGBP/USDUSD/JPY