OpenBB-finance/OpenBB · error · ValueError

Invalid Deribit symbol. Supported symbols are: {', '.join(DE

Error message

Invalid Deribit symbol. Supported symbols are: {', '.join(DERIBIT_OPTIONS_SYMBOLS)}

What it means

ValueError from get_options_symbols when the requested underlying is not in DERIBIT_OPTIONS_SYMBOLS = [BTC, ETH, SOL, XRP, BNB, PAXG]. Internal guard before mapping the underlying to a quote currency (BNB/PAXG/SOL/XRP -> USDC) and listing option instruments. The options.chains query model performs the same check earlier (error 267), so reaching this means get_options_symbols was called directly.

Source

Thrown at openbb_platform/providers/deribit/openbb_deribit/utils/helpers.py:119

async def get_options_symbols(symbol: OptionsSymbols = "BTC") -> dict:
    """
    Get a dictionary of contract symbols by expiry.

    Parameters
    ----------
    symbol : OptionsSymbols
        The underlying symbol to get options for. Default is "btc".

    Returns
    -------
    dict[str, str]
        A dictionary of contract symbols by expiry date.
    """
    # pylint: disable=import-outside-toplevel
    from pandas import to_datetime

    if symbol.upper() not in DERIBIT_OPTIONS_SYMBOLS:
        raise ValueError(
            f"Invalid Deribit symbol. Supported symbols are: {', '.join(DERIBIT_OPTIONS_SYMBOLS)}",
        )

    currency = (
        "USDC" if symbol.upper() in ["BNB", "PAXG", "SOL", "XRP"] else symbol.upper()
    )
    instruments = await get_instruments(currency, "option")
    expirations: dict = {}
    all_options = list(
        set(
            d.get("instrument_name")
            for d in instruments
            if d.get("instrument_name").startswith(symbol)
            and d.get("instrument_name").endswith(("-C", "-P"))
        )
    )
    for item in sorted(
        list(

View on GitHub (pinned to 3e071fcc2c)

Solutions

  1. Pass one of BTC, ETH, SOL, XRP, BNB, PAXG (any case).
  2. If Deribit has newly listed option underlyings, upgrade the openbb-deribit package so the allow-list is refreshed.
  3. Prefer the public options.chains endpoint, which surfaces the same constraint at query-param validation time.

Example fix

# before
expiries = await get_options_symbols("AVAX")

# after
expiries = await get_options_symbols("BTC")
Defensive patterns

Strategy: validation

Validate before calling

UNDERLYINGS = {"BTC", "ETH", "SOL", "XRP", "BNB", "PAXG"}
assert symbol.strip().upper() in UNDERLYINGS, f"options underlyings are {sorted(UNDERLYINGS)}"

Type guard

def is_options_underlying(s: str) -> bool:
    return isinstance(s, str) and s.strip().upper() in {"BTC", "ETH", "SOL", "XRP", "BNB", "PAXG"}

Prevention

When it happens

Trigger: Directly calling get_options_symbols('AVAX'), ('bnb' is fine — it uppercases), or any crypto not in the six underlyings. Also reachable if new underlyings exist on Deribit but the static list hasn't been updated in this package version.

Common situations: Using the helper in custom scripts with symbols from other venues, or after Deribit lists a new underlying while the installed openbb-deribit version predates it.

Related errors


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