# ECB Data Portal API

Euro reference rates, yield curves and €STR over keyless SDMX — with vintages.

*https://stockmarketstack.com/tools/ecb-data-portal · Stock Market Data APIs*

## Facts

### At a glance

| Field | Value |
| --- | --- |
| Vendor | European Central Bank |
| Category | Stock Market Data APIs |
| Job | macro |
| Website | https://data.ecb.europa.eu |
| Pricing model | free |
| Free tier | true |
| Open source | false |
| Licence | none |
| Self-hosted | false |
| Tested hands-on | false |
| Last updated | 2026-09-19 |

### Pricing

| Tier | USD | Period |
| --- | --- | --- |
| Free | 0 EUR | month |

### Coverage

| Field | Value |
| --- | --- |
| Asset classes | forex, bonds |
| Markets | eu |
| Works outside the US | true |
| Data latency | eod |
| Platforms | web |
| AI features | none |

### Interfaces

| Field | Value |
| --- | --- |
| API | true |
| Webhooks | false |
| Scripting | none |
| Python | false |
| Spreadsheet add-in | false |
| MCP server | false |
| Export | csv, json, api |

### Capabilities

Yes: charting, alerts

No: screening, scanning, backtesting, automation, live_trading, paper_trading, portfolio_tracking, broker_import, tax_reporting, news, options_analysis

*Verified: pricing 2026-09-19; capabilities 2026-09-19; coverage 2026-09-19.*

## What it is

The ECB Data Portal's web service is an SDMX 2.1 REST API at `data-api.ecb.europa.eu/service/` —
the same service the portal's own browser front end calls. Queries take the shape
`/service/data/{flowRef}/{key}`, where the key is the dataflow's dimensions joined with dots:
`EXR/D.USD.EUR.SP00.A` is the daily US dollar reference rate against the euro.

Two operators make that key worth learning: omitting a dimension wildcards it, so `D..EUR.SP00.A`
returns every daily currency against the euro in one call, and `+` is an OR, so
`D.USD+JPY.EUR.SP00.A` returns dollar and yen together. `/service/dataflow` lists what exists —
**214 dataflows** on 19 September 2026.

Coverage is the euro area's monetary plumbing — exchange rates, policy and market interest rates,
the yield curve, €STR, bank balance sheets and lending rates, securities issues, investment funds
and the composite indicator of systemic stress.

## Pricing

Free, keyless and anonymous, which an unauthenticated request confirms. No paid tier, and no rate
limit stated anywhere in the API help. The portal login buys favourites, saved comparisons,
dashboards and update notifications; it is not an API credential.

The copyright terms are short and worth reading before you build a product on this. Free use is
conditional: cite the ECB, reproduce accurately, state any modification — and **where the
information goes into a document that is sold, tell buyers, before they pay and each time they
access it, that it can be had free of charge from the ECB.**

## Data & coverage

Checked live on 19 September 2026: the daily USD/EUR reference rate (`EXR`) ran to 18 September at
1.1460, the ten-year AAA euro area government spot rate (`YC`) stood at 3.4875 for 17 September,
and €STR (`EST`) was 2.440 the same day. Daily series are current to the previous business day,
which is as fresh as official statistics get.

Two parameters do work you would otherwise write yourself. `updatedAfter` takes an ISO 8601
timestamp and returns only the observations added, revised or deleted since then, so a mirror
syncs deltas rather than re-downloading. `includeHistory=true` returns previous versions of the
data alongside the current one — point-in-time access on the ordinary endpoint, without a second
product or account.

The `If-Modified-Since` header the help pages offer as the coarser alternative does not behave the
way the documentation describes. Checked on 19 September 2026, the service answered 304 only when
the header repeated the `Last-Modified` value byte for byte; a later timestamp — including one
years in the future — got a full 200 and the whole series back. Under `format=csvdata` the
`Last-Modified` it sends is the moment the response was generated rather than the moment the data
changed, so it never matches twice. Use `updatedAfter`, which does what it says.

Output comes from `format=`: `csvdata`, `jsondata`, `structurespecificdata` or `genericdata`,
which is the default and the most verbose of the four.

## Integrations

The ECB ships no client library in any language. `ecbdata` on PyPI is Luca Mingarelli's,
MIT-licensed, last released at 0.1.1 in March 2025; generic SDMX clients such as `sdmx1` and
`pandasdmx` work too. The help pages point at the SDMX Connectors plug-ins for R, SAS, Excel,
Matlab, Stata and Java, and state plainly that the ECB supports none of them.

