Exchange rate API
for developers
Choose your base currency and fetch current, historical, and streaming FX rates in JSON.
Try out our live rate data
The pairs people check most, with today’s move and the week’s trend.
Explore every currency pair
Sort 10,296 pairs by rate, daily change or weekly change.
Browse exchange rates
Rates in one request
Each rate arrives with its source, observation time, and market session.
curl "https://api.exchangerate.dev/v1/latest/USD?symbols=EUR,GBP" \ -H "Authorization: Bearer $API_KEY"const res = await fetch('https://api.exchangerate.dev/v1/latest/USD?symbols=EUR,GBP', { headers: { Authorization: `Bearer ${process.env.API_KEY}` },})const { rates } = await res.json()console.log(rates)import os, requestsres = requests.get( 'https://api.exchangerate.dev/v1/latest/USD?symbols=EUR,GBP', headers={'Authorization': f"Bearer {os.environ['API_KEY']}"},)print(res.json()['rates'])package mainimport ( "fmt" "io" "net/http" "os")func main() { req, _ := http.NewRequest("GET", "https://api.exchangerate.dev/v1/latest/USD?symbols=EUR,GBP", nil) req.Header.Set("Authorization", "Bearer "+os.Getenv("API_KEY")) res, err := http.DefaultClient.Do(req) if err != nil { panic(err) } defer res.Body.Close() body, _ := io.ReadAll(res.Body) fmt.Println(string(body))}1.12425+0.33%7d
Rate from /v1/latest, trend from /v1/timeseries
{
"base": "USD",
"rates": {
"EUR": 0.88948,
"GBP": 0.75068
},
"sources": {
"EUR": "live",
"GBP": "live"
},
"effective_at": {
"EUR": "2026-10-16T08:51:59Z",
"GBP": "2026-10-16T08:51:59Z"
},
"market_session": "open",
"notice": "Indicative rates, not for settlement."
}Follow EUR/USD over time
Switch time ranges and chart styles, then open the full history.
Open the EUR/USD chart
Make your first request
Start on Free
5,000 requests a month at 10 a minute, with no credit card.
Request a rate
Send GET /v1/latest/USD?symbols=EUR,GBP with your key in the Authorization header.
Read the response
Check rates, sources, effective_at and market_session for each currency.
Frequently asked questions
Is there a free live FX rates API?
Yes. Free live rates arrive 15 minutes late; paid plans are live. A free account includes 5,000 requests per month at 10 requests per minute, with no credit card. Display needs visible linked credit near rates.
What currencies does exchangerate.dev cover?
The API covers 10,296 unique pairs across 144 currencies. Direct and calculated cross rates share the same response format.
How often do rates update?
All 144 currencies have live coverage. ECB fixes give daily fallback for about 30 currencies. Read source, effective_at, and market_session for each response.
What does indicative mean?
These rates are for reference, not for settlement, regulated trading, or use as a source of record.
Can I use the API commercially?
Commercial display on your own website or app: Free requires visible linked credit near rates. Paid plans need no credit. No redistribution.
How much historical data is available?
History depends on the currency pair and interval. Daily reference series and intraday observations have different coverage.
Start with a free API key
5,000 requests a month on the free plan. No credit card.
