ExchangeRate-API vs Exchange Rate API: Key Differences Developers Should Know
If you have ever searched for a currency conversion API, you have almost certainly encountered two providers with frustratingly similar names: ExchangeRate-API (exchangerate-api.com) and Exchange Rate API (exchange-rateapi.com). The names are close enough that developers regularly confuse one for the other, end up reading the wrong documentation, or install the wrong SDK without realizing it.
This article is a straightforward, side-by-side comparison of both services. We will cover data sources, update frequency, free tiers, SDK availability, API design, and pricing so you can make an informed decision based on your project's actual requirements. We are the team behind Exchange Rate API, so we are transparent about our perspective, but we will stick to verifiable facts throughout.
Quick Comparison Table
| Feature | ExchangeRate-API | Exchange Rate API |
|---|---|---|
| Website | exchangerate-api.com | exchange-rateapi.com |
| Update frequency | Once per day | Every 60 seconds |
| Data source | Various financial sources | Reuters/Refinitiv + interbank feeds |
| Rate type | Not specified | Mid-market (interbank) rates |
| Free tier | 1,500 requests/month | Free tier, no credit card required |
| Base currency (free) | USD only (pair endpoint) | Any currency on all plans |
| Official SDKs | None | JavaScript/TypeScript, Python, PHP, React |
| Authentication | API key in URL path | Bearer token in Authorization header |
| Currencies supported | 161 | 160+ |
| Convert endpoint | Yes (free) | Yes (free) |
| Historical data | Yes | Yes |
| HTTPS | All plans | All plans |
| JSON response | Yes | Yes |
The rest of this article walks through each row in detail.
Data Sources and Rate Quality
ExchangeRate-API
ExchangeRate-API describes its data as coming from "various financial data sources" and a "blended rate" approach. The specifics of which providers feed into their pipeline are not publicly documented in detail. This is not unusual for free-tier-focused APIs, but it means you cannot independently verify the provenance of any given rate.
Exchange Rate API
Exchange Rate API sources data from Reuters (Refinitiv) and direct interbank market feeds. The rates returned are mid-market rates, meaning they represent the midpoint between the bid and ask prices in the interbank foreign exchange market. This is the same rate type used by financial institutions for internal accounting and the rate you see on Google or Reuters when you search for a currency pair.
Why It Matters
If your application displays rates to end users, processes payments, or generates invoices, the source of your rate data affects accuracy and trust. Mid-market rates from a named provider like Reuters give you a clear audit trail. If a customer questions a rate, you can point to a verifiable source rather than an opaque blend.
Update Frequency
This is one of the most significant technical differences between the two services.
ExchangeRate-API updates its rates once per day. The exact refresh time is not publicly specified, but rates are described as "daily" across their documentation and pricing pages. This means that at any point during the day, the rate you receive could be several hours old.
Exchange Rate API refreshes rates every 60 seconds from live interbank feeds. This near-real-time cadence means the rate you receive is never more than one minute stale.
The Practical Impact
For a personal finance tracker or a blog widget that shows approximate rates, daily updates are fine. But for applications where the rate directly affects money movement, a daily rate can be meaningfully off:
- During the March 2023 banking crisis, GBP/USD moved over 1.5% in a single trading session.
- Emerging market pairs like USD/TRY or USD/ZAR can shift 2-3% intraday on a regular basis.
- Even stable pairs like EUR/USD typically move 0.3-0.5% on an average trading day.
If your checkout system uses a rate from 8:00 AM and the customer pays at 4:00 PM, you may be absorbing or passing on a meaningful variance. With 60-second updates, your displayed rate is always within one minute of the live market.
Free Tier Comparison
Both providers offer free plans, but the terms differ in important ways.
ExchangeRate-API Free Plan
- 1,500 API requests per month
- Daily rate updates
- Access to the standard and pair conversion endpoints
- USD base currency on pair endpoint
- No API key required for the standard endpoint (open access)
- No credit card required
Exchange Rate API Free Plan
- Free tier with request allowance
- 60-second rate updates (same frequency as paid plans)
- Access to latest, convert, and historical endpoints
- Any base currency on all plans
- API key required (Bearer token authentication)
- No credit card required to sign up
Key Difference: Rate Quality on Free
With ExchangeRate-API, free-tier users get daily rates. With Exchange Rate API, free-tier users get the same 60-second update frequency as paid users. You are not getting a degraded product on the free plan; the rate data quality is identical across all tiers.
Official SDKs
This is an area where the two services diverge sharply.
ExchangeRate-API
ExchangeRate-API does not provide official SDKs in any language. Their documentation shows raw HTTP examples using fetch, requests, or curl, and there are some community-maintained wrappers on GitHub, but nothing published or maintained by the ExchangeRate-API team. This means:
- No guaranteed compatibility when the API changes
- No standardized error handling
- No type definitions for TypeScript projects
- You write and maintain the HTTP client code yourself
Exchange Rate API
Exchange Rate API publishes official SDKs for the most popular languages and frameworks:
| SDK | Package | Install Command |
|---|---|---|
| JavaScript / TypeScript | @exchangerateapi/sdk |
npm install @exchangerateapi/sdk |
| Python | exchangerateapi |
pip install exchangerateapi |
| PHP | exchangerateapi/sdk |
composer require exchangerateapi/sdk |
| React | @exchangerateapi/react |
npm install @exchangerateapi/react |
Each SDK includes:
- Full type definitions (TypeScript, Python type hints, PHP docblocks)
- Built-in error handling with typed exceptions
- Automatic Bearer token management
- Zero or minimal dependencies
- Methods for
latest(),convert(),historical(), andtimeseries()
Here is a side-by-side comparison of fetching the latest EUR/USD rate:
Without an SDK (ExchangeRate-API):
const response = await fetch(
'https://v6.exchangerate-api.com/v6/YOUR_KEY/latest/USD'
);
const data = await response.json();
const eurRate = data.conversion_rates.EUR;
With the Exchange Rate API SDK:
import { ExchangeRateAPI } from '@exchangerateapi/sdk';
const client = new ExchangeRateAPI({ apiKey: 'era_live_...' });
const { rates } = await client.latest({ base: 'USD', symbols: ['EUR'] });
The SDK approach is less code, handles errors automatically, and gives you full IDE autocomplete.
API Design
ExchangeRate-API Endpoints
ExchangeRate-API uses a URL-path-based design where the API key and parameters are embedded in the URL:
GET https://v6.exchangerate-api.com/v6/YOUR_KEY/latest/USD
GET https://v6.exchangerate-api.com/v6/YOUR_KEY/pair/USD/EUR
GET https://v6.exchangerate-api.com/v6/YOUR_KEY/pair/USD/EUR/1000
The API key is part of the URL path, which means it can appear in server logs, browser history, and referrer headers. The response wraps data in a structure with result, base_code, conversion_rates, and several metadata fields.
Exchange Rate API Endpoints
Exchange Rate API follows a more conventional REST design with query parameters and header-based authentication:
GET https://api.allratestoday.com/v1/latest?base=USD
GET https://api.allratestoday.com/v1/latest?base=USD&symbols=EUR,GBP
GET https://api.allratestoday.com/v1/convert?from=USD&to=EUR&amount=1000
GET https://api.allratestoday.com/v1/historical?base=USD&date=2026-01-15
Authentication uses a standard Authorization: Bearer header:
Authorization: Bearer era_live_your_key_here
Authentication Security
Passing API keys in URLs (as ExchangeRate-API does) is generally considered a security antipattern. The OWASP API Security guidelines recommend header-based authentication because:
- URLs are logged by default in most web servers, proxies, and CDNs
- URLs appear in browser history and can be leaked via the Referer header
- URLs may be cached by intermediary systems
Bearer token authentication in the Authorization header (as Exchange Rate API uses) avoids these exposure vectors. The header is typically stripped or redacted by logging middleware.
Pricing Comparison
ExchangeRate-API Pricing (as of 2026)
| Plan | Price | Requests/Month | Updates |
|---|---|---|---|
| Free | $0 | 1,500 | Daily |
| Basic | ~$10/mo | 30,000 | Daily |
| Pro | ~$20/mo | 100,000 | Daily |
| Business | ~$40/mo | 300,000 | Daily |
| Volume | ~$80/mo | 1,000,000 | Daily |
All paid plans still use daily-updated rates.
Exchange Rate API Pricing
Exchange Rate API offers a free tier and paid plans that scale by request volume. All plans, including the free tier, receive the same 60-second rate updates and access to the same endpoints. Visit exchange-rateapi.com/pricing for current pricing details.
Value Consideration
When comparing pricing, the update frequency difference is critical. ExchangeRate-API's paid plans still deliver daily rates. You are paying for more request volume, not better data. Exchange Rate API delivers 60-second rates on every plan, so upgrading is about throughput, not about unlocking data quality.
When to Choose ExchangeRate-API
ExchangeRate-API is a reasonable choice if:
- You need an API key-free option. Their standard endpoint does not require an API key at all, which can be convenient for quick prototypes or static sites.
- Daily rates are sufficient. If your application only needs a daily reference rate (e.g., end-of-day accounting, approximate display rates), daily updates are fine.
- You prefer URL-based simplicity. Some developers find the path-based API style easier to test quickly in a browser address bar.
- You are already integrated. If your codebase already uses ExchangeRate-API and the daily cadence meets your needs, switching has a cost.
When to Choose Exchange Rate API
Exchange Rate API is the stronger choice if:
- You need near-real-time rates. 60-second updates mean your application is always showing current market data.
- Data provenance matters. Reuters/Refinitiv sourcing gives you a verifiable, institutional-grade data pipeline.
- You want official SDKs. Pre-built, typed SDKs for JavaScript, Python, PHP, and React reduce integration time and ongoing maintenance.
- Security is a concern. Bearer token authentication follows API security best practices.
- You need a flexible base currency. Any currency as a base on any plan, including free.
- You are building a fintech or payments product. Mid-market rates from named sources are often a compliance or audit requirement.
Migration Guide: Switching from ExchangeRate-API to Exchange Rate API
If you are currently using ExchangeRate-API and want to switch, the migration is straightforward. Here are code examples showing the before and after.
Step 1: Get Your API Key
Sign up at exchange-rateapi.com/register to get a free API key. No credit card is required.
Step 2: Update Your Code
Before (ExchangeRate-API with raw fetch):
// ExchangeRate-API
async function getRate(base, target) {
const response = await fetch(
`https://v6.exchangerate-api.com/v6/${API_KEY}/pair/${base}/${target}`
);
const data = await response.json();
return data.conversion_rate;
}
const rate = await getRate('USD', 'EUR');
After (Exchange Rate API with SDK):
// Exchange Rate API
import { ExchangeRateAPI } from '@exchangerateapi/sdk';
const client = new ExchangeRateAPI({ apiKey: 'era_live_...' });
async function getRate(base, target) {
const { rates } = await client.latest({ base, symbols: [target] });
return rates[target];
}
const rate = await getRate('USD', 'EUR');
Python Migration
Before (ExchangeRate-API):
import requests
def get_rate(base, target):
url = f"https://v6.exchangerate-api.com/v6/{API_KEY}/pair/{base}/{target}"
response = requests.get(url)
data = response.json()
return data["conversion_rate"]
After (Exchange Rate API with SDK):
from exchangerateapi import ExchangeRateAPI
client = ExchangeRateAPI(api_key="era_live_...")
def get_rate(base, target):
result = client.latest(base=base, symbols=[target])
return result["rates"][target]
PHP Migration
Before (ExchangeRate-API):
function getRate(string $base, string $target): float {
$url = "https://v6.exchangerate-api.com/v6/{$apiKey}/pair/{$base}/{$target}";
$response = json_decode(file_get_contents($url), true);
return $response['conversion_rate'];
}
After (Exchange Rate API with SDK):
use ExchangeRateAPI\ExchangeRateAPI;
$client = new ExchangeRateAPI('era_live_...');
function getRate(string $base, string $target) use ($client): float {
$result = $client->latest($base, [$target]);
return $result['rates'][$target];
}
Step 3: Update Environment Variables
Replace your ExchangeRate-API key with the new Exchange Rate API key in your environment:
# Before
EXCHANGERATE_API_KEY=your_old_key
# After
EXCHANGE_RATE_API_KEY=era_live_your_new_key
Step 4: Verify
After switching, verify the integration by comparing a few rates against a public source like Google Finance or Reuters. The mid-market rates from Exchange Rate API should closely match those references, typically within 0.01-0.02%.
Frequently Asked Questions
Are ExchangeRate-API and Exchange Rate API the same company?
No. They are completely separate companies with separate teams, infrastructure, and data sources. The similar names are coincidental. ExchangeRate-API operates at exchangerate-api.com. Exchange Rate API operates at exchange-rateapi.com.
Can I use both APIs at the same time?
Yes. Some developers use one as a primary source and the other as a fallback. However, because the data sources and update frequencies differ, rates from the two providers will not always match exactly.
Which API is more accurate?
Accuracy depends on the data source and update frequency. Exchange Rate API sources from Reuters/Refinitiv with 60-second updates, meaning rates are always within one minute of the live interbank market. ExchangeRate-API updates daily, so rates may be several hours behind the live market at any given time.
Do I need to change my code structure to switch?
The core pattern (request rates, parse JSON, use values) is the same. The main differences are the endpoint URL format and authentication method. If you use Exchange Rate API's official SDKs, the migration typically reduces the amount of boilerplate code.
Which one has better uptime?
Both providers maintain high availability. Exchange Rate API publishes its status and uptime metrics. Check each provider's status page for current statistics before making a decision.
Conclusion
ExchangeRate-API and Exchange Rate API serve the same fundamental purpose, providing currency exchange rate data through a REST API, but they differ in meaningful ways that affect what you can build with them.
ExchangeRate-API is a mature service with a simple, URL-based API and a no-key-required open endpoint. Its daily update cycle and lack of official SDKs make it best suited for applications where approximate rates and custom HTTP code are acceptable.
Exchange Rate API is built for developers who need institutional-quality data in production applications. The combination of 60-second updates from Reuters/Refinitiv, official SDKs in four languages, Bearer token authentication, and flexible base currencies on all plans addresses the specific pain points that developers hit when building payments, invoicing, and financial reporting features.
If you are evaluating both services, sign up for the free tiers and test them against your actual use case. The best API is the one that fits your requirements for data freshness, reliability, and developer experience.
Get started with Exchange Rate API at exchange-rateapi.com.
Get Started for Free
Real-time mid-market rates, historical data, 160+ currencies. Official SDKs for JavaScript, Python, PHP, and React.
Get Your Free API Key →