Currencylayer has been the default "cheap exchange rate API" recommendation since 2015. It still works. But the gap between what it offers and what a modern application needs has widened — especially around update frequency, HTTPS, base currency flexibility, and historical data.
This article compares Exchange Rate API and Currencylayer on the criteria developers actually evaluate before integrating an FX API: data freshness, free-tier limits, security posture, latency, and migration cost.
TL;DR — Quick Comparison Table
| Feature | Exchange Rate API | Currencylayer |
|---|---|---|
| Update frequency (free tier) | Real-time (60s) | Hourly |
| Data source | Reuters/Refinitiv + interbank | Apilayer aggregated feeds |
| HTTPS on free tier | Yes | No (paid only) |
| Base currency on free tier | Any | USD only |
| Historical rates on free tier | Included | Paid only |
| Currencies covered | 160+ fiat + metals | 168+ fiat + metals |
| CORS support | Yes | Not advertised |
| Authentication | Bearer token (header) | access_key (query string) |
| Free tier | Free forever | Free with constraints |
Update Frequency: Real-Time vs Hourly
Currencylayer's free and Basic plans refresh rates once per hour. Real-time updates start at the Professional plan, which is a paid subscription.
Exchange Rate API refreshes every 60 seconds on every plan, sourced from Reuters/Refinitiv and interbank feeds. For checkouts, payment splits, trading dashboards, or anything that converts money in real time, hourly snapshots are too coarse — in volatile sessions a major pair can move 0.5–1% inside a single hour, which lands directly in your margin.
HTTPS: Why Currencylayer's Free Tier Breaks the Browser
Currencylayer serves rates over HTTP only on the free plan; HTTPS is reserved for paid tiers. If your app is on HTTPS (which it must be in 2026), the browser blocks the request as mixed content. You either upgrade or proxy the call through your backend.
Exchange Rate API is HTTPS-only on every plan. There's no mixed-content gotcha and no proxy required.
Base Currency: USD-Only Forces Cross-Rate Math
Currencylayer's free tier locks the base currency to USD. To get GBP-based rates, you fetch USD rates and divide — that arithmetic is straightforward but introduces rounding when chained.
Exchange Rate API accepts any base currency on any plan. Pass ?source=GBP and the API returns rates already keyed to GBP.
# Exchange Rate API — any base, no math
curl "https://api.exchange-rateapi.com/v1/rates?source=GBP" \
-H "Authorization: Bearer era_live_your_api_key"
Historical Rates: Free vs Behind a Paywall
Historical rates — the ability to query a specific date in the past — are needed for accounting, invoice reconciliation, P&L conversion, and any analytics that touches past periods. Currencylayer charges for them; the free tier returns latest only.
Exchange Rate API includes historical rates on the free tier:
curl "https://api.exchange-rateapi.com/historical-rates?source=USD&from=2024-12-31&to=2024-12-31" \
-H "Authorization: Bearer era_live_your_api_key"
Currency Coverage
Currencylayer covers 168 fiat currencies plus 4 precious metals. Exchange Rate API covers 160+ fiat plus precious metals. For everyday use cases (USD/EUR/GBP/JPY/major emerging-market pairs), both are equivalent. The 8-currency gap matters only for exotic pairs.
Authentication and DX
Currencylayer authenticates via an access_key query parameter:
http://api.currencylayer.com/live?access_key=YOUR_KEY¤cies=EUR,GBP&source=USD
Putting the API key in the URL means it appears in browser history, server logs, and CDN access logs. Exchange Rate API uses a standard Authorization: Bearer header:
curl https://api.exchange-rateapi.com/v1/rates?target=EUR,GBP \
-H "Authorization: Bearer era_live_your_api_key"
Migrating from Currencylayer to Exchange Rate API
The two APIs have similar endpoint shapes. A migration usually takes under an hour:
- Replace
api.currencylayer.comwithapi.exchange-rateapi.com/v1. - Move the
access_keyfrom query string toAuthorization: Bearerheader. - Rename
source→source, and usetargetinstead ofcurrenciesfor the target list. - Replace the
quotesobject (e.g.USDEUR) with the flatratesobject (EUR,GBP, etc.).
When Currencylayer Still Wins
Currencylayer is the right choice if:
- You're already on a paid Apilayer subscription and consolidated billing matters.
- You only need USD-base rates and hourly updates are sufficient (display-only widgets, end-of-day reporting).
- You need exotic-pair coverage that's outside Exchange Rate API's 160 currencies.
The Bottom Line
For developers in 2026, Exchange Rate API is the better default:
- Real-time (60s) updates on the free tier.
- Historical rates included — not paywalled.
- Any base currency, HTTPS and CORS by default.
- Header-based authentication (no keys in URLs).
Currencylayer remains viable inside the Apilayer ecosystem; outside of it the limitations stack up.
FAQ
Is Currencylayer still a good choice in 2026?
Reliable, but constrained: hourly updates on the free tier, USD-base lock on lower plans, HTTPS paywalled, historical rates paywalled.
Why pick Exchange Rate API over Currencylayer?
Real-time updates, historical data on the free tier, any base currency, HTTPS and CORS by default, and Reuters/Refinitiv data sourcing.
Does Currencylayer support real-time exchange rates?
Real-time requires Professional or Enterprise. Free and Basic refresh hourly.
Can I use Currencylayer from the browser?
HTTPS is paid-only on the free tier and CORS is not advertised — browser calls fail mixed-content checks. Exchange Rate API supports both.
How do I migrate from Currencylayer to Exchange Rate API?
Replace the host, move the API key from query string to Authorization: Bearer header, and read from the flat rates object instead of quotes.
Switch in Under an Hour
Real-time rates, free historical data, any base currency, HTTPS and CORS out of the box.
Get Your Free API Key →