Currency Exchange Rate API
ECB FX rates · batch + timeseries + cache headers

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.

/convert/batch USD,GBP,JPY,THB

Timeseries

Pull historical rates for analysis, alerts, and audit logs. Use the same source and semantics as “latest”.

/timeseries start=…&end=…

Cache transparency

Cache behavior is visible. Inspect X-Cache and X-Last-Updated, plus a body-level stale field for safety rails.

X-Cache: HIT/MISS stale: false

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.

base=THB cross-rate

Live code example

Batch convert fetch → JSON (includes source + stale)
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);
Response shape source + stale included
{
  "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.

Basic
$0
Prototype, side projects, and CI smoke tests.
Latest + batch convert
Hourly refresh
Community support
Pro
$9
Production apps that care about request efficiency and traceability.
Batch + timeseries
Cache headers + stale field
Priority support
Ultra
$29
High-volume workloads and teams that want predictable scale.
Higher rate limits
Best-effort low latency
Escalated support