{"record":{"id":"769095559a01b5fe","repo":"OpenBB-finance/OpenBB","slug":"invalid-deribit-symbol-supported-symbols-are-769095","errorCode":null,"errorMessage":"Invalid Deribit symbol. Supported symbols are: {', '.join(DERIBIT_FUTURES_CURVE_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":168,"sourceCode":"\n\nasync def get_futures_curve_symbols(symbol: FuturesCurveSymbols = \"BTC\") -> list[str]:\n    \"\"\"\n    Get a list of futures symbols for a given symbol.\n\n    Parameters\n    ----------\n    symbol : FuturesCurveSymbols\n        The symbol to get futures symbols for.\n\n    Returns\n    -------\n    list[str]\n        A list of futures symbols.\n    \"\"\"\n    symbol = symbol.upper()  # type: ignore\n    if symbol not in DERIBIT_FUTURES_CURVE_SYMBOLS:\n        raise ValueError(\n            f\"Invalid Deribit symbol. Supported symbols are: {', '.join(DERIBIT_FUTURES_CURVE_SYMBOLS)}\",\n        )\n\n    currency = \"USDC\" if symbol == \"PAXG\" else symbol\n    instruments = await get_instruments(currency, \"future\")\n\n    symbols: list = []\n    for d in instruments:\n        ins_name = d.get(\"instrument_name\", \"\")\n        if ins_name.startswith(symbol):\n            symbols.append(ins_name)\n\n    return symbols\n\n\nasync def get_ticker_data(symbol: str) -> dict:\n    \"\"\"\n    Get ticker data.","sourceCodeStart":150,"sourceCodeEnd":186,"githubUrl":"https://github.com/OpenBB-finance/OpenBB/blob/3e071fcc2cd9f891cac6040ae60296dba76dab46/openbb_platform/providers/deribit/openbb_deribit/utils/helpers.py#L150-L186","documentation":"ValueError from get_futures_symbols when the (uppercased) symbol is not in DERIBIT_FUTURES_CURVE_SYMBOLS = [BTC, ETH, PAXG]. Stricter than the options allow-list: the futures curve only supports these three underlyings. Used by the futures curve model, whose query params also enforce the same list.","triggerScenarios":"Calling the futures curve (or get_futures_symbols directly) with SOL, XRP, BNB — valid options underlyings but not curve-supported — or with BTCUSDT-style pairs.","commonSituations":"Assuming option underlyings and futures-curve underlyings coincide; they do not (6 vs 3). Copying symbols between endpoints without checking each model's choices.","solutions":["Use BTC, ETH, or PAXG for the futures curve.","For SOL/XRP/BNB futures data, use the futures historical/info endpoints with full instrument names instead.","Check the query param's __json_schema_extra__ choices for the authoritative per-endpoint list."],"exampleFix":"# before\nobb.derivatives.futures.curve(symbol=\"SOL\", provider=\"deribit\")\n\n# after\nobb.derivatives.futures.curve(symbol=\"BTC\", provider=\"deribit\")","handlingStrategy":"validation","validationCode":"CURVE_SYMBOLS = {\"BTC\", \"ETH\", \"PAXG\"}\nassert symbol.strip().upper() in CURVE_SYMBOLS, f\"futures curve supports only {sorted(CURVE_SYMBOLS)}\"","typeGuard":"from typing import Literal, TypeGuard\nCurveSymbol = Literal[\"BTC\", \"ETH\", \"PAXG\"]\n\ndef is_curve_symbol(s: str) -> TypeGuard[CurveSymbol]:\n    return s.strip().upper() in {\"BTC\", \"ETH\", \"PAXG\"}","tryCatchPattern":null,"preventionTips":["The curve allow-list (3) is narrower than options (6) — check per endpoint.","For SOL/XRP/BNB use futures historical/info with full instrument names."],"tags":["deribit","futures","curve","validation","symbol"],"backgroundTag":null,"analyzedSha":"3e071fcc2cd9f891cac6040ae60296dba76dab46","analyzedAt":"2026-08-14T23:40:48.960Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}