vike
API EndpointsHyperliquid

/ohlcv/export

Streams the same single page as NDJSON — one header line naming what answered, then one line per bar.

GET https://data.vike.io/v1/hyperliquid/ohlcv/export

Streams the same single page as NDJSON: one header line naming what answered (symbol, asset, market, dex, interval, tz, source), then one line per bar. Sent with a Content-Disposition attachment filename. Lines arrive as they are produced rather than buffered until the response is complete, and a stream is allowed to stay open for up to 300 seconds — long enough for the largest page this route will return.

Shown as sent — NDJSON, one object per line rather than a single JSON document: the header line first, then one line per bar. Nothing is truncated: all 6 lines are shown — the header plus the 5 bars limit=5 asked for.

cURL
# five hourly BTC bars as NDJSON: a header line, then one line per bar
curl -s "https://data.vike.io/v1/hyperliquid/ohlcv/export?symbol=BTC&interval=1h&limit=5" \
  -H "X-API-KEY: $VIKE_API_KEY"

# a year of daily bars saved to a file
curl -s "https://data.vike.io/v1/hyperliquid/ohlcv/export?symbol=BTC&interval=1d&limit=365" \
  -H "X-API-KEY: $VIKE_API_KEY" \
  -o btc-1d.ndjson

# exactly one day of minute bars: 1,440 bars plus the header line (end is exclusive)
curl -s "https://data.vike.io/v1/hyperliquid/ohlcv/export?symbol=BTC&interval=1m&start=2026-08-17T00:00:00Z&end=2026-08-18T00:00:00Z&limit=1440" \
  -H "X-API-KEY: $VIKE_API_KEY" \
  -o btc-1m-day.ndjson

# spot candles: a spot token by name
curl -s "https://data.vike.io/v1/hyperliquid/ohlcv/export?symbol=HYPE&market=spot&interval=1h&limit=168" \
  -H "X-API-KEY: $VIKE_API_KEY"

# 100-trade bars are built from raw fills. With no start the window is the 24 hours before end and limit
# keeps the OLDEST bars, so name the slice you want: here the last hour of a pinned day
curl -s "https://data.vike.io/v1/hyperliquid/ohlcv/export?symbol=BTC&interval=100t&start=2026-08-17T23:00:00Z&end=2026-08-18T00:00:00Z&limit=1000" \
  -H "X-API-KEY: $VIKE_API_KEY"

# a window wider than one page: save the first page, then restart one bar after its last line
curl -s "https://data.vike.io/v1/hyperliquid/ohlcv/export?symbol=BTC&interval=1m&start=2026-08-17T00:00:00Z&limit=5000" \
  -H "X-API-KEY: $VIKE_API_KEY" \
  -o page1.ndjson

# page 2 starts one minute after page 1's last bar: start accepts epoch milliseconds
START=$(( $(tail -n 1 page1.ndjson | jq .ts) + 60000 ))
curl -s "https://data.vike.io/v1/hyperliquid/ohlcv/export?symbol=BTC&interval=1m&start=$START&limit=5000" \
  -H "X-API-KEY: $VIKE_API_KEY" \
  -o page2.ndjson
symbolqueryrequired
As on /ohlcv
intervalqueryoptional
As on /ohlcv. Default 1h
marketqueryoptional
As on /ohlcv. Default perp
dexqueryoptional
As on /ohlcv. Default HL
startqueryoptional
As on /ohlcv
endqueryoptional
As on /ohlcv
limitqueryoptional
Defaults to the maximum, 5000
Example response
{"symbol":"BTC","asset":"BTC","market":"perp","dex":"HL","interval":"1h","tz":"UTC","source":"1h fills rollup"}
{"ts":1788408000000,"open":77685.0,"high":77826.0,"low":77518.0,"close":77761.0,"volume":1638.383539999999,"volume_usd":127187806.34586997,"n_trades":11502}
{"ts":1788411600000,"open":77767.0,"high":77827.0,"low":77090.0,"close":77799.0,"volume":2381.401280000001,"volume_usd":184414000.1971202,"n_trades":20200}
{"ts":1788415200000,"open":77800.0,"high":77839.0,"low":77679.0,"close":77822.0,"volume":742.5236199999999,"volume_usd":57737530.938200004,"n_trades":11927}
{"ts":1788418800000,"open":77823.0,"high":78177.0,"low":77569.0,"close":77635.0,"volume":2354.81572,"volume_usd":183533988.69679,"n_trades":23209}
{"ts":1788422400000,"open":77636.0,"high":78019.0,"low":77636.0,"close":78018.0,"volume":415.8346900000001,"volume_usd":32390151.983540002,"n_trades":3954}

