Free exchange rates API

Official reference rates for 151 currencies, as published by the European Central Bank and Banca d'Italia on every working day since 1999.

No key, no signup. Any currency can be the base.

Euro reference rates
Currency 1 EUR Change Last 30 days By
USD US dollar 1.1193 −0.11% ECB
GBP Pound sterling 0.83728 −0.05% ECB
JPY Japanese yen 175.51 −0.26% ECB
CHF Swiss franc 0.9227 +0.17% ECB
CNY Chinese yuan renminbi 7.466 −0.17% ECB
INR Indian rupee 106.272 +0.02% ECB
CAD Canadian dollar 1.5665 −0.38% ECB
AUD Australian dollar 1.5939 −0.26% ECB
AED UAE dirham 4.1106 −0.11% BdI
NGN Nigerian naira 1504.7869 +0.62% BdI
Change is since the previous working day. All 151 currencies as JSON

Where every number comes from

Every rate is the figure a central bank published for that day. Rates for other bases are calculated from them.

European Central Bank

Euro reference rates for 29 currencies, published in Frankfurt around 16:00 CET each working day.

First day
4 January 1999
Latest
23 October 2026

Banca d'Italia

Daily rates against the euro for 121 more currencies, published in Rome after the ECB.

First day
4 January 1999
Latest
23 October 2026

1,118,424 published rates on 7,121 working days. Where both banks publish a currency, the ECB's figure is used.

Try a request

Two endpoints cover everything. Both return JSON and take the same two parameters.

GET /api/latest
The newest day both banks have published.
GET /api/2025-06-02
Any day since 1999. Weekends and holidays return the previous working day.

Add base=USD to quote against another currency and symbols=GBP,JPY to return only some. Read the full reference.

GET https://theratesapi.com/api/latest?base=USD&symbols=EUR
curl "https://theratesapi.com/api/latest?base=USD&symbols=EUR"
const res = await fetch('https://theratesapi.com/api/latest?base=USD&symbols=EUR')
const data = await res.json()
import requests

data = requests.get('https://theratesapi.com/api/latest?base=USD&symbols=EUR').json()
GET https://theratesapi.com/api/latest?symbols=USD,GBP,JPY
{
  "date": "2026-10-23",
  "base": "EUR",
  "rates": {
    "GBP": 0.83728,
    "JPY": 175.51,
    "USD": 1.1193
  }
}

151 currencies, each one a possible base

Every currency on the latest day. Retired ones, such as the Cypriot pound, still answer for the days they were published.

Questions

Where do the rates come from?

From two central banks. The European Central Bank publishes euro reference rates for about 30 currencies, and Banca d'Italia publishes daily rates against the euro for about 120 more. Where both publish a currency, the ECB's figure is used. Rates for any other base are calculated from these and rounded to 6 decimal places.

How often are the rates updated?

Once every working day. The ECB publishes around 16:00 CET and Banca d'Italia publishes after it; a new day appears in the API once both have published. Weekends and holidays return the previous working day.

Do I need an API key?

No. There is no signup and no key: send a plain HTTPS GET request and read the JSON. CORS is open, so it works from browser JavaScript too.

Can I use it in my project for free?

Yes. The service is free. Please cache responses and don't request more often than you need. The rates are reference rates for information only, so read the terms of use before relying on them for payments.

Why is my bank's rate different?

Banks and payment providers add a margin and quote separate buy and sell prices. These are central bank reference rates, close to the market middle rate when they were set, so they won't match a bank's rate exactly.

How far back does the history go?

To 4 January 1999, the euro's first working day. Currencies that were later replaced, such as the Cypriot pound or the old Venezuelan bolivar, are available for the days they were published.