{"openapi":"3.1.0","info":{"title":"EU Eurostat Lens API","version":"0.1.0","description":"Fetches a Eurostat dataset by code with dimension filters from the Statistics API (JSON-stat 2.0, no key), and turns the sparse value object into rows keyed by country and period by cell position, never by the order in which values appear (a summarising reader mapped values to the wrong countries in an earlier test). Describes a dataset (label, update date, dimensions), finds its latest period,...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://eu-eurostat-lens.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/eu-eurostat-lens/docs"},"termsOfService":"https://connectorbay.com/eu-eurostat-lens/terms"},"servers":[{"url":"https://eu-eurostat-lens.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/eu-eurostat-lens/docs"},"security":[{},{"bearer":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/get_dataset":{"post":{"operationId":"get_dataset","summary":"Fetch a Eurostat dataset by code with dimension filters and return tidy rows decoded by cell position, with the update d","description":"Fetch a Eurostat dataset by code with dimension filters and return tidy rows decoded by cell position, with the update date and re-use note. Default answer: at most 50 rows, about 9 to 13 KB (detail=summary); detail=full allows 200 rows, about 28 to 40 KB, and max_rows up to 1000. Use for \"Pull Eurostat dataset earn_mw_cur for Germany and France for 2026-S1 as a table.\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"dataset_code":{"description":"Eurostat dataset code, for example earn_mw_cur (monthly minimum wages)","title":"Dataset Code","type":"string"},"filters":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"default":null,"description":"Dimension filters as an object, for example {\"currency\": \"EUR\", \"geo\": [\"DE\", \"FR\"]}; leave a dimension out to get all its categories","title":"Filters"},"last_periods":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Only the most recent N time periods (Eurostat lastTimePeriod), 1 to 50","title":"Last Periods"},"since":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Only periods from this one on (sinceTimePeriod), for example 2025-S1","title":"Since"},"max_rows":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Maximum rows returned (at most 1000; default 50 with detail=summary, 200 with detail=full); the answer says when it truncated","title":"Max Rows"},"detail":{"default":"summary","description":"'summary' (default): at most 50 rows unless max_rows is given, about 9 to 13 KB; 'full': at most 200 rows unless max_rows is given, about 28 to 40 KB (the answer before wave 19)","enum":["summary","full"],"title":"Detail","type":"string"}},"required":["dataset_code"],"title":"get_datasetArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/decode_jsonstat":{"post":{"operationId":"decode_jsonstat","summary":"Decode a JSON-stat 2.0 dataset you already hold into tidy rows keyed by dimension codes, by cell position (offline). Use","description":"Decode a JSON-stat 2.0 dataset you already hold into tidy rows keyed by dimension codes, by cell position (offline). Use for \"I have a JSON-stat answer from Eurostat and need the value for each country decoded correctly.\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"dataset":{"additionalProperties":true,"description":"A JSON-stat 2.0 dataset object with id, size, dimension and value (the Eurostat Statistics API answer)","title":"Dataset","type":"object"},"max_rows":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Maximum rows returned (default 200, at most 1000); the answer says when it truncated","title":"Max Rows"}},"required":["dataset"],"title":"decode_jsonstatArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/describe_dataset":{"post":{"operationId":"describe_dataset","summary":"Label, update date, dimensions (with category counts) and the query used for one Eurostat dataset. Use for \"What dimensi","description":"Label, update date, dimensions (with category counts) and the query used for one Eurostat dataset. Use for \"What dimensions does this Eurostat dataset have and when was it last updated?\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"dataset_code":{"description":"Eurostat dataset code, for example earn_mw_cur (monthly minimum wages)","title":"Dataset Code","type":"string"},"filters":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"default":null,"description":"Dimension filters as an object, for example {\"currency\": \"EUR\", \"geo\": [\"DE\", \"FR\"]}; leave a dimension out to get all its categories","title":"Filters"}},"required":["dataset_code"],"title":"describe_datasetArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/latest_period":{"post":{"operationId":"latest_period","summary":"The most recent time period Eurostat holds for a dataset (with your filters) and the dataset's update date. Use for \"Wha","description":"The most recent time period Eurostat holds for a dataset (with your filters) and the dataset's update date. Use for \"What is the latest period Eurostat holds for the minimum wage dataset earn_mw_cur?\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"dataset_code":{"description":"Eurostat dataset code, for example earn_mw_cur (monthly minimum wages)","title":"Dataset Code","type":"string"},"filters":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"default":null,"description":"Dimension filters as an object, for example {\"currency\": \"EUR\", \"geo\": [\"DE\", \"FR\"]}; leave a dimension out to get all its categories","title":"Filters"}},"required":["dataset_code"],"title":"latest_periodArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/compare_countries":{"post":{"operationId":"compare_countries","summary":"Rank the countries of a dataset for one period (latest by default); every other dimension must be fixed by your filters.","description":"Rank the countries of a dataset for one period (latest by default); every other dimension must be fixed by your filters. Use for \"Rank the EU countries by monthly minimum wage in the latest half-year, in euro.\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"dataset_code":{"description":"Eurostat dataset code, for example earn_mw_cur (monthly minimum wages)","title":"Dataset Code","type":"string"},"filters":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"default":null,"description":"Dimension filters as an object, for example {\"currency\": \"EUR\", \"geo\": [\"DE\", \"FR\"]}; leave a dimension out to get all its categories","title":"Filters"},"period":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Time period such as 2026-S1 or 2025 (default: the latest period Eurostat holds)","title":"Period"},"order":{"default":"desc","description":"desc (highest first, default) or asc","title":"Order","type":"string"},"top":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Return only the first N ranked countries (default all)","title":"Top"}},"required":["dataset_code"],"title":"compare_countriesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/country_names":{"post":{"operationId":"country_names","summary":"Map Eurostat geo codes to names and back (EL is Greece, UK the United Kingdom) for the 39 codes Eurostat's earn_mw_cur a","description":"Map Eurostat geo codes to names and back (EL is Greece, UK the United Kingdom) for the 39 codes Eurostat's earn_mw_cur answer labels. Use for \"What does the Eurostat code EL mean, and which code is Greece?\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"query":{"description":"A Eurostat geo code (EL) or an English name (Greece); an ISO code such as GR or GB is accepted and mapped","title":"Query","type":"string"}},"required":["query"],"title":"country_namesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/build_query_url":{"post":{"operationId":"build_query_url","summary":"Build the Statistics API request URL for a dataset and filters (nothing is fetched). Use for \"What URL do I call to get ","description":"Build the Statistics API request URL for a dataset and filters (nothing is fetched). Use for \"What URL do I call to get Eurostat dataset earn_mw_cur for Germany in 2026-S1?\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"dataset_code":{"description":"Eurostat dataset code, for example earn_mw_cur (monthly minimum wages)","title":"Dataset Code","type":"string"},"filters":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"default":null,"description":"Dimension filters as an object, for example {\"currency\": \"EUR\", \"geo\": [\"DE\", \"FR\"]}; leave a dimension out to get all its categories","title":"Filters"},"last_periods":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Only the most recent N time periods (Eurostat lastTimePeriod), 1 to 50","title":"Last Periods"}},"required":["dataset_code"],"title":"build_query_urlArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}