{"record":{"id":"7b082b79b0202743","repo":"OpenBB-finance/OpenBB","slug":"invalid-deribit-symbol-supported-symbols-are-7b082b","errorCode":null,"errorMessage":"Invalid Deribit symbol. Supported symbols are: {', '.join(DERIBIT_OPTIONS_SYMBOLS)}","messagePattern":"Invalid Deribit symbol\\. Supported symbols are: (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"openbb_platform/providers/deribit/openbb_deribit/utils/helpers.py","lineNumber":119,"sourceCode":"async def get_options_symbols(symbol: OptionsSymbols = \"BTC\") -> dict:\n    \"\"\"\n    Get a dictionary of contract symbols by expiry.\n\n    Parameters\n    ----------\n    symbol : OptionsSymbols\n        The underlying symbol to get options for. Default is \"btc\".\n\n    Returns\n    -------\n    dict[str, str]\n        A dictionary of contract symbols by expiry date.\n    \"\"\"\n    # pylint: disable=import-outside-toplevel\n    from pandas import to_datetime\n\n    if symbol.upper() not in DERIBIT_OPTIONS_SYMBOLS:\n        raise ValueError(\n            f\"Invalid Deribit symbol. Supported symbols are: {', '.join(DERIBIT_OPTIONS_SYMBOLS)}\",\n        )\n\n    currency = (\n        \"USDC\" if symbol.upper() in [\"BNB\", \"PAXG\", \"SOL\", \"XRP\"] else symbol.upper()\n    )\n    instruments = await get_instruments(currency, \"option\")\n    expirations: dict = {}\n    all_options = list(\n        set(\n            d.get(\"instrument_name\")\n            for d in instruments\n            if d.get(\"instrument_name\").startswith(symbol)\n            and d.get(\"instrument_name\").endswith((\"-C\", \"-P\"))\n        )\n    )\n    for item in sorted(\n        list(","sourceCodeStart":101,"sourceCodeEnd":137,"githubUrl":"https://github.com/OpenBB-finance/OpenBB/blob/3e071fcc2cd9f891cac6040ae60296dba76dab46/openbb_platform/providers/deribit/openbb_deribit/utils/helpers.py#L101-L137","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","solutions":["Pass one of BTC, ETH, SOL, XRP, BNB, PAXG (any case).","If Deribit has newly listed option underlyings, upgrade the openbb-deribit package so the allow-list is refreshed.","Prefer the public options.chains endpoint, which surfaces the same constraint at query-param validation time."],"exampleFix":"# before\nexpiries = await get_options_symbols(\"AVAX\")\n\n# after\nexpiries = await get_options_symbols(\"BTC\")","handlingStrategy":"validation","validationCode":"UNDERLYINGS = {\"BTC\", \"ETH\", \"SOL\", \"XRP\", \"BNB\", \"PAXG\"}\nassert symbol.strip().upper() in UNDERLYINGS, f\"options underlyings are {sorted(UNDERLYINGS)}\"","typeGuard":"def is_options_underlying(s: str) -> bool:\n    return isinstance(s, str) and s.strip().upper() in {\"BTC\", \"ETH\", \"SOL\", \"XRP\", \"BNB\", \"PAXG\"}","tryCatchPattern":null,"preventionTips":["Prefer the options.chains router so validation happens at the query layer.","Upgrade openbb-deribit when Deribit lists new underlyings."],"tags":["deribit","options","validation","symbol","allow-list"],"backgroundTag":null,"analyzedSha":"3e071fcc2cd9f891cac6040ae60296dba76dab46","analyzedAt":"2026-08-14T23:40:48.960Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}