{"record":{"id":"20491df088017d3a","repo":"OpenBB-finance/OpenBB","slug":"dimension-dimension-id-not-found-for-dataflow","errorCode":null,"errorMessage":"Dimension '{dimension_id}' not found for dataflow '{self.dataflow_id}'.","messagePattern":"Dimension '(.+?)' not found for dataflow '(.+?)'\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"openbb_platform/providers/imf/openbb_imf/utils/progressive_helper.py","lineNumber":93,"sourceCode":"    ) -> list[dict[str, str]]:\n        \"\"\"Get the available options for a given dimension, based on the current selections.\n\n        Parameters\n        ----------\n        dimension_id : str\n            The ID of the dimension to get options for.\n\n        Returns\n        -------\n        list[dict]\n            A list of available options, where each option is a dictionary with\n            'label' and 'value' keys.\n        \"\"\"\n        dimension_id = dimension_id or self.get_next_dimension_to_select()\n        if not dimension_id:\n            return []\n        if dimension_id not in self._dimensions:\n            raise ValueError(\n                f\"Dimension '{dimension_id}' not found for dataflow '{self.dataflow_id}'.\"\n            )\n\n        key_parts: list = []\n        for dim in self._dimensions:\n            if self._selections[dim] is not None:\n                key_parts.append(self._selections[dim])\n            else:\n                # Use wildcard '*' for unselected dimensions instead of empty string\n                # Empty string creates malformed URLs like '../'\n                key_parts.append(\"*\")\n        key = \".\".join(key_parts)\n\n        constraints = self._builder.metadata.get_available_constraints(\n            dataflow_id=self.dataflow_id,\n            key=key,\n            component_id=dimension_id,\n        )","sourceCodeStart":75,"sourceCodeEnd":111,"githubUrl":"https://github.com/OpenBB-finance/OpenBB/blob/3e071fcc2cd9f891cac6040ae60296dba76dab46/openbb_platform/providers/imf/openbb_imf/utils/progressive_helper.py#L75-L111","documentation":"get_dimension_options raises ValueError when the dimension_id argument (or the auto-derived next dimension) is not among the dataflow's ordered dimensions in ImfParamsBuilder. The key built for the constraints request is dimension-ordered, so an unknown dimension cannot be queried.","triggerScenarios":"Calling get_dimension_options('COUNTRY') on a dataflow whose dimensions use different IDs (e.g. 'REF_AREA'), or passing an empty result from get_next_dimension_to_select plus a stale hardcoded dimension name.","commonSituations":"Copy-pasting dimension names between dataflows (IMF renamed COUNTRY to REF_AREA in several SDMX 3.0 dataflows), or assuming dimension IDs without inspecting the dataflow's DSD.","solutions":["Inspect builder._dimensions (or the DSD) for the dataflow and use the exact dimension ID.","Call get_dimension_options() with no argument to let the builder pick the next dimension automatically.","Use set_dimension((dim, value)) only with IDs from _dimensions."],"exampleFix":"# before\nopts = builder.get_dimension_options(dimension_id='COUNTRY')  # ValueError on REF_AREA dataflows\n\n# after\nopts = builder.get_dimension_options(dimension_id='REF_AREA')\n# or: opts = builder.get_dimension_options()  # auto-advances","handlingStrategy":"validation","validationCode":"def safe_dimension_options(builder, dim_id: str | None):\n    if dim_id is not None and dim_id not in builder._dimensions:\n        raise ValueError(f'{dim_id!r} not in {builder._dimensions}')\n    return builder.get_dimension_options(dim_id)","typeGuard":"def is_valid_dimension(builder, dim_id: str) -> bool:\n    return dim_id in builder._dimensions","tryCatchPattern":"try:\n    options = builder.get_dimension_options(dim_id)\nexcept ValueError as e:\n    if 'not found for dataflow' in str(e):\n        dim_id = builder._dimensions[0]\n        options = builder.get_dimension_options(dim_id)\n    else:\n        raise","preventionTips":["Always source dimension IDs from builder._dimensions or the DSD, never from another dataflow's examples.","Let get_dimension_options() auto-pick the next dimension when possible.","Remember IMF SDMX 3.0 renamed several dimensions (COUNTRY -> REF_AREA)."],"tags":["validation","imf","sdmx","dimension","metadata"],"backgroundTag":null,"analyzedSha":"3e071fcc2cd9f891cac6040ae60296dba76dab46","analyzedAt":"2026-08-14T23:40:48.960Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}