{"record":{"id":"446fd87ef466e11d","repo":"OpenBB-finance/OpenBB","slug":"symbol-was-not-found-in-the-cboe-options-directo","errorCode":null,"errorMessage":"{symbol} was not found in the Cboe options directory.","messagePattern":"(.+?) was not found in the Cboe options directory\\.","errorType":"exception","errorClass":"OpenBBError","httpStatus":null,"severity":"error","filePath":"openbb_platform/providers/cboe/openbb_cboe/models/options_chains.py","lineNumber":73,"sourceCode":"        credentials: dict[str, str] | None,\n        **kwargs: Any,\n    ) -> dict:\n        \"\"\"Return the raw data from the Cboe endpoint.\"\"\"\n        # pylint: disable=import-outside-toplevel\n        from openbb_cboe.utils.helpers import (\n            TICKER_EXCEPTIONS,\n            get_company_directory,\n            get_index_directory,\n        )\n        from openbb_core.provider.utils.helpers import amake_request\n\n        symbol = query.symbol.replace(\"^\", \"\").split(\",\")[0].upper()\n        INDEXES = await get_index_directory(use_cache=query.use_cache)\n        SYMBOLS = await get_company_directory(use_cache=query.use_cache)\n        INDEXES = INDEXES.set_index(\"index_symbol\")\n\n        if symbol not in SYMBOLS.index:\n            raise OpenBBError(f\"{symbol} was not found in the Cboe options directory.\")\n\n        quotes_url = (\n            f\"https://cdn.cboe.com/api/global/delayed_quotes/options/_{symbol}.json\"\n            if symbol in TICKER_EXCEPTIONS or symbol in INDEXES.index\n            else f\"https://cdn.cboe.com/api/global/delayed_quotes/options/{symbol}.json\"\n        )\n        results = await amake_request(quotes_url)\n        return results  # type: ignore\n\n    @staticmethod\n    def transform_data(\n        query: CboeOptionsChainsQueryParams,\n        data: dict,\n        **kwargs: Any,\n    ) -> AnnotatedResult[CboeOptionsChainsData]:\n        \"\"\"Transform the data to the standard format.\"\"\"\n        # pylint: disable=import-outside-toplevel\n        from pandas import DataFrame, DatetimeIndex, Series, to_datetime","sourceCodeStart":55,"sourceCodeEnd":91,"githubUrl":"https://github.com/OpenBB-finance/OpenBB/blob/3e071fcc2cd9f891cac6040ae60296dba76dab46/openbb_platform/providers/cboe/openbb_cboe/models/options_chains.py#L55-L91","documentation":"Raised by the Cboe options_chains fetcher when the uppercased, cleaned symbol is not in the company directory fetched from Cboe (SYMBOLS.index after set_index on ticker). This is a pre-flight validation: symbols not listed as optionable companies on Cboe are rejected before any options URL is requested. It is an OpenBBError, i.e. a hard input error.","triggerScenarios":"Calling obb.equity.options.chains('NOTOPTIONABLE', provider='cboe') for a stock with no listed options; typo'd symbols; tickers not on Cboe's optionable list (many OTC/small caps). Note the directory is fetched with use_cache - a stale cache can also reject valid new listings.","commonSituations":"Small-cap or OTC symbols without options; recently listed options not yet in a cached directory; symbols containing '^' or commas handled by the normalization at the top of the function.","solutions":["Verify the symbol actually has listed options (check cboe.com/quotes/all-options)","If the symbol is genuinely new, retry with use_cache=False to refresh the directory","Catch OpenBBError and skip non-optionable symbols in batch jobs"],"exampleFix":"// before\nchain = obb.equity.options.chains('FAKETICK', provider='cboe')  # OpenBBError\n\n// after\nchain = obb.equity.options.chains('AAPL', provider='cboe', use_cache=False)","handlingStrategy":"validation","validationCode":"async def is_optionable(symbol: str, use_cache: bool = True) -> bool:\n    from openbb_cboe.utils.helpers import get_company_directory\n    sym = symbol.replace('^', '').split(',')[0].upper()\n    d = await get_company_directory(use_cache=use_cache)\n    return sym in set(d.index)","typeGuard":"async def is_optionable(symbol: str) -> bool:\n    from openbb_cboe.utils.helpers import get_company_directory\n    d = await get_company_directory(use_cache=False)\n    return symbol.replace('^', '').upper() in set(d.index)","tryCatchPattern":"from openbb_core.app.model.abstract.error import OpenBBError\ntry:\n    chain = obb.equity.options.chains(sym, provider='cboe')\nexcept OpenBBError as e:\n    if 'not found in the Cboe options directory' in str(e):\n        chain = None  # symbol not optionable; skip","preventionTips":["Pre-filter symbol universes against Cboe's company directory","Pass use_cache=False for newly listed optionable names","Treat this OpenBBError as non-optionable, not as a transport failure"],"tags":["cboe","options","validation","symbol-not-found"],"backgroundTag":null,"analyzedSha":"3e071fcc2cd9f891cac6040ae60296dba76dab46","analyzedAt":"2026-08-14T23:40:48.960Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}