1. Request two rates
This asks for the euro and British pound against the US dollar. Change the base in the path or the comma-separated symbols list to get different currencies.
curl -fsS --max-time 10 "https://api.exchangerate.dev/v1/latest/USD?symbols=EUR,GBP"from urllib.request import Request, urlopenimport json# Identify your application explicitly when calling the API.request = Request("https://api.exchangerate.dev/v1/latest/USD?symbols=EUR,GBP", headers={"User-Agent": "exchangerate-docs/1.0"})with urlopen(request, timeout=10) as response: data = json.load(response)print(data["rates"]["EUR"])const response = await fetch("https://api.exchangerate.dev/v1/latest/USD?symbols=EUR,GBP", { signal: AbortSignal.timeout(10_000),});if (!response.ok) throw new Error(`HTTP ${response.status}`);const data = await response.json();console.log(data.rates.EUR);Integration guides: Python · JavaScript / Node.js · Google Sheets · Excel · Go · Swift · Zapier
2. Read the response
The response uses this JSON shape. The rates below are an example, so your numbers and timestamps will be different.
{ "result": "success", "base": "USD", "source": "live", "sources": { "EUR": "live", "GBP": "live" }, "market_session": "open", "timestamp": "2026-06-15T12:00:00Z", "data_updated_at": "2026-06-15T12:00:00Z", "effective_at": { "EUR": "2026-06-15T12:00:00Z", "GBP": "2026-06-15T12:00:00Z" }, "rates": { "EUR": 0.86207, "GBP": 0.74627 }, "stale": { "EUR": false, "GBP": false }, "derived_symbols": [], "notice": "Indicative rates, not for settlement."}Use rates.EUR and rates.GBP in your code. If you show freshness to users, keep source, market_session, and effective_at for each displayed currency.
3. Add a key when you need account quota
Anonymous requests are for evaluation and are limited by IP. A free account gives you an account-attributed monthly quota. Keep the key on your server, not in public browser JavaScript.
curl "https://api.exchangerate.dev/v1/latest/USD?symbols=EUR,GBP" -H "Authorization: Bearer YOUR_KEY"Get a free key, then replace YOUR_KEY. The X-API-Key header also works when a connector cannot set an Authorization header.
Where to go next
- Convert an amount with a GET or batch POST request.
- Pull historical data for one day or a date range.
- Understand source and freshness before putting a rate in production.