Real-Time Exchange Rates

Accurate, reliable currency data for 170+ currencies. Sub-second latency. Bank-grade sources updated every 60 seconds.

Real-Time Rates

Live mid-market rates from 15+ bank and ECB sources updated every 60 seconds for all major pairs.

🌍

170+ Currencies

Full coverage including fiat, crypto, precious metals, and exotic currencies with ISO 4217 codes.

📅

Historical Data

Complete historical rates dating back to 1999 for major currencies and 2010 for crypto.

🔄

Currency Conversion

Instant single-call conversion with optional rounding, decimal precision, and fee markup support.

📊

Time-Series Ranges

Fetch rate ranges between any two dates with day-by-day breakdowns for trend analysis.

🔒

Reliable & Secure

99.99% SLA, TLS everywhere, and bank-verified source attribution on every rate.

Simple, Transparent Pricing

Pay for what you use. Upgrade or downgrade anytime.

Free

$0/mo
1,000 requests / mo
  • Latest rates
  • 170+ currencies
  • Basic conversion
  • Community support

Growth

$59/mo
1,000,000 requests / mo
  • Everything in Starter
  • All 15+ data sources
  • Bulk conversion
  • Priority support

Business

$199/mo
10,000,000 requests / mo
  • Everything in Growth
  • Dedicated rate feed
  • SLA guarantee
  • Slack support

Enterprise

Custom
Unlimited requests
  • Everything in Business
  • Custom SLA
  • Private deployment
  • Dedicated engineer

Developer Dashboard

Create Account

Already have an account? Sign in

Introduction

The Exchange Rate API provides accurate mid-market currency rates sourced from 15+ central banks, commercial banks, and financial data providers. The API is REST-based, returns JSON, and supports HTTPS only.

Base URL for all requests:

Base URL
https://api.exchangerate-intel.com

All responses include a timestamp (Unix epoch) and source field indicating which data provider served the rate.

Authentication

All endpoints (except /v1/currencies) require an API key passed as a request header:

Header
X-API-Key: er_live_your_api_key_here

Keys are prefixed with er_live_ for production and er_test_ for sandbox. Never expose keys in client-side code.

Note: The /v1/currencies endpoint is public and does not require authentication.

Quickstart

Fetch the latest USD → EUR rate in under a minute:

cURL
curl -H "X-API-Key: er_live_YOUR_KEY" \
  https://api.exchangerate-intel.com/v1/latest?base=USD&symbols=EUR,GBP,JPY
Python
import requests

headers = {"X-API-Key": "er_live_YOUR_KEY"}
params = {"base": "USD", "symbols": "EUR,GBP,JPY"}
r = requests.get(
    "https://api.exchangerate-intel.com/v1/latest",
    headers=headers, params=params
)
data = r.json()
print(data["rates"])
JavaScript
const res = await fetch(
  "https://api.exchangerate-intel.com/v1/latest?base=USD&symbols=EUR,GBP,JPY",
  { headers: { "X-API-Key": "er_live_YOUR_KEY" } }
);
const data = await res.json();
console.log(data.rates);
Go
req, _ := http.NewRequest("GET",
  "https://api.exchangerate-intel.com/v1/latest?base=USD&symbols=EUR,GBP,JPY", nil)
req.Header.Set("X-API-Key", "er_live_YOUR_KEY")
resp, _ := http.DefaultClient.Do(req)

Supported Sources

Exchange Rate API aggregates data from multiple authoritative sources to provide the most accurate mid-market rates. The source field in each response tells you which provider served that particular rate.

Source IDProviderUpdate Frequency
ecbEuropean Central BankDaily (16:00 CET)
fedUS Federal ReserveDaily (17:00 EST)
boeBank of EnglandDaily (16:30 GMT)
imfInternational Monetary FundDaily
xeXE Mid-MarketEvery 60 seconds
reutersReuters FXEvery 60 seconds
bloombergBloomberg FXEvery 60 seconds
coinbaseCoinbase ProEvery 10 seconds (crypto)
Tip: Use ?source=ecb to pin requests to a specific provider. Omitting the parameter uses the highest-quality available source.

Rate Limits

Rate limits are enforced per API key based on your plan:

