BYTETOOLS

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.

No API key requiredCORS enabledHTTPSFree tier

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
curl 'https://open.er-api.com/v6/latest/USD'
JavaScript (fetch)
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);
Python (requests)
import requests

res = requests.get("https://open.er-api.com/v6/latest/USD", timeout=20)
res.raise_for_status()
print(res.json())
Response — HTTP 200 (truncated)
{
  "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.5264

Parameters

ParameterTypeRequiredDescription
<base>pathRequiredBase 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

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.