Exchange Rate API documentation
Rate-API is a fast, reliable exchange-rates API covering 160+ currencies, with
daily history back to 1999 for the ~30 currencies the ECB publishes. Use it for currency
conversion, historical rates, daily time series and fluctuation, currency pairs, cryptocurrency
prices, stock closes and precious metals - in JSON, XML or CSV.
Update frequency
We check our sources every hour. A rate changes when its publisher releases a new one: for most
currencies once per business day (the ECB publishes at about 16:00 CET), so rates hold overnight,
at weekends and on holidays.
Base URL
https://rate-api.com/api/v1
The /api/v1 and /api/v2 prefixes (and the legacy /api) all resolve to the same
implementation, so existing integrations keep working.
Data sources
Reference rates for the major currencies come from the European Central Bank, cited
as their source; the same data is available free of charge from the ECB at ecb.europa.eu.
Other currencies come from other central banks and governments, fixed official parities and
third-party market data. Every source we credit, and the licence its
data is used under, is listed on the Data sources page.
Rates are informational and provided without warranty of accuracy — see the
terms.
Authentication
Send your API key in any of these ways:
- URL path -
/api/v1/YOUR_API_KEY/latest
- Header -
Authorization: Bearer YOUR_API_KEY
- Header -
X-API-Key: YOUR_API_KEY
Create a key in your dashboard. The Free plan includes 2,500 requests/month - no card required.
Quick start
# Latest USD rates
curl "https://rate-api.com/api/v1/YOUR_API_KEY/latest?base=USD"
# Convert 100 USD to EUR
curl "https://rate-api.com/api/v1/YOUR_API_KEY/convert?from=USD&to=EUR&amount=100"
Response formats
Append ?format=json (default), ?format=xml or ?format=csv. XML returns an
application/xml document; CSV returns currency,rate rows for rate endpoints,
date,currency,rate rows for /timeseries, currency,start_rate,end_rate,change,change_pct
rows for /fluctuation, and key,value otherwise. Responses are gzip-compressed when the client accepts it.
Every response carries an X-Request-Id you can quote in support requests.
Rate limits
Per-minute limits scale with your plan (Free 10 · Pro 100 · Business/Enterprise 1000).
Every response carries X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset;
a 429 includes Retry-After. Track monthly usage at /usage and /quota.
Errors
Errors return a consistent envelope:
{ "success": false, "error": { "code": 400, "type": "invalid_base_currency", "message": "Invalid base currency" } }
SDKs
Official clients: PHP (Composer), JavaScript/TypeScript (npm), Python (PyPI), plus an MCP server for AI tools.
Endpoints
| Method | Path | Description |
| GET | /api/v1/health | Public health check - no API key required |
| GET | /api/v1/status | API status and version metadata |
| GET | /api/v1/latest | Latest exchange rates for a base currency (optionally filtered to symbols) |
| GET | /api/v1/currencies | List supported currencies with names, symbols and decimal places |
| GET | /api/v1/convert | Convert an amount from one currency to another (Pro+) |
| GET | /api/v1/pair/{from}/{to} | Latest rate for a currency pair (amount-multiplied result is Pro+) |
| GET | /api/v1/historical | Historical rates for a past date (Pro+) |
| GET | /api/v1/timeseries | Daily rates for a date range (Business+) |
| GET | /api/v1/fluctuation | How each currency moved over a date range (Business+) |
| GET | /api/v1/crypto | Cryptocurrency prices (Pro+). Served from crypto_rates; USD-based |
| GET | /api/v1/stocks | Stock closes (Pro+). Served from stock_prices; USD-based |
| GET | /api/v1/metals | Precious-metal prices per troy ounce (Pro+). Served from metal_prices; USD-based |
| GET | /api/v1/usage | This API key's current-month usage vs. its plan quota (all plans) |
| GET | /api/v1/quota | Lean quota view - same numbers as /usage, handy for client SDK guards |
| GET | /api/v1/{apiKey}/status | API status and version metadata |
| GET | /api/v1/{apiKey}/latest | Latest exchange rates for a base currency (optionally filtered to symbols) |
| GET | /api/v1/{apiKey}/currencies | List supported currencies with names, symbols and decimal places |
| GET | /api/v1/{apiKey}/convert | Convert an amount from one currency to another (Pro+) |
| GET | /api/v1/{apiKey}/pair/{from}/{to} | Latest rate for a currency pair (amount-multiplied result is Pro+) |
| GET | /api/v1/{apiKey}/historical | Historical rates for a past date (Pro+) |
| GET | /api/v1/{apiKey}/timeseries | Daily rates for a date range (Business+) |
| GET | /api/v1/{apiKey}/fluctuation | How each currency moved over a date range (Business+) |
| GET | /api/v1/{apiKey}/crypto | Cryptocurrency prices (Pro+). Served from crypto_rates; USD-based |
| GET | /api/v1/{apiKey}/stocks | Stock closes (Pro+). Served from stock_prices; USD-based |
| GET | /api/v1/{apiKey}/metals | Precious-metal prices per troy ounce (Pro+). Served from metal_prices; USD-based |
| GET | /api/v1/{apiKey}/usage | This API key's current-month usage vs. its plan quota (all plans) |
| GET | /api/v1/{apiKey}/quota | Lean quota view - same numbers as /usage, handy for client SDK guards |
| GET | /api/v1/{apiKey}/alerts | List the key owner's rate alerts (Business+) |
| POST | /api/v1/{apiKey}/alerts | Create a rate alert (Business+). Fires by email + optional webhook when the rate crosses the threshold |
| DELETE | /api/v1/{apiKey}/alerts/{id} | Delete one of the key owner's rate alerts (Business+) |
Machine-readable spec: OpenAPI document. Get a free API key at rate-api.com/register.