One thing not to copy: the official Python example passes `verify=False` to `requests` and the
curl examples use `-k`. The ECB's own documentation tells you to skip certificate verification
against its own host. Take the URLs and the Accept headers; leave that line behind.

## Limitations

- **SDMX key positions are the real cost.** A series key is positional and dataset-specific, and
  getting it wrong returns a bare 400 rather than a hint — fetching the dataflow's structure first
  is not optional.
- **The default response format is the worst one.** Omit `format` and you get verbose SDMX-ML
  generic data; every practical integration sets `csvdata` or `jsondata`.
- **No published rate limit cuts both ways** — nothing to plan against, and nothing to hold the
  ECB to if a throttle appears.
- **It is not tradable data.** The euro reference rates are a daily 14:15 CET fixing published for
  reference, and the ECB's disclaimer refuses liability for any loss arising from a decision taken
  in reliance on them. The yield curve is fitted, not quoted, and there is no bid, ask or volume
  anywhere in the service.
- **Scope is the euro area,** bar the exchange rates, which reach a few dozen currencies.
- **The sold-document condition binds a paid product.** Telling every buyer, on every access, that
  the numbers are free elsewhere is not a footnote most subscriptions are built to carry.

## Alternatives

[Eurostat API](https://stockmarketstack.com/tools/eurostat) is the companion for European official statistics — prices,
national accounts, labour — where this card is monetary and financial. [FRED](https://stockmarketstack.com/tools/fred)
republishes a slice of these series with a documented throttle and an Excel add-in, and its ALFRED
side does the same vintage job as `includeHistory`. [DBnomics](https://stockmarketstack.com/tools/dbnomics) mirrors the ECB
under one query shape alongside dozens of other providers. For anything priced or intraday, see
[market data APIs](https://stockmarketstack.com/categories/market-data-apis).

## FAQ

### Does the ECB Data Portal API need a key?

No. A plain request to data-api.ecb.europa.eu returns data anonymously — verified on 19 September 2026. Registering on the portal is for saving favourites and data comparisons, building dashboards and subscribing to update notifications; it has nothing to do with the web service. No rate limit appears anywhere in the API help pages either.

### Can I get historical revisions from the ECB API?

Yes, and this is the feature that separates it from most free macro APIs. `includeHistory=true` returns previous versions of the matching data alongside the one currently in production, so you can see when a figure was released, revised or deleted. `updatedAfter` does the complementary job — it returns only the observations added, revised or deleted since a timestamp you supply.

### Can I use ECB data in a commercial product?

Free of charge, with two conditions most people miss. The ECB must be cited as the source and the information must appear accurately; and where it goes into a document that is sold, you must tell buyers — before they pay, and each time they access the information — that it can be obtained free of charge from the ECB. Modifications such as seasonal adjustment or growth rates must be stated explicitly, and named-author working papers are excluded from free reproduction.

### What format does the ECB API return by default?

SDMX-ML 2.1 generic data, which is verbose XML. Most people want `?format=csvdata` or `?format=jsondata` instead — the other options are `structurespecificdata` for the compact SDMX-ML flavour. Content negotiation through an Accept header works as an alternative to the query parameter.

### Is this a source of tradable prices?

No. The daily euro foreign exchange reference rates are a 14:15 CET fixing published for reference, not a quote you can deal on — the ECB's own disclaimer accepts no liability for any decision taken in reliance on them. The yield curve is a fitted AAA euro area government curve. There is no order book, no bid or ask and no single security price.

## Also worth comparing

- [FRED](https://stockmarketstack.com/tools/fred.md) — The Fed's macro database — 851,100 series, a free key and 120 requests a minute.
- [BLS Public Data API](https://stockmarketstack.com/tools/bls-api.md) — CPI, payrolls and PPI from the agency that computes them. Free, 500 calls a day.
- [DBnomics](https://stockmarketstack.com/tools/dbnomics.md) — Macro series from 93 statistics offices and central banks behind one open API.
- [EconDB](https://stockmarketstack.com/tools/econdb.md) — 5,170 macro series and container-shipping data behind one API and one subscription.
- [Eurostat API](https://stockmarketstack.com/tools/eurostat.md) — EU statistics, keyless and free — 8,877 datasets, and the codes move under you.
- [IMF Data](https://stockmarketstack.com/tools/imf-data.md) — Free, keyless SDMX access to IMF macro statistics — WEO included, forecasts and all.
