changedInput schema / properties / agency_id / description
Previous value: -"Agency ID, e.g. IMF.RES or IMF.STA. Auto-detected from dataflow list when omitted."New value: +"Agency ID, e.g. IMF.RES or IMF.STA, matched case-insensitively. Auto-detected from dataflow list when omitted."
changedInput schema / properties / key / description
Previous value: -"Dot-separated dimension codes in DSD keyPosition order. Call imf_get_database to get key_format and valid codes first. Use + to combine codes at one position (e.g. USA+GBR.NGDP_RPCH.A). Use * to match every code at a position — *.NGDP_RPCH.A returns the indicator for all countries, and CAN.*.A every indicator for Canada. Every position needs a code or a *; an empty segment (USA..A) is rejected. A * stands alone at its position — combined with other codes (USA+*) it is rejected. Codes are trimmed and matched case-insensitively (usa resolves to USA), and the response echoes the canonical key. A code missing from its dimension's codelist is rejected before the query, naming the nearest valid codes. Country codes are ISO 3-letter: USA not US, GBR not GB, DEU not DE."New value: +"Dot-separated dimension codes in DSD keyPosition order. Call imf_get_database to get key_format and valid codes first. Use + to combine codes at one position (e.g. USA+GBR.NGDP_RPCH.A). Use * to match every code at a position — *.NGDP_RPCH.A returns the indicator for all countries, and CAN.*.A every indicator for Canada. Every position needs a code or a *; an empty segment (USA..A) is rejected. A * stands alone at its position — combined with other codes (USA+*) it is rejected. Codes are trimmed and matched case-insensitively (usa resolves to USA), empty and repeated + members are dropped (USA++GBR+USA is queried as USA+GBR, and notice says so), and the response echoes the canonical key. A code missing from its dimension's codelist is rejected before the query, naming the nearest valid codes. The portal limits the request URL, so a + list of a few hundred codes is rejected as too long — use * there, or split the codes across calls. Country codes are ISO 3-letter: USA not US, GBR not GB, DEU not DE."
changedInput schema / properties / last_n_observations / description
Previous value: -"Keep only each series' last N observations, an integer from 1 to 10,000; 1 returns each series' latest value. Latest is per series: series end at different periods, and a WEO series ends in its projection years (e.g. 2031), so set end_period to stop at a past year. With start_period or end_period, the last N inside that range. A series with fewer than N observations is returned whole. Omit to return every observation."New value: +"Keep only each series' last N observations, an integer from 1 to 1,000,000; 1 returns each series' latest value. Latest is per series: series end at different periods, and a WEO series ends in its projection years (e.g. 2031), so set end_period to stop at a past year. With start_period or end_period, the last N inside that range. A series with fewer than N observations is returned whole. Omit to return every observation."
changedInput schema / properties / last_n_observations / maximum
Previous value: -10000New value: +1000000
changedInput schema / properties / version / description
Previous value: -"Dataflow version. Auto-detected from dataflow list when omitted."New value: +"Dataflow version, e.g. 9.0.0. Auto-detected from dataflow list when omitted."
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. `wildcard_in_code_list`: A key position combines * with other codes in a + list, where the portal ignores the * and returns only the listed codes. `invalid_key_code`: A key code is not in its dimension's codelist, checked before any data request. `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`: The fixed part of the result — full series_metadata, plus the retrieval handle when staging — exceeds the response budget before any observation 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."New value: +"Machine-readable failure mode. Declared by this tool: `dataflow_not_found`: dataflow_id matches no catalog dataflow on api.imf.org, or none under the agency_id and version given. `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, or holds only empty + members (USA.NGDP_RPCH.+), which matches no series upstream. `wildcard_in_code_list`: A key position combines * with other codes in a + list, where the portal ignores the * and returns only the listed codes. `invalid_key_code`: A key code is not in its dimension's codelist, checked before any data request. `key_too_long`: The IMF portal refused the data request because its URL is too long — a + list of a few hundred codes at one position. `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`: The fixed part of the result — full series_metadata, plus the retrieval handle when staging — exceeds the response budget before any observation 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. `data_unavailable`: The data request failed after its retries — the portal answered 5xx or an unusable body, could not be reached, or timed out — or the call spent its 45-second budget for upstream requests. `rate_limited`: The IMF portal answered the data request with HTTP 429 after its retries. 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",
- "wildcard_in_code_list",
- "invalid_key_code",
- "invalid_period_format",
- "invalid_period_range",
- "structure_unavailable",
- "canvas_unavailable",
- "response_too_large",
- "dataflow_list_unavailable"
-]New value: +[
+ "dataflow_not_found",
+ "no_data",
+ "no_data_in_range",
+ "key_dimension_mismatch",
+ "empty_key_segment",
+ "wildcard_in_code_list",
+ "invalid_key_code",
+ "key_too_long",
+ "invalid_period_format",
+ "invalid_period_range",
+ "structure_unavailable",
+ "canvas_unavailable",
+ "response_too_large",
+ "dataflow_list_unavailable",
+ "data_unavailable",
+ "rate_limited"
+]
addedOutput schema / properties / missing_series
Added value: +{
+ "description": "Requested series of a + key that returned no observation while others did, in key order, at most 20. A requested series is each combination of the codes listed at every position. Counted over the full result, so a series left out of a truncated preview is not listed. Absent when every requested series returned.",
+ "items": {
+ "additionalProperties": false,
+ "description": "One requested series the result does not carry.",
+ "properties": {
+ "available_range": {
+ "additionalProperties": false,
+ "description": "With no_data_in_range: the window the series covers.",
+ "properties": {
+ "first": {
+ "description": "Earliest time_period the series has.",
+ "type": "string"
+ },
+ "last": {
+ "description": "Latest time_period the series has.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "first",
+ "last"
+ ],
+ "type": "object"
+ },
+ "reason": {
+ "description": "What a query for this series alone reports: no_data when it has no observations at all, no_data_in_range when it has some, but none inside start_period/end_period.",
+ "enum": [
+ "no_data",
+ "no_data_in_range"
+ ],
+ "type": "string"
+ },
+ "series_key": {
+ "description": "A requested series that returned no observation: one code per key position, * where the key has *, e.g. ASM.NGDP_RPCH.A.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "series_key",
+ "reason"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+}
addedOutput schema / properties / missing_series_count
Added value: +{
+ "description": "How many requested series returned no observation — the full count when missing_series stops at 20. Present with missing_series.",
+ "type": "number"
+}
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. Composes with retrieval_guidance, staged or not, when both apply."New value: +"Populated when empty or duplicate + members were dropped from key (naming each position and the key queried), or when a period bound was set but some observations carry a time_period label the range filter does not recognize; both texts appear when both apply. Composes with retrieval_guidance, staged or not, when both apply."
addedOutput schema / properties / observations / items / properties / reference_period
Added value: +{
+ "description": "This observation's own reference (base) period, exactly as published, e.g. 2010A or 2010M1. Present only when the observation carries one (CPI and GS_LEPM publish it); where the series-level value reads Multiple, it varies by observation. Never filled in from the series.",
+ "type": "string"
+}
addedOutput schema / properties / series_attributes / properties / reference_period
Added value: +{
+ "description": "Reference (base) period of an index series, exactly as published: free text such as 2010A, 2016M12, 2010=100, or Multiple (the observations carry their own). Present only when the series carries one; never parsed as a time_period.",
+ "type": "string"
+}
changedOutput schema / properties / series_metadata / items / description
Previous value: -"Unit, scale, and decimals for one series in the result."New value: +"Unit, scale, decimals, and reference period for one series in the result."
addedOutput schema / properties / series_metadata / items / properties / reference_period
Added value: +{
+ "description": "This series' reference (base) period, exactly as published, e.g. 2010A or 2010=100. Present only when the series carries one.",
+ "type": "string"
+}
addedOutput schema / properties / unresolved_attributes
Added value: +{
+ "additionalProperties": false,
+ "description": "Present only when a + key on the dimension an attribute is grouped by made the portal leave unit, scale, or decimals out, and the extra request that recovers them failed. A listed attribute that is null is then unknown, not unpublished. Absent when that request found no value — the dataflow publishes none — or was not needed.",
+ "properties": {
+ "concepts": {
+ "description": "Attributes the recovery request failed to bring back, e.g. [\"unit\"].",
+ "items": {
+ "enum": [
+ "unit",
+ "scale",
+ "decimals"
+ ],
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "guidance": {
+ "description": "How to get them: retry, or query the key with a * it names (or a * at one position), which matches every code there, so keep only the series requested.",
+ "type": "string"
+ },
+ "series_count": {
+ "description": "Series in the result whose value for a listed attribute is null.",
+ "type": "number"
+ }
+ },
+ "required": [
+ "concepts",
+ "series_count",
+ "guidance"
+ ],
+ "type": "object"
+}