OpenBB-finance/OpenBB · error · OpenBBError

Failed to fetch data from FRED API: {e}

Error message

Failed to fetch data from FRED API: {e}

What it means

Raised in FredCommoditySpotPricesFetch.extract_data when the delegated FredSeriesFetcher.fetch_data call raises for any reason - the except Exception wraps it as OpenBBError('Failed to fetch data from FRED API: {e}'), preserving the original exception as __cause__. The commodity fetcher fans a list of commodity symbols into a FredSeriesQueryParams call, so any series-fetch failure (auth, throttling, empty data, invalid series) surfaces here.

Source

Thrown at openbb_platform/providers/fred/openbb_fred/models/commodity_spot_prices.py:213

                else (datetime.now() - timedelta(weeks=156)).date()
            ),
            "end_date": (
                query.end_date if query.end_date is not None else datetime.now().date()
            ),
            "frequency": query.frequency,
            "aggregation_method": query.aggregation_method,
            "transform": query.transform,
        }

        try:
            results = await FredSeriesFetcher.fetch_data(series_query, credentials)

            return {
                "result": results.result,  # type: ignore
                "metadata": results.metadata,  # type: ignore
            }
        except Exception as e:
            raise OpenBBError(f"Failed to fetch data from FRED API: {e}") from e

    @staticmethod
    def transform_data(
        query: FredCommoditySpotPricesQueryParams, data: dict, **kwargs: Any
    ) -> AnnotatedResult[list[FredCommoditySpotPricesData]]:
        """Transform the data."""
        # pylint: disable=import-outside-toplevel
        from pandas import DataFrame

        results = data.get("result", [])

        if not results:
            raise EmptyDataError("The request was returned with no data.")

        metadata = data.get("metadata", {})
        title_map = {k: v.get("title") for k, v in metadata.items()}
        units_map = {k: v.get("units") for k, v in metadata.items()}
        df = DataFrame([d.model_dump() for d in results])

View on GitHub (pinned to 3e071fcc2c)

Solutions

  1. Read the wrapped '{e}' text - it carries the root cause (auth vs rate limit vs empty data) and fix that first
  2. Confirm the FRED API key works with a direct call to fred.stlouisfed.org/graph/fred/data.csv?id=DFF
  3. Reduce the number of commodities requested per call to stay under FRED's rate limits
  4. Update openbb-fred in case retired series IDs were remapped upstream

Example fix

# before
res = await obb.economy.commodity_spot_prices(provider='fred', commodity='all').await_to_list()

# after - fetch a smaller set to avoid rate limits and inspect root cause
res = await obb.economy.commodity_spot_prices(provider='fred', commodity='crude_oil').await_to_list()
Defensive patterns

Strategy: retry

Validate before calling

import os, requests
key = os.environ.get('FRED_API_KEY')
assert key, 'FRED_API_KEY missing'
r = requests.get(f'https://api.stlouisfed.org/fred/series/observations?series_id=DFF&api_key={key}&file_type=json', timeout=10)
assert r.status_code == 200, f'FRED key invalid: {r.status_code}'

Try / catch

from openbb_core.app.model.abstract.error import OpenBBError
import asyncio
for attempt in range(3):
    try:
        data = await fetcher.fetch_data(query, credentials)
        break
    except OpenBBError as e:
        if 'Failed to fetch data from FRED API' not in str(e):
            raise
        if attempt == 2:
            raise
        await asyncio.sleep(2 ** attempt)  # throttle/transient backoff

Prevention

When it happens

Trigger: FRED API key missing/invalid, FRED request throttling (429), a commodity series ID being retired so FredSeriesFetcher raises EmptyDataError, or network failures during the async fetch - all caught and re-wrapped with the commodity context.

Common situations: FRED_API_KEY not set in the OpenBB credentials; hitting FRED's rate limit when fetching many commodity series at once; FRED deprecating individual commodity series IDs; transient network errors from behind restrictive proxies.

Related errors


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