ECB Statistical Data Warehouse (SDW) REST API Reference
Note: The legacy URL `https://sdw-wsrest.ecb.europa.eu/service` still works but the above is the current endpoint.
Overview
ECB Statistical Data Warehouse (SDW) REST API Reference
Overview
The ECB SDW API provides access to European Central Bank statistical data: exchange rates, monetary aggregates, interest rates, balance of payments, banking statistics, and more. It follows the SDMX (Statistical Data and Metadata eXchange) RESTful web services standard.
Base URL
https://data-api.ecb.europa.eu/service
Note: The legacy URL https://sdw-wsrest.ecb.europa.eu/service still works but the above is the current endpoint.
Authentication
No API key required. The API is fully open and public.
Rate Limits
- No formal rate limits published.
- ECB asks users to be respectful: avoid excessive parallel requests.
- For bulk downloads, use compressed responses (
Accept-Encoding: gzip).
Common Headers
| Header | Value | Description |
|---|---|---|
Accept | application/vnd.sdmx.data+json;version=2.0.0 | JSON format (recommended) |
Accept | application/vnd.sdmx.data+csv | CSV format |
Accept | application/vnd.sdmx.data+xml | SDMX-ML XML (default) |
Accept-Encoding | gzip | Compressed response |
Key Endpoints
1. Get Data (Time Series)
GET /data/{flowRef}/{key}?{parameters}
| Component | Description |
|---|---|
flowRef | Dataflow ID (e.g., EXR for exchange rates, BSI for balance sheet items) |
key | Dot-separated dimension values. Use + for OR, . to skip a dimension (wildcard). |
Query Parameters:
| Parameter | Required | Description |
|---|---|---|
startPeriod | No | Start date: YYYY, YYYY-MM, or YYYY-MM-DD |
endPeriod | No | End date: same formats |
updatedAfter | No | ISO 8601 timestamp; returns only data updated after this time |
detail | No | full (default), dataonly, serieskeysonly, nodata |
firstNObservations | No | Return only first N observations per series |
lastNObservations | No | Return only last N observations per series |
dimensionAtObservation | No | Typically TIME_PERIOD (default) |
Exchange Rate Key Structure (EXR dataflow):
{frequency}.{currency}.{currency_denom}.{exr_type}.{exr_suffix}
| Position | Dimension | Common Values |
|---|---|---|
| 1 | Frequency | D (daily), M (monthly), A (annual) |
| 2 | Currency | USD, GBP, JPY, CHF, CNY, etc. |
| 3 | Currency denominator | EUR (usually) |
| 4 | Exchange rate type | SP00 (spot), EN00 (average) |
| 5 | Exchange rate suffix | A (average), E (end of period) |
Example -- Daily USD/EUR spot rate, 2024:
GET https://data-api.ecb.europa.eu/service/data/EXR/D.USD.EUR.SP00.A?startPeriod=2024-01-01&endPeriod=2024-12-31
Accept: application/vnd.sdmx.data+json;version=2.0.0
Example -- Monthly GBP and JPY vs EUR, last 12 observations:
GET https://data-api.ecb.europa.eu/service/data/EXR/M.GBP+JPY.EUR.SP00.A?lastNObservations=12
Accept: application/vnd.sdmx.data+json;version=2.0.0
Example -- All daily exchange rates for a specific date (wildcard):
GET https://data-api.ecb.europa.eu/service/data/EXR/D..EUR.SP00.A?startPeriod=2024-06-01&endPeriod=2024-06-01
Accept: application/vnd.sdmx.data+json;version=2.0.0
JSON Response Structure (SDMX-JSON v2.0):
{
"meta": { "schema": "...", "id": "...", "prepared": "2024-11-01T12:00:00Z" },
"data": {
"dataSets": [
{
"action": "Information",
"series": {
"0": {
"attributes": [0, 0, ...],
"observations": {
"0": [1.0856],
"1": [1.0791],
"2": [1.0834]
}
}
}
}
],
"structures": [
{
"dimensions": {
"series": [...],
"observation": [
{
"id": "TIME_PERIOD",
"values": [
{"id": "2024-01-02", "name": "2024-01-02"},
{"id": "2024-01-03", "name": "2024-01-03"}
]
}
]
}
}
]
}
}
Note: Observation values are indexed arrays. Match observation index to TIME_PERIOD values in structures.dimensions.observation.
CSV Response (simpler to parse):
Accept: application/vnd.sdmx.data+csv
Returns standard CSV with columns: DATAFLOW, FREQ, CURRENCY, CURRENCY_DENOM, EXR_TYPE, EXR_SUFFIX, TIME_PERIOD, OBS_VALUE, etc.
2. Get Dataflow Definitions (Available Datasets)
GET /dataflow/{agencyID}/{resourceID}/{version}
Example -- List all ECB dataflows:
GET https://data-api.ecb.europa.eu/service/dataflow/ECB
Accept: application/vnd.sdmx.structure+json;version=2.0.0
Example -- Get EXR dataflow definition:
GET https://data-api.ecb.europa.eu/service/dataflow/ECB/EXR
Accept: application/vnd.sdmx.structure+json;version=2.0.0
3. Get Data Structure Definition (Dimensions & Codes)
GET /datastructure/{agencyID}/{resourceID}/{version}?references=children
Example:
GET https://data-api.ecb.europa.eu/service/datastructure/ECB/ECB_EXR1?references=children
Accept: application/vnd.sdmx.structure+json;version=2.0.0
This returns all dimensions, their code lists, and allowed values -- essential for constructing valid keys.
Common Dataflow IDs
| Dataflow | Description |
|---|---|
EXR | Exchange rates |
BSI | Balance sheet items (monetary financial institutions) |
MIR | MFI interest rates |
ILM | Internal liquidity management |
SEC | Securities issues statistics |
BOP | Balance of payments |
STP | Structural financial indicators |
CBD | Consolidated banking data |
ICP | Index of consumer prices (HICP) |
FM | Financial market data |
YC | Yield curve data |
Notes
- The SDMX-JSON format is verbose. For simpler parsing, use
Accept: application/vnd.sdmx.data+csv. - When a dimension is unknown, leave it empty (e.g.,
D..EUR.SP00.A) to get all values for that dimension. - Use
+to request multiple values for one dimension (e.g.,USD+GBP). - The
detail=dataonlyparameter omits attributes and reduces response size. - Historical data availability varies by dataflow; exchange rates go back to 1999 (euro introduction).