{"record":{"id":"03cd535b69c0bafe","repo":"OpenBB-finance/OpenBB","slug":"invalid-indicator-code-s-for-dataflow-dataflow","errorCode":null,"errorMessage":"Invalid indicator code(s) for dataflow '{dataflow}': {'; '.join(error_parts)}. Use `obb.economy.available_indicators(provider='imf', dataflows='{dataflow}')` to see all valid codes.","messagePattern":"Invalid indicator code\\(s\\) for dataflow '(.+?)': (.+?)\\. Use `obb\\.economy\\.available_indicators\\(provider='imf', dataflows='(.+?)'\\)` to see all valid codes\\.","errorType":"validation","errorClass":"OpenBBError","httpStatus":null,"severity":"error","filePath":"openbb_platform/providers/imf/openbb_imf/utils/helpers.py","lineNumber":313,"sourceCode":"                            else:\n                                expected_pos = idx\n\n                            if 0 <= expected_pos < len(effective_dim_order):\n                                expected_dim = effective_dim_order[expected_pos]\n                                sample = sorted(\n                                    codes_by_dimension.get(expected_dim, set())\n                                )[:5]\n                                segment_errors.append(\n                                    f\"'{seg}' is invalid for {expected_dim} (valid: {', '.join(sample)})\"\n                                )\n                            else:\n                                segment_errors.append(f\"'{seg}' is unrecognized\")\n\n                    error_parts.append(f\"'{code}': {'; '.join(segment_errors)}\")\n                else:\n                    error_parts.append(f\"'{code}'\")\n\n            raise OpenBBError(\n                f\"Invalid indicator code(s) for dataflow '{dataflow}': \"\n                f\"{'; '.join(error_parts)}. \"\n                f\"Use `obb.economy.available_indicators(provider='imf', dataflows='{dataflow}')` to see all valid codes.\"\n            )\n\n    except OpenBBError:\n        raise\n    except Exception:\n        # Fallback: put all codes in INDICATOR dimension (can't validate)\n        dimension_codes[\"INDICATOR\"] = indicator_codes\n\n    return dict(dimension_codes)\n\n\ndef detect_transform_dimension(\n    dataflow: str,\n) -> tuple[str | None, str | None, dict[str, str], dict[str, str]]:\n    \"\"\"","sourceCodeStart":295,"sourceCodeEnd":331,"githubUrl":"https://github.com/OpenBB-finance/OpenBB/blob/3e071fcc2cd9f891cac6040ae60296dba76dab46/openbb_platform/providers/imf/openbb_imf/utils/helpers.py#L295-L331","documentation":"Raised in helpers.py when building an SDMX dimension filter: one or more indicator codes could not be matched against the dataflow's expected dimension structure. The message dissects each failing code per-segment (which dimension a segment was expected in, with a 5-value sample of valid codes) and points to obb.economy.available_indicators(provider='imf', dataflows=...) to list valid codes. A broad except keeps a fallback (dumping all codes into the INDICATOR dimension) for non-validation failures, so this error means validation ran and positively failed.","triggerScenarios":"Passing indicator codes from a different dataflow (e.g. an IFS code like 'IR3TIB01A' to the DOT/IMTS dataflow); typo'd codes ('TXG_FOB_US' missing 'D'); structural codes whose dimension order/ prefixes changed after an IMF metadata revision.","commonSituations":"Copy-pasting indicator examples across dataflows; metadata refreshes that rename codes; mixing provider indicator vocabularies (intrinio/fred tickers passed to imf).","solutions":["Run obb.economy.available_indicators(provider='imf', dataflows='<your dataflow>') and copy exact codes.","Read the per-segment detail in the message — it names the expected dimension and 5 valid example values for each bad segment.","Update the provider package (openbb-imf) if codes were valid before an IMF metadata change: pip install -U openbb-imf."],"exampleFix":"# before\nres = await obb.economy.gdp(component='nominal', provider='imf')  # or direct fetcher with indicator='TXG_FOB_US'\n\n# after\nvalid = await obb.economy.available_indicators(provider='imf', dataflows='IMTS')\n# pick exact code from valid, e.g. 'TXG_FOB_USD'\nres = imts_query(country='USA', counterpart='*', indicator='TXG_FOB_USD')","handlingStrategy":"validation","validationCode":"indicators = await obb.economy.available_indicators(provider='imf', dataflows='IMTS').to_df()\nvalid_codes = set(indicators['indicator'].astype(str)) if 'indicator' in indicators else set(indicators.iloc[:, 0])\nmissing = [c for c in my_codes if c not in valid_codes]\nif missing:\n    raise ValueError(f'Unknown indicator codes: {missing}')","typeGuard":null,"tryCatchPattern":"try:\n    res = imts_query(country=c, counterpart=cp, indicator=codes)\nexcept OpenBBError as e:\n    if 'Invalid indicator code' in str(e):\n        raise ValueError('Check codes via obb.economy.available_indicators(provider=\"imf\").') from e\n    raise","preventionTips":["Fetch and cache the available_indicators list per dataflow at startup.","Never share indicator literals between dataflows.","Update openbb-imf after IMF metadata revisions."],"tags":["validation","imf","indicator-codes","sdmx","metadata"],"backgroundTag":null,"analyzedSha":"3e071fcc2cd9f891cac6040ae60296dba76dab46","analyzedAt":"2026-08-14T23:40:48.960Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}