Frankfurter (v1)
StarFrankfurter is a free, open-source currency data API that tracks reference exchange rates published by the European Central Bank.
No usage caps or API keys. Works great client-side in the browser or mobile apps. The public API is available at api.frankfurter.dev. If preferred, you can self-host.
API Endpoints
Frankfurter provides endpoints to retrieve latest rates, historical data, or time series.
- Latest Rates
- Fetch the latest working day's rates, updated daily around 16:00 CET.
/* curl -s https://api.frankfurter.dev/v1/latest */ { "base": "EUR", "date": "2024-11-25", "rates": { "AUD": 1.6111, "BGN": 1.9558, "BRL": 6.0941, "CAD": 1.4648, "...": "..." } }- Change the base currency using the
baseparameter. The default is EUR. /* curl -s https://api.frankfurter.dev/v1/latest?base=USD */ { "base": "USD", "date": "2024-11-25", "rates": { "AUD": 1.5351, "BGN": 1.8636, "BRL": 5.8067, "CAD": 1.3957, "...": "..." } }- Limit the response to specific target currencies.
/* curl -s https://api.frankfurter.dev/v1/latest?symbols=CHF,GBP */ { "base": "EUR", "date": "2024-11-25", "rates": { "CHF": 0.9324, "GBP": 0.83465 } }- Historical Rates
- Retrieve rates for a specific date.
/* curl -s https://api.frankfurter.dev/v1/1999-01-04 */ { "base": "EUR", "date": "1999-01-04", "rates": { "AUD": 1.91, "CAD": 1.8004, "CHF": 1.6168, "CYP": 0.58231, "...": "..." } }- Change the base currency and filter target currencies.
/* curl -s https://api.frankfurter.dev/v1/1999-01-04?base=USD&symbols=EUR */ { "base": "USD", "date": "1999-01-04", "rates": { "EUR": 0.84825 } }- Note: Frankfurter stores dates in UTC. If you use a different time zone, be aware that you may be querying with a different calendar date than intended. Also, data returned for today is not stable and will update if new rates are published.
- Time Series Data
- Fetch rates over a period.
/* curl -s https://api.frankfurter.dev/v1/2000-01-01..2000-12-31 */ { "base": "EUR", "start_date": "1999-12-30", "end_date": "2000-12-29", "rates": { "1999-12-30": { "AUD": 1.5422, "CAD": 1.4608, "CHF": 1.6051, "CYP": 0.57667, "...": "..." }, "2000-01-03": { "AUD": 1.5346, "CAD": 1.4577, "CHF": 1.6043, "CYP": 0.5767, "...": "..." }, "2000-01-04": { "AUD": 1.5677, "CAD": 1.4936, "CHF": 1.6053, "CYP": 0.5775, "...": "..." }, "2000-01-05": { "AUD": 1.5773, "CAD": 1.5065, "CHF": 1.606, "CYP": 0.5778, "...": "..." }, "...": "..." } }- Fetch rates up to the present.
/* curl -s https://api.frankfurter.dev/v1/2024-01-01.. */ { "base": "EUR", "start_date": "2023-12-29", "end_date": "2024-11-25", "rates": { "2023-12-29": { "AUD": 1.6263, "BGN": 1.9558, "BRL": 5.3618, "CAD": 1.4642, "...": "..." }, "2024-01-02": { "AUD": 1.6147, "BGN": 1.9558, "BRL": 5.3562, "CAD": 1.4565, "...": "..." }, "2024-01-03": { "AUD": 1.6236, "BGN": 1.9558, "BRL": 5.3859, "CAD": 1.4574, "...": "..." }, "2024-01-04": { "AUD": 1.628, "BGN": 1.9558, "BRL": 5.3761, "CAD": 1.4603, "...": "..." }, "...": "..." } }- Tip: Filter currencies to reduce response size and improve performance.
/* curl -s https://api.frankfurter.dev/v1/2024-01-01..?symbols=USD */ { "base": "EUR", "start_date": "2023-12-29", "end_date": "2024-11-25", "rates": { "2023-12-29": { "USD": 1.105 }, "2024-01-02": { "USD": 1.0956 }, "2024-01-03": { "USD": 1.0919 }, "2024-01-04": { "USD": 1.0953 }, "...": "..." } }- Available currencies
- Get supported currency symbols and their full names.
/* curl -s https://api.frankfurter.dev/v1/currencies */ { "AUD": "Australian Dollar", "BGN": "Bulgarian Lev", "BRL": "Brazilian Real", "CAD": "Canadian Dollar", "...": "..." }- Currency Conversion
- Perform currency conversion by fetching the exchange rate and calculating in your code.
function convert(from, to, amount) { fetch(`https://api.frankfurter.dev/v1/latest?base=${from}&symbols=${to}`) .then((resp) => resp.json()) .then((data) => { const convertedAmount = (amount * data.rates[to]).toFixed(2); alert(`${amount} ${from} = ${convertedAmount} ${to}`); }); } convert("EUR", "USD", 10);- Click or tap above to execute the code.
Self-Hosting
If you prefer not to use our hosted service, you can self-host with Docker.
docker run -d -p 8080:8080 \
--pull always \
lineofflight/frankfurter