nautechsystems/nautilus_trader · error
Lighter does not support historical quote requests for {}; s
Error message
Lighter does not support historical quote requests for {}; subscribe to quotes via WebSocket for live BBO ticks What it means
The Lighter data client does not implement historical (REST) quote requests: quotes are only streamed as live BBO ticks over WebSocket. request_quotes always bails with this message naming the requested instrument. It is an explicit capability gap, not a transient failure.
Source
Thrown at crates/adapters/lighter/src/data/mod.rs:1633
clock.get_time_ns(),
params,
));
if let Err(e) = sender.send(DataEvent::Response(response)) {
log::error!("Failed to send bars response: {e}");
}
}
Err(e) => {
log::error!("Lighter bars request failed for {instrument_id}: {e:?}");
}
}
});
Ok(())
}
fn request_quotes(&self, request: RequestQuotes) -> anyhow::Result<()> {
anyhow::bail!(
"Lighter does not support historical quote requests for {}; \
subscribe to quotes via WebSocket for live BBO ticks",
request.instrument_id,
)
}
fn request_trades(&self, request: RequestTrades) -> anyhow::Result<()> {
let instrument_id = request.instrument_id;
log::debug!("Requesting Lighter trades for {instrument_id}");
let instrument = self
.instruments
.get_cloned(&instrument_id)
.ok_or_else(|| InstrumentLookupError::not_found(instrument_id))?;
let http = self.http_client.clone();
let sender = self.data_sender.clone();
let request_id = request.request_id;View on GitHub (pinned to 18893faf8b)
Solutions
- Subscribe to the live quote stream (subscribe_quotes) instead of requesting history.
- If historical quotes are required, capture them yourself via the WS stream into a cache/backing store and query that.
- Use historical trades or bars (which Lighter does support) as a proxy for historical BBO where acceptable.
- Guard the call site: skip request_quotes for instruments on the Lighter venue.
Example fix
// before data_engine.request(RequestQuotes::new(instrument_id, start, end, callback)) // after data_engine.subscribe_quotes(instrument_id) // live BBO via WebSocket; history not available on Lighter
Defensive patterns
Strategy: fallback
Try / catch
// venue-agnostic path
if request.instrument_id.venue.as_str() == "LIGHTER" {
data_engine.subscribe_quotes(request.instrument_id)?; // live only
} else {
data_engine.request_quotes(request)?;
} Prevention
- Never call request_quotes for Lighter instruments; use the WS quote stream.
- Capture live quotes into your own store if history is needed later.
- Document Lighter's historical capabilities (bars/trades yes; quotes/depth history no) in shared strategy code.
When it happens
Trigger: Calling request_quotes (e.g. via DataEngine.request or a RequestQuotes message) for any Lighter instrument, whether from a strategy warming up historical quote data or a backtest/live bridge requesting quote history.
Common situations: Strategies that request historical quotes before subscribing; code shared across venues where other adapters support quote history but Lighter does not; data pipelines assuming uniform historical support.
Related errors
- Lighter does not support historical order book depth request
- unsupported Derive instrument type for trades: {other:?}
- Hyperliquid does not provide historical quotes via HTTP API
- Python on_historical_quotes failed: {e}
- Unsupported bar specification for AX: {step}-{:?}
AI-assisted analysis of nautechsystems/nautilus_trader@18893faf8b (2026-09-08).
Data as JSON: /api/errors/3325264510e5d578.
Report an issue: GitHub.