---
title: "Free Open Exchange Rate API: Keyless, No Signup, Any Base Currency"
description: "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."
canonical: https://allratestoday.com/open-api/
source: AllRatesToday (https://allratestoday.com/) — Markdown mirror of the page above; index of all pages at https://allratestoday.com/llms.txt
generated: 2026-10-24T09:52:48.138Z
---

# 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](https://allratestoday.com/authors/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, ... }
}
```

- **No API key, no account.** Nothing to register, nothing to rotate.
- **Any base currency** in the ECB table: `/api/open/latest/EUR`, `/GBP`, `/JPY`, `/CHF`, `/AUD`, `/INR`, `/CNY`… 30 codes, cross-rated inside the table exactly as the ECB publishes it.
- **Daily reference rates**, not a live feed: every call between fixings returns the same table, and `date` says which one. Right for invoices, tax, reports and converters; for live mid-market rates use the keyed API below.
- **CORS enabled** (`Access-Control-Allow-Origin: *`), so a static site can call it directly.
- **Rate limited per IP.** Cache for an hour or more; the table changes once a day. The response carries `time_next_update_utc`.
- **Unknown base** returns `404` with the list of supported codes.

## 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>
```

- Markdown: `Exchange rates by [AllRatesToday](https://allratestoday.com)`
- Plain text (apps, slides): `Exchange rates by AllRatesToday — allratestoday.com`

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](https://allratestoday.com/migrate/), the [widgets](https://allratestoday.com/docs/widget/), the public [central-bank tables](https://allratestoday.com/central-bank-rates-api/) and the [open dataset](https://github.com/AllRates-Today/central-bank-exchange-rates). With an API key, attribution is appreciated but not required. Full wording: [terms, section 3.4](https://allratestoday.com/terms/#attribution).

## 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](https://allratestoday.com/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](https://allratestoday.com/central-bank-rates-api/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": "..." }
}
```

- **`/api/open/central-bank/{code}`**: the institution's latest table. Codes are the slugs on the [central bank rates pages](https://allratestoday.com/central-bank-rates-api/), e.g. `ecb`, `fed`, `boe`, `rbi`, `pboc`, `hmrc`, `bazg`.
- **`?source=USD&target=INR`**: one pair from that table. `derived: false` means the bank printed it; `derived: true` means it was computed inside the same table and `method` says how (inverse or cross).
- **`?format=csv|xml|xlsx`**: the table as a file, same contract as the keyed endpoints. `?type=` picks a rate type where a bank publishes several (buy, sell, reference).
- **`/api/open/central-banks`**: every institution with `code`, `name`, `latest` publication date, `stale` flag and `cadence`. Use it to discover codes and to check freshness before you cite a table.
- **`/api/open/central-bank/{code}/table.svg`**: the table as an image, for READMEs and dashboards that cannot run code.
- **`rate_date` is the publication date.** Cite that, not today. `age_days` and `stale` tell you when the institution is behind its usual schedule; the last table is still served.
- **Latest only.** A table for a past date, a date range, cross-bank comparison and publication calendars are keyed; the [Official Rates plan](https://allratestoday.com/central-bank-rates-api/) covers commercial use of official data.

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](https://allratestoday.com/pricing#official). 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](https://allratestoday.com/register) (no card) adds live mid-market rates for 160+ currencies, history, and the official tables of [122 central banks and 4 tax authorities](https://allratestoday.com/central-bank-rates-api/institutions/). 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](https://allratestoday.com/blog/best-free-currency-exchange-api-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](https://allratestoday.com/migrate/) 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](https://allratestoday.com/central-bank-rates-api/) 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](https://allratestoday.com/pricing). Paid plans reset monthly.
