Open ER-API
Free exchange rate API with no key covering 161 currencies. Returns a full rate table plus next update time. Tested curl example and live JSON response.
Endpoint tested and returned HTTP 200 on 2026-08-19
What is the Open ER-API?
Open ER-API is a free currency exchange rate API covering 161 currencies with no API key required. A single request returns the complete rate table for a base currency along with timestamps for the last and next update.
Where Frankfurter is limited to the roughly 30 currencies the ECB publishes, Open ER-API covers 161 — including many emerging-market and pegged currencies that ECB-derived APIs simply do not carry. If you need PKR, NGN, VND or similar, this is the free option that has them.
It also returns explicit `time_last_update_unix` and `time_next_update_unix` fields, which is genuinely useful: you can set your cache expiry to the exact moment new data arrives rather than guessing an interval.
Quick facts
- Base URL
https://open.er-api.com/v6- Authentication
- The open endpoint needs no key. The commercial v6 API at a different host does require one.
- Rate limit
- Roughly one update per day per base currency; requests themselves are not tightly limited.
- Pricing
- Free with attribution requested. Paid plans offer more frequent updates.
- CORS
- Enabled — callable directly from browser JavaScript
- Official docs
- Read the docs
How to use the Open ER-API
Every request below was executed against the live API on 2026-08-19, and the response shown is the real body it returned — not an illustration.
1. All exchange rates against USD
GET https://open.er-api.com/v6/latest/USD
curl 'https://open.er-api.com/v6/latest/USD'const res = await fetch("https://open.er-api.com/v6/latest/USD");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);import requests
res = requests.get("https://open.er-api.com/v6/latest/USD", timeout=20)
res.raise_for_status()
print(res.json()){
"result": "success",
"provider": "https://www.exchangerate-api.com",
"documentation": "https://www.exchangerate-api.com/docs/free",
"terms_of_use": "https://www.exchangerate-api.com/terms",
"time_last_update_unix": 1787097751,
"time_last_update_utc": "Wed, 19 Aug 2026 00:02:31 +0000",
"time_next_update_unix": 1787185261,
"time_next_update_utc": "Thu, 20 Aug 2026 00:21:01 +0000",
"time_eol_unix": 0,
"base_code": "USD",
"rates": {
"USD": 1,
"AED": 3.6725,
"AFN": 65.328221,
"ALL": 80.147388,
"AMD": 365.907545,
"ANG": 1.79,
"AOA": 929.6336,
"ARS": 1494.1268,
"AUD": 1.409923,
"AWG": 1.79,
"AZN": 1.70031,
"BAM": 1.689561,
"BBD": 2,
"BDT": 122.192682,
"BGN": 1.689561,
"BHD": 0.376,
"BIF": 2992.384013,
"BMD": 1,
"BND": 1.278151,
"BOB": 11.605646,
"BRL": 5.207284,
"BSD": 1,
"BTN": 95.76446,
"BWP": 13.64313,
"BYN": 3.035564,
"BZD": 2,
"CAD": 1.38884,
"CDF": 2279.799462,
"CHF": 0.812451,
"CLF": 0.023152,
"CLP": 915.126983,
"CNH": 6.745439,
"CNY": 6.756911,
"COP": 3135.191066,
"CRC": 449.584268,
"CUP": 24,
"CVE": 95.253398,
"CZK": 20.896032,
"DJF": 177.721,
"DKK": 6.458259,
"DOP": 58.791467,
"DZD": 133.061855,
"EGP": 50.518369,
"ERN": 15,
"ETB": 160.682969,
"EUR": 0.863866,
"FJD": 2.207994,
"FKP": 0.738848,
"FOK": 6.458258,
"GBP": 0.738843,
"GEL": 2.611976,
"GGP": 0.738848,
"GHS": 11.063152,
"GIP": 0.738848,
"GMD": 74.697227,
"GNF": 8782.5264Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
<base> | path | Required | Base currency code appended to /latest/. USD |
Response fields
resultstring- `success` or `error` — check before reading rates.
base_codestring- The base currency for the quoted rates.
ratesobject- Map of 161 currency codes to numeric rates.
time_last_update_utcstring- When these rates were published, human readable.
time_next_update_unixinteger- Unix timestamp of the next refresh — use it to set cache TTL exactly.
What you can build with the Open ER-API
- Convert between currencies the ECB does not publish, such as PKR or NGN
- Populate a full currency dropdown from one cached request
- Set cache expiry precisely using the next-update timestamp
- Display prices in a visitor's local currency worldwide
Common errors and how to fix them
result: error, unsupported-code
The base currency code is not recognised.
Fix: Use an ISO 4217 three-letter uppercase code.
result: error, malformed-request
The URL path is wrong.
Fix: The format is /v6/latest/USD — the base currency goes in the path, not a query string.
Open ER-API — frequently asked questions
How many currencies does Open ER-API support?
161, which is considerably more than ECB-derived APIs. That includes many emerging-market and pegged currencies that free alternatives omit.
Is Open ER-API really free with no key?
Yes, the open endpoint at open.er-api.com requires no key. Attribution is requested. The separate commercial API does require a key and offers more frequent updates.
How often do the rates refresh?
Roughly once every 24 hours on the free tier. The response includes `time_next_update_unix` so you can align your cache with the actual refresh rather than polling.
How is this different from Frankfurter?
Frankfurter uses ECB reference rates and covers about 30 currencies with strong provenance. Open ER-API covers 161 currencies from blended sources. Choose Frankfurter for accounting accuracy, Open ER-API for breadth of coverage.
Tools that pair with this API
JSON Formatter
Format, beautify and minify JSON online with 2-space, 4-space or tab indentation. Sort keys alphabetically and catch syntax errors instantly — free and private.
Percentage Calculator
Calculate what X% of a number is, what percent one number is of another, and percentage increase or decrease between two values — instantly and free.
Unit Converter
Convert between units of length, weight, temperature, area, volume, speed, time and data storage instantly, with a swap button and common conversion tables.
Open ER-API is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-19; always check the official documentation before relying on this API in production, as terms and limits can change.