OpenBB-finance/OpenBB · error · ValueError

Agency ID not found for dataflow '{dataflow}'.

Error message

Agency ID not found for dataflow '{dataflow}'.

What it means

build_url raises ValueError at URL-assembly time when the dataflow metadata contains no agencyID. The SDMX 3.0 data endpoint requires agency/dataflow in the path, so without it no valid URL can be produced.

Source

Thrown at openbb_platform/providers/imf/openbb_imf/utils/query_builder.py:87

            param_value = final_kwargs.get(dim_id)

            # Handle wildcards and empty values
            if (
                param_value is None
                or param_value in ["", "*"]
                or len(str(param_value)) > 1500
            ):
                key_parts.append("*")
            elif isinstance(param_value, list):
                key_parts.append("+".join(param_value))
            else:
                key_parts.append(str(param_value))
            dimensions_in_key.add(dim_id)

        key = ".".join(key_parts)

        if not agency_id:
            raise ValueError(f"Agency ID not found for dataflow '{dataflow}'.")

        url = (
            f"https://api.imf.org/external/sdmx/3.0/data/dataflow/"
            f"{agency_id}/{dataflow}/+/{key}"
        )
        # Only include parameters in query_params that are not dimensions
        query_params = {
            k: v for k, v in final_kwargs.items() if k not in dimensions_in_key
        }
        # Format dates for TIME_PERIOD filter
        frequency = (final_kwargs.get("FREQUENCY") or "").upper()

        def format_date(
            date_str: str, frequency: str, is_end_date: bool = False
        ) -> str:
            """Format date string based on frequency to match IMF TIME_PERIOD format."""
            if not date_str:
                return date_str

View on GitHub (pinned to 3e071fcc2c)

Solutions

  1. Clear the cached IMF metadata and re-fetch.
  2. Upgrade openbb-imf if IMF changed the metadata schema.
  3. Use another dataflow for the same data while the broken one is fixed upstream.
Defensive patterns

Strategy: fallback

Validate before calling

def dataflow_has_agency(qb, dataflow: str) -> bool:
    return bool(qb.metadata.dataflows.get(dataflow, {}).get('agencyID'))

Try / catch

try:
    url = qb.build_url(dataflow, **kwargs)
except ValueError as e:
    if 'Agency ID not found' in str(e):
        refresh_imf_metadata_cache()
        url = qb.build_url(dataflow, **kwargs)
    else:
        raise

Prevention

When it happens

Trigger: A dataflow entry in metadata lacking the agencyID field (malformed/partial cache) or an unexpected IMF registry change altering the metadata shape.

Common situations: Stale or hand-modified metadata cache, partial metadata fetch, or provider version that parses an older SDMX structure format.

Related errors


AI-assisted analysis of OpenBB-finance/OpenBB@3e071fcc2c (2026-08-14). Data as JSON: /api/errors/fa63885ab567983a. Report an issue: GitHub.