Overview
Monitly provides one unified API for official statistics and economic indicators from multiple sources (Eurostat, DataBank, national government portals). With one consistent JSON format and a single set of filters, you can query up-to-date data and integrate it directly into your products — all through one API family.
Public endpoints are available out of the box; register to obtain an individual API key and higher limits. See endpoints below for details.
Endpoints
GET/api/datasets
List datasets
/api/datasets
Returns lightweight catalog with only id
, dataset_name
, last_update
.
GET /api/datasets
GET /api/datasets?country=PL
{
"data": [
{
"id": 168,
"dataset_name": "House price index (2015 = 100) - quarterly data",
"last_update": "2025-07-04T11:00:00+0200"
}
],
"pagination": { "page": 0, "limit": 100, "total": 1234, "hasMore": true }
}
GET/api/datasets/:id
Dataset details + wide data
/api/datasets/:id
Returns dataset
(selected fields; no nulls) and data
in organized wide format: per series block with countries
and rows
[{ period, values, unit? }].
GET /api/datasets/:id
GET /api/datasets/2973
{
"dataset": { "id": 2973, "dataset_code": "lfsi_long_q", "dataset_name": "Labour market transitions - quarterly data", "last_update": "2025-06-12", "source_name": "Eurostat" },
"data": [
{ "series_key": { "dim1_value": "Quarterly", "dim2_value": "Current prices, ..." }, "countries": ["Austria","Poland"], "rows": [{ "period": "Q1/1995", "values": { "Austria": 41537.8, "Poland": 79099.8 } }] }
]
}
GET/api/datasets/:id/meta
Dataset metadata only
/api/datasets/:id/meta
Returns only dataset metadata: id
, dataset_code
, dataset_name
, description
, source_name
, source_url
, metadata_url
, version
, dim1_label..dim8_label
, oldest_period
, latest_period
, last_update
, available_geo
. Null keys are omitted.
GET /api/datasets/:id/meta
GET /api/datasets/2973/meta
{
"id": 2973,
"dataset_code": "lfsi_long_q",
"dataset_name": "Labour market transitions - quarterly data",
"description": "...",
"source_name": "Eurostat",
"source_url": "https://ec.europa.eu/eurostat/...",
"metadata_url": "https://ec.europa.eu/eurostat/...",
"version": "1.0",
"dim1_label": "Time frequency",
"dim2_label": "Unit of measure",
"dim3_label": "Seasonal adjustment",
"dim4_label": "National accounts indicator",
"oldest_period": "Q1/1995",
"latest_period": "Q2/2025",
"last_update": "2025-06-12",
"available_geo": ["EU27_2020", "PL", "AT"]
}
GET/api/datasets/:id/data
Filtered data
/api/datasets/:id/data
dim1..dim8
: exact labels from dataset (repeat param for multiple values)country
: repeat for multiple (e.g.country=Austria&country=Poland
)period_from
,period_to
: e.g.Q1/1995
(URL-encoded)
GET /api/datasets/:id/data?dim1=Quarterly
GET /api/datasets/4720/data?dim1=Quarterly&country=Austria&country=Poland
{
"data": [
{ "series_key": { "dim1_value": "Quarterly" }, "countries": ["Austria","Poland"], "rows": [{ "period": "Q1/1995", "values": { "Austria": 41537.8, "Poland": 79099.8 } }] }
],
"meta": {
"id": 2973,
"dataset_code": "lfsi_long_q",
"dataset_name": "Labour market transitions - quarterly data",
"description": "...",
"source_name": "Eurostat",
"source_url": "https://ec.europa.eu/eurostat/...",
"metadata_url": "https://ec.europa.eu/eurostat/...",
"version": "1.0",
"dim1_label": "Time frequency",
"oldest_period": "Q1/1995",
"latest_period": "Q2/2025",
"last_update": "2025-06-12"
}
}
Conventions
Paginationpage, limit, hasMore
page
: 0-based.limit
: default 100 per page (recommended ≤ 1000).- Always sorted by
id
ascending. - Response includes
pagination
: {page
,limit
,total
,hasMore
}.
GET /api/datasets?page=0&limit=100
GET /api/datasets?page=2&limit=100
Auth & rate limitsAPI keys
- Public endpoints; CORS enabled.
- Unauthenticated users: 3 requests/day.
- Registered users: 10 requests/day.
- Pro accounts: unlimited.
GET /api/datasets
X-API-Key: <your_api_key>
Errors
400Bad RequestInvalid parameters
Invalid request parameters or malformed data.
{
"statusCode": 400,
"statusMessage": "Dataset ID is required"
}
401UnauthorizedInvalid API key
Invalid or missing API key.
{
"statusCode": 401,
"statusMessage": "Invalid API key"
}
404Not FoundResource not found
Dataset or resource not found.
{
"statusCode": 404,
"statusMessage": "Dataset not found"
}
429Rate Limit ExceededDaily limit exceeded
Daily API request limit exceeded. Limits reset at midnight UTC.
{
"statusCode": 429,
"statusMessage": "Daily API limit exceeded. Limit: 3 requests per day. Upgrade to Pro for unlimited access."
}
- Anonymous users: 3 requests/day
- Registered users: 10 requests/day
- Pro accounts: Unlimited
500Server ErrorInternal error
Internal server error or database connection issue.
{
"statusCode": 500,
"statusMessage": "Internal server error"
}
Filters
Dimensionsdim1..dim8
- Exact label match (case-sensitive).
- Multiple values: repeat the parameter (e.g.
dim1=Quarterly&dim1=Annual
). - Encode commas/spaces, e.g.
Current%20prices%2C%20million%20units...
.
GET /api/datasets/4720/data?dim1=Quarterly
GET /api/datasets/4720/data?dim1=Quarterly&dim1=Annual
GET /api/datasets/4720/data?dim2=Current%20prices%2C%20million%20units%20of%20national%20currency
Countriescountry
- Repeat
country
to select multiple. - Names must match dataset labels.
- Also available on
/api/datasets
to filter catalog by available countries (e.g.?country=PL
).
GET /api/datasets/4720/data?country=Austria&country=Poland
GET /api/datasets?country=PL
Periodsperiod_from, period_to
- Yearly (
1995
), quarterly (Q1/1995
), monthly (01/2000
) as present in dataset. - Inclusive range:
period_from
,period_to
. - Encode slashes:
Q1%2F1995
.
GET /api/datasets/4720/data?period_from=Q1%2F1995&period_to=Q1%2F2025
GET /api/datasets/4720/data?period_from=1995&period_to=2010
CombinedAll filters
Combine dimensions, countries and period range to narrow results.
GET /api/datasets/4720/data
?dim1=Quarterly
&dim2=Current%20prices%2C%20million%20units%20of%20national%20currency
&country=Austria&country=Poland
&period_from=Q1%2F1995&period_to=Q1%2F2025