Free Open Exchange Rate API: Keyless, No Signup, Any Base Currency

Keyless exchange rate API. One URL returns every ECB reference rate re-based to any currency: no API key, no account, CORS on, free for commercial use. The only condition is a visible link to AllRatesToday.

By Madhushan, Founder & Lead Developer

One URL, no key: https://allratestoday.com/api/open/latest/USD. Swap USD for any of the 30 currencies in the European Central Bank table. Updated once a day after the 16:00 CET fixing. Free for personal and commercial use. The one condition: show a visible link to AllRatesToday where the rates appear (attribution).

The endpoint

GET https://allratestoday.com/api/open/latest/USD

Response:

{
  "result": "success",
  "base_code": "USD",
  "date": "2026-10-21",
  "time_last_update_utc": "Wed, 21 Oct 2026 15:00:00 GMT",
  "time_next_update_utc": "Thu, 22 Oct 2026 15:00:00 GMT",
  "attribution": "Exchange rates by AllRatesToday — https://allratestoday.com",
  "terms_of_use": "https://allratestoday.com/terms/#attribution",
  "rates": { "USD": 1, "EUR": 0.89015, "GBP": 0.74617, "JPY": 157.87, "CHF": 0.82393, ... }
}

Attribution (the only condition)

Put this where the rates are shown: a footer, an about page, a README. Discreet is fine; it must be visible and a normal followable link.

<a href="https://allratestoday.com">Exchange rates by AllRatesToday</a>

Every keyless response carries the same text in its attribution and attribution_html fields, so an integration can render it automatically. The same condition applies to the drop-in compat endpoints, the widgets, the public central-bank tables and the open dataset. With an API key, attribution is appreciated but not required. Full wording: terms, section 3.4.

Quick examples

JavaScript

// No key. Works in the browser: the endpoint sends CORS headers.
const res = await fetch('https://allratestoday.com/api/open/latest/USD');
const { rates, date } = await res.json();
console.log(`1 USD = ${rates.EUR} EUR (ECB table of ${date})`);

Python

import requests

data = requests.get("https://allratestoday.com/api/open/latest/USD").json()
print(f"1 USD = {data['rates']['EUR']} EUR (ECB table of {data['date']})")

Want a ready-made UI instead? The embeddable converter widget runs on this table keyless and renders the attribution link for you.

Official central-bank tables, keyless

The same open access covers the latest published table of every central bank and tax authority we track, 126 institutions from the ECB, Fed and RBI to HMRC and the Swiss customs office. Each table is the publisher's own figures with its own publication date, served from our cache, so a request costs nothing upstream and the answer is identical for everyone all day.

GET https://allratestoday.com/api/open/central-bank/rbi
GET https://allratestoday.com/api/open/central-bank/rbi?source=USD&target=INR
GET https://allratestoday.com/api/open/central-bank/rbi?format=csv
GET https://allratestoday.com/api/open/central-banks
{
  "bank": "rbi",
  "rate_date": "2026-10-21",
  "age_days": 0,
  "stale": false,
  "cadence": "daily",
  "rates": [
    { "base": "USD", "quote": "INR", "type": "reference", "value": 94.7145 },
    { "base": "EUR", "quote": "INR", "type": "reference", "value": 106.2839 },
    ...
  ],
  "attribution": { "source": "Official rates published by RBI, served by AllRatesToday", "url": "...", "terms": "..." }
}

Keyless central-bank tables are for development, evaluation, personal projects and internal tooling, with the attribution link; commercial products built on them need a paid plan. Market-data pages that only need an ECB rate should use the one-URL endpoint above, which is free for commercial use.

When you need more: the keyed API

A free API key (no card) adds live mid-market rates for 160+ currencies, history, and the official tables of 122 central banks and 4 tax authorities. Pass it as Authorization: Bearer or ?key=:

curl "https://allratestoday.com/api/rate?source=USD&target=EUR&key=art_live_your_key"
# → { "rate": 0.864566, "source": "mid-market" }

Comparing providers? See the ranked best free currency APIs in 2026.

Drop-in shapes for exchangeratesapi.io, Fixer and exchangerate.host

If your code was written against one of the free ECB-based APIs that now require paid keys, the same data is served in their exact JSON shapes under /api/compat/<provider>/, keyless for latest rates: /api/compat/exchangeratesapi/latest?base=USD&symbols=GBP, /api/compat/fixer/latest?base=EUR&symbols=USD, /api/compat/exchangerate-host/latest?base=USD and /api/compat/frankfurter/latest?from=USD&to=GBP. Dated tables and ranges take a free key. The migration guides show the one-line change for each.

Fair use

The open endpoint above, the compat drop-ins and the widgets are free for any use, commercial included, as long as the attribution link stays visible. They serve the public ECB table, which changes once a day, so cache it: one request an hour per server is plenty, and the per-IP rate limit is there for callers that do not.

The keyless central-bank tables and the free API key are for development, evaluation, personal projects and internal tooling. Commercial products, paid services and public displays built on those need a paid plan. Paid plans reset monthly.