OpenBB-finance/OpenBB · warning · EmptyDataError

The response was returned empty.

Error message

The response was returned empty.

What it means

Raised by the Cboe futures_curve fetcher when the DataFrame returned by get_vx_current/get_vx_by_date (Cboe volatility futures, VX) is empty. The helper downloads the VX EOD or AM settlement file; an empty frame means no settlement rows for the requested symbol type or date. It is an EmptyDataError.

Source

Thrown at openbb_platform/providers/cboe/openbb_cboe/models/futures_curve.py:90

        credentials: dict[str, str] | None,
        **kwargs: Any,
    ) -> list[dict]:
        """Return the raw data from the CBOE endpoint."""
        # pylint: disable=import-outside-toplevel
        from openbb_cboe.utils.vix import get_vx_by_date, get_vx_current

        symbol = "am" if query.symbol == "VX_AM" else "eod"
        if query.date is not None:
            data = await get_vx_by_date(
                date=query.date,  # type: ignore
                vx_type=symbol,
                use_cache=False,
            )
        else:
            data = await get_vx_current(vx_type=symbol, use_cache=False)

        if data.empty:
            raise EmptyDataError("The response was returned empty.")

        return data.to_dict("records")

    @staticmethod
    def transform_data(
        query: CboeFuturesCurveQueryParams,
        data: list[dict],
        **kwargs: Any,
    ) -> list[CboeFuturesCurveData]:
        """Transform data."""
        return [CboeFuturesCurveData.model_validate(d) for d in data]

View on GitHub (pinned to 3e071fcc2c)

Solutions

  1. Use a recent trading day for the date parameter
  2. Try the other symbol variant (VX_AM vs VX/eod)
  3. Retry later if querying intraday during feed publication windows
  4. Catch EmptyDataError and report 'no settlement data for this date'

Example fix

// before
curve = obb.derivatives.futures.curve(symbol='VX', provider='cboe', date='2026-08-09')  # Sunday -> EmptyDataError

// after
curve = obb.derivatives.futures.curve(symbol='VX', provider='cboe', date='2026-08-13')  # trading day
Defensive patterns

Strategy: validation

Validate before calling

from pandas.tseries.holiday import USFederalHolidayCalendar
from datetime import datetime, timedelta

def last_trading_day() -> str:
    cal = USFederalHolidayCalendar()
    d = datetime.now() - timedelta(days=1)
    holidays = cal.holidays(start=d - timedelta(days=10), end=d)
    while d.weekday() >= 5 or d in holidays:
        d -= timedelta(days=1)
    return d.strftime('%Y-%m-%d')

Try / catch

try:
    curve = obb.derivatives.futures.curve(symbol='VX', provider='cboe', date=d)
except EmptyDataError:
    curve = None  # no settlement published for this date/type

Prevention

When it happens

Trigger: Calling obb.derivatives.futures.curve(symbol='VX', provider='cboe', date=...) where the date is a non-trading day, a date with no published settlement, or before the VX_AM data starts; querying on a weekend/holiday without a date (stale empty cache file).

Common situations: Weekend/holiday queries; historical dates predating the selected vx_type; Cboe feed files briefly empty right after rollover.

Related errors


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