Currency Exchange Rate API
ECB FX rates with batch convert, timeseries & cache headers. Hourly refresh, 170+ currencies, and response-level freshness you can actually reason about.
The problem
Most FX APIs punish you for efficiency: per-request pricing makes batch conversions feel expensive, so you end up doing math client-side and hoping it matches production. Then you discover there’s no freshness metadata, so you can’t tell whether you’re serving new prices or stale cache. And “timeseries” often means a separate product, a separate bill, and a separate set of caveats.
Key features
Batch convert
Convert one amount into many quote currencies in a single request. Fewer calls, fewer edge cases, lower cost.
Timeseries
Pull historical rates for analysis, alerts, and audit logs. Use the same source and semantics as “latest”.
Cache transparency
Cache behavior is visible. Inspect X-Cache and X-Last-Updated, plus a body-level stale field for safety rails.
Any base currency
Work in whatever base your product needs. Cross-rate math lets you request a non-ECB base while keeping the provider honest and consistent.
Live code example
const url = "https://currency-exchange-rate-api.p.rapidapi.com/v1/convert/batch";
const params = new URLSearchParams({
base: "EUR",
amount: "1250.00",
quote: "USD,GBP,JPY,THB"
});
const res = await fetch(`${url}?${params}`, {
method: "GET",
headers: {
"X-RapidAPI-Key": "YOUR_RAPIDAPI_KEY",
"X-RapidAPI-Host": "currency-exchange-rate-api.p.rapidapi.com"
}
});
console.log("X-Cache:", res.headers.get("x-cache"));
console.log("X-Last-Updated:", res.headers.get("x-last-updated"));
const data = await res.json();
console.log(data);
{
"source": {
"provider": "ecb",
"dataset": "eurofxref",
"fetched_at": "2026-06-03T10:00:00Z"
},
"stale": false,
"base": "EUR",
"amount": 1250,
"quotes": {
"USD": { "rate": 1.0842, "value": 1355.25 },
"GBP": { "rate": 0.8514, "value": 1064.25 },
"JPY": { "rate": 169.12, "value": 211400.00 },
"THB": { "rate": 39.60, "value": 49500.00 }
}
}
Cache is measurable. Your logs can correlate response bodies with X-Cache and X-Last-Updated, while the stale field gives you a simple guardrail when you need deterministic pricing paths.
Comparison
| API | Batch endpoint | Timeseries | Cache headers | Source transparency | Free tier |
|---|---|---|---|---|---|
| Currency Exchange Rate API | Yes | Yes | Yes | ECB surfaced | Basic $0 |
| Generic FX API A | No | Yes | No | Opaque | Limited |
| Generic FX API B | No | Add-on | No | Varies | Trial |
| Generic FX API C | No | Yes | No | Unclear | No |
Pricing
Choose a plan on RapidAPI. Start free, then scale when your traffic does. Same endpoints, same semantics.