Recipe 54 of 65
Which HIP-3 builder dex is busiest this minute?
Call /v1/hyperliquid/ohlcv/latest without dex, keep the rows of the newest minute, and sum volume_usd and n_trades per dex; each row names its own dex.
GET /v1/hyperliquid/ohlcv/latest answers it in one call: without dex it returns the newest 1-minute candle of every
perp on every dex, and each row
carries its dex: HL for the core venue, XYZ, PARA, IO, MKTS and others for the HIP-3 builder dexes. Keep
the rows whose ts is the newest minute, group by dex and sum. The full parameter list is on
Latest candle of every coin.
Quick answer
Sum the newest minute per dex.
# USD traded, trades and active symbols per dex in the newest minute
curl -s -H "X-API-Key: $VIKE_API_KEY" \
"https://data.vike.io/v1/hyperliquid/ohlcv/latest" \
| jq '(.candles | map(.ts) | max) as $t | [.candles[] | select(.ts == $t and (.symbol | startswith("#") | not))] | group_by(.dex) | map({dex: .[0].dex, symbols: length, volume_usd: (map(.volume_usd) | add), n_trades: (map(.n_trades) | add)}) | sort_by(-.volume_usd)'Example response
Captured from the live API on 2026-10-24 at 17:15 UTC, the output of that jq filter; the raw response held 592 candles.
The newest minute was 17:15 UTC, 57 seconds in. XYZ was the busiest builder dex: 38 symbols, $176k and 702 trades,
against $1.56M on the core venue. MKTS had no trade in that minute, so it has no row. volume_usd counts each trade
once.
[
{
"dex": "HL",
"symbols": 147,
"volume_usd": 1559030.7715090008,
"n_trades": 1169
},
{
"dex": "XYZ",
"symbols": 38,
"volume_usd": 176075.065072,
"n_trades": 702
},
{
"dex": "IO",
"symbols": 6,
"volume_usd": 7902.152180000001,
"n_trades": 145
},
{
"dex": "PARA",
"symbols": 1,
"volume_usd": 79.5042,
"n_trades": 6
}
]Variations
The busiest markets of one dex. Pass dex and sort by volume_usd.
# the newest candle of every XYZ market, most USD first
curl -s -H "X-API-Key: $VIKE_API_KEY" \
"https://data.vike.io/v1/hyperliquid/ohlcv/latest?dex=XYZ" \
| jq '.candles | sort_by(-.volume_usd) | .[:5] | map({symbol, ts, volume_usd, n_trades})'On the same capture the top XYZ rows were xyz:MRNA ($64k in the 17:15 minute), xyz:AAPL and xyz:SILVER.
Which dexes traded at all in the last hour. Drop the newest-minute filter to count every symbol that traded in the hour, per dex.
# symbols per dex that traded in the last 60 minutes
curl -s -H "X-API-Key: $VIKE_API_KEY" \
"https://data.vike.io/v1/hyperliquid/ohlcv/latest" \
| jq '[.candles[] | select(.symbol | startswith("#") | not)] | group_by(.dex) | map({dex: .[0].dex, symbols: length})'On the same capture: HL 178, XYZ 104, PARA 21, IO 9 and MKTS 4.
A dex over a whole day. A minute is noise. Hourly candles of a dex's main markets show which one carries the day.
# 24 hourly candles of one XYZ market
curl -H "X-API-Key: $VIKE_API_KEY" \
"https://data.vike.io/v1/hyperliquid/ohlcv?symbol=xyz:MRNA&dex=XYZ&interval=1h&limit=24"Before you rely on it
The newest minute is still forming
The filter keeps the rows of the newest ts, which is the minute in progress: its totals grow until the minute ends.
Each row is a symbol's newest candle in the last 60 minutes, so a symbol that traded in the previous minute but not yet
in this one is left out of this minute's sum. For a fair comparison, call just after the minute turns and use the
previous minute, or sum hourly candles.
Do not hard-code the dex list
Builder dexes are deployed over time; the set in this response is whatever traded in the last hour. Rows starting with
# are tagged dex HL but are not coin perps (their prices sit between 0 and 1), so the filter drops them from the
core venue's total.
Ask your agent
No MCP tool returns every dex's newest minute in one call; hl_ohlcv reads one symbol
per call, so run the Quick answer call.