Live candle bars pushed as they’re built — mid-bar updates and final closes for any pool, any timeframe.
The OHLCV WebSocket emits one frame per bar update for eachDocumentation Index
Fetch the complete documentation index at: https://docs.dexploit.dev/llms.txt
Use this file to discover all available pages before exploring further.
(pool, timeframe) you subscribe to. You get mid-bar updates while a bar is open (is_closed: false) and a final update on close (is_closed: true).
This is the right channel when you want to render a live chart or trigger logic on bar close. For one-shot history, use /api/v1/candles and /api/v1/candles/latest. For raw per-swap data, use WebSocket: swaps.
subscribe. Both pair_addresses and timeframes are required — the server will reply with {"error": "invalid subscribe: timeframes empty"} (or similar) if either is missing.
subscribe messages are additive — they widen the subscription set rather than replace it. (Different from the swaps WebSocket, where each subscribe replaces the prior filters.)
| Field | Notes |
|---|---|
timestamp | Bar open time, ISO 8601. The bar covers [timestamp, timestamp + timeframe). |
is_closed | false for interim mid-bar pushes; true on the bar’s final tick. A given (pair, timeframe, timestamp) may emit multiple is_closed: false frames followed by one is_closed: true — the latter is authoritative. |
volume_sol | Lamports, despite the name. Divide by 1e9 for SOL. |
volume_token | Token base units. Divide by 10 ** quote_decimals for human-readable. |
unique_traders | Distinct wallets that traded in this bar so far. Grows monotonically across mid-bar frames. |
(pair_address, timeframe, timestamp) and overwrite the entry on every frame for that key — the latest frame is always the freshest snapshot of that bar. When is_closed: true arrives, that bar is final.
For reconnect strategy, gap-filling against /api/v1/candles, and keepalive guidance, see Reconnect & backpressure.