API documentation
A field guide to current rates, conversions, keys, and request limits.
Authentication
Metered endpoints require an API key in the Authorization: Bearer <key> header. Get or create a key in API keys. The key is returned only once when created; keep it private and send requests over HTTPS in production.
Authorization header
HTTPSAuthorization: Bearer YOUR_API_KEYQuotas and limits
The monthly quota applies per user across all keys, per UTC calendar month. Each plan sets its own quota and per-second limit; see Plans and limits. Accepted responses include X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset. Quota and rate rejections return Retry-After.
Plans and limits
Each plan sets three limits. Compare them, with prices, on the pricing section.
- Monthly quota
- Every accepted request counts once toward the quota of your plan, across all of your keys. Rejected requests do not count. When the quota is used up, the API answers
429 API_QUOTA_EXCEEDEDwithRetry-Afterset to the seconds until the quota resets at 00:00 UTC on the 1st of the next month. You receive an email at 80% and at 100% of the quota. - Per-second limit
- Each key may make up to the number of requests per second its plan allows. Going over returns
429 API_RATE_LIMITEDwithRetry-After: 1. The limit applies to each key separately. Requests rejected this way do not count toward the monthly quota. - Update interval
- How often your plan can receive a new edition. Your plan sees a new edition at most that often. Responses include
updatedAt(when the current edition was published) andnextUpdateAt(when the next one is due).
Endpoints
Base path /api/v1; API base URL https://api.currencyexchangerate-api.com/api/v1.
GET /latest
Returns current USD-based rates. Metered; requires a key.
| Parameter | Required | Description |
|---|---|---|
| symbols | No | Comma-separated currency codes, at most 200, case-insensitive. Omit to return all. |
Latest rates
cURL · shellcurl --fail-with-body -sS "https://api.currencyexchangerate-api.com/api/v1/latest?symbols=EUR,GBP" \ -H "Authorization: Bearer $EXCHANGE_API_KEY"Response
JSON{ "base": "USD", "updatedAt": "2026-10-08T00:00:01.000Z", "nextUpdateAt": "2026-10-09T00:00:01.000Z", "rates": { "EUR": 0.8931, "GBP": 0.7567 }}GET /convert
Converts any supported pair through USD. Metered; requires a key.
| Parameter | Required | Description |
|---|---|---|
| from | Yes | Source currency code, case-insensitive. |
| to | Yes | Target currency code, case-insensitive. |
| amount | No | Greater than 0 and at most 1,000,000,000,000; defaults to 1. |
Convert
cURL · shellcurl --fail-with-body -sS "https://api.currencyexchangerate-api.com/api/v1/convert?from=EUR&to=GBP&amount=100" \ -H "Authorization: Bearer $EXCHANGE_API_KEY"Response
JSON{ "from": "EUR", "to": "GBP", "amount": 100, "rate": 0.8472735416, "result": 84.727354, "updatedAt": "2026-10-08T00:00:01.000Z"}GET /currencies
Returns every code in the newest snapshot, sorted by code, with an English display name. Public and not metered. Cache-Control: public, max-age=3600.
Request
HTTPScurl https://api.currencyexchangerate-api.com/api/v1/currenciesJavaScript fetch
JavaScriptconst response = await fetch('https://api.currencyexchangerate-api.com/api/v1/currencies');const data = await response.json();Response
JSON[ { "code": "AED", "name": "United Arab Emirates Dirham" }]GET /preview
Returns a fixed selection of current rates. Public and not metered; no key required. Missing currencies are skipped. Cache-Control: public, max-age=300.
Request
HTTPScurl https://api.currencyexchangerate-api.com/api/v1/previewJavaScript fetch
JavaScriptconst response = await fetch('https://api.currencyexchangerate-api.com/api/v1/preview');const data = await response.json();Response
JSON{ "base": "USD", "updatedAt": "2026-10-08T00:00:01.000Z", "nextUpdateAt": "2026-10-09T00:00:01.000Z", "rates": { "EUR": 0.8931, "GBP": 0.7567 }}Errors
Errors use application/problem+json and include a machine-readable code.
| Code | Status | Meaning |
|---|---|---|
| RATES_INVALID_INPUT | 422 | A query parameter is missing or invalid. |
| RATES_UNSUPPORTED_CURRENCY | 422 | Code is validly formed but absent from the snapshot. |
| RATES_UNAVAILABLE | 503 | No snapshot is available. |
| API_KEY_INVALID | 401 | Missing or invalid API key. |
| API_QUOTA_EXCEEDED | 429 | Monthly quota is used. |
| API_RATE_LIMITED | 429 | Request limit exceeded. |
Data
Rates are USD-based and cover about 160 currencies. Responses include updatedAt and nextUpdateAt. Only the newest snapshot is served; historical data is unavailable.
Supported currencies
Search the currencies available in the latest snapshot.
Loading currencies…