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.
$0.0002 per delivered rate · $2 free every month · Failed runs never billed
$ 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
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.
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.
Pay as you go
- $2 free credit / month
- 60 requests / min
- List unit prices
Starter
- $15 free credit / month
- 300 requests / min
- 10% off unit prices
Growth
- $50 free credit / month
- 600 requests / min
- 20% off unit prices
Scale
- $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. 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/.
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}'
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 |
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.