BYTETOOLS

Frankfurter API

Free currency exchange rate API with no key, built on European Central Bank data. Latest and historical rates, time series and conversion. Tested curl example.

No API key requiredCORS enabledHTTPSFree tier

Endpoint tested and returned HTTP 200 on 2026-08-19

What is the Frankfurter API?

Frankfurter is a free, open-source currency exchange rate API built on European Central Bank reference rates. It provides latest, historical and time-series rates for around 30 currencies with no API key or signup.

Frankfurter is the cleanest free forex API still standing. Most competitors have quietly moved their free tiers behind registration or key requirements; Frankfurter remains genuinely open, and because it is open source you can self-host it if you need guaranteed availability.

Rates come from the European Central Bank, which publishes reference rates once per working day at around 16:00 CET. That has a practical consequence: rates do not change intraday, and weekend requests return Friday's figures. For accounting and invoicing this is ideal; for live FX trading it is not.

Quick facts

Base URL
https://api.frankfurter.dev/v1
Authentication
No key or registration.
Rate limit
No published hard limit; fair use expected.
Pricing
Free and open source, including commercial use.
CORS
Enabled — callable directly from browser JavaScript
Official docs
Read the docs

How to use the Frankfurter 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. Latest USD rates against EUR and GBP

GET https://api.frankfurter.dev/v1/latest?base=USD&symbols=EUR,GBP

curl
curl 'https://api.frankfurter.dev/v1/latest?base=USD&symbols=EUR,GBP'
JavaScript (fetch)
const res = await fetch("https://api.frankfurter.dev/v1/latest?base=USD&symbols=EUR,GBP");
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://api.frankfurter.dev/v1/latest?base=USD&symbols=EUR,GBP", timeout=20)
res.raise_for_status()
print(res.json())
Response — HTTP 200
{
  "amount": 1.0,
  "base": "USD",
  "date": "2026-08-18",
  "rates": {
    "EUR": 0.86386,
    "GBP": 0.73933
  }
}

Parameters

ParameterTypeRequiredDescription
basestringOptionalBase currency, ISO 4217. Defaults to EUR. USD
symbolsstringOptionalComma-separated target currencies. Omit for all. EUR,GBP
amountfloatOptionalAmount to convert, applied to every returned rate. 100
<date>pathOptionalUse `/v1/2026-01-15` for a historical day, or a `start..end` range for a time series. 2026-01-15

Response fields

amountfloat
The amount the rates apply to — 1 unless you passed `amount`.
basestring
Base currency code for the quoted rates.
datestring
The date these rates were published. May be earlier than today on weekends and holidays.
ratesobject
Map of currency code to rate as a number.

What you can build with the Frankfurter API

  • Convert prices into a visitor's local currency on an e-commerce site
  • Record the exchange rate applied on an invoice using a historical date
  • Chart a currency pair over time with the time-series endpoint
  • Normalise multi-currency reporting to one base currency

Common errors and how to fix them

404

Unknown currency code or malformed date path.

Fix: Use ISO 4217 codes and YYYY-MM-DD dates. Only ECB-published currencies are available.

Date returned is not the date requested

The ECB does not publish on weekends or holidays; not a bug.

Fix: Read the `date` field in the response rather than assuming it matches your request.

Frankfurter API — frequently asked questions

Is there a free currency exchange rate API with no API key?

Yes. Frankfurter provides latest, historical and time-series exchange rates with no key or signup, using European Central Bank reference data, and is free for commercial use.

How often does Frankfurter update its rates?

Once per working day, following the ECB's publication at around 16:00 CET. Rates are static intraday and unchanged at weekends, so it suits accounting rather than live trading.

Why did I get Friday's date for a Sunday request?

The ECB publishes only on working days, so weekend and holiday requests return the most recent published rates. Always read the `date` field in the response.

Can I get historical exchange rates?

Yes. Request a specific day with `/v1/2026-01-15`, or a full series with a `start..end` date range, optionally restricted with the `symbols` parameter.

Tools that pair with this API

Frankfurter 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.