changedInput schema / properties / canvas_id / description
Previous value: -"Existing canvas ID to accumulate results into across multiple queries. Omit to allocate a fresh canvas; the response includes a canvas_id when results spill to DataCanvas."New value: +"Existing canvas ID to accumulate results into across multiple queries. This selects the destination only; it does not force staging. Use output_mode=\"canvas\" to stage an under-budget result."
addedInput schema / properties / output_mode
Added value: +{
+ "default": "auto",
+ "description": "Result placement. auto returns an under-budget result inline and spills only when needed. canvas explicitly stages the full result, using canvas_id when supplied or allocating a fresh canvas.",
+ "enum": [
+ "auto",
+ "canvas"
+ ],
+ "type": "string"
+}
changedInput schema / properties / start_period / description
Previous value: -"Start of time range (inclusive). Accepts any of YYYY (annual), YYYY-SN (semi-annual, e.g. 2023-S1), YYYY-QN (quarterly, e.g. 2023-Q1), YYYY-MM (monthly), or YYYY-MM-DD (daily), whatever the dataflow's frequency. The bound covers the whole period it names, so start_period 2023 admits 2023-M01 and 2023-Q1. Observations before this period are excluded from the result."New value: +"Start of time range (inclusive). Accepts any of YYYY (annual), YYYY-SN (semi-annual, e.g. 2023-S1), YYYY-QN (quarterly, e.g. 2023-Q1), YYYY-MM (monthly), or a calendar-valid YYYY-MM-DD (daily), whatever the dataflow's frequency. The bound covers the whole period it names, so start_period 2023 admits 2023-M01 and 2023-Q1. Observations before this period are excluded from the result."
changedOutput schema / anyOf
Previous value: -[
- {
- "not": {
- "required": [
- "error"
- ]
- },
- "required": [
- "dataflow_id",
- "key",
- "observations",
- "series_attributes",
- "observation_count",
- "truncated",
- "source"
- ]
- },
- {
- "required": [
- "error"
- ]
- }
-]New value: +[
+ {
+ "not": {
+ "required": [
+ "error"
+ ]
+ },
+ "required": [
+ "dataflow_id",
+ "key",
+ "observations",
+ "series_attributes",
+ "observation_count",
+ "staged",
+ "truncated",
+ "source"
+ ]
+ },
+ {
+ "required": [
+ "error"
+ ]
+ }
+]
changedOutput schema / properties / canvas_id / description
Previous value: -"DataCanvas session ID — present when truncated=true. Pass to imf_dataframe_query or imf_dataframe_describe to query the full result."New value: +"DataCanvas session ID — present when staged=true. Pass first to imf_dataframe_describe, then to imf_dataframe_query."
changedOutput schema / properties / error / properties / data / properties / reason / description
Previous value: -"Machine-readable failure mode. Declared by this tool: `dataflow_not_found`: dataflow_id does not match any known dataflow on api.imf.org `no_data`: Key is structurally valid but the dataflow holds no series for this code combination, or the dataflow publishes no series at all `no_data_in_range`: The key returned observations but start_period/end_period excluded every one of them `key_dimension_mismatch`: Number of dot-separated segments in key does not match the dataflow's DSD dimension count `empty_key_segment`: A dot-separated position in key is empty or blank, which matches no series upstream `invalid_period_format`: start_period or end_period is not one of the recognized period formats `invalid_period_range`: start_period is later than end_period `structure_unavailable`: api.imf.org returns non-200 on the data endpoint `dataflow_list_unavailable`: The dataflow catalog that dataflow_id is resolved against could not be fetched — fires before the DSD and data lookups are attempted Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `dataflow_not_found`: dataflow_id does not match any known dataflow on api.imf.org `no_data`: Key is structurally valid but the dataflow holds no series for this code combination, or the dataflow publishes no series at all `no_data_in_range`: The key returned observations but start_period/end_period excluded every one of them `key_dimension_mismatch`: Number of dot-separated segments in key does not match the dataflow's DSD dimension count `empty_key_segment`: A dot-separated position in key is empty or blank, which matches no series upstream `invalid_period_format`: start_period or end_period is not one of the recognized period formats `invalid_period_range`: start_period is later than end_period `structure_unavailable`: The dataflow structure (DSD) cannot be fetched after the dataflow catalog resolved successfully `canvas_unavailable`: output_mode=\"canvas\" was requested but DataCanvas is disabled `response_too_large`: Fixed staged-result metadata exceeds the response budget before any observation preview can be included `dataflow_list_unavailable`: The dataflow catalog that dataflow_id is resolved against could not be fetched — fires before the DSD and data lookups are attempted Other values are possible when a failure originates below the handler."
changedOutput schema / properties / error / properties / data / properties / reason / examples
Previous value: -[
- "dataflow_not_found",
- "no_data",
- "no_data_in_range",
- "key_dimension_mismatch",
- "empty_key_segment",
- "invalid_period_format",
- "invalid_period_range",
- "structure_unavailable",
- "dataflow_list_unavailable"
-]New value: +[
+ "dataflow_not_found",
+ "no_data",
+ "no_data_in_range",
+ "key_dimension_mismatch",
+ "empty_key_segment",
+ "invalid_period_format",
+ "invalid_period_range",
+ "structure_unavailable",
+ "canvas_unavailable",
+ "response_too_large",
+ "dataflow_list_unavailable"
+]
changedOutput schema / properties / notice / description
Previous value: -"Populated when a period bound was set but some observations carry a time_period label the range filter does not recognize — those rows are returned unfiltered, so the requested range did not apply to them."New value: +"Populated when a period bound was set but some observations carry a time_period label the range filter does not recognize. Composes with staged retrieval_guidance when both apply."
changedOutput schema / properties / observations / description
Previous value: -"Inline observations. Empty when results spilled to canvas (see canvas_id / table_name)."New value: +"Inline observation preview. For staged results this may contain the full set or a budget-limited prefix; observation_count remains the full count."
addedOutput schema / properties / retrieval_guidance
Added value: +{
+ "description": "Present on every staged result. Identifies the imf_dataframe_describe-before-imf_dataframe_query retrieval workflow.",
+ "type": "string"
+}
addedOutput schema / properties / staged
Added value: +{
+ "description": "True when the complete observation set is stored on DataCanvas. canvas_id and table_name are present whenever true.",
+ "type": "boolean"
+}
changedOutput schema / properties / table_name / description
Previous value: -"DuckDB table name on the canvas — present when truncated=true; reference in SQL via FROM <table_name>."New value: +"DuckDB table name on the canvas — present when staged=true; reference in SQL via FROM <table_name>."
changedOutput schema / properties / truncated / description
Previous value: -"True when the result exceeded the inline limit and was staged on a DataCanvas table; canvas_id and table_name are populated and imf_dataframe_query provides SQL access to the full set."New value: +"True only when observations is an incomplete preview of observation_count. A result can be staged=true and truncated=false when every observation also fits inline."