Monitly API Documentation
API 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.
Endpoints
GET/api/datasetsList datasets
Returns lightweight catalog with only id, dataset_name, last_update.
GET /api/datasetsGET /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/:idDataset details + wide data
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/:idGET /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/metaDataset metadata only
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/metaGET /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/latestLatest period data only
Returns only the most recent data point for the dataset with countries and dimensions. Optimized for getting the latest available data without filtering through historical periods.
GET /api/datasets/:id/latest{
"dataset": {
"id": 2973,
"name": "Labour market transitions - quarterly data",
"source": "Eurostat",
"dimensions": {
"dim1_label": "Time frequency",
"dim2_label": "Unit of measure",
"dim3_label": "Seasonal adjustment",
"dim4_label": "National accounts indicator"
}
},
"latest_period": {
"period": "Q2/2025",
"countries": {
"Austria": "41537.8",
"Poland": "79099.8",
"Germany": "125000.0"
},
"dimensions": {
"dim1_value": "Quarterly",
"dim2_value": "Current prices, million units of national currency",
"dim3_value": "Seasonally and calendar adjusted data",
"dim4_value": "Gross domestic product at market prices"
}
}
}GET/api/datasets/:id/dataFiltered 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=QuarterlyGET /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"
}
}POST/api/charts/generate-pngGenerate chart PNG
Generates a PNG image of a chart from dataset data. Supports line charts, bar charts, and world maps with customizable styling and dimensions.
"line"- Time series with smooth curves"bar"- Categorical data comparison"map"- World choropleth maps"horizontal-bar"- Country comparison through horizontal bars
seriesColors- Custom colors per seriescustomLegendLabels- Custom series namescustomTitle- Override chart titlewidth/height- Image dimensionsincludeTitle/includeSource- Show/hide title and sourcehighlightLatest- Highlight latest data point in redshowValues/showBorders- Map optionsshowLegend- Show/hide map legend (default: true)includeDate- Include date in map title (default: true)mapLocation- Force map region: "europe", "asia", "africa", "north-america", "south-america", "oceania".additionalText- Additional text displayed on the left side of the mapmapTransform- Map positioning:{"x": 0, "y": 0, "scale": 1}(translate and scale map)format- Response format:"json"(base64),"png"(returns PNG URL + base64), or"jpeg"(returns JPEG URL + base64)
POST /api/charts/generate-png{
"datasetId": 2973,
"chartType": "line",
"selectedDimensions": {
"country": ["Austria", "Poland"]
},
"seriesColors": {
"Austria": "#ff6b6b",
"Poland": "#4ecdc4"
},
"customTitle": "GDP Growth Comparison",
"width": 800,
"height": 400,
"format": "json",
"highlightLatest": false
}{
"success": true,
"base64": "iVBORw0KGgoAAAANSUhEUgAA..."
}
Conventions
Paginationpage, limit, hasMore
page: 0-based.limit: default 100 per page (recommended ≤ 1000).- Always sorted by
idascending. - Response includes
pagination: {page,limit,total,hasMore}.
GET /api/datasets?page=0&limit=100
GET /api/datasets?page=2&limit=100Auth & rate limitsAPI keys
- Public endpoints; CORS enabled.
- Unauthenticated users: 3 requests/day.
- Registered users: 10 requests/day.
- Pro accounts: unlimited.
X-API-Key: <your_api_key>
Content-Type: application/jsonErrors
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%20currencyCountriescountry
- Repeat
countryto select multiple. - Names must match dataset labels.
- Also available on
/api/datasetsto filter catalog by available countries (e.g.?country=PL).
GET /api/datasets/4720/data?country=Austria&country=Poland
GET /api/datasets?country=PLPeriodsperiod_from, period_to, latest
- Yearly (
1995), quarterly (Q1/1995), monthly (01/2000) as present in dataset. - Inclusive range:
period_from,period_to. - Latest period only:
latest=true(returns only the most recent data point). - 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
GET /api/datasets/4720/latestFollowed Datafollowed
Filter data to only include dimensions and countries that your organization is tracking.
- Automatically applies organization's tracked dimensions and countries
- Works with period filters (period_from, period_to)
GET /api/datasets/4720/data?followed=true
GET /api/datasets/4720/data?followed=true&period_from=2020CombinedAll filters
Combine dimensions, countries, period range, and followed data to narrow results.
GET /api/datasets/4720/data
?followed=true
&dim1=Quarterly
&dim2=Current%20prices%2C%20million%20units%20of%20national%20currency
&country=Austria&country=Poland
&period_from=Q1%2F1995&period_to=Q1%2F2025