# Exchange rate API — $0.0002 per rate

> Exchange rate API: Foreign-exchange rates from ECB reference data — one row per target. $0.0002 per delivered rate, nothing delivered means nothing charged.

[Home](https://quanticdata.io/)/[Collectors](https://quanticdata.io/collectors/)/*Exchange rate API*

# Exchange rate API

An exchange rate API that reads the European Central Bank's published reference rates through Frankfurter and returns one row per target currency: the rate from your base and the reference date. Choose the base currency, optionally the set of targets you care about, and pass a date to read a historical day instead of the latest — no key required.

[Get my free API key](https://app.quanticdata.io/register) [See the request](/collectors/exchange-rate-api/#integration)

$0.0002 per delivered rate · $2 free every month · Failed runs never billed

POST /v1/scraper/collectors/exchange_rates/run

```
$ curl $QD/exchange_rates/run \
    -H "Authorization: Bearer $QD_API_KEY" \
    -d '{"base": "USD", "max_results": 40}'
{ "status": "done", "count": 40,
  "results": [
    {
      "currency": "…",
      "rate": …,
      "base": "…",
      "date": "…" } ],
  "cost": 0.008 }
# 40 rates × $0.0002 · nothing delivered, nothing charged
```

**$0.0002 / rate**10,000 rates on the free $2 every month

**Semantic input**base, symbols, date — no URL lists

**Up to 50**rates per run, pagination handled for you

**No browser**read over HTTP/TLS — cheaper and faster than rendering

On this page: [What it is](/collectors/exchange-rate-api/#what) [Output fields](/collectors/exchange-rate-api/#output) [Inputs](/collectors/exchange-rate-api/#input) [Pricing](/collectors/exchange-rate-api/#pricing) [Integration](/collectors/exchange-rate-api/#integration) [Use cases](/collectors/exchange-rate-api/#use-cases) [Versus the alternatives](/collectors/exchange-rate-api/#compare) [FAQ](/collectors/exchange-rate-api/#faq)

## What an exchange rate API does

The ECB publishes one authoritative set of reference rates each working day, and this returns them row by row rather than as a single object keyed by currency code. A base and a list of symbols go in, a table of currency-and-rate comes out, which is the shape a conversion or a valuation column actually joins against.

The same call reaches back in time: pass a date and you get that day's reference rates, the basis for back-testing a conversion or valuing a historical position. Because this is ECB reference data it is a daily fixing rather than a live market tick — accurate for accounting and modelling, not for trading a spread.

Input is meaning, not a URL *base* *symbols* *date* *max_results*

## What one rate looks like

Every delivered rate carries these fields. Nullable means the source did not publish it — the field stays empty instead of being guessed.

| Field | Type | What it holds |
| --- | --- | --- |
| `rank` | integer | 1-based position. |
| `currency` | string | Target currency code. |
| `rate` | number | Rate from base to this currency. |
| `base` | string · nullable | Base currency. |
| `date` | string · nullable | Reference date. |

## Inputs

The whole request. Anything you leave out falls back to the default shown in the catalog.

| Input | Type | Required | What it does |
| --- | --- | --- | --- |
| `base` | string | no | Base currency (3-letter, default USD). |
| `symbols` | array | no | Currencies to convert to (empty = all available). |
| `date` | string | no | Historical date YYYY-MM-DD (omit for latest). |
| `max_results` | integer | no | How many currencies to deliver at most (1–50). You pay only for delivered currencies. |

Pricing

## Exchange rate API pricing

$0.0002 per delivered rate. A run that delivers nothing costs nothing: blocked pages, challenges and retries are on us, and the $2 monthly allowance covers about 10,000 rates before you spend anything.

**$0.0002**per delivered rate*$0.2 per 1,000 delivered rates*

**10,000 rates**on the free allowance*$2 every month, no card*

**Zero rows**zero charge*blocks, captchas and retries are on us*

**−30%**on volume tiers*the catalog returns your key's price*

### Pay as you go

$0/mo

- $2 free credit / month

- 60 requests / min

- List unit prices

### Starter

$19/mo

- $15 free credit / month

- 300 requests / min

- 10% off unit prices

Most popular

### Growth

$79/mo

- $50 free credit / month

- 600 requests / min

- 20% off unit prices

### Scale

$299/mo

- $250 free credit / month

- 1,200 requests / min

- 30% off unit prices

Same wallet, same key and same $2 monthly allowance as every other [Data API](https://quanticdata.io/web-data-api-for-ai/). Prices are launch pricing read live from the billing config — `GET /v1/scraper/collectors` returns the price your key actually pays.

Integration

## One POST, typed rows

Base URL `https://api.quanticdata.io/v1`, Bearer auth, the same key as every other Data API. Endpoint: `POST /v1/scraper/collectors/exchange_rates/run`.

```
curl -X POST https://api.quanticdata.io/v1/scraper/collectors/exchange_rates/run \
  -H "Authorization: Bearer $QD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"base":"USD","max_results":40}'
```

```
import requests

r = requests.post(
    "https://api.quanticdata.io/v1/scraper/collectors/exchange_rates/run",
    headers={"Authorization": f"Bearer {QD_API_KEY}"},
    json={
        "base": "USD",
        "max_results": 40
    },
    timeout=120,
)
for row in r.json()["payload"]["results"]:
    print(row)
```

```
const res = await fetch(
  "https://api.quanticdata.io/v1/scraper/collectors/exchange_rates/run",
  {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.QD_API_KEY}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({"base":"USD","max_results":40}),
  },
);
const { payload } = await res.json();
console.table(payload.results);
```

```
claude mcp add quantumproxies \
  -e QUANTUMPROXIES_API_KEY=qd_live_your_key_here \
  -- npx -y quantumproxies-mcp

# then, in the chat:
> run the exchange_rates collector with base="USD" and max_results=40
```

## What people build with the exchange rate API

Three shapes of work this endpoint was designed around.

### Multi-currency billing

Pull the day's rates from your base currency and convert invoices or balances with one row per target, refreshed on whatever schedule your books need.

### Historical valuation

Pass a date and value a past transaction at that day's ECB reference rate, so a restated figure uses the fixing that actually applied then.

### Normalising to one currency

Join the currency rows onto a table of mixed-currency amounts to express them all in a single base for comparison.

## Exchange rate API versus rolling your own

The differences that actually cost time when you build this in-house.

|  | DIY scraper | This collector |
| --- | --- | --- |
| Shape | One object keyed by currency code | One row per currency, ready to join |
| Without a key | Sign up and manage a token | Keyless, straight over ECB reference data |
| Historical day | A separate endpoint and format | The same call with a date passed in |

## FAQ

Questions we get about the exchange rate API.

[Something else? Ask us →](mailto:hello@quanticdata.io)

### Is this exchange rate API free and keyless?

Yes. It reads Frankfurter, a keyless service over the ECB's published reference rates, so you get currency rows back without a key or a per-call token to manage.

### Can I get historical exchange rates?

Yes — pass `date` as YYYY-MM-DD and the rows carry that day's ECB reference rates rather than the latest, which is what a back-test or a restated figure needs.

### Are these live market rates?

No. They are the ECB's daily reference rates — one authoritative fixing per working day — so they are right for billing, accounting and modelling, not for trading against a live bid-ask spread.

### Is there a free exchange rate API?

Every account gets $2 of credit every month with no card, which is about 10,000 delivered rates on this endpoint at $0.0002 each. It renews monthly, and a run that delivers nothing is never billed — so a failed or blocked attempt does not eat the allowance.

### How much does one run cost?

Multiply the rows you actually receive by $0.0002. A run capped at 50 rates — the maximum for this collector — costs $0.01 if every row comes back, and less when the source has fewer. Volume tiers take up to 30% off, and `GET /v1/scraper/collectors` returns the price your key actually pays.

## Run the exchange rate API now

$2 of free credit every month, no card. Your key returns its own prices from `GET /v1/scraper/collectors`.

[Get my free API key](https://app.quanticdata.io/register)

Related: [All 65 collectors](https://quanticdata.io/collectors/) [Crypto market data API](https://quanticdata.io/collectors/crypto-market-data-api/) [Stock Data API](https://quanticdata.io/collectors/stock-data-api/) [DeFiLlama API](https://quanticdata.io/collectors/defillama-api/) [Documentation](https://quanticdata.io/docs/)

---

Source: https://quanticdata.io/collectors/exchange-rate-api/ · Site index for AI: https://quanticdata.io/llms.txt