Billed 2 credits up front

The charge is recorded before the first byte. The response is a stream, so the row count is unknown at that moment — it is a flat 2 credits whatever the page turns out to hold, and it is not reconciled afterwards.

Not an unbounded whole-window export

Despite the name, it streams exactly the same single clamped page /ohlcv returns — only the encoding differs. To cover a window wider than one page, walk it yourself with start / end.

cURL
# five hourly BTC bars as NDJSON: a header line, then one line per barcurl -s "https://data.vike.io/v1/hyperliquid/ohlcv/export?symbol=BTC&interval=1h&limit=5" \  -H "X-API-KEY: $VIKE_API_KEY"# a year of daily bars saved to a filecurl -s "https://data.vike.io/v1/hyperliquid/ohlcv/export?symbol=BTC&interval=1d&limit=365" \  -H "X-API-KEY: $VIKE_API_KEY" \  -o btc-1d.ndjson# exactly one day of minute bars: 1,440 bars plus the header line (end is exclusive)curl -s "https://data.vike.io/v1/hyperliquid/ohlcv/export?symbol=BTC&interval=1m&start=2026-08-17T00:00:00Z&end=2026-08-18T00:00:00Z&limit=1440" \  -H "X-API-KEY: $VIKE_API_KEY" \  -o btc-1m-day.ndjson# spot candles: a spot token by namecurl -s "https://data.vike.io/v1/hyperliquid/ohlcv/export?symbol=HYPE&market=spot&interval=1h&limit=168" \  -H "X-API-KEY: $VIKE_API_KEY"# 100-trade bars are built from raw fills. With no start the window is the 24 hours before end and limit# keeps the OLDEST bars, so name the slice you want: here the last hour of a pinned daycurl -s "https://data.vike.io/v1/hyperliquid/ohlcv/export?symbol=BTC&interval=100t&start=2026-08-17T23:00:00Z&end=2026-08-18T00:00:00Z&limit=1000" \  -H "X-API-KEY: $VIKE_API_KEY"# a window wider than one page: save the first page, then restart one bar after its last linecurl -s "https://data.vike.io/v1/hyperliquid/ohlcv/export?symbol=BTC&interval=1m&start=2026-08-17T00:00:00Z&limit=5000" \  -H "X-API-KEY: $VIKE_API_KEY" \  -o page1.ndjson# page 2 starts one minute after page 1's last bar: start accepts epoch millisecondsSTART=$(( $(tail -n 1 page1.ndjson | jq .ts) + 60000 ))curl -s "https://data.vike.io/v1/hyperliquid/ohlcv/export?symbol=BTC&interval=1m&start=$START&limit=5000" \  -H "X-API-KEY: $VIKE_API_KEY" \  -o page2.ndjson
Example response
{"symbol":"BTC","asset":"BTC","market":"perp","dex":"HL","interval":"1h","tz":"UTC","source":"1h fills rollup"}{"ts":1788408000000,"open":77685.0,"high":77826.0,"low":77518.0,"close":77761.0,"volume":1638.383539999999,"volume_usd":127187806.34586997,"n_trades":11502}{"ts":1788411600000,"open":77767.0,"high":77827.0,"low":77090.0,"close":77799.0,"volume":2381.401280000001,"volume_usd":184414000.1971202,"n_trades":20200}{"ts":1788415200000,"open":77800.0,"high":77839.0,"low":77679.0,"close":77822.0,"volume":742.5236199999999,"volume_usd":57737530.938200004,"n_trades":11927}{"ts":1788418800000,"open":77823.0,"high":78177.0,"low":77569.0,"close":77635.0,"volume":2354.81572,"volume_usd":183533988.69679,"n_trades":23209}{"ts":1788422400000,"open":77636.0,"high":78019.0,"low":77636.0,"close":78018.0,"volume":415.8346900000001,"volume_usd":32390151.983540002,"n_trades":3954}