{"record":{"id":"bc50c12c3fa5860b","repo":"nautechsystems/nautilus_trader","slug":"hyperliquid-does-not-provide-historical-quotes-via","errorCode":null,"errorMessage":"Hyperliquid does not provide historical quotes via HTTP API","messagePattern":"Hyperliquid does not provide historical quotes via HTTP API","errorType":"exception","errorClass":"PyValueError","httpStatus":null,"severity":"error","filePath":"crates/adapters/hyperliquid/src/python/http.rs","lineNumber":255,"sourceCode":"\n                let py_list = PyList::new(py, &py_instruments)?;\n                Ok(py_list.into_any().unbind())\n            })\n        })\n    }\n\n    #[pyo3(name = \"request_quote_ticks\", signature = (instrument_id, start=None, end=None, limit=None))]\n    fn py_request_quote_ticks<'py>(\n        &self,\n        py: Python<'py>,\n        instrument_id: InstrumentId,\n        start: Option<jiff::Timestamp>,\n        end: Option<jiff::Timestamp>,\n        limit: Option<u32>,\n    ) -> PyResult<Bound<'py, PyAny>> {\n        let _ = (instrument_id, start, end, limit);\n        pyo3_async_runtimes::tokio::future_into_py(py, async move {\n            Err::<Vec<u8>, _>(to_pyvalue_err(anyhow::anyhow!(\n                \"Hyperliquid does not provide historical quotes via HTTP API\"\n            )))\n        })\n    }\n\n    #[pyo3(name = \"request_trade_ticks\", signature = (instrument_id, start=None, end=None, limit=None))]\n    fn py_request_trade_ticks<'py>(\n        &self,\n        py: Python<'py>,\n        instrument_id: InstrumentId,\n        start: Option<jiff::Timestamp>,\n        end: Option<jiff::Timestamp>,\n        limit: Option<u32>,\n    ) -> PyResult<Bound<'py, PyAny>> {\n        let _ = (instrument_id, start, end, limit);\n        pyo3_async_runtimes::tokio::future_into_py(py, async move {\n            Err::<Vec<u8>, _>(to_pyvalue_err(anyhow::anyhow!(\n                \"Hyperliquid does not provide historical market trades via HTTP API\"","sourceCodeStart":237,"sourceCodeEnd":273,"githubUrl":"https://github.com/nautechsystems/nautilus_trader/blob/18893faf8b356be3320add8de2f861b0b647cf06/crates/adapters/hyperliquid/src/python/http.rs#L237-L273","documentation":"Hyperliquid's HTTP API does not expose historical quote ticks, so the Python HTTP client's request_quote_ticks is intentionally a stub that always returns an error via a rejected future. This is a supported-operation limitation of the adapter, not a transient failure: any call to this method will always fail with this message. Use the WebSocket data channel (quote ticks via subscription) or a different data source instead.","triggerScenarios":"Calling the Hyperliquid HTTP data client's request_quote_ticks from Python (or via the DataEngine's historical-request path routed to it), with any instrument_id/start/end/limit arguments.","commonSituations":"Configuring a Hyperliquid data client as the source for historical quote requests (e.g. backfill or LoadDataEngine-style queries); migrating code from another adapter (Binance etc.) where quote history exists; assuming parity between trade and quote endpoints.","solutions":["Subscribe to quotes via the Hyperliquid WebSocket client instead of requesting historical quotes","Record/subscribe to quotes live and persist them yourself if you need historical quotes","Route historical quote requests to a different data client/adapter that supports them","For trade history use available endpoints where supported (note request_trade_ticks is also stubbed; candle/ohlcv endpoints may cover the need)"],"exampleFix":"// before\nquotes = client.request_quote_ticks(instrument_id, start, end)  # always errors\n// after\n# subscribe live instead\nclient.subscribe_quote_ticks(instrument_id)\n# or request candles which Hyperliquid does support via HTTP","handlingStrategy":"fallback","validationCode":"# Python: check capability before requesting historical quotes\nif isinstance(data_client, HyperliquidDataClient) and request_type == QuoteTicks:\n    raise UnsupportedOperation(\"use WebSocket subscription for Hyperliquid quotes\")","typeGuard":"def supports_historical_quotes(client) -> bool:\n    return not type(client).__name__.startswith(\"Hyperliquid\")","tryCatchPattern":"try:\n    quotes = client.request_quote_ticks(instrument_id, start, end)\nexcept ValueError as e:\n    if \"historical quotes\" in str(e):\n        client.subscribe_quote_ticks(instrument_id)  # fallback: live stream\n    else:\n        raise","preventionTips":["Check adapter capability docs before wiring historical data requests","Don't use Hyperliquid HTTP client as a backfill source for quotes","Persist live quote streams if you need local history"],"tags":["rust","hyperliquid","python","historical-data","unsupported-operation","quotes"],"backgroundTag":"unsupported-operation","analyzedSha":"18893faf8b356be3320add8de2f861b0b647cf06","analyzedAt":"2026-09-08T20:49:34.690Z","contentChangedAt":"2026-09-08T20:49:34.690Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}