PlanMonthly QuotaRequests / Second
Free1,0001
Starter100,00010
Growth1,000,00050
Business10,000,000200
EnterpriseUnlimitedCustom

When you exceed the rate limit, the API returns 429 Too Many Requests. Check the X-RateLimit-Remaining and X-RateLimit-Reset headers to track usage.

Error Codes

HTTP CodeErrorDescription
400invalid_paramsMissing or invalid query parameters
401unauthorizedMissing or invalid API key
403forbiddenFeature not available on current plan
404not_foundCurrency code or date not found
422unsupported_currencyCurrency code not supported
429rate_limit_exceededMonthly quota or per-second limit hit
500server_errorInternal server error — retry with backoff
Error Response
{
  "error": "unsupported_currency",
  "message": "Currency code 'XYZ' is not supported",
  "status": 422
}

API Playground

Test live requests directly from the browser. Your API key is sent securely.

Interactive Request Builder

URL:
https://api.exchangerate-intel.com/v1/latest
// Response will appear here

GET/v1/latest

Returns the latest mid-market exchange rates for all or selected currencies relative to a base currency.

Query Parameters

ParameterTypeDescription
baseoptionalstringBase currency ISO 4217 code. Default: USD
symbolsoptionalstringComma-separated list of target currencies. Omit for all 170+
sourceoptionalstringPreferred data source (e.g. ecb, xe)

Response

200 OK
{
  "base": "USD",
  "timestamp": 1711267200,
  "source": "xe",
  "rates": {
    "EUR": 0.921834,
    "GBP": 0.787261,
    "JPY": 151.423,
    "CAD": 1.35612,
    "AUD": 1.52038,
    "CHF": 0.89741,
    "CNY": 7.22890
  }
}
cURL
curl -H "X-API-Key: er_live_YOUR_KEY" \
  "https://api.exchangerate-intel.com/v1/latest?base=USD&symbols=EUR,GBP,JPY"
Python
r = requests.get(
    "https://api.exchangerate-intel.com/v1/latest",
    headers={"X-API-Key": "er_live_YOUR_KEY"},
    params={"base": "USD", "symbols": "EUR,GBP,JPY"}
)
JavaScript
const res = await fetch(
  "https://api.exchangerate-intel.com/v1/latest?base=USD&symbols=EUR,GBP,JPY",
  { headers: { "X-API-Key": "er_live_YOUR_KEY" } }
);

GET/v1/historical

Returns exchange rates for a specific historical date. Supported back to 1999-01-01 for major fiat pairs.

Query Parameters

ParameterTypeDescription
daterequiredstringDate in YYYY-MM-DD format
baseoptionalstringBase currency code. Default: USD
symbolsoptionalstringComma-separated target currencies

Response

200 OK
{
  "base": "USD",
  "date": "2020-01-15",
  "source": "ecb",
  "historical": true,
  "rates": {
    "EUR": 0.89720,
    "GBP": 0.76381,
    "JPY": 109.872
  }
}
cURL
curl -H "X-API-Key: er_live_YOUR_KEY" \
  "https://api.exchangerate-intel.com/v1/historical?date=2020-01-15&base=USD&symbols=EUR,GBP,JPY"
Python
r = requests.get(
    "https://api.exchangerate-intel.com/v1/historical",
    headers={"X-API-Key": "er_live_YOUR_KEY"},
    params={"date": "2020-01-15", "base": "USD"}
)

GET/v1/range

Returns day-by-day exchange rates between two dates. Ideal for chart rendering, trend analysis, and reporting.

Query Parameters

ParameterTypeDescription
startrequiredstringStart date YYYY-MM-DD
endrequiredstringEnd date YYYY-MM-DD
baseoptionalstringBase currency. Default: USD
symbolsoptionalstringTarget currencies to include

Response

200 OK
{
  "base": "USD",
  "start": "2024-01-01",
  "end": "2024-01-03",
  "rates": {
    "2024-01-01": { "EUR": 0.91920, "GBP": 0.78801 },
    "2024-01-02": { "EUR": 0.92031, "GBP": 0.78912 },
    "2024-01-03": { "EUR": 0.91885, "GBP": 0.78734 }
  }
}
cURL
curl -H "X-API-Key: er_live_YOUR_KEY" \
  "https://api.exchangerate-intel.com/v1/range?start=2024-01-01&end=2024-01-03&base=USD&symbols=EUR,GBP"

