MCP Server

EU Trade Explorer

eu.tradedashboard/eu-trade-explorer

What this MCP does

Analyzes EU customs trade and industrial production data by product, reporter, partner, period, concentration, shocks, and production structure.

get_autonomy_summary
Get Autonomy Summary
Report-section helper ("Autonomy & vulnerability"): net import reliance (`get_net_import_reliance`) is always the headline fact/chart. Trade intensity and export propensity (`get_trade_intensity` / `get_export_propensity`) are both computed, then a deterministic salience score -- distance from an unremarkable ~50% band, plus the magnitude of its own change -- decides which one leads the narrative; this choice is never left to the caller. `trade_intensity_pct` is returned fully unit-consistent (first/last/min/max all expressed as a percentage, matching `export_propensity_pct`). Sub-contracting is deliberately not included in this section at all -- it is an unrelated, tiny-base PRODCOM series that only muddied the narrative. Returns `{narrative_facts, chart_data, available, reason}`.
Input schema
{'type': 'object', 'required': ['query'], 'properties': {'query': {'type': 'object', 'required': ['product'], 'properties': {'lang': {'type': 'string', 'default': 'en', 'description': 'Language for translated labels in the response (en, de, fr, es, it, ro).'}, 'n_top': {'type': 'integer', 'default': 7, 'description': 'Number of top entities (by volume/value) to break out individually in charts.'}, 'product': {'anyOf': [{'type': 'string'}, {'type': 'array', 'items': {'type': 'string'}}], 'examples': ['3801', ['0901', '0902'], 'TOTAL'], 'description': "Combined Nomenclature customs code(s), 2–8 digits, or the literal 'TOTAL' meta-aggregate (all products combined). Pass a list to aggregate several codes: their volumes are summed and prices volume-weighted across every tab — except the Cross-section views, which keep each code separate."}, 'midpoint': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Split point 'YYYY-MM' for the Pattern Shifts tab: the window is cut in two here and the before/after change per entity is reported. Defaults to the middle of the period when omitted."}, 'partners': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Explicit partner-country list that overrides 'partner_set' when present."}, 'reporter': {'type': 'string', 'default': 'European Union', 'description': "Declaring entity: an EU member state, an EU candidate country, Northern Ireland ('XI'), or one of the three aggregate presets ('European Union', 'Euro area', 'EU candidate countries'), or a predefined reporter group name."}, 'frequency': {'type': 'string', 'default': 'quarter', 'description': "Resampling frequency for the series: 'month', 'quarter' or 'year'."}, 'period_end': {'type': 'string', 'description': "Inclusive end of the analysis window, ISO month 'YYYY-MM'. Defaults to roughly three months ago — the latest period Eurostat typically has fully reported."}, 'partner_set': {'type': 'string', 'default': 'non-EU countries', 'description': "Named partner preset, e.g. 'non-EU countries', 'EU countries', 'all countries', or a predefined partner group."}, 'period_start': {'type': 'string', 'default': '2015-01', 'description': "Inclusive start of the analysis window, ISO month 'YYYY-MM'."}, 'prodcom_code': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Specific PRODCOM dataset code to pin for the Net Import Reliance and Trade Intensity tabs, when a single CN code maps to several. Ignored elsewhere.'}, 'include_other': {'type': 'boolean', 'default': True, 'description': "Bundle entities outside the top-N into a single 'Other' bucket."}, 'remove_outliers': {'type': 'boolean', 'default': True, 'description': 'Drop extreme unit-price outliers before computing weighted-average prices.'}, 'reporter_members': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Explicit member countries for a custom reporter group. Each entry must be an EU member state, EU candidate country, or Northern Ireland. When more than one member is supplied the frame is aggregated into a synthetic group named after 'reporter'."}}, 'description': 'The product/reporter/partner-set/period/frequency slice to query -- the same request body every tradedashboard.eu analytical endpoint takes. See its own field descriptions (product, reporter, partner_set, period_start, period_end, frequency, n_top, ...) for details; only `product` is required, everything else has a sensible default.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'additionalProperties': True}
get_chapters
Get Chapters
List all top-level Combined Nomenclature chapters (2-digit codes). Bootstraps browsing the nomenclature top-down; drill into a chapter with `get_subtree`.
Input schema
{'type': 'object', 'properties': {'lang': {'type': 'string', 'default': 'en', 'description': 'Language for translated labels in the response. One of: bg, cs, da, de, el, en, es, et, fi, fr, ga, hr, hu, it, lt, lv, mt, nl, pl, pt, ro, sk, sl, sv.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'additionalProperties': True}
get_concentration
Get Concentration
Herfindahl-Hirschman Index (HHI) of trade concentration across partners or member states, per period (0 = perfectly spread, 10000 = one entity holds the whole market), plus the top-8-by-value share breakdown (rest bundled as 'Others'). Higher HHI = more dependent on a handful of counterparties.
Input schema
{'type': 'object', 'required': ['query'], 'properties': {'query': {'type': 'object', 'required': ['product'], 'properties': {'lang': {'type': 'string', 'default': 'en', 'description': 'Language for translated labels in the response (en, de, fr, es, it, ro).'}, 'n_top': {'type': 'integer', 'default': 7, 'description': 'Number of top entities (by volume/value) to break out individually in charts.'}, 'product': {'anyOf': [{'type': 'string'}, {'type': 'array', 'items': {'type': 'string'}}], 'examples': ['3801', ['0901', '0902'], 'TOTAL'], 'description': "Combined Nomenclature customs code(s), 2–8 digits, or the literal 'TOTAL' meta-aggregate (all products combined). Pass a list to aggregate several codes: their volumes are summed and prices volume-weighted across every tab — except the Cross-section views, which keep each code separate."}, 'midpoint': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Split point 'YYYY-MM' for the Pattern Shifts tab: the window is cut in two here and the before/after change per entity is reported. Defaults to the middle of the period when omitted."}, 'partners': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Explicit partner-country list that overrides 'partner_set' when present."}, 'reporter': {'type': 'string', 'default': 'European Union', 'description': "Declaring entity: an EU member state, an EU candidate country, Northern Ireland ('XI'), or one of the three aggregate presets ('European Union', 'Euro area', 'EU candidate countries'), or a predefined reporter group name."}, 'frequency': {'type': 'string', 'default': 'quarter', 'description': "Resampling frequency for the series: 'month', 'quarter' or 'year'."}, 'period_end': {'type': 'string', 'description': "Inclusive end of the analysis window, ISO month 'YYYY-MM'. Defaults to roughly three months ago — the latest period Eurostat typically has fully reported."}, 'partner_set': {'type': 'string', 'default': 'non-EU countries', 'description': "Named partner preset, e.g. 'non-EU countries', 'EU countries', 'all countries', or a predefined partner group."}, 'period_start': {'type': 'string', 'default': '2015-01', 'description': "Inclusive start of the analysis window, ISO month 'YYYY-MM'."}, 'prodcom_code': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Specific PRODCOM dataset code to pin for the Net Import Reliance and Trade Intensity tabs, when a single CN code maps to several. Ignored elsewhere.'}, 'include_other': {'type': 'boolean', 'default': True, 'description': "Bundle entities outside the top-N into a single 'Other' bucket."}, 'remove_outliers': {'type': 'boolean', 'default': True, 'description': 'Drop extreme unit-price outliers before computing weighted-average prices.'}, 'reporter_members': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Explicit member countries for a custom reporter group. Each entry must be an EU member state, EU candidate country, or Northern Ireland. When more than one member is supplied the frame is aggregated into a synthetic group named after 'reporter'."}}, 'description': 'The product/reporter/partner-set/period/frequency slice to query -- the same request body every tradedashboard.eu analytical endpoint takes. See its own field descriptions (product, reporter, partner_set, period_start, period_end, frequency, n_top, ...) for details; only `product` is required, everything else has a sensible default.'}, 'compact': {'type': 'boolean', 'default': False, 'description': 'If true, condense long numeric time series (more than ~6 points -- typically monthly/quarterly windows or wide multi-partner/multi-period breakdowns) into summary statistics (first, last, min, max, mean, pct_change) instead of returning every data point. Leave false for full-fidelity series (e.g. to actually plot a chart); set true when you just need the headline trend and want to save context.'}, 'entity_level': {'enum': ['partner', 'reporter'], 'type': 'string', 'default': 'partner', 'description': "Dimension to analyse. 'partner' -- how concentrated/volatile is the reporter's trade across its trading partners? 'reporter' -- how concentrated/volatile is a given partner's trade across EU member states? When 'reporter', 'partner_name' is required."}, 'partner_name': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Partner country name (English). Required when entity_level='reporter'."}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'additionalProperties': True}
get_concentration_compare
Get Concentration Compare
Partner-concentration (HHI) compared across sub-products: one HHI line per sub-product rather than per flow, to see which sub-products drive a parent code's overall concentration.
Input schema
{'type': 'object', 'required': ['query'], 'properties': {'query': {'type': 'object', 'required': ['product'], 'properties': {'lang': {'type': 'string', 'default': 'en', 'description': 'Language for translated labels in the response (en, de, fr, es, it, ro).'}, 'n_top': {'type': 'integer', 'default': 7, 'description': 'Number of top entities (by volume/value) to break out individually in charts.'}, 'product': {'anyOf': [{'type': 'string'}, {'type': 'array', 'items': {'type': 'string'}}], 'examples': ['3801', ['0901', '0902'], 'TOTAL'], 'description': "Combined Nomenclature customs code(s), 2–8 digits, or the literal 'TOTAL' meta-aggregate (all products combined). Pass a list to aggregate several codes: their volumes are summed and prices volume-weighted across every tab — except the Cross-section views, which keep each code separate."}, 'midpoint': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Split point 'YYYY-MM' for the Pattern Shifts tab: the window is cut in two here and the before/after change per entity is reported. Defaults to the middle of the period when omitted."}, 'partners': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Explicit partner-country list that overrides 'partner_set' when present."}, 'reporter': {'type': 'string', 'default': 'European Union', 'description': "Declaring entity: an EU member state, an EU candidate country, Northern Ireland ('XI'), or one of the three aggregate presets ('European Union', 'Euro area', 'EU candidate countries'), or a predefined reporter group name."}, 'frequency': {'type': 'string', 'default': 'quarter', 'description': "Resampling frequency for the series: 'month', 'quarter' or 'year'."}, 'period_end': {'type': 'string', 'description': "Inclusive end of the analysis window, ISO month 'YYYY-MM'. Defaults to roughly three months ago — the latest period Eurostat typically has fully reported."}, 'partner_set': {'type': 'string', 'default': 'non-EU countries', 'description': "Named partner preset, e.g. 'non-EU countries', 'EU countries', 'all countries', or a predefined partner group."}, 'period_start': {'type': 'string', 'default': '2015-01', 'description': "Inclusive start of the analysis window, ISO month 'YYYY-MM'."}, 'prodcom_code': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Specific PRODCOM dataset code to pin for the Net Import Reliance and Trade Intensity tabs, when a single CN code maps to several. Ignored elsewhere.'}, 'include_other': {'type': 'boolean', 'default': True, 'description': "Bundle entities outside the top-N into a single 'Other' bucket."}, 'remove_outliers': {'type': 'boolean', 'default': True, 'description': 'Drop extreme unit-price outliers before computing weighted-average prices.'}, 'reporter_members': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Explicit member countries for a custom reporter group. Each entry must be an EU member state, EU candidate country, or Northern Ireland. When more than one member is supplied the frame is aggregated into a synthetic group named after 'reporter'."}}, 'description': 'The product/reporter/partner-set/period/frequency slice to query -- the same request body every tradedashboard.eu analytical endpoint takes. See its own field descriptions (product, reporter, partner_set, period_start, period_end, frequency, n_top, ...) for details; only `product` is required, everything else has a sensible default.'}, 'compact': {'type': 'boolean', 'default': False, 'description': 'If true, condense long numeric time series (more than ~6 points -- typically monthly/quarterly windows or wide multi-partner/multi-period breakdowns) into summary statistics (first, last, min, max, mean, pct_change) instead of returning every data point. Leave false for full-fidelity series (e.g. to actually plot a chart); set true when you just need the headline trend and want to save context.'}, 'n_subcodes': {'type': 'integer', 'default': 8, 'maximum': 50, 'minimum': 1, 'description': 'Max number of sub-products to plot as separate HHI lines.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'additionalProperties': True}
get_concentration_map
Get Concentration Map
Cross-sectional HHI per country for one year -- the choropleth counterpart of get_concentration. 'partner' entity_level = for every EU member state, HHI of its trade across partners; 'reporter' = for every partner, HHI of its trade across EU member states (subject to the Rotterdam/Antwerp entry-point distortion).
Input schema
{'type': 'object', 'required': ['query'], 'properties': {'year': {'anyOf': [{'type': 'integer', 'maximum': 2100, 'minimum': 1988}, {'type': 'null'}], 'default': None, 'description': 'Year for the snapshot. Defaults to the latest full year with data.'}, 'query': {'type': 'object', 'required': ['product'], 'properties': {'lang': {'type': 'string', 'default': 'en', 'description': 'Language for translated labels in the response (en, de, fr, es, it, ro).'}, 'n_top': {'type': 'integer', 'default': 7, 'description': 'Number of top entities (by volume/value) to break out individually in charts.'}, 'product': {'anyOf': [{'type': 'string'}, {'type': 'array', 'items': {'type': 'string'}}], 'examples': ['3801', ['0901', '0902'], 'TOTAL'], 'description': "Combined Nomenclature customs code(s), 2–8 digits, or the literal 'TOTAL' meta-aggregate (all products combined). Pass a list to aggregate several codes: their volumes are summed and prices volume-weighted across every tab — except the Cross-section views, which keep each code separate."}, 'midpoint': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Split point 'YYYY-MM' for the Pattern Shifts tab: the window is cut in two here and the before/after change per entity is reported. Defaults to the middle of the period when omitted."}, 'partners': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Explicit partner-country list that overrides 'partner_set' when present."}, 'reporter': {'type': 'string', 'default': 'European Union', 'description': "Declaring entity: an EU member state, an EU candidate country, Northern Ireland ('XI'), or one of the three aggregate presets ('European Union', 'Euro area', 'EU candidate countries'), or a predefined reporter group name."}, 'frequency': {'type': 'string', 'default': 'quarter', 'description': "Resampling frequency for the series: 'month', 'quarter' or 'year'."}, 'period_end': {'type': 'string', 'description': "Inclusive end of the analysis window, ISO month 'YYYY-MM'. Defaults to roughly three months ago — the latest period Eurostat typically has fully reported."}, 'partner_set': {'type': 'string', 'default': 'non-EU countries', 'description': "Named partner preset, e.g. 'non-EU countries', 'EU countries', 'all countries', or a predefined partner group."}, 'period_start': {'type': 'string', 'default': '2015-01', 'description': "Inclusive start of the analysis window, ISO month 'YYYY-MM'."}, 'prodcom_code': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Specific PRODCOM dataset code to pin for the Net Import Reliance and Trade Intensity tabs, when a single CN code maps to several. Ignored elsewhere.'}, 'include_other': {'type': 'boolean', 'default': True, 'description': "Bundle entities outside the top-N into a single 'Other' bucket."}, 'remove_outliers': {'type': 'boolean', 'default': True, 'description': 'Drop extreme unit-price outliers before computing weighted-average prices.'}, 'reporter_members': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Explicit member countries for a custom reporter group. Each entry must be an EU member state, EU candidate country, or Northern Ireland. When more than one member is supplied the frame is aggregated into a synthetic group named after 'reporter'."}}, 'description': 'The product/reporter/partner-set/period/frequency slice to query -- the same request body every tradedashboard.eu analytical endpoint takes. See its own field descriptions (product, reporter, partner_set, period_start, period_end, frequency, n_top, ...) for details; only `product` is required, everything else has a sensible default.'}, 'compact': {'type': 'boolean', 'default': False, 'description': 'If true, condense long numeric time series (more than ~6 points -- typically monthly/quarterly windows or wide multi-partner/multi-period breakdowns) into summary statistics (first, last, min, max, mean, pct_change) instead of returning every data point. Leave false for full-fidelity series (e.g. to actually plot a chart); set true when you just need the headline trend and want to save context.'}, 'entity_level': {'enum': ['partner', 'reporter'], 'type': 'string', 'default': 'partner', 'description': "Dimension to analyse. 'partner' -- how concentrated/volatile is the reporter's trade across its trading partners? 'reporter' -- how concentrated/volatile is a given partner's trade across EU member states? When 'reporter', 'partner_name' is required."}, 'partner_name': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Partner country name (English). Required when entity_level='reporter'."}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'additionalProperties': True}
get_countries
Get Countries
Reference data for reporters/partners: selectable EU/Euro-area/member states, named partner presets, predefined reporter/partner groups, and per-language country-name translations. Use this to find valid values for the `reporter`, `partner_set`, `partners` and `reporter_members` fields used throughout the other tools' `query` argument.
Input schema
{'type': 'object', 'properties': {}, 'additionalProperties': False}
Output schema
{'type': 'object', 'additionalProperties': True}
get_data_range
Get Data Range
Return the period coverage (`data_min`/`data_max`, 'YYYY-MM') actually cached for the given product code(s) -- use before picking `period_start`/`period_end` so you don't request an empty window.
Input schema
{'type': 'object', 'properties': {'products': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': 'CN code(s) to check coverage for. Omit for the overall store range.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'additionalProperties': True}
get_export_propensity
Get Export Propensity
Export Propensity = Exports / Production, annual: the share of EU production that is exported. Not clamped -- values above 100% are legitimate (re-exports, stock drawdown, scope differences). Returns the export-propensity matrix, a sibling/per-code comparison, resolved PRODCOM codes and availability notes.
Input schema
{'type': 'object', 'required': ['query'], 'properties': {'query': {'type': 'object', 'required': ['product'], 'properties': {'lang': {'type': 'string', 'default': 'en', 'description': 'Language for translated labels in the response (en, de, fr, es, it, ro).'}, 'n_top': {'type': 'integer', 'default': 7, 'description': 'Number of top entities (by volume/value) to break out individually in charts.'}, 'product': {'anyOf': [{'type': 'string'}, {'type': 'array', 'items': {'type': 'string'}}], 'examples': ['3801', ['0901', '0902'], 'TOTAL'], 'description': "Combined Nomenclature customs code(s), 2–8 digits, or the literal 'TOTAL' meta-aggregate (all products combined). Pass a list to aggregate several codes: their volumes are summed and prices volume-weighted across every tab — except the Cross-section views, which keep each code separate."}, 'midpoint': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Split point 'YYYY-MM' for the Pattern Shifts tab: the window is cut in two here and the before/after change per entity is reported. Defaults to the middle of the period when omitted."}, 'partners': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Explicit partner-country list that overrides 'partner_set' when present."}, 'reporter': {'type': 'string', 'default': 'European Union', 'description': "Declaring entity: an EU member state, an EU candidate country, Northern Ireland ('XI'), or one of the three aggregate presets ('European Union', 'Euro area', 'EU candidate countries'), or a predefined reporter group name."}, 'frequency': {'type': 'string', 'default': 'quarter', 'description': "Resampling frequency for the series: 'month', 'quarter' or 'year'."}, 'period_end': {'type': 'string', 'description': "Inclusive end of the analysis window, ISO month 'YYYY-MM'. Defaults to roughly three months ago — the latest period Eurostat typically has fully reported."}, 'partner_set': {'type': 'string', 'default': 'non-EU countries', 'description': "Named partner preset, e.g. 'non-EU countries', 'EU countries', 'all countries', or a predefined partner group."}, 'period_start': {'type': 'string', 'default': '2015-01', 'description': "Inclusive start of the analysis window, ISO month 'YYYY-MM'."}, 'prodcom_code': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Specific PRODCOM dataset code to pin for the Net Import Reliance and Trade Intensity tabs, when a single CN code maps to several. Ignored elsewhere.'}, 'include_other': {'type': 'boolean', 'default': True, 'description': "Bundle entities outside the top-N into a single 'Other' bucket."}, 'remove_outliers': {'type': 'boolean', 'default': True, 'description': 'Drop extreme unit-price outliers before computing weighted-average prices.'}, 'reporter_members': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Explicit member countries for a custom reporter group. Each entry must be an EU member state, EU candidate country, or Northern Ireland. When more than one member is supplied the frame is aggregated into a synthetic group named after 'reporter'."}}, 'description': 'The product/reporter/partner-set/period/frequency slice to query -- the same request body every tradedashboard.eu analytical endpoint takes. See its own field descriptions (product, reporter, partner_set, period_start, period_end, frequency, n_top, ...) for details; only `product` is required, everything else has a sensible default.'}, 'compact': {'type': 'boolean', 'default': False, 'description': 'If true, condense long numeric time series (more than ~6 points -- typically monthly/quarterly windows or wide multi-partner/multi-period breakdowns) into summary statistics (first, last, min, max, mean, pct_change) instead of returning every data point. Leave false for full-fidelity series (e.g. to actually plot a chart); set true when you just need the headline trend and want to save context.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'additionalProperties': True}
get_full_report
Get Full Report
Fetch every report section (scope, overview, market structure, volatility, autonomy) for one shared `query` in a single call, instead of calling `get_product_profile` / `get_market_summary` / `get_market_structure_summary` / `get_volatility_summary` / `get_autonomy_summary` separately yourself. Guarantees all five sections describe the exact same product/reporter/partner/period slice -- five separate calls have no such guarantee, since nothing stops `query` from being re-typed slightly differently across them, or one of the five simply being forgotten. `query`'s own field defaults (`reporter='European Union'`, `partner_set='non-EU countries'`, `period_start='2015-01'`, `frequency='quarter'`, `remove_outliers=true`, ...) are exactly the sensible defaults for a first-cut report; override any of them for a different slice -- e.g. a specific member state, a custom partner group, a narrower period. Returns `{"query": {...}, "sections": {<name>: {narrative_facts, chart_data, links, available, reason}, ...}}` for `<name>` in `product_profile`, `market_summary`, `market_structure`, `volatility`, `autonomy`. `links` maps each `narrative_facts` key to a ready-made `https://tradedashboard.eu/...` URL for that same fact -- never construct one of these yourself; use the one already provided.
Input schema
{'type': 'object', 'required': ['query'], 'properties': {'lang': {'type': 'string', 'default': 'en', 'description': 'Language for translated labels in the response. One of: bg, cs, da, de, el, en, es, et, fi, fr, ga, hr, hu, it, lt, lv, mt, nl, pl, pt, ro, sk, sl, sv.'}, 'query': {'type': 'object', 'required': ['product'], 'properties': {'lang': {'type': 'string', 'default': 'en', 'description': 'Language for translated labels in the response (en, de, fr, es, it, ro).'}, 'n_top': {'type': 'integer', 'default': 7, 'description': 'Number of top entities (by volume/value) to break out individually in charts.'}, 'product': {'anyOf': [{'type': 'string'}, {'type': 'array', 'items': {'type': 'string'}}], 'examples': ['3801', ['0901', '0902'], 'TOTAL'], 'description': "Combined Nomenclature customs code(s), 2–8 digits, or the literal 'TOTAL' meta-aggregate (all products combined). Pass a list to aggregate several codes: their volumes are summed and prices volume-weighted across every tab — except the Cross-section views, which keep each code separate."}, 'midpoint': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Split point 'YYYY-MM' for the Pattern Shifts tab: the window is cut in two here and the before/after change per entity is reported. Defaults to the middle of the period when omitted."}, 'partners': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Explicit partner-country list that overrides 'partner_set' when present."}, 'reporter': {'type': 'string', 'default': 'European Union', 'description': "Declaring entity: an EU member state, an EU candidate country, Northern Ireland ('XI'), or one of the three aggregate presets ('European Union', 'Euro area', 'EU candidate countries'), or a predefined reporter group name."}, 'frequency': {'type': 'string', 'default': 'quarter', 'description': "Resampling frequency for the series: 'month', 'quarter' or 'year'."}, 'period_end': {'type': 'string', 'description': "Inclusive end of the analysis window, ISO month 'YYYY-MM'. Defaults to roughly three months ago — the latest period Eurostat typically has fully reported."}, 'partner_set': {'type': 'string', 'default': 'non-EU countries', 'description': "Named partner preset, e.g. 'non-EU countries', 'EU countries', 'all countries', or a predefined partner group."}, 'period_start': {'type': 'string', 'default': '2015-01', 'description': "Inclusive start of the analysis window, ISO month 'YYYY-MM'."}, 'prodcom_code': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Specific PRODCOM dataset code to pin for the Net Import Reliance and Trade Intensity tabs, when a single CN code maps to several. Ignored elsewhere.'}, 'include_other': {'type': 'boolean', 'default': True, 'description': "Bundle entities outside the top-N into a single 'Other' bucket."}, 'remove_outliers': {'type': 'boolean', 'default': True, 'description': 'Drop extreme unit-price outliers before computing weighted-average prices.'}, 'reporter_members': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Explicit member countries for a custom reporter group. Each entry must be an EU member state, EU candidate country, or Northern Ireland. When more than one member is supplied the frame is aggregated into a synthetic group named after 'reporter'."}}, 'description': 'The product/reporter/partner-set/period/frequency slice to query -- the same request body every tradedashboard.eu analytical endpoint takes. See its own field descriptions (product, reporter, partner_set, period_start, period_end, frequency, n_top, ...) for details; only `product` is required, everything else has a sensible default.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'additionalProperties': True}
get_map_data
Get Map Data
Choropleth-ready aggregates: per-period totals (quantity, value, price) for imports and exports, keyed by GISCO country code on both the reporter and partner sides.
Input schema
{'type': 'object', 'required': ['query'], 'properties': {'query': {'type': 'object', 'required': ['product'], 'properties': {'lang': {'type': 'string', 'default': 'en', 'description': 'Language for translated labels in the response (en, de, fr, es, it, ro).'}, 'n_top': {'type': 'integer', 'default': 7, 'description': 'Number of top entities (by volume/value) to break out individually in charts.'}, 'product': {'anyOf': [{'type': 'string'}, {'type': 'array', 'items': {'type': 'string'}}], 'examples': ['3801', ['0901', '0902'], 'TOTAL'], 'description': "Combined Nomenclature customs code(s), 2–8 digits, or the literal 'TOTAL' meta-aggregate (all products combined). Pass a list to aggregate several codes: their volumes are summed and prices volume-weighted across every tab — except the Cross-section views, which keep each code separate."}, 'midpoint': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Split point 'YYYY-MM' for the Pattern Shifts tab: the window is cut in two here and the before/after change per entity is reported. Defaults to the middle of the period when omitted."}, 'partners': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Explicit partner-country list that overrides 'partner_set' when present."}, 'reporter': {'type': 'string', 'default': 'European Union', 'description': "Declaring entity: an EU member state, an EU candidate country, Northern Ireland ('XI'), or one of the three aggregate presets ('European Union', 'Euro area', 'EU candidate countries'), or a predefined reporter group name."}, 'frequency': {'type': 'string', 'default': 'quarter', 'description': "Resampling frequency for the series: 'month', 'quarter' or 'year'."}, 'period_end': {'type': 'string', 'description': "Inclusive end of the analysis window, ISO month 'YYYY-MM'. Defaults to roughly three months ago — the latest period Eurostat typically has fully reported."}, 'partner_set': {'type': 'string', 'default': 'non-EU countries', 'description': "Named partner preset, e.g. 'non-EU countries', 'EU countries', 'all countries', or a predefined partner group."}, 'period_start': {'type': 'string', 'default': '2015-01', 'description': "Inclusive start of the analysis window, ISO month 'YYYY-MM'."}, 'prodcom_code': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Specific PRODCOM dataset code to pin for the Net Import Reliance and Trade Intensity tabs, when a single CN code maps to several. Ignored elsewhere.'}, 'include_other': {'type': 'boolean', 'default': True, 'description': "Bundle entities outside the top-N into a single 'Other' bucket."}, 'remove_outliers': {'type': 'boolean', 'default': True, 'description': 'Drop extreme unit-price outliers before computing weighted-average prices.'}, 'reporter_members': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Explicit member countries for a custom reporter group. Each entry must be an EU member state, EU candidate country, or Northern Ireland. When more than one member is supplied the frame is aggregated into a synthetic group named after 'reporter'."}}, 'description': 'The product/reporter/partner-set/period/frequency slice to query -- the same request body every tradedashboard.eu analytical endpoint takes. See its own field descriptions (product, reporter, partner_set, period_start, period_end, frequency, n_top, ...) for details; only `product` is required, everything else has a sensible default.'}, 'compact': {'type': 'boolean', 'default': False, 'description': 'If true, condense long numeric time series (more than ~6 points -- typically monthly/quarterly windows or wide multi-partner/multi-period breakdowns) into summary statistics (first, last, min, max, mean, pct_change) instead of returning every data point. Leave false for full-fidelity series (e.g. to actually plot a chart); set true when you just need the headline trend and want to save context.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'additionalProperties': True}
get_market_structure_summary
Get Market Structure Summary
Report-section helper ("Market structure"): combines, in priority order, the intra-EU specialisation snapshot (`get_specialisation`, already map-ready), partner-concentration detail (`get_concentration`, keeping the top-8-by-value share breakdown as `chart_data` alongside the condensed HHI trend) and, when a PRODCOM mapping exists for the product, EU production volumes (`get_production_series`). These three are independent data sources bundled only because they all describe "market structure" -- the specialisation RSCA is trade-based and has no relation to the PRODCOM production figures; treat them as separate findings, not a single connected story. `most_specialised_reporters` / `least_specialised_reporters` are pre-sorted by actual RSCA (highest/ lowest first respectively) -- use them as-is rather than re-deriving a ranking. `query.prodcom_code` is passed through untouched -- picking among ambiguous PRODCOM mappings is left to the caller, never guessed here. Returns `{narrative_facts, chart_data, available, reason}`.
Input schema
{'type': 'object', 'required': ['query'], 'properties': {'query': {'type': 'object', 'required': ['product'], 'properties': {'lang': {'type': 'string', 'default': 'en', 'description': 'Language for translated labels in the response (en, de, fr, es, it, ro).'}, 'n_top': {'type': 'integer', 'default': 7, 'description': 'Number of top entities (by volume/value) to break out individually in charts.'}, 'product': {'anyOf': [{'type': 'string'}, {'type': 'array', 'items': {'type': 'string'}}], 'examples': ['3801', ['0901', '0902'], 'TOTAL'], 'description': "Combined Nomenclature customs code(s), 2–8 digits, or the literal 'TOTAL' meta-aggregate (all products combined). Pass a list to aggregate several codes: their volumes are summed and prices volume-weighted across every tab — except the Cross-section views, which keep each code separate."}, 'midpoint': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Split point 'YYYY-MM' for the Pattern Shifts tab: the window is cut in two here and the before/after change per entity is reported. Defaults to the middle of the period when omitted."}, 'partners': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Explicit partner-country list that overrides 'partner_set' when present."}, 'reporter': {'type': 'string', 'default': 'European Union', 'description': "Declaring entity: an EU member state, an EU candidate country, Northern Ireland ('XI'), or one of the three aggregate presets ('European Union', 'Euro area', 'EU candidate countries'), or a predefined reporter group name."}, 'frequency': {'type': 'string', 'default': 'quarter', 'description': "Resampling frequency for the series: 'month', 'quarter' or 'year'."}, 'period_end': {'type': 'string', 'description': "Inclusive end of the analysis window, ISO month 'YYYY-MM'. Defaults to roughly three months ago — the latest period Eurostat typically has fully reported."}, 'partner_set': {'type': 'string', 'default': 'non-EU countries', 'description': "Named partner preset, e.g. 'non-EU countries', 'EU countries', 'all countries', or a predefined partner group."}, 'period_start': {'type': 'string', 'default': '2015-01', 'description': "Inclusive start of the analysis window, ISO month 'YYYY-MM'."}, 'prodcom_code': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Specific PRODCOM dataset code to pin for the Net Import Reliance and Trade Intensity tabs, when a single CN code maps to several. Ignored elsewhere.'}, 'include_other': {'type': 'boolean', 'default': True, 'description': "Bundle entities outside the top-N into a single 'Other' bucket."}, 'remove_outliers': {'type': 'boolean', 'default': True, 'description': 'Drop extreme unit-price outliers before computing weighted-average prices.'}, 'reporter_members': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Explicit member countries for a custom reporter group. Each entry must be an EU member state, EU candidate country, or Northern Ireland. When more than one member is supplied the frame is aggregated into a synthetic group named after 'reporter'."}}, 'description': 'The product/reporter/partner-set/period/frequency slice to query -- the same request body every tradedashboard.eu analytical endpoint takes. See its own field descriptions (product, reporter, partner_set, period_start, period_end, frequency, n_top, ...) for details; only `product` is required, everything else has a sensible default.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'additionalProperties': True}
get_market_summary
Get Market Summary
Report-section helper ("General overview"): condensed, report-ready digest of how a market has evolved over the chosen window -- one call instead of separately fetching and cross-referencing get_overview + get_reporter_detail + get_concentration + get_net_import_reliance yourself. Set `query.frequency = "year"` for a multi-year evolution summary (recommended over the model's default of "quarter"). Every figure reflects `query` exactly as given -- the same product/reporter/partner_set/period slice a dashboard user would have selected. Nothing here substitutes a different reporter or partner_set (e.g. to contrast intra-EU against extra-EU trade): call this again with a different `query.partner_set` for that, the same way a dashboard user would switch the sidebar's selector. Returns `{narrative_facts, chart_data, available, reason}`. `narrative_facts` combines, for the flow selected by `query.partner_set`: - Headline trade: first/last/min/max/pct_change for export & import value, quantity and price, plus the trade-balance trend. - Partner concentration: first/last/pct_change of the value-based HHI for imports and exports. - Top partners *and* top EU reporters by value: each one's first/last/pct_change -- i.e. who is gaining or losing share. - Net import reliance: first/last/pct_change of the annual NIR % for `query`'s own `reporter`/`partner_set` (only `frequency` is normalised to "year", since NIR is structurally annual and the upstream API always returns it that way regardless); omitted if the product has no PRODCOM mapping. `chart_data` carries the full-fidelity headline trade and top-partner/ top-reporter series for charting.
Input schema
{'type': 'object', 'required': ['query'], 'properties': {'query': {'type': 'object', 'required': ['product'], 'properties': {'lang': {'type': 'string', 'default': 'en', 'description': 'Language for translated labels in the response (en, de, fr, es, it, ro).'}, 'n_top': {'type': 'integer', 'default': 7, 'description': 'Number of top entities (by volume/value) to break out individually in charts.'}, 'product': {'anyOf': [{'type': 'string'}, {'type': 'array', 'items': {'type': 'string'}}], 'examples': ['3801', ['0901', '0902'], 'TOTAL'], 'description': "Combined Nomenclature customs code(s), 2–8 digits, or the literal 'TOTAL' meta-aggregate (all products combined). Pass a list to aggregate several codes: their volumes are summed and prices volume-weighted across every tab — except the Cross-section views, which keep each code separate."}, 'midpoint': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Split point 'YYYY-MM' for the Pattern Shifts tab: the window is cut in two here and the before/after change per entity is reported. Defaults to the middle of the period when omitted."}, 'partners': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Explicit partner-country list that overrides 'partner_set' when present."}, 'reporter': {'type': 'string', 'default': 'European Union', 'description': "Declaring entity: an EU member state, an EU candidate country, Northern Ireland ('XI'), or one of the three aggregate presets ('European Union', 'Euro area', 'EU candidate countries'), or a predefined reporter group name."}, 'frequency': {'type': 'string', 'default': 'quarter', 'description': "Resampling frequency for the series: 'month', 'quarter' or 'year'."}, 'period_end': {'type': 'string', 'description': "Inclusive end of the analysis window, ISO month 'YYYY-MM'. Defaults to roughly three months ago — the latest period Eurostat typically has fully reported."}, 'partner_set': {'type': 'string', 'default': 'non-EU countries', 'description': "Named partner preset, e.g. 'non-EU countries', 'EU countries', 'all countries', or a predefined partner group."}, 'period_start': {'type': 'string', 'default': '2015-01', 'description': "Inclusive start of the analysis window, ISO month 'YYYY-MM'."}, 'prodcom_code': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Specific PRODCOM dataset code to pin for the Net Import Reliance and Trade Intensity tabs, when a single CN code maps to several. Ignored elsewhere.'}, 'include_other': {'type': 'boolean', 'default': True, 'description': "Bundle entities outside the top-N into a single 'Other' bucket."}, 'remove_outliers': {'type': 'boolean', 'default': True, 'description': 'Drop extreme unit-price outliers before computing weighted-average prices.'}, 'reporter_members': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Explicit member countries for a custom reporter group. Each entry must be an EU member state, EU candidate country, or Northern Ireland. When more than one member is supplied the frame is aggregated into a synthetic group named after 'reporter'."}}, 'description': 'The product/reporter/partner-set/period/frequency slice to query -- the same request body every tradedashboard.eu analytical endpoint takes. See its own field descriptions (product, reporter, partner_set, period_start, period_end, frequency, n_top, ...) for details; only `product` is required, everything else has a sensible default.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'additionalProperties': True}
get_net_import_reliance
Get Net Import Reliance
Net Import Reliance (NIR) = (Imports - Exports) / Apparent consumption, annual, joining PRODCOM production with Comext trade. E.g. 40% means 40% of EU consumption is met by imports; negative means the EU is a net exporter. Returns the NIR % series, its supply/disposition components, sibling-category/per-code comparisons, the resolved PRODCOM codes and availability notes (CN-to-PRODCOM mapping is not always 1:1; see the `self.notes` / `unavailability_type` fields in the response). Use `query.prodcom_code` to pin a specific mapping.
Input schema
{'type': 'object', 'required': ['query'], 'properties': {'query': {'type': 'object', 'required': ['product'], 'properties': {'lang': {'type': 'string', 'default': 'en', 'description': 'Language for translated labels in the response (en, de, fr, es, it, ro).'}, 'n_top': {'type': 'integer', 'default': 7, 'description': 'Number of top entities (by volume/value) to break out individually in charts.'}, 'product': {'anyOf': [{'type': 'string'}, {'type': 'array', 'items': {'type': 'string'}}], 'examples': ['3801', ['0901', '0902'], 'TOTAL'], 'description': "Combined Nomenclature customs code(s), 2–8 digits, or the literal 'TOTAL' meta-aggregate (all products combined). Pass a list to aggregate several codes: their volumes are summed and prices volume-weighted across every tab — except the Cross-section views, which keep each code separate."}, 'midpoint': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Split point 'YYYY-MM' for the Pattern Shifts tab: the window is cut in two here and the before/after change per entity is reported. Defaults to the middle of the period when omitted."}, 'partners': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Explicit partner-country list that overrides 'partner_set' when present."}, 'reporter': {'type': 'string', 'default': 'European Union', 'description': "Declaring entity: an EU member state, an EU candidate country, Northern Ireland ('XI'), or one of the three aggregate presets ('European Union', 'Euro area', 'EU candidate countries'), or a predefined reporter group name."}, 'frequency': {'type': 'string', 'default': 'quarter', 'description': "Resampling frequency for the series: 'month', 'quarter' or 'year'."}, 'period_end': {'type': 'string', 'description': "Inclusive end of the analysis window, ISO month 'YYYY-MM'. Defaults to roughly three months ago — the latest period Eurostat typically has fully reported."}, 'partner_set': {'type': 'string', 'default': 'non-EU countries', 'description': "Named partner preset, e.g. 'non-EU countries', 'EU countries', 'all countries', or a predefined partner group."}, 'period_start': {'type': 'string', 'default': '2015-01', 'description': "Inclusive start of the analysis window, ISO month 'YYYY-MM'."}, 'prodcom_code': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Specific PRODCOM dataset code to pin for the Net Import Reliance and Trade Intensity tabs, when a single CN code maps to several. Ignored elsewhere.'}, 'include_other': {'type': 'boolean', 'default': True, 'description': "Bundle entities outside the top-N into a single 'Other' bucket."}, 'remove_outliers': {'type': 'boolean', 'default': True, 'description': 'Drop extreme unit-price outliers before computing weighted-average prices.'}, 'reporter_members': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Explicit member countries for a custom reporter group. Each entry must be an EU member state, EU candidate country, or Northern Ireland. When more than one member is supplied the frame is aggregated into a synthetic group named after 'reporter'."}}, 'description': 'The product/reporter/partner-set/period/frequency slice to query -- the same request body every tradedashboard.eu analytical endpoint takes. See its own field descriptions (product, reporter, partner_set, period_start, period_end, frequency, n_top, ...) for details; only `product` is required, everything else has a sensible default.'}, 'compact': {'type': 'boolean', 'default': False, 'description': 'If true, condense long numeric time series (more than ~6 points -- typically monthly/quarterly windows or wide multi-partner/multi-period breakdowns) into summary statistics (first, last, min, max, mean, pct_change) instead of returning every data point. Leave false for full-fidelity series (e.g. to actually plot a chart); set true when you just need the headline trend and want to save context.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'additionalProperties': True}
get_overview
Get Overview
Headline figures: total import/export quantities, values and weighted-average prices per period, the trade balance, and a top-partner breakdown. The best first call for any new product/reporter slice.
Input schema
{'type': 'object', 'required': ['query'], 'properties': {'query': {'type': 'object', 'required': ['product'], 'properties': {'lang': {'type': 'string', 'default': 'en', 'description': 'Language for translated labels in the response (en, de, fr, es, it, ro).'}, 'n_top': {'type': 'integer', 'default': 7, 'description': 'Number of top entities (by volume/value) to break out individually in charts.'}, 'product': {'anyOf': [{'type': 'string'}, {'type': 'array', 'items': {'type': 'string'}}], 'examples': ['3801', ['0901', '0902'], 'TOTAL'], 'description': "Combined Nomenclature customs code(s), 2–8 digits, or the literal 'TOTAL' meta-aggregate (all products combined). Pass a list to aggregate several codes: their volumes are summed and prices volume-weighted across every tab — except the Cross-section views, which keep each code separate."}, 'midpoint': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Split point 'YYYY-MM' for the Pattern Shifts tab: the window is cut in two here and the before/after change per entity is reported. Defaults to the middle of the period when omitted."}, 'partners': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Explicit partner-country list that overrides 'partner_set' when present."}, 'reporter': {'type': 'string', 'default': 'European Union', 'description': "Declaring entity: an EU member state, an EU candidate country, Northern Ireland ('XI'), or one of the three aggregate presets ('European Union', 'Euro area', 'EU candidate countries'), or a predefined reporter group name."}, 'frequency': {'type': 'string', 'default': 'quarter', 'description': "Resampling frequency for the series: 'month', 'quarter' or 'year'."}, 'period_end': {'type': 'string', 'description': "Inclusive end of the analysis window, ISO month 'YYYY-MM'. Defaults to roughly three months ago — the latest period Eurostat typically has fully reported."}, 'partner_set': {'type': 'string', 'default': 'non-EU countries', 'description': "Named partner preset, e.g. 'non-EU countries', 'EU countries', 'all countries', or a predefined partner group."}, 'period_start': {'type': 'string', 'default': '2015-01', 'description': "Inclusive start of the analysis window, ISO month 'YYYY-MM'."}, 'prodcom_code': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Specific PRODCOM dataset code to pin for the Net Import Reliance and Trade Intensity tabs, when a single CN code maps to several. Ignored elsewhere.'}, 'include_other': {'type': 'boolean', 'default': True, 'description': "Bundle entities outside the top-N into a single 'Other' bucket."}, 'remove_outliers': {'type': 'boolean', 'default': True, 'description': 'Drop extreme unit-price outliers before computing weighted-average prices.'}, 'reporter_members': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Explicit member countries for a custom reporter group. Each entry must be an EU member state, EU candidate country, or Northern Ireland. When more than one member is supplied the frame is aggregated into a synthetic group named after 'reporter'."}}, 'description': 'The product/reporter/partner-set/period/frequency slice to query -- the same request body every tradedashboard.eu analytical endpoint takes. See its own field descriptions (product, reporter, partner_set, period_start, period_end, frequency, n_top, ...) for details; only `product` is required, everything else has a sensible default.'}, 'compact': {'type': 'boolean', 'default': False, 'description': 'If true, condense long numeric time series (more than ~6 points -- typically monthly/quarterly windows or wide multi-partner/multi-period breakdowns) into summary statistics (first, last, min, max, mean, pct_change) instead of returning every data point. Leave false for full-fidelity series (e.g. to actually plot a chart); set true when you just need the headline trend and want to save context.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'additionalProperties': True}
get_partner_detail
Get Partner Detail
Per-partner import/export breakdown. For each flow, the top-N trading partners ranked both by quantity and by value (so you can compare volume-based vs. value-based rankings), each with its own quantity, value and price time series, plus an optional 'Other' bucket.
Input schema
{'type': 'object', 'required': ['query'], 'properties': {'query': {'type': 'object', 'required': ['product'], 'properties': {'lang': {'type': 'string', 'default': 'en', 'description': 'Language for translated labels in the response (en, de, fr, es, it, ro).'}, 'n_top': {'type': 'integer', 'default': 7, 'description': 'Number of top entities (by volume/value) to break out individually in charts.'}, 'product': {'anyOf': [{'type': 'string'}, {'type': 'array', 'items': {'type': 'string'}}], 'examples': ['3801', ['0901', '0902'], 'TOTAL'], 'description': "Combined Nomenclature customs code(s), 2–8 digits, or the literal 'TOTAL' meta-aggregate (all products combined). Pass a list to aggregate several codes: their volumes are summed and prices volume-weighted across every tab — except the Cross-section views, which keep each code separate."}, 'midpoint': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Split point 'YYYY-MM' for the Pattern Shifts tab: the window is cut in two here and the before/after change per entity is reported. Defaults to the middle of the period when omitted."}, 'partners': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Explicit partner-country list that overrides 'partner_set' when present."}, 'reporter': {'type': 'string', 'default': 'European Union', 'description': "Declaring entity: an EU member state, an EU candidate country, Northern Ireland ('XI'), or one of the three aggregate presets ('European Union', 'Euro area', 'EU candidate countries'), or a predefined reporter group name."}, 'frequency': {'type': 'string', 'default': 'quarter', 'description': "Resampling frequency for the series: 'month', 'quarter' or 'year'."}, 'period_end': {'type': 'string', 'description': "Inclusive end of the analysis window, ISO month 'YYYY-MM'. Defaults to roughly three months ago — the latest period Eurostat typically has fully reported."}, 'partner_set': {'type': 'string', 'default': 'non-EU countries', 'description': "Named partner preset, e.g. 'non-EU countries', 'EU countries', 'all countries', or a predefined partner group."}, 'period_start': {'type': 'string', 'default': '2015-01', 'description': "Inclusive start of the analysis window, ISO month 'YYYY-MM'."}, 'prodcom_code': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Specific PRODCOM dataset code to pin for the Net Import Reliance and Trade Intensity tabs, when a single CN code maps to several. Ignored elsewhere.'}, 'include_other': {'type': 'boolean', 'default': True, 'description': "Bundle entities outside the top-N into a single 'Other' bucket."}, 'remove_outliers': {'type': 'boolean', 'default': True, 'description': 'Drop extreme unit-price outliers before computing weighted-average prices.'}, 'reporter_members': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Explicit member countries for a custom reporter group. Each entry must be an EU member state, EU candidate country, or Northern Ireland. When more than one member is supplied the frame is aggregated into a synthetic group named after 'reporter'."}}, 'description': 'The product/reporter/partner-set/period/frequency slice to query -- the same request body every tradedashboard.eu analytical endpoint takes. See its own field descriptions (product, reporter, partner_set, period_start, period_end, frequency, n_top, ...) for details; only `product` is required, everything else has a sensible default.'}, 'compact': {'type': 'boolean', 'default': False, 'description': 'If true, condense long numeric time series (more than ~6 points -- typically monthly/quarterly windows or wide multi-partner/multi-period breakdowns) into summary statistics (first, last, min, max, mean, pct_change) instead of returning every data point. Leave false for full-fidelity series (e.g. to actually plot a chart); set true when you just need the headline trend and want to save context.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'additionalProperties': True}
get_pattern_shift
Get Pattern Shift
Before/after trade-pattern shift around a split point (`query.midpoint`): for each entity, compares average quantity and price before vs. after, and returns scatter points (quantity-change % vs. price-change %) with quadrant labels -- top-right = demand-driven growth, top-left = supply constraint/monopoly risk, bottom-right = dumping/oversupply risk, bottom-left = market contraction. Suggested workflow: spot a shock date via get_supply_shocks / get_price_shocks first, then set it as `query.midpoint` here.
Input schema
{'type': 'object', 'required': ['query'], 'properties': {'query': {'type': 'object', 'required': ['product'], 'properties': {'lang': {'type': 'string', 'default': 'en', 'description': 'Language for translated labels in the response (en, de, fr, es, it, ro).'}, 'n_top': {'type': 'integer', 'default': 7, 'description': 'Number of top entities (by volume/value) to break out individually in charts.'}, 'product': {'anyOf': [{'type': 'string'}, {'type': 'array', 'items': {'type': 'string'}}], 'examples': ['3801', ['0901', '0902'], 'TOTAL'], 'description': "Combined Nomenclature customs code(s), 2–8 digits, or the literal 'TOTAL' meta-aggregate (all products combined). Pass a list to aggregate several codes: their volumes are summed and prices volume-weighted across every tab — except the Cross-section views, which keep each code separate."}, 'midpoint': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Split point 'YYYY-MM' for the Pattern Shifts tab: the window is cut in two here and the before/after change per entity is reported. Defaults to the middle of the period when omitted."}, 'partners': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Explicit partner-country list that overrides 'partner_set' when present."}, 'reporter': {'type': 'string', 'default': 'European Union', 'description': "Declaring entity: an EU member state, an EU candidate country, Northern Ireland ('XI'), or one of the three aggregate presets ('European Union', 'Euro area', 'EU candidate countries'), or a predefined reporter group name."}, 'frequency': {'type': 'string', 'default': 'quarter', 'description': "Resampling frequency for the series: 'month', 'quarter' or 'year'."}, 'period_end': {'type': 'string', 'description': "Inclusive end of the analysis window, ISO month 'YYYY-MM'. Defaults to roughly three months ago — the latest period Eurostat typically has fully reported."}, 'partner_set': {'type': 'string', 'default': 'non-EU countries', 'description': "Named partner preset, e.g. 'non-EU countries', 'EU countries', 'all countries', or a predefined partner group."}, 'period_start': {'type': 'string', 'default': '2015-01', 'description': "Inclusive start of the analysis window, ISO month 'YYYY-MM'."}, 'prodcom_code': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Specific PRODCOM dataset code to pin for the Net Import Reliance and Trade Intensity tabs, when a single CN code maps to several. Ignored elsewhere.'}, 'include_other': {'type': 'boolean', 'default': True, 'description': "Bundle entities outside the top-N into a single 'Other' bucket."}, 'remove_outliers': {'type': 'boolean', 'default': True, 'description': 'Drop extreme unit-price outliers before computing weighted-average prices.'}, 'reporter_members': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Explicit member countries for a custom reporter group. Each entry must be an EU member state, EU candidate country, or Northern Ireland. When more than one member is supplied the frame is aggregated into a synthetic group named after 'reporter'."}}, 'description': 'The product/reporter/partner-set/period/frequency slice to query -- the same request body every tradedashboard.eu analytical endpoint takes. See its own field descriptions (product, reporter, partner_set, period_start, period_end, frequency, n_top, ...) for details; only `product` is required, everything else has a sensible default.'}, 'compact': {'type': 'boolean', 'default': False, 'description': 'If true, condense long numeric time series (more than ~6 points -- typically monthly/quarterly windows or wide multi-partner/multi-period breakdowns) into summary statistics (first, last, min, max, mean, pct_change) instead of returning every data point. Leave false for full-fidelity series (e.g. to actually plot a chart); set true when you just need the headline trend and want to save context.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'additionalProperties': True}
get_price_shocks
Get Price Shocks
Detect sudden price regime shifts ("rapid price changes"), accounting for each flow's usual volatility so naturally volatile flows aren't over-flagged. Returns ranked shock events per flow with timeline phases (price spike/drop, volatile trade, return to baseline, ...), magnitude and series.
Input schema
{'type': 'object', 'required': ['query'], 'properties': {'query': {'type': 'object', 'required': ['product'], 'properties': {'lang': {'type': 'string', 'default': 'en', 'description': 'Language for translated labels in the response (en, de, fr, es, it, ro).'}, 'n_top': {'type': 'integer', 'default': 7, 'description': 'Number of top entities (by volume/value) to break out individually in charts.'}, 'product': {'anyOf': [{'type': 'string'}, {'type': 'array', 'items': {'type': 'string'}}], 'examples': ['3801', ['0901', '0902'], 'TOTAL'], 'description': "Combined Nomenclature customs code(s), 2–8 digits, or the literal 'TOTAL' meta-aggregate (all products combined). Pass a list to aggregate several codes: their volumes are summed and prices volume-weighted across every tab — except the Cross-section views, which keep each code separate."}, 'midpoint': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Split point 'YYYY-MM' for the Pattern Shifts tab: the window is cut in two here and the before/after change per entity is reported. Defaults to the middle of the period when omitted."}, 'partners': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Explicit partner-country list that overrides 'partner_set' when present."}, 'reporter': {'type': 'string', 'default': 'European Union', 'description': "Declaring entity: an EU member state, an EU candidate country, Northern Ireland ('XI'), or one of the three aggregate presets ('European Union', 'Euro area', 'EU candidate countries'), or a predefined reporter group name."}, 'frequency': {'type': 'string', 'default': 'quarter', 'description': "Resampling frequency for the series: 'month', 'quarter' or 'year'."}, 'period_end': {'type': 'string', 'description': "Inclusive end of the analysis window, ISO month 'YYYY-MM'. Defaults to roughly three months ago — the latest period Eurostat typically has fully reported."}, 'partner_set': {'type': 'string', 'default': 'non-EU countries', 'description': "Named partner preset, e.g. 'non-EU countries', 'EU countries', 'all countries', or a predefined partner group."}, 'period_start': {'type': 'string', 'default': '2015-01', 'description': "Inclusive start of the analysis window, ISO month 'YYYY-MM'."}, 'prodcom_code': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Specific PRODCOM dataset code to pin for the Net Import Reliance and Trade Intensity tabs, when a single CN code maps to several. Ignored elsewhere.'}, 'include_other': {'type': 'boolean', 'default': True, 'description': "Bundle entities outside the top-N into a single 'Other' bucket."}, 'remove_outliers': {'type': 'boolean', 'default': True, 'description': 'Drop extreme unit-price outliers before computing weighted-average prices.'}, 'reporter_members': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Explicit member countries for a custom reporter group. Each entry must be an EU member state, EU candidate country, or Northern Ireland. When more than one member is supplied the frame is aggregated into a synthetic group named after 'reporter'."}}, 'description': 'The product/reporter/partner-set/period/frequency slice to query -- the same request body every tradedashboard.eu analytical endpoint takes. See its own field descriptions (product, reporter, partner_set, period_start, period_end, frequency, n_top, ...) for details; only `product` is required, everything else has a sensible default.'}, 'compact': {'type': 'boolean', 'default': False, 'description': 'If true, condense long numeric time series (more than ~6 points -- typically monthly/quarterly windows or wide multi-partner/multi-period breakdowns) into summary statistics (first, last, min, max, mean, pct_change) instead of returning every data point. Leave false for full-fidelity series (e.g. to actually plot a chart); set true when you just need the headline trend and want to save context.'}, 'entity_level': {'enum': ['partner', 'reporter'], 'type': 'string', 'default': 'partner', 'description': "Dimension to analyse. 'partner' -- how concentrated/volatile is the reporter's trade across its trading partners? 'reporter' -- how concentrated/volatile is a given partner's trade across EU member states? When 'reporter', 'partner_name' is required."}, 'partner_name': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Partner country name (English). Required when entity_level='reporter'."}, 'lookback_years': {'type': 'integer', 'default': 2, 'maximum': 5, 'minimum': 1, 'description': 'Years before the shock used to establish the coefficient-of-variation baseline.'}, 'min_abnormality': {'type': 'number', 'default': 2.0, 'maximum': 10.0, 'minimum': 0.5, 'description': 'Minimum unusualness of the price shift vs. baseline volatility (CV multiples). Lower = more (weaker) shocks flagged.'}, 'cumulative_share': {'type': 'number', 'default': 0.8, 'maximum': 1.0, 'minimum': 0.3, 'description': 'Only the top trading partners that together account for this share of total trade are analysed.'}, 'max_shocks_per_pair': {'type': 'integer', 'default': 1, 'maximum': 5, 'minimum': 1, 'description': 'Number of non-overlapping shocks kept per trading partner.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'additionalProperties': True}
get_product_compare
Get Product Compare
Sub-product comparison: for a single parent CN code, expands into its children (or, for a multi-code request, compares the entered codes directly) and returns per-subcode quantity/value/price series for both flows -- so each sub-product plots as its own line instead of being aggregated away. A leaf code with no children returns `leaf: true`.
Input schema
{'type': 'object', 'required': ['query'], 'properties': {'query': {'type': 'object', 'required': ['product'], 'properties': {'lang': {'type': 'string', 'default': 'en', 'description': 'Language for translated labels in the response (en, de, fr, es, it, ro).'}, 'n_top': {'type': 'integer', 'default': 7, 'description': 'Number of top entities (by volume/value) to break out individually in charts.'}, 'product': {'anyOf': [{'type': 'string'}, {'type': 'array', 'items': {'type': 'string'}}], 'examples': ['3801', ['0901', '0902'], 'TOTAL'], 'description': "Combined Nomenclature customs code(s), 2–8 digits, or the literal 'TOTAL' meta-aggregate (all products combined). Pass a list to aggregate several codes: their volumes are summed and prices volume-weighted across every tab — except the Cross-section views, which keep each code separate."}, 'midpoint': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Split point 'YYYY-MM' for the Pattern Shifts tab: the window is cut in two here and the before/after change per entity is reported. Defaults to the middle of the period when omitted."}, 'partners': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Explicit partner-country list that overrides 'partner_set' when present."}, 'reporter': {'type': 'string', 'default': 'European Union', 'description': "Declaring entity: an EU member state, an EU candidate country, Northern Ireland ('XI'), or one of the three aggregate presets ('European Union', 'Euro area', 'EU candidate countries'), or a predefined reporter group name."}, 'frequency': {'type': 'string', 'default': 'quarter', 'description': "Resampling frequency for the series: 'month', 'quarter' or 'year'."}, 'period_end': {'type': 'string', 'description': "Inclusive end of the analysis window, ISO month 'YYYY-MM'. Defaults to roughly three months ago — the latest period Eurostat typically has fully reported."}, 'partner_set': {'type': 'string', 'default': 'non-EU countries', 'description': "Named partner preset, e.g. 'non-EU countries', 'EU countries', 'all countries', or a predefined partner group."}, 'period_start': {'type': 'string', 'default': '2015-01', 'description': "Inclusive start of the analysis window, ISO month 'YYYY-MM'."}, 'prodcom_code': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Specific PRODCOM dataset code to pin for the Net Import Reliance and Trade Intensity tabs, when a single CN code maps to several. Ignored elsewhere.'}, 'include_other': {'type': 'boolean', 'default': True, 'description': "Bundle entities outside the top-N into a single 'Other' bucket."}, 'remove_outliers': {'type': 'boolean', 'default': True, 'description': 'Drop extreme unit-price outliers before computing weighted-average prices.'}, 'reporter_members': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Explicit member countries for a custom reporter group. Each entry must be an EU member state, EU candidate country, or Northern Ireland. When more than one member is supplied the frame is aggregated into a synthetic group named after 'reporter'."}}, 'description': 'The product/reporter/partner-set/period/frequency slice to query -- the same request body every tradedashboard.eu analytical endpoint takes. See its own field descriptions (product, reporter, partner_set, period_start, period_end, frequency, n_top, ...) for details; only `product` is required, everything else has a sensible default.'}, 'compact': {'type': 'boolean', 'default': False, 'description': 'If true, condense long numeric time series (more than ~6 points -- typically monthly/quarterly windows or wide multi-partner/multi-period breakdowns) into summary statistics (first, last, min, max, mean, pct_change) instead of returning every data point. Leave false for full-fidelity series (e.g. to actually plot a chart); set true when you just need the headline trend and want to save context.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'additionalProperties': True}
get_production_concentration
Get Production Concentration
How concentrated production of a product is across all DS-059358 reporting countries (PRODCOM; EU member states plus EFTA/candidate/other reporters -- not only the EU-27). HHI of PRODVAL across countries over time, plus each country's production share. Suppressed/absent country figures come back as null, not zero. Use `query.prodcom_code` to pin a specific PRODCOM mapping.
Input schema
{'type': 'object', 'required': ['query'], 'properties': {'query': {'type': 'object', 'required': ['product'], 'properties': {'lang': {'type': 'string', 'default': 'en', 'description': 'Language for translated labels in the response (en, de, fr, es, it, ro).'}, 'n_top': {'type': 'integer', 'default': 7, 'description': 'Number of top entities (by volume/value) to break out individually in charts.'}, 'product': {'anyOf': [{'type': 'string'}, {'type': 'array', 'items': {'type': 'string'}}], 'examples': ['3801', ['0901', '0902'], 'TOTAL'], 'description': "Combined Nomenclature customs code(s), 2–8 digits, or the literal 'TOTAL' meta-aggregate (all products combined). Pass a list to aggregate several codes: their volumes are summed and prices volume-weighted across every tab — except the Cross-section views, which keep each code separate."}, 'midpoint': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Split point 'YYYY-MM' for the Pattern Shifts tab: the window is cut in two here and the before/after change per entity is reported. Defaults to the middle of the period when omitted."}, 'partners': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Explicit partner-country list that overrides 'partner_set' when present."}, 'reporter': {'type': 'string', 'default': 'European Union', 'description': "Declaring entity: an EU member state, an EU candidate country, Northern Ireland ('XI'), or one of the three aggregate presets ('European Union', 'Euro area', 'EU candidate countries'), or a predefined reporter group name."}, 'frequency': {'type': 'string', 'default': 'quarter', 'description': "Resampling frequency for the series: 'month', 'quarter' or 'year'."}, 'period_end': {'type': 'string', 'description': "Inclusive end of the analysis window, ISO month 'YYYY-MM'. Defaults to roughly three months ago — the latest period Eurostat typically has fully reported."}, 'partner_set': {'type': 'string', 'default': 'non-EU countries', 'description': "Named partner preset, e.g. 'non-EU countries', 'EU countries', 'all countries', or a predefined partner group."}, 'period_start': {'type': 'string', 'default': '2015-01', 'description': "Inclusive start of the analysis window, ISO month 'YYYY-MM'."}, 'prodcom_code': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Specific PRODCOM dataset code to pin for the Net Import Reliance and Trade Intensity tabs, when a single CN code maps to several. Ignored elsewhere.'}, 'include_other': {'type': 'boolean', 'default': True, 'description': "Bundle entities outside the top-N into a single 'Other' bucket."}, 'remove_outliers': {'type': 'boolean', 'default': True, 'description': 'Drop extreme unit-price outliers before computing weighted-average prices.'}, 'reporter_members': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Explicit member countries for a custom reporter group. Each entry must be an EU member state, EU candidate country, or Northern Ireland. When more than one member is supplied the frame is aggregated into a synthetic group named after 'reporter'."}}, 'description': 'The product/reporter/partner-set/period/frequency slice to query -- the same request body every tradedashboard.eu analytical endpoint takes. See its own field descriptions (product, reporter, partner_set, period_start, period_end, frequency, n_top, ...) for details; only `product` is required, everything else has a sensible default.'}, 'compact': {'type': 'boolean', 'default': False, 'description': 'If true, condense long numeric time series (more than ~6 points -- typically monthly/quarterly windows or wide multi-partner/multi-period breakdowns) into summary statistics (first, last, min, max, mean, pct_change) instead of returning every data point. Leave false for full-fidelity series (e.g. to actually plot a chart); set true when you just need the headline trend and want to save context.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'additionalProperties': True}
get_production_series
Get Production Series
EU27 and per-country PRODCOM production series: EU quantity, EU production unit value, and the same two per reporting country (all DS-059358 reporters, not just EU-27, since production data carries no trade columns). Country-level figures are heavily confidentiality -suppressed; suppressed/absent values come back as null, not zero. Use `query.prodcom_code` to pin a specific PRODCOM mapping when a CN code maps to several.
Input schema
{'type': 'object', 'required': ['query'], 'properties': {'query': {'type': 'object', 'required': ['product'], 'properties': {'lang': {'type': 'string', 'default': 'en', 'description': 'Language for translated labels in the response (en, de, fr, es, it, ro).'}, 'n_top': {'type': 'integer', 'default': 7, 'description': 'Number of top entities (by volume/value) to break out individually in charts.'}, 'product': {'anyOf': [{'type': 'string'}, {'type': 'array', 'items': {'type': 'string'}}], 'examples': ['3801', ['0901', '0902'], 'TOTAL'], 'description': "Combined Nomenclature customs code(s), 2–8 digits, or the literal 'TOTAL' meta-aggregate (all products combined). Pass a list to aggregate several codes: their volumes are summed and prices volume-weighted across every tab — except the Cross-section views, which keep each code separate."}, 'midpoint': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Split point 'YYYY-MM' for the Pattern Shifts tab: the window is cut in two here and the before/after change per entity is reported. Defaults to the middle of the period when omitted."}, 'partners': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Explicit partner-country list that overrides 'partner_set' when present."}, 'reporter': {'type': 'string', 'default': 'European Union', 'description': "Declaring entity: an EU member state, an EU candidate country, Northern Ireland ('XI'), or one of the three aggregate presets ('European Union', 'Euro area', 'EU candidate countries'), or a predefined reporter group name."}, 'frequency': {'type': 'string', 'default': 'quarter', 'description': "Resampling frequency for the series: 'month', 'quarter' or 'year'."}, 'period_end': {'type': 'string', 'description': "Inclusive end of the analysis window, ISO month 'YYYY-MM'. Defaults to roughly three months ago — the latest period Eurostat typically has fully reported."}, 'partner_set': {'type': 'string', 'default': 'non-EU countries', 'description': "Named partner preset, e.g. 'non-EU countries', 'EU countries', 'all countries', or a predefined partner group."}, 'period_start': {'type': 'string', 'default': '2015-01', 'description': "Inclusive start of the analysis window, ISO month 'YYYY-MM'."}, 'prodcom_code': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Specific PRODCOM dataset code to pin for the Net Import Reliance and Trade Intensity tabs, when a single CN code maps to several. Ignored elsewhere.'}, 'include_other': {'type': 'boolean', 'default': True, 'description': "Bundle entities outside the top-N into a single 'Other' bucket."}, 'remove_outliers': {'type': 'boolean', 'default': True, 'description': 'Drop extreme unit-price outliers before computing weighted-average prices.'}, 'reporter_members': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Explicit member countries for a custom reporter group. Each entry must be an EU member state, EU candidate country, or Northern Ireland. When more than one member is supplied the frame is aggregated into a synthetic group named after 'reporter'."}}, 'description': 'The product/reporter/partner-set/period/frequency slice to query -- the same request body every tradedashboard.eu analytical endpoint takes. See its own field descriptions (product, reporter, partner_set, period_start, period_end, frequency, n_top, ...) for details; only `product` is required, everything else has a sensible default.'}, 'compact': {'type': 'boolean', 'default': False, 'description': 'If true, condense long numeric time series (more than ~6 points -- typically monthly/quarterly windows or wide multi-partner/multi-period breakdowns) into summary statistics (first, last, min, max, mean, pct_change) instead of returning every data point. Leave false for full-fidelity series (e.g. to actually plot a chart); set true when you just need the headline trend and want to save context.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'additionalProperties': True}
get_product_profile
Get Product Profile
Report-section helper ("Scope & definitions"): the resolved product code + label, a one-sentence caveat when the code bundles several sub-products (`has_subcodes`), the data-coverage window actually cached for it, and whether it has a usable PRODCOM mapping (gating the autonomy/vulnerability section). Deliberately thin -- no full CN hierarchy breadcrumb or sibling enumeration. Returns `{narrative_facts, chart_data, available, reason}` -- see `get_market_summary` for the shape this convention follows across all of this bridge's report-section helpers.
Input schema
{'type': 'object', 'required': ['query'], 'properties': {'lang': {'type': 'string', 'default': 'en', 'description': 'Language for translated labels in the response. One of: bg, cs, da, de, el, en, es, et, fi, fr, ga, hr, hu, it, lt, lv, mt, nl, pl, pt, ro, sk, sl, sv.'}, 'query': {'type': 'object', 'required': ['product'], 'properties': {'lang': {'type': 'string', 'default': 'en', 'description': 'Language for translated labels in the response (en, de, fr, es, it, ro).'}, 'n_top': {'type': 'integer', 'default': 7, 'description': 'Number of top entities (by volume/value) to break out individually in charts.'}, 'product': {'anyOf': [{'type': 'string'}, {'type': 'array', 'items': {'type': 'string'}}], 'examples': ['3801', ['0901', '0902'], 'TOTAL'], 'description': "Combined Nomenclature customs code(s), 2–8 digits, or the literal 'TOTAL' meta-aggregate (all products combined). Pass a list to aggregate several codes: their volumes are summed and prices volume-weighted across every tab — except the Cross-section views, which keep each code separate."}, 'midpoint': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Split point 'YYYY-MM' for the Pattern Shifts tab: the window is cut in two here and the before/after change per entity is reported. Defaults to the middle of the period when omitted."}, 'partners': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Explicit partner-country list that overrides 'partner_set' when present."}, 'reporter': {'type': 'string', 'default': 'European Union', 'description': "Declaring entity: an EU member state, an EU candidate country, Northern Ireland ('XI'), or one of the three aggregate presets ('European Union', 'Euro area', 'EU candidate countries'), or a predefined reporter group name."}, 'frequency': {'type': 'string', 'default': 'quarter', 'description': "Resampling frequency for the series: 'month', 'quarter' or 'year'."}, 'period_end': {'type': 'string', 'description': "Inclusive end of the analysis window, ISO month 'YYYY-MM'. Defaults to roughly three months ago — the latest period Eurostat typically has fully reported."}, 'partner_set': {'type': 'string', 'default': 'non-EU countries', 'description': "Named partner preset, e.g. 'non-EU countries', 'EU countries', 'all countries', or a predefined partner group."}, 'period_start': {'type': 'string', 'default': '2015-01', 'description': "Inclusive start of the analysis window, ISO month 'YYYY-MM'."}, 'prodcom_code': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Specific PRODCOM dataset code to pin for the Net Import Reliance and Trade Intensity tabs, when a single CN code maps to several. Ignored elsewhere.'}, 'include_other': {'type': 'boolean', 'default': True, 'description': "Bundle entities outside the top-N into a single 'Other' bucket."}, 'remove_outliers': {'type': 'boolean', 'default': True, 'description': 'Drop extreme unit-price outliers before computing weighted-average prices.'}, 'reporter_members': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Explicit member countries for a custom reporter group. Each entry must be an EU member state, EU candidate country, or Northern Ireland. When more than one member is supplied the frame is aggregated into a synthetic group named after 'reporter'."}}, 'description': 'The product/reporter/partner-set/period/frequency slice to query -- the same request body every tradedashboard.eu analytical endpoint takes. See its own field descriptions (product, reporter, partner_set, period_start, period_end, frequency, n_top, ...) for details; only `product` is required, everything else has a sensible default.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'additionalProperties': True}
get_reporter_benchmark
Get Reporter Benchmark
Every EU reporter ranked by value for one year -- the country-view counterpart of `get_reporter_detail`. Returns a single-year snapshot (every real EU member state's quantity, value and price per flow, ranked by value) plus a benchmark price time series: the weighted average across whichever reporters `query.reporter` resolves to (the whole EU by default, or narrower when `query.reporter` is itself an aggregate -- euro area, a named group, or an ad hoc custom group), the cross-reporter min/max envelope, and the selected reporter's own line when `query.reporter` is a single real member state. Use it to answer "how does this country -- or reporter group -- compare to every other reporter?".
Input schema
{'type': 'object', 'required': ['query'], 'properties': {'year': {'anyOf': [{'type': 'integer', 'maximum': 2100, 'minimum': 1988}, {'type': 'null'}], 'default': None, 'description': 'Year for the cross-sectional snapshot. Defaults to the latest full year with data.'}, 'query': {'type': 'object', 'required': ['product'], 'properties': {'lang': {'type': 'string', 'default': 'en', 'description': 'Language for translated labels in the response (en, de, fr, es, it, ro).'}, 'n_top': {'type': 'integer', 'default': 7, 'description': 'Number of top entities (by volume/value) to break out individually in charts.'}, 'product': {'anyOf': [{'type': 'string'}, {'type': 'array', 'items': {'type': 'string'}}], 'examples': ['3801', ['0901', '0902'], 'TOTAL'], 'description': "Combined Nomenclature customs code(s), 2–8 digits, or the literal 'TOTAL' meta-aggregate (all products combined). Pass a list to aggregate several codes: their volumes are summed and prices volume-weighted across every tab — except the Cross-section views, which keep each code separate."}, 'midpoint': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Split point 'YYYY-MM' for the Pattern Shifts tab: the window is cut in two here and the before/after change per entity is reported. Defaults to the middle of the period when omitted."}, 'partners': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Explicit partner-country list that overrides 'partner_set' when present."}, 'reporter': {'type': 'string', 'default': 'European Union', 'description': "Declaring entity: an EU member state, an EU candidate country, Northern Ireland ('XI'), or one of the three aggregate presets ('European Union', 'Euro area', 'EU candidate countries'), or a predefined reporter group name."}, 'frequency': {'type': 'string', 'default': 'quarter', 'description': "Resampling frequency for the series: 'month', 'quarter' or 'year'."}, 'period_end': {'type': 'string', 'description': "Inclusive end of the analysis window, ISO month 'YYYY-MM'. Defaults to roughly three months ago — the latest period Eurostat typically has fully reported."}, 'partner_set': {'type': 'string', 'default': 'non-EU countries', 'description': "Named partner preset, e.g. 'non-EU countries', 'EU countries', 'all countries', or a predefined partner group."}, 'period_start': {'type': 'string', 'default': '2015-01', 'description': "Inclusive start of the analysis window, ISO month 'YYYY-MM'."}, 'prodcom_code': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Specific PRODCOM dataset code to pin for the Net Import Reliance and Trade Intensity tabs, when a single CN code maps to several. Ignored elsewhere.'}, 'include_other': {'type': 'boolean', 'default': True, 'description': "Bundle entities outside the top-N into a single 'Other' bucket."}, 'remove_outliers': {'type': 'boolean', 'default': True, 'description': 'Drop extreme unit-price outliers before computing weighted-average prices.'}, 'reporter_members': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Explicit member countries for a custom reporter group. Each entry must be an EU member state, EU candidate country, or Northern Ireland. When more than one member is supplied the frame is aggregated into a synthetic group named after 'reporter'."}}, 'description': 'The product/reporter/partner-set/period/frequency slice to query -- the same request body every tradedashboard.eu analytical endpoint takes. See its own field descriptions (product, reporter, partner_set, period_start, period_end, frequency, n_top, ...) for details; only `product` is required, everything else has a sensible default.'}, 'compact': {'type': 'boolean', 'default': False, 'description': 'If true, condense long numeric time series (more than ~6 points -- typically monthly/quarterly windows or wide multi-partner/multi-period breakdowns) into summary statistics (first, last, min, max, mean, pct_change) instead of returning every data point. Leave false for full-fidelity series (e.g. to actually plot a chart); set true when you just need the headline trend and want to save context.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'additionalProperties': True}
get_reporter_detail
Get Reporter Detail
Per-EU-member-state import/export breakdown -- the reporter-side counterpart of `get_partner_detail`. Top-N member states (by quantity and by value) with their quantity, value and price series. Aggregate reporters (EU, Euro area, groups) are excluded from the ranking.
Input schema
{'type': 'object', 'required': ['query'], 'properties': {'query': {'type': 'object', 'required': ['product'], 'properties': {'lang': {'type': 'string', 'default': 'en', 'description': 'Language for translated labels in the response (en, de, fr, es, it, ro).'}, 'n_top': {'type': 'integer', 'default': 7, 'description': 'Number of top entities (by volume/value) to break out individually in charts.'}, 'product': {'anyOf': [{'type': 'string'}, {'type': 'array', 'items': {'type': 'string'}}], 'examples': ['3801', ['0901', '0902'], 'TOTAL'], 'description': "Combined Nomenclature customs code(s), 2–8 digits, or the literal 'TOTAL' meta-aggregate (all products combined). Pass a list to aggregate several codes: their volumes are summed and prices volume-weighted across every tab — except the Cross-section views, which keep each code separate."}, 'midpoint': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Split point 'YYYY-MM' for the Pattern Shifts tab: the window is cut in two here and the before/after change per entity is reported. Defaults to the middle of the period when omitted."}, 'partners': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Explicit partner-country list that overrides 'partner_set' when present."}, 'reporter': {'type': 'string', 'default': 'European Union', 'description': "Declaring entity: an EU member state, an EU candidate country, Northern Ireland ('XI'), or one of the three aggregate presets ('European Union', 'Euro area', 'EU candidate countries'), or a predefined reporter group name."}, 'frequency': {'type': 'string', 'default': 'quarter', 'description': "Resampling frequency for the series: 'month', 'quarter' or 'year'."}, 'period_end': {'type': 'string', 'description': "Inclusive end of the analysis window, ISO month 'YYYY-MM'. Defaults to roughly three months ago — the latest period Eurostat typically has fully reported."}, 'partner_set': {'type': 'string', 'default': 'non-EU countries', 'description': "Named partner preset, e.g. 'non-EU countries', 'EU countries', 'all countries', or a predefined partner group."}, 'period_start': {'type': 'string', 'default': '2015-01', 'description': "Inclusive start of the analysis window, ISO month 'YYYY-MM'."}, 'prodcom_code': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Specific PRODCOM dataset code to pin for the Net Import Reliance and Trade Intensity tabs, when a single CN code maps to several. Ignored elsewhere.'}, 'include_other': {'type': 'boolean', 'default': True, 'description': "Bundle entities outside the top-N into a single 'Other' bucket."}, 'remove_outliers': {'type': 'boolean', 'default': True, 'description': 'Drop extreme unit-price outliers before computing weighted-average prices.'}, 'reporter_members': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Explicit member countries for a custom reporter group. Each entry must be an EU member state, EU candidate country, or Northern Ireland. When more than one member is supplied the frame is aggregated into a synthetic group named after 'reporter'."}}, 'description': 'The product/reporter/partner-set/period/frequency slice to query -- the same request body every tradedashboard.eu analytical endpoint takes. See its own field descriptions (product, reporter, partner_set, period_start, period_end, frequency, n_top, ...) for details; only `product` is required, everything else has a sensible default.'}, 'compact': {'type': 'boolean', 'default': False, 'description': 'If true, condense long numeric time series (more than ~6 points -- typically monthly/quarterly windows or wide multi-partner/multi-period breakdowns) into summary statistics (first, last, min, max, mean, pct_change) instead of returning every data point. Leave false for full-fidelity series (e.g. to actually plot a chart); set true when you just need the headline trend and want to save context.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'additionalProperties': True}
get_specialisation
Get Specialisation
Intra-EU revealed symmetric comparative advantage (RSCA) per member state -- a Balassa index benchmarked against the EU instead of the world. Runs -1 (under-specialised) to +1 (strongly specialised), value -based and intra-EU only. Treat with caution: intra-EU flows are distorted by the Rotterdam/Antwerp quasi-transit effect.
Input schema
{'type': 'object', 'required': ['query'], 'properties': {'year': {'anyOf': [{'type': 'integer', 'maximum': 2100, 'minimum': 1988}, {'type': 'null'}], 'default': None, 'description': 'Year for the snapshot. Defaults to the latest full year with data.'}, 'query': {'type': 'object', 'required': ['product'], 'properties': {'lang': {'type': 'string', 'default': 'en', 'description': 'Language for translated labels in the response (en, de, fr, es, it, ro).'}, 'n_top': {'type': 'integer', 'default': 7, 'description': 'Number of top entities (by volume/value) to break out individually in charts.'}, 'product': {'anyOf': [{'type': 'string'}, {'type': 'array', 'items': {'type': 'string'}}], 'examples': ['3801', ['0901', '0902'], 'TOTAL'], 'description': "Combined Nomenclature customs code(s), 2–8 digits, or the literal 'TOTAL' meta-aggregate (all products combined). Pass a list to aggregate several codes: their volumes are summed and prices volume-weighted across every tab — except the Cross-section views, which keep each code separate."}, 'midpoint': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Split point 'YYYY-MM' for the Pattern Shifts tab: the window is cut in two here and the before/after change per entity is reported. Defaults to the middle of the period when omitted."}, 'partners': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Explicit partner-country list that overrides 'partner_set' when present."}, 'reporter': {'type': 'string', 'default': 'European Union', 'description': "Declaring entity: an EU member state, an EU candidate country, Northern Ireland ('XI'), or one of the three aggregate presets ('European Union', 'Euro area', 'EU candidate countries'), or a predefined reporter group name."}, 'frequency': {'type': 'string', 'default': 'quarter', 'description': "Resampling frequency for the series: 'month', 'quarter' or 'year'."}, 'period_end': {'type': 'string', 'description': "Inclusive end of the analysis window, ISO month 'YYYY-MM'. Defaults to roughly three months ago — the latest period Eurostat typically has fully reported."}, 'partner_set': {'type': 'string', 'default': 'non-EU countries', 'description': "Named partner preset, e.g. 'non-EU countries', 'EU countries', 'all countries', or a predefined partner group."}, 'period_start': {'type': 'string', 'default': '2015-01', 'description': "Inclusive start of the analysis window, ISO month 'YYYY-MM'."}, 'prodcom_code': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Specific PRODCOM dataset code to pin for the Net Import Reliance and Trade Intensity tabs, when a single CN code maps to several. Ignored elsewhere.'}, 'include_other': {'type': 'boolean', 'default': True, 'description': "Bundle entities outside the top-N into a single 'Other' bucket."}, 'remove_outliers': {'type': 'boolean', 'default': True, 'description': 'Drop extreme unit-price outliers before computing weighted-average prices.'}, 'reporter_members': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Explicit member countries for a custom reporter group. Each entry must be an EU member state, EU candidate country, or Northern Ireland. When more than one member is supplied the frame is aggregated into a synthetic group named after 'reporter'."}}, 'description': 'The product/reporter/partner-set/period/frequency slice to query -- the same request body every tradedashboard.eu analytical endpoint takes. See its own field descriptions (product, reporter, partner_set, period_start, period_end, frequency, n_top, ...) for details; only `product` is required, everything else has a sensible default.'}, 'compact': {'type': 'boolean', 'default': False, 'description': 'If true, condense long numeric time series (more than ~6 points -- typically monthly/quarterly windows or wide multi-partner/multi-period breakdowns) into summary statistics (first, last, min, max, mean, pct_change) instead of returning every data point. Leave false for full-fidelity series (e.g. to actually plot a chart); set true when you just need the headline trend and want to save context.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'additionalProperties': True}
get_subcontracting
Get Subcontracting
EU27 sub-contracting intensity: the share of sold production that is toll (sub-contracted) manufacturing rather than own-account output. Returns intensity (%) across value/quantity, its component series, per-period data-quality status, resolved PRODCOM codes and availability notes. The own/sub split only exists from 2021 onward.
Input schema
{'type': 'object', 'required': ['query'], 'properties': {'query': {'type': 'object', 'required': ['product'], 'properties': {'lang': {'type': 'string', 'default': 'en', 'description': 'Language for translated labels in the response (en, de, fr, es, it, ro).'}, 'n_top': {'type': 'integer', 'default': 7, 'description': 'Number of top entities (by volume/value) to break out individually in charts.'}, 'product': {'anyOf': [{'type': 'string'}, {'type': 'array', 'items': {'type': 'string'}}], 'examples': ['3801', ['0901', '0902'], 'TOTAL'], 'description': "Combined Nomenclature customs code(s), 2–8 digits, or the literal 'TOTAL' meta-aggregate (all products combined). Pass a list to aggregate several codes: their volumes are summed and prices volume-weighted across every tab — except the Cross-section views, which keep each code separate."}, 'midpoint': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Split point 'YYYY-MM' for the Pattern Shifts tab: the window is cut in two here and the before/after change per entity is reported. Defaults to the middle of the period when omitted."}, 'partners': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Explicit partner-country list that overrides 'partner_set' when present."}, 'reporter': {'type': 'string', 'default': 'European Union', 'description': "Declaring entity: an EU member state, an EU candidate country, Northern Ireland ('XI'), or one of the three aggregate presets ('European Union', 'Euro area', 'EU candidate countries'), or a predefined reporter group name."}, 'frequency': {'type': 'string', 'default': 'quarter', 'description': "Resampling frequency for the series: 'month', 'quarter' or 'year'."}, 'period_end': {'type': 'string', 'description': "Inclusive end of the analysis window, ISO month 'YYYY-MM'. Defaults to roughly three months ago — the latest period Eurostat typically has fully reported."}, 'partner_set': {'type': 'string', 'default': 'non-EU countries', 'description': "Named partner preset, e.g. 'non-EU countries', 'EU countries', 'all countries', or a predefined partner group."}, 'period_start': {'type': 'string', 'default': '2015-01', 'description': "Inclusive start of the analysis window, ISO month 'YYYY-MM'."}, 'prodcom_code': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Specific PRODCOM dataset code to pin for the Net Import Reliance and Trade Intensity tabs, when a single CN code maps to several. Ignored elsewhere.'}, 'include_other': {'type': 'boolean', 'default': True, 'description': "Bundle entities outside the top-N into a single 'Other' bucket."}, 'remove_outliers': {'type': 'boolean', 'default': True, 'description': 'Drop extreme unit-price outliers before computing weighted-average prices.'}, 'reporter_members': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Explicit member countries for a custom reporter group. Each entry must be an EU member state, EU candidate country, or Northern Ireland. When more than one member is supplied the frame is aggregated into a synthetic group named after 'reporter'."}}, 'description': 'The product/reporter/partner-set/period/frequency slice to query -- the same request body every tradedashboard.eu analytical endpoint takes. See its own field descriptions (product, reporter, partner_set, period_start, period_end, frequency, n_top, ...) for details; only `product` is required, everything else has a sensible default.'}, 'compact': {'type': 'boolean', 'default': False, 'description': 'If true, condense long numeric time series (more than ~6 points -- typically monthly/quarterly windows or wide multi-partner/multi-period breakdowns) into summary statistics (first, last, min, max, mean, pct_change) instead of returning every data point. Leave false for full-fidelity series (e.g. to actually plot a chart); set true when you just need the headline trend and want to save context.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'additionalProperties': True}
get_subcontracting_members
Get Subcontracting Members
Per-country sub-contracting intensity (PRODCOM): for each reporting country, the share of its sold production that is toll manufacturing -- which countries act as processing hubs vs. autonomous producers. Spans all DS-059358 reporters that report the own/sub split; others simply don't appear. Country cells are heavily confidentiality-suppressed (null, not zero, when absent).
Input schema
{'type': 'object', 'required': ['query'], 'properties': {'query': {'type': 'object', 'required': ['product'], 'properties': {'lang': {'type': 'string', 'default': 'en', 'description': 'Language for translated labels in the response (en, de, fr, es, it, ro).'}, 'n_top': {'type': 'integer', 'default': 7, 'description': 'Number of top entities (by volume/value) to break out individually in charts.'}, 'product': {'anyOf': [{'type': 'string'}, {'type': 'array', 'items': {'type': 'string'}}], 'examples': ['3801', ['0901', '0902'], 'TOTAL'], 'description': "Combined Nomenclature customs code(s), 2–8 digits, or the literal 'TOTAL' meta-aggregate (all products combined). Pass a list to aggregate several codes: their volumes are summed and prices volume-weighted across every tab — except the Cross-section views, which keep each code separate."}, 'midpoint': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Split point 'YYYY-MM' for the Pattern Shifts tab: the window is cut in two here and the before/after change per entity is reported. Defaults to the middle of the period when omitted."}, 'partners': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Explicit partner-country list that overrides 'partner_set' when present."}, 'reporter': {'type': 'string', 'default': 'European Union', 'description': "Declaring entity: an EU member state, an EU candidate country, Northern Ireland ('XI'), or one of the three aggregate presets ('European Union', 'Euro area', 'EU candidate countries'), or a predefined reporter group name."}, 'frequency': {'type': 'string', 'default': 'quarter', 'description': "Resampling frequency for the series: 'month', 'quarter' or 'year'."}, 'period_end': {'type': 'string', 'description': "Inclusive end of the analysis window, ISO month 'YYYY-MM'. Defaults to roughly three months ago — the latest period Eurostat typically has fully reported."}, 'partner_set': {'type': 'string', 'default': 'non-EU countries', 'description': "Named partner preset, e.g. 'non-EU countries', 'EU countries', 'all countries', or a predefined partner group."}, 'period_start': {'type': 'string', 'default': '2015-01', 'description': "Inclusive start of the analysis window, ISO month 'YYYY-MM'."}, 'prodcom_code': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Specific PRODCOM dataset code to pin for the Net Import Reliance and Trade Intensity tabs, when a single CN code maps to several. Ignored elsewhere.'}, 'include_other': {'type': 'boolean', 'default': True, 'description': "Bundle entities outside the top-N into a single 'Other' bucket."}, 'remove_outliers': {'type': 'boolean', 'default': True, 'description': 'Drop extreme unit-price outliers before computing weighted-average prices.'}, 'reporter_members': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Explicit member countries for a custom reporter group. Each entry must be an EU member state, EU candidate country, or Northern Ireland. When more than one member is supplied the frame is aggregated into a synthetic group named after 'reporter'."}}, 'description': 'The product/reporter/partner-set/period/frequency slice to query -- the same request body every tradedashboard.eu analytical endpoint takes. See its own field descriptions (product, reporter, partner_set, period_start, period_end, frequency, n_top, ...) for details; only `product` is required, everything else has a sensible default.'}, 'compact': {'type': 'boolean', 'default': False, 'description': 'If true, condense long numeric time series (more than ~6 points -- typically monthly/quarterly windows or wide multi-partner/multi-period breakdowns) into summary statistics (first, last, min, max, mean, pct_change) instead of returning every data point. Leave false for full-fidelity series (e.g. to actually plot a chart); set true when you just need the headline trend and want to save context.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'additionalProperties': True}
get_subtree
Get Subtree
Return the Combined Nomenclature sub-tree rooted at `code` (its children, and their children, ...), each with a `code` and a `text` description. Use this to see whether a heading you're about to use (e.g. as `query.product` elsewhere) is actually a clean match, or bundles several distinct sub-products together.
Input schema
{'type': 'object', 'required': ['code'], 'properties': {'code': {'type': 'string', 'description': "Combined Nomenclature code to expand, e.g. '7010'."}, 'lang': {'type': 'string', 'default': 'en', 'description': 'Language for translated labels in the response. One of: bg, cs, da, de, el, en, es, et, fi, fr, ga, hr, hu, it, lt, lv, mt, nl, pl, pt, ro, sk, sl, sv.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'additionalProperties': True}
get_supply_shocks
Get Supply Shocks
Detect abnormal collapses in trade volumes ("sudden volume changes"). Flags periods where a partner/product pair's volume drops well below its historical average (>2 sigma by default). Returns ranked shock events per flow, each with timeline phases (baseline, decline, disruption, recovery, ...), magnitude, abnormality score and underlying series.
Input schema
{'type': 'object', 'required': ['query'], 'properties': {'query': {'type': 'object', 'required': ['product'], 'properties': {'lang': {'type': 'string', 'default': 'en', 'description': 'Language for translated labels in the response (en, de, fr, es, it, ro).'}, 'n_top': {'type': 'integer', 'default': 7, 'description': 'Number of top entities (by volume/value) to break out individually in charts.'}, 'product': {'anyOf': [{'type': 'string'}, {'type': 'array', 'items': {'type': 'string'}}], 'examples': ['3801', ['0901', '0902'], 'TOTAL'], 'description': "Combined Nomenclature customs code(s), 2–8 digits, or the literal 'TOTAL' meta-aggregate (all products combined). Pass a list to aggregate several codes: their volumes are summed and prices volume-weighted across every tab — except the Cross-section views, which keep each code separate."}, 'midpoint': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Split point 'YYYY-MM' for the Pattern Shifts tab: the window is cut in two here and the before/after change per entity is reported. Defaults to the middle of the period when omitted."}, 'partners': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Explicit partner-country list that overrides 'partner_set' when present."}, 'reporter': {'type': 'string', 'default': 'European Union', 'description': "Declaring entity: an EU member state, an EU candidate country, Northern Ireland ('XI'), or one of the three aggregate presets ('European Union', 'Euro area', 'EU candidate countries'), or a predefined reporter group name."}, 'frequency': {'type': 'string', 'default': 'quarter', 'description': "Resampling frequency for the series: 'month', 'quarter' or 'year'."}, 'period_end': {'type': 'string', 'description': "Inclusive end of the analysis window, ISO month 'YYYY-MM'. Defaults to roughly three months ago — the latest period Eurostat typically has fully reported."}, 'partner_set': {'type': 'string', 'default': 'non-EU countries', 'description': "Named partner preset, e.g. 'non-EU countries', 'EU countries', 'all countries', or a predefined partner group."}, 'period_start': {'type': 'string', 'default': '2015-01', 'description': "Inclusive start of the analysis window, ISO month 'YYYY-MM'."}, 'prodcom_code': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Specific PRODCOM dataset code to pin for the Net Import Reliance and Trade Intensity tabs, when a single CN code maps to several. Ignored elsewhere.'}, 'include_other': {'type': 'boolean', 'default': True, 'description': "Bundle entities outside the top-N into a single 'Other' bucket."}, 'remove_outliers': {'type': 'boolean', 'default': True, 'description': 'Drop extreme unit-price outliers before computing weighted-average prices.'}, 'reporter_members': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Explicit member countries for a custom reporter group. Each entry must be an EU member state, EU candidate country, or Northern Ireland. When more than one member is supplied the frame is aggregated into a synthetic group named after 'reporter'."}}, 'description': 'The product/reporter/partner-set/period/frequency slice to query -- the same request body every tradedashboard.eu analytical endpoint takes. See its own field descriptions (product, reporter, partner_set, period_start, period_end, frequency, n_top, ...) for details; only `product` is required, everything else has a sensible default.'}, 'compact': {'type': 'boolean', 'default': False, 'description': 'If true, condense long numeric time series (more than ~6 points -- typically monthly/quarterly windows or wide multi-partner/multi-period breakdowns) into summary statistics (first, last, min, max, mean, pct_change) instead of returning every data point. Leave false for full-fidelity series (e.g. to actually plot a chart); set true when you just need the headline trend and want to save context.'}, 'entity_level': {'enum': ['partner', 'reporter'], 'type': 'string', 'default': 'partner', 'description': "Dimension to analyse. 'partner' -- how concentrated/volatile is the reporter's trade across its trading partners? 'reporter' -- how concentrated/volatile is a given partner's trade across EU member states? When 'reporter', 'partner_name' is required."}, 'partner_name': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Partner country name (English). Required when entity_level='reporter'."}, 'min_abnormality': {'type': 'number', 'default': 2.0, 'maximum': 10.0, 'minimum': 0.1, 'description': 'Minimum statistical abnormality of the volume crash, in sigma. Lower = more (weaker) shocks flagged.'}, 'cumulative_share': {'type': 'number', 'default': 0.8, 'maximum': 1.0, 'minimum': 0.3, 'description': 'Only the top trading partners that together account for this share of total trade are analysed.'}, 'min_active_years': {'type': 'integer', 'default': 2, 'maximum': 5, 'minimum': 1, 'description': 'Consecutive years of regular trade required before a collapse can be flagged.'}, 'max_tolerated_gap': {'type': 'integer', 'default': 2, 'maximum': 6, 'minimum': 1, 'description': 'Consecutive quiet periods allowed within an otherwise stable trading relationship.'}, 'relative_threshold': {'type': 'number', 'default': 0.1, 'maximum': 0.95, 'minimum': 0.01, 'description': 'Minimum drop relative to peak volume to count as a collapse (0.10 = 10% drop).'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'additionalProperties': True}
get_top_entities
Get Top Entities
Just the ordered list of top entities for a slice -- no time series. A lightweight helper for populating entity pickers or quickly checking who the top partners/reporters are without pulling full series.
Input schema
{'type': 'object', 'required': ['query'], 'properties': {'n': {'anyOf': [{'type': 'integer', 'maximum': 200, 'minimum': 1}, {'type': 'null'}], 'default': None, 'description': 'Number of top entities to return. Defaults to query.n_top when omitted.'}, 'flow': {'enum': ['Imports', 'Exports'], 'type': 'string', 'default': 'Imports', 'description': 'Trade flow to use.'}, 'query': {'type': 'object', 'required': ['product'], 'properties': {'lang': {'type': 'string', 'default': 'en', 'description': 'Language for translated labels in the response (en, de, fr, es, it, ro).'}, 'n_top': {'type': 'integer', 'default': 7, 'description': 'Number of top entities (by volume/value) to break out individually in charts.'}, 'product': {'anyOf': [{'type': 'string'}, {'type': 'array', 'items': {'type': 'string'}}], 'examples': ['3801', ['0901', '0902'], 'TOTAL'], 'description': "Combined Nomenclature customs code(s), 2–8 digits, or the literal 'TOTAL' meta-aggregate (all products combined). Pass a list to aggregate several codes: their volumes are summed and prices volume-weighted across every tab — except the Cross-section views, which keep each code separate."}, 'midpoint': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Split point 'YYYY-MM' for the Pattern Shifts tab: the window is cut in two here and the before/after change per entity is reported. Defaults to the middle of the period when omitted."}, 'partners': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Explicit partner-country list that overrides 'partner_set' when present."}, 'reporter': {'type': 'string', 'default': 'European Union', 'description': "Declaring entity: an EU member state, an EU candidate country, Northern Ireland ('XI'), or one of the three aggregate presets ('European Union', 'Euro area', 'EU candidate countries'), or a predefined reporter group name."}, 'frequency': {'type': 'string', 'default': 'quarter', 'description': "Resampling frequency for the series: 'month', 'quarter' or 'year'."}, 'period_end': {'type': 'string', 'description': "Inclusive end of the analysis window, ISO month 'YYYY-MM'. Defaults to roughly three months ago — the latest period Eurostat typically has fully reported."}, 'partner_set': {'type': 'string', 'default': 'non-EU countries', 'description': "Named partner preset, e.g. 'non-EU countries', 'EU countries', 'all countries', or a predefined partner group."}, 'period_start': {'type': 'string', 'default': '2015-01', 'description': "Inclusive start of the analysis window, ISO month 'YYYY-MM'."}, 'prodcom_code': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Specific PRODCOM dataset code to pin for the Net Import Reliance and Trade Intensity tabs, when a single CN code maps to several. Ignored elsewhere.'}, 'include_other': {'type': 'boolean', 'default': True, 'description': "Bundle entities outside the top-N into a single 'Other' bucket."}, 'remove_outliers': {'type': 'boolean', 'default': True, 'description': 'Drop extreme unit-price outliers before computing weighted-average prices.'}, 'reporter_members': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Explicit member countries for a custom reporter group. Each entry must be an EU member state, EU candidate country, or Northern Ireland. When more than one member is supplied the frame is aggregated into a synthetic group named after 'reporter'."}}, 'description': 'The product/reporter/partner-set/period/frequency slice to query -- the same request body every tradedashboard.eu analytical endpoint takes. See its own field descriptions (product, reporter, partner_set, period_start, period_end, frequency, n_top, ...) for details; only `product` is required, everything else has a sensible default.'}, 'entity_level': {'enum': ['partner', 'reporter'], 'type': 'string', 'default': 'partner', 'description': "Dimension to rank: 'partner' (trading partners) or 'reporter' (EU member states)."}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'additionalProperties': True}
get_trade_intensity
Get Trade Intensity
Trade Intensity (TI) = (Imports + Exports) / (Imports + Production), annual. Near 1 = highly trade-exposed sector; near 0 = predominantly domestic. Used in the Commission's CEEAG methodology for carbon-leakage / State-aid eligibility. Returns the TI series, its components, sibling-category/per-code comparisons, resolved PRODCOM codes and availability notes.
Input schema
{'type': 'object', 'required': ['query'], 'properties': {'query': {'type': 'object', 'required': ['product'], 'properties': {'lang': {'type': 'string', 'default': 'en', 'description': 'Language for translated labels in the response (en, de, fr, es, it, ro).'}, 'n_top': {'type': 'integer', 'default': 7, 'description': 'Number of top entities (by volume/value) to break out individually in charts.'}, 'product': {'anyOf': [{'type': 'string'}, {'type': 'array', 'items': {'type': 'string'}}], 'examples': ['3801', ['0901', '0902'], 'TOTAL'], 'description': "Combined Nomenclature customs code(s), 2–8 digits, or the literal 'TOTAL' meta-aggregate (all products combined). Pass a list to aggregate several codes: their volumes are summed and prices volume-weighted across every tab — except the Cross-section views, which keep each code separate."}, 'midpoint': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Split point 'YYYY-MM' for the Pattern Shifts tab: the window is cut in two here and the before/after change per entity is reported. Defaults to the middle of the period when omitted."}, 'partners': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Explicit partner-country list that overrides 'partner_set' when present."}, 'reporter': {'type': 'string', 'default': 'European Union', 'description': "Declaring entity: an EU member state, an EU candidate country, Northern Ireland ('XI'), or one of the three aggregate presets ('European Union', 'Euro area', 'EU candidate countries'), or a predefined reporter group name."}, 'frequency': {'type': 'string', 'default': 'quarter', 'description': "Resampling frequency for the series: 'month', 'quarter' or 'year'."}, 'period_end': {'type': 'string', 'description': "Inclusive end of the analysis window, ISO month 'YYYY-MM'. Defaults to roughly three months ago — the latest period Eurostat typically has fully reported."}, 'partner_set': {'type': 'string', 'default': 'non-EU countries', 'description': "Named partner preset, e.g. 'non-EU countries', 'EU countries', 'all countries', or a predefined partner group."}, 'period_start': {'type': 'string', 'default': '2015-01', 'description': "Inclusive start of the analysis window, ISO month 'YYYY-MM'."}, 'prodcom_code': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Specific PRODCOM dataset code to pin for the Net Import Reliance and Trade Intensity tabs, when a single CN code maps to several. Ignored elsewhere.'}, 'include_other': {'type': 'boolean', 'default': True, 'description': "Bundle entities outside the top-N into a single 'Other' bucket."}, 'remove_outliers': {'type': 'boolean', 'default': True, 'description': 'Drop extreme unit-price outliers before computing weighted-average prices.'}, 'reporter_members': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Explicit member countries for a custom reporter group. Each entry must be an EU member state, EU candidate country, or Northern Ireland. When more than one member is supplied the frame is aggregated into a synthetic group named after 'reporter'."}}, 'description': 'The product/reporter/partner-set/period/frequency slice to query -- the same request body every tradedashboard.eu analytical endpoint takes. See its own field descriptions (product, reporter, partner_set, period_start, period_end, frequency, n_top, ...) for details; only `product` is required, everything else has a sensible default.'}, 'compact': {'type': 'boolean', 'default': False, 'description': 'If true, condense long numeric time series (more than ~6 points -- typically monthly/quarterly windows or wide multi-partner/multi-period breakdowns) into summary statistics (first, last, min, max, mean, pct_change) instead of returning every data point. Leave false for full-fidelity series (e.g. to actually plot a chart); set true when you just need the headline trend and want to save context.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'additionalProperties': True}
get_volatility
Get Volatility
Coefficient-of-variation (CV = stdev / mean) volatility per partner/reporter x product pair, over inactive-period-excluded history. Higher CV = the flow swings more relative to its typical level. Returns per-entity CV bars (with drill-down series) and, unless include_heatmap=false, an entity x sub-product CV heatmap.
Input schema
{'type': 'object', 'required': ['query'], 'properties': {'flow': {'enum': ['Imports', 'Exports'], 'type': 'string', 'default': 'Imports', 'description': 'Trade flow to use.'}, 'query': {'type': 'object', 'required': ['product'], 'properties': {'lang': {'type': 'string', 'default': 'en', 'description': 'Language for translated labels in the response (en, de, fr, es, it, ro).'}, 'n_top': {'type': 'integer', 'default': 7, 'description': 'Number of top entities (by volume/value) to break out individually in charts.'}, 'product': {'anyOf': [{'type': 'string'}, {'type': 'array', 'items': {'type': 'string'}}], 'examples': ['3801', ['0901', '0902'], 'TOTAL'], 'description': "Combined Nomenclature customs code(s), 2–8 digits, or the literal 'TOTAL' meta-aggregate (all products combined). Pass a list to aggregate several codes: their volumes are summed and prices volume-weighted across every tab — except the Cross-section views, which keep each code separate."}, 'midpoint': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Split point 'YYYY-MM' for the Pattern Shifts tab: the window is cut in two here and the before/after change per entity is reported. Defaults to the middle of the period when omitted."}, 'partners': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Explicit partner-country list that overrides 'partner_set' when present."}, 'reporter': {'type': 'string', 'default': 'European Union', 'description': "Declaring entity: an EU member state, an EU candidate country, Northern Ireland ('XI'), or one of the three aggregate presets ('European Union', 'Euro area', 'EU candidate countries'), or a predefined reporter group name."}, 'frequency': {'type': 'string', 'default': 'quarter', 'description': "Resampling frequency for the series: 'month', 'quarter' or 'year'."}, 'period_end': {'type': 'string', 'description': "Inclusive end of the analysis window, ISO month 'YYYY-MM'. Defaults to roughly three months ago — the latest period Eurostat typically has fully reported."}, 'partner_set': {'type': 'string', 'default': 'non-EU countries', 'description': "Named partner preset, e.g. 'non-EU countries', 'EU countries', 'all countries', or a predefined partner group."}, 'period_start': {'type': 'string', 'default': '2015-01', 'description': "Inclusive start of the analysis window, ISO month 'YYYY-MM'."}, 'prodcom_code': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Specific PRODCOM dataset code to pin for the Net Import Reliance and Trade Intensity tabs, when a single CN code maps to several. Ignored elsewhere.'}, 'include_other': {'type': 'boolean', 'default': True, 'description': "Bundle entities outside the top-N into a single 'Other' bucket."}, 'remove_outliers': {'type': 'boolean', 'default': True, 'description': 'Drop extreme unit-price outliers before computing weighted-average prices.'}, 'reporter_members': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Explicit member countries for a custom reporter group. Each entry must be an EU member state, EU candidate country, or Northern Ireland. When more than one member is supplied the frame is aggregated into a synthetic group named after 'reporter'."}}, 'description': 'The product/reporter/partner-set/period/frequency slice to query -- the same request body every tradedashboard.eu analytical endpoint takes. See its own field descriptions (product, reporter, partner_set, period_start, period_end, frequency, n_top, ...) for details; only `product` is required, everything else has a sensible default.'}, 'combos': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Comma-separated flow x indicator keys to compute at once: imp-qty, imp-price, exp-qty, exp-price. When set, overrides flow/indicator and returns a dict keyed by combo.'}, 'compact': {'type': 'boolean', 'default': False, 'description': 'If true, condense long numeric time series (more than ~6 points -- typically monthly/quarterly windows or wide multi-partner/multi-period breakdowns) into summary statistics (first, last, min, max, mean, pct_change) instead of returning every data point. Leave false for full-fidelity series (e.g. to actually plot a chart); set true when you just need the headline trend and want to save context.'}, 'indicator': {'enum': ['quantity', 'price'], 'type': 'string', 'default': 'quantity', 'description': 'Measure for single-grid mode (ignored when combos is set).'}, 'entity_level': {'enum': ['partner', 'reporter'], 'type': 'string', 'default': 'partner', 'description': "Dimension to analyse. 'partner' -- how concentrated/volatile is the reporter's trade across its trading partners? 'reporter' -- how concentrated/volatile is a given partner's trade across EU member states? When 'reporter', 'partner_name' is required."}, 'partner_name': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Partner country name (English). Required when entity_level='reporter'."}, 'n_top_entities': {'type': 'integer', 'default': 15, 'maximum': 100, 'minimum': 1, 'description': 'Number of top entities to include in the volatility bar chart.'}, 'n_top_products': {'type': 'integer', 'default': 10, 'maximum': 50, 'minimum': 1, 'description': 'Max number of sub-products in the entity x product heatmap.'}, 'include_heatmap': {'type': 'boolean', 'default': True, 'description': 'Whether to compute the entity x sub-product CV heatmap (false is faster, bar chart only).'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'additionalProperties': True}
get_volatility_summary
Get Volatility Summary
Report-section helper ("Volatility & shocks"): the entities analysed are picked by `get_volatility` (ranks by trade volume, reports each one's CV) and by `get_price_shocks`/`get_supply_shocks` at default parameters (both already scoped to top-value partners via `cumulative_share=0.8`) -- never re-picked from the shocks themselves. Retries shock detection once with loosened thresholds before concluding "no shocks"; an empty result is itself a reportable finding, not a gap. When shocks are found, the top events by abnormality and their series are the section's findings; when none are found (even after the retry), stability is the finding. `get_pattern_shift` is intentionally not part of this bundle -- its before/after quadrant framing is too easily misread; call it directly if you specifically need it. Returns `{narrative_facts, chart_data, available, reason}`.
Input schema
{'type': 'object', 'required': ['query'], 'properties': {'query': {'type': 'object', 'required': ['product'], 'properties': {'lang': {'type': 'string', 'default': 'en', 'description': 'Language for translated labels in the response (en, de, fr, es, it, ro).'}, 'n_top': {'type': 'integer', 'default': 7, 'description': 'Number of top entities (by volume/value) to break out individually in charts.'}, 'product': {'anyOf': [{'type': 'string'}, {'type': 'array', 'items': {'type': 'string'}}], 'examples': ['3801', ['0901', '0902'], 'TOTAL'], 'description': "Combined Nomenclature customs code(s), 2–8 digits, or the literal 'TOTAL' meta-aggregate (all products combined). Pass a list to aggregate several codes: their volumes are summed and prices volume-weighted across every tab — except the Cross-section views, which keep each code separate."}, 'midpoint': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Split point 'YYYY-MM' for the Pattern Shifts tab: the window is cut in two here and the before/after change per entity is reported. Defaults to the middle of the period when omitted."}, 'partners': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Explicit partner-country list that overrides 'partner_set' when present."}, 'reporter': {'type': 'string', 'default': 'European Union', 'description': "Declaring entity: an EU member state, an EU candidate country, Northern Ireland ('XI'), or one of the three aggregate presets ('European Union', 'Euro area', 'EU candidate countries'), or a predefined reporter group name."}, 'frequency': {'type': 'string', 'default': 'quarter', 'description': "Resampling frequency for the series: 'month', 'quarter' or 'year'."}, 'period_end': {'type': 'string', 'description': "Inclusive end of the analysis window, ISO month 'YYYY-MM'. Defaults to roughly three months ago — the latest period Eurostat typically has fully reported."}, 'partner_set': {'type': 'string', 'default': 'non-EU countries', 'description': "Named partner preset, e.g. 'non-EU countries', 'EU countries', 'all countries', or a predefined partner group."}, 'period_start': {'type': 'string', 'default': '2015-01', 'description': "Inclusive start of the analysis window, ISO month 'YYYY-MM'."}, 'prodcom_code': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Specific PRODCOM dataset code to pin for the Net Import Reliance and Trade Intensity tabs, when a single CN code maps to several. Ignored elsewhere.'}, 'include_other': {'type': 'boolean', 'default': True, 'description': "Bundle entities outside the top-N into a single 'Other' bucket."}, 'remove_outliers': {'type': 'boolean', 'default': True, 'description': 'Drop extreme unit-price outliers before computing weighted-average prices.'}, 'reporter_members': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': "Explicit member countries for a custom reporter group. Each entry must be an EU member state, EU candidate country, or Northern Ireland. When more than one member is supplied the frame is aggregated into a synthetic group named after 'reporter'."}}, 'description': 'The product/reporter/partner-set/period/frequency slice to query -- the same request body every tradedashboard.eu analytical endpoint takes. See its own field descriptions (product, reporter, partner_set, period_start, period_end, frequency, n_top, ...) for details; only `product` is required, everything else has a sensible default.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'additionalProperties': True}
guidelines_for_a_long_report
Guidelines For A Long Report
Read this first for an in-depth report. Returns the long-report workflow: which of the 35+ tools to combine per angle (partners, concentration, volatility & shocks, autonomy), the dashboard menu/tab structure for pointing readers at views, and the methodological notes needed to interpret and cite figures correctly. Call this before guessing at tool use.
Input schema
{'type': 'object', 'properties': {}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['result'], 'properties': {'result': {'type': 'string'}}, 'x-fastmcp-wrap-result': True}
guidelines_for_a_short_report
Guidelines For A Short Report
Read this first for a quick report. Returns the short-report workflow: resolve a product code, then call `get_full_report` for the five most important report sections in one shot -- enough for a quick, simple report. Also covers access/quota, the shared `query` object and the `compact` option.
Input schema
{'type': 'object', 'properties': {}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['result'], 'properties': {'result': {'type': 'string'}}, 'x-fastmcp-wrap-result': True}
resolve_product_code
Resolve Product Code
Resolve a free-text query or CN code(s) into validated product code(s) with descriptions -- the recommended first step before using a code as `product` in any other tool's `query`. Saves the search -> validate -> (optional) subtree round-trip: a bare keyword runs a search, a single code (or comma-separated list) is validated and described directly. Tip: Comext/CN nomenclature is frequently coarser than a colloquial product name (e.g. there is no code for "glass jars" alone -- only heading 7010, which bundles jars with bottles, flasks and closures). Check `has_subcodes` and, if useful, set `include_children=true` to see whether a finer sub-code is actually a better match before committing to one code for a whole report.
Input schema
{'type': 'object', 'required': ['query'], 'properties': {'lang': {'type': 'string', 'default': 'en', 'description': 'Language for translated labels in the response. One of: bg, cs, da, de, el, en, es, et, fi, fr, ga, hr, hu, it, lt, lv, mt, nl, pl, pt, ro, sk, sl, sv.'}, 'limit': {'type': 'integer', 'default': 20, 'maximum': 50, 'minimum': 1, 'description': 'Max keyword-search results (ignored for direct code validation).'}, 'query': {'type': 'string', 'description': "Free-text keyword (e.g. 'glass jars') OR one or more CN codes, comma-separated (e.g. '7010' or '7010, 7013')."}, 'include_children': {'type': 'boolean', 'default': False, 'description': 'When resolving a single direct code, also fetch its immediate CN subtree so finer-grained alternatives are visible in one call.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'additionalProperties': True}
search_codes
Search Codes
Keyword/code search over the Combined Nomenclature (or PRODCOM). Returns ranked `{code, label, path}` candidates. Prefer `resolve_product_code` for a one-call keyword-or-code helper; use this directly if you specifically want the raw ranked candidate list.
Input schema
{'type': 'object', 'required': ['q'], 'properties': {'q': {'type': 'string', 'maxLength': 100, 'description': 'Keyword or code fragment to search for.'}, 'lang': {'type': 'string', 'default': 'en', 'description': 'Language for translated labels in the response. One of: bg, cs, da, de, el, en, es, et, fi, fr, ga, hr, hu, it, lt, lv, mt, nl, pl, pt, ro, sk, sl, sv.'}, 'limit': {'type': 'integer', 'default': 20, 'maximum': 100, 'minimum': 1, 'description': 'Max number of candidates to return.'}, 'source': {'enum': ['cn', 'prodcom'], 'type': 'string', 'default': 'cn', 'description': "Nomenclature to search. A dotted PRODCOM code (e.g. '23.13') is auto-detected either way and reverse-mapped to CN codes."}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'additionalProperties': True}
validate_code
Validate Code
Validate and describe one or more Combined Nomenclature codes. For a single code, returns the full hierarchy of description levels (`levels`), the resolved `product_name`, and `has_subcodes`. For a comma-separated list, returns `{"results": [...]}` with one entry per code (each either a success dict or an `{"code", "error"}` pair).
Input schema
{'type': 'object', 'required': ['code'], 'properties': {'code': {'type': 'string', 'description': "One CN code, or a comma-separated list of up to 50 codes (e.g. '73030010, 73030090'). The literal 'TOTAL' is also accepted."}, 'lang': {'type': 'string', 'default': 'en', 'description': 'Language for translated labels in the response. One of: bg, cs, da, de, el, en, es, et, fi, fr, ga, hr, hu, it, lt, lv, mt, nl, pl, pt, ro, sk, sl, sv.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'additionalProperties': True}
Added
get_full_report
Sept. 17, 2026, 12:39 p.m.
Added
get_autonomy_summary
Sept. 17, 2026, 12:39 p.m.
Added
get_volatility_summary
Sept. 17, 2026, 12:39 p.m.
Added
get_market_structure_summary
Sept. 17, 2026, 12:39 p.m.
Added
get_market_summary
Sept. 17, 2026, 12:39 p.m.
Added
get_product_profile
Sept. 17, 2026, 12:39 p.m.
Added
resolve_product_code
Sept. 17, 2026, 12:39 p.m.
Added
get_subcontracting_members
Sept. 17, 2026, 12:39 p.m.
Added
get_subcontracting
Sept. 17, 2026, 12:39 p.m.
Added
get_export_propensity
Sept. 17, 2026, 12:39 p.m.
Added
get_trade_intensity
Sept. 17, 2026, 12:39 p.m.
Added
get_net_import_reliance
Sept. 17, 2026, 12:39 p.m.
Added
get_price_shocks
Sept. 17, 2026, 12:39 p.m.
Added
get_supply_shocks
Sept. 17, 2026, 12:39 p.m.
Added
get_pattern_shift
Sept. 17, 2026, 12:39 p.m.
Added
get_volatility
Sept. 17, 2026, 12:39 p.m.
Added
get_production_concentration
Sept. 17, 2026, 12:39 p.m.
Added
get_specialisation
Sept. 17, 2026, 12:39 p.m.
Added
get_concentration_map
Sept. 17, 2026, 12:39 p.m.
Added
get_concentration_compare
Sept. 17, 2026, 12:39 p.m.
Added
get_concentration
Sept. 17, 2026, 12:39 p.m.
Added
get_product_compare
Sept. 17, 2026, 12:39 p.m.
Added
get_production_series
Sept. 17, 2026, 12:39 p.m.
Added
get_top_entities
Sept. 17, 2026, 12:39 p.m.
Added
get_map_data
Sept. 17, 2026, 12:39 p.m.
Added
get_reporter_benchmark
Sept. 17, 2026, 12:39 p.m.
Added
get_reporter_detail
Sept. 17, 2026, 12:39 p.m.
Added
get_partner_detail
Sept. 17, 2026, 12:39 p.m.
Added
get_overview
Sept. 17, 2026, 12:39 p.m.
Added
get_data_range
Sept. 17, 2026, 12:39 p.m.