Schemas Get a free key
LIVE --:--:-- UTC Hyperliquid positions snapshot on a 5-min UTC grid — last boundary --:-- next in -:--
Hyperliquid Perps

Hyperliquid Historical Data — Fills and 5-Minute Position Snapshots as Parquet

Hyperliquid history as Parquet files, one per UTC day: every fill with its fee, maker flag and closed PnL, and every 5-minute snapshot of every open position, plus the current open positions of every asset as one file replaced every 5 minutes. Files are handed out as temporary download links, one API call each, with no folder to browse. The archive starts on 2026-05-01. Free with one API key.

Coverage: Two datasets · one Parquet file per UTC day · fills since 2026-05-01, 5-minute positions since 2026-05-08 · the current open positions as one file, since 2026-05-01. Free — API key — delivered via API · Archive.

Data summary

CategoryHyperliquid Perps
CoverageTwo datasets · one Parquet file per UTC day · fills since 2026-05-01, 5-minute positions since 2026-05-08 · the current open positions as one file
Start date2026-05-01
DeliveryAPIArchiveStreamMCP
AccessFree — API key
REST/v1/hyperliquid/archive/datasets
/v1/hyperliquid/archive/url

Getting started

bash
# Which days exist, with rows, bytes and the snapshot count of each positions day:
curl -H "X-API-KEY: vk_..." "https://data.vike.io/v1/hyperliquid/archive/datasets"

# Ask for a temporary link to one file. It needs no key, names that file only and
# works for 300 seconds:
URL=$(curl -s -H "X-API-KEY: vk_..." \
  "https://data.vike.io/v1/hyperliquid/archive/url?dataset=fills&date=2026-10-19" | jq -r .url)

# Download the whole file, then read it locally. -o names the file: every link ends in fills.parquet.
curl -f -o fills-2026-10-19.parquet "$URL"

Schema

fills

One row per fill and wallet, sorted by asset, fill_ts, trade_id, wallet. Both counterparties of a trade carry the same trade_id.

ColumnType
fill_tsDateTime64(3, 'UTC')
walletString
assetString
sideString
size_tokenFloat64
priceFloat64
size_usdFloat64
feeFloat64
fee_tokenString
is_makerBool
order_idUInt64
trade_idUInt64
crossedBool
closed_pnlFloat64
dex_nameString
start_positionFloat64 (nullable)

positions

One row per open position at every 5-minute snapshot, sorted by asset, wallet, snapshot_ts. The file of the current open positions has the same columns.

ColumnType
snapshot_tsDateTime('UTC')
walletString
assetString
directionInt8
size_tokenFloat64
size_usdFloat64
entry_priceFloat64
mark_priceFloat64
liquidation_priceFloat64
unrealized_pnlFloat64
leverageFloat32
margin_usedFloat64
size_cohortString
leverage_typeString
dex_nameString
state_tsDateTime('UTC')
liq_progressFloat64

Example applications

  • Backtest on full-day fills

    If you are testing a signal against what actually traded, the fills file is every fill of the day with price, size, fee, whether the wallet was maker or taker and the realized PnL the node booked, sorted by asset so one asset is a slice of the file.

  • Positioning research without lookahead

    If your question is how the crowd was positioned at a moment in the past, the positions files carry every snapshot with the size tier the wallet had when the row was written, so a historical row is not graded with today's label.

  • Whole-book snapshots without paging the API

    If you need every open position at once, the latest positions file is one download of the current book, replaced every 5 minutes, instead of paging the positions route for minutes.

Access

Free — get an API key at vike.io/account (up to 5 keys per account) and send it as X-API-KEY on every request.

Archive files are licensed CC BY 4.0 — use them for anything, credit Vike. API responses carry the same attribution ask. Keys, rate limits and errors: the API page.

FAQ

How do I download a Hyperliquid file?
Ask for a link, then download it. GET /v1/hyperliquid/archive/url?dataset=fills&date=YYYY-MM-DD (or dataset=positions, or date=latest for the current open positions) returns a temporary URL for exactly one file. The URL needs no key and is accepted for 300 seconds from the start of a request, so download the whole file and read it locally.
Why is there no folder to browse?
Files are handed out on request. Nothing under the archive path for Hyperliquid is reachable directly, with or without a key; GET /v1/hyperliquid/archive/datasets lists which days exist, and each file is a separate link request.
Do downloads count against my hourly limit?
The download does not. Asking for the link is one ordinary API request and counts as one; the file transfer behind the link is recorded and never counted.
How far back do the files go?
The archive starts on 2026-05-01. Fills have a file for every day since; positions start on 2026-05-08, the first day with 5-minute snapshots. Earlier history is not published.
Why does a positions day sometimes hold fewer snapshots?
The source captured fewer on some days, and a file is never padded. The snapshots field of GET /v1/hyperliquid/archive/datasets says how many a day holds; a normal day holds about 250 to 290. Summing a positions file over an hour counts each position about 12 times: group by snapshot_ts or take one snapshot.
How current are the files?
A daily file is published in the early UTC morning after its day closes. The latest positions file is replaced about every 5 minutes; download it whole.