GET/v1/convert

Converts an amount from one currency to another using the latest or a historical rate.

Query Parameters

ParameterTypeDescription
fromrequiredstringSource currency ISO code (e.g. USD)
torequiredstringTarget currency ISO code (e.g. EUR)
amountrequirednumberAmount to convert
dateoptionalstringUse historical rate for this date (YYYY-MM-DD)
precisionoptionalintegerDecimal places in result (2–8). Default: 6

Response

200 OK
{
  "from": "USD",
  "to": "EUR",
  "amount": 1000,
  "rate": 0.921834,
  "result": 921.834,
  "timestamp": 1711267200,
  "source": "xe",
  "historical": false
}
cURL
curl -H "X-API-Key: er_live_YOUR_KEY" \
  "https://api.exchangerate-intel.com/v1/convert?from=USD&to=EUR&amount=1000"
Python
r = requests.get(
    "https://api.exchangerate-intel.com/v1/convert",
    headers={"X-API-Key": "er_live_YOUR_KEY"},
    params={"from": "USD", "to": "EUR", "amount": 1000}
)
JavaScript
const res = await fetch(
  "https://api.exchangerate-intel.com/v1/convert?from=USD&to=EUR&amount=1000",
  { headers: { "X-API-Key": "er_live_YOUR_KEY" } }
);

GET/v1/currencies

Returns the full list of all 170+ supported currencies with their ISO codes, names, and symbols. This endpoint is public — no API key required.

Response

200 OK
{
  "currencies": {
    "USD": {
      "name": "United States Dollar",
      "symbol": "$",
      "type": "fiat"
    },
    "EUR": {
      "name": "Euro",
      "symbol": "€",
      "type": "fiat"
    },
    "BTC": {
      "name": "Bitcoin",
      "symbol": "₿",
      "type": "crypto"
    },
    "XAU": {
      "name": "Gold (troy ounce)",
      "symbol": "Au",
      "type": "metal"
    }
  },
  "count": 172
}
cURL (no key needed)
curl https://api.exchangerate-intel.com/v1/currencies

GET/v1/sources

Returns metadata for all available data sources including their current status, last update time, and supported currencies.

Response

200 OK
{
  "sources": [
    {
      "id": "xe",
      "name": "XE Mid-Market",
      "status": "active",
      "last_updated": 1711267140,
      "update_frequency_seconds": 60,
      "currency_count": 172
    },
    {
      "id": "ecb",
      "name": "European Central Bank",
      "status": "active",
      "last_updated": 1711224000,
      "update_frequency_seconds": 86400,
      "currency_count": 33
    }
  ]
}
cURL
curl -H "X-API-Key: er_live_YOUR_KEY" \
  https://api.exchangerate-intel.com/v1/sources

POST/v1/auth/register

Creates a new developer account and issues a free-tier API key.

Request Body

FieldTypeDescription
emailrequiredstringDeveloper email address
passwordrequiredstringMinimum 8 characters

Response

201 Created
{
  "api_key": "er_live_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6",
  "plan": "free",
  "quota": 1000,
  "email": "you@example.com"
}
cURL
curl -X POST \
  -H "Content-Type: application/json" \
  -d '{"email":"you@example.com","password":"yourpassword"}' \
  https://api.exchangerate-intel.com/v1/auth/register

POST/v1/auth/subscribe

Initiates a Stripe checkout session to upgrade your plan. On success, redirect the user to the returned checkout_url.

Request Headers

HeaderDescription
X-API-KeyYour current API key (required)

Request Body

FieldTypeDescription
planrequiredstringOne of: starter, growth, business
success_urloptionalstringRedirect URL after successful payment
cancel_urloptionalstringRedirect URL if user cancels

Response

200 OK
{
  "checkout_url": "https://checkout.stripe.com/pay/cs_live_...",
  "session_id": "cs_live_a1b2c3d4e5f6"
}
cURL
curl -X POST \
  -H "X-API-Key: er_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"plan":"starter"}' \
  https://api.exchangerate-intel.com/v1/auth/subscribe