Recipe 33 of 65
Positions of 50 Hyperliquid watchlist wallets in one call
/v1/hyperliquid/positions takes one wallet per call; for 50 at once, download the 5-minute file of every open position through /v1/hyperliquid/archive/url and filter it to your wallets.
GET /v1/hyperliquid/archive/url answers it in one call with dataset=positions&date=latest: a link to the file of
every open position of every wallet, about 30 MB of Parquet, replaced about every 5 minutes. Download it and keep the
rows of your 50 wallets. GET /v1/hyperliquid/positions with wallet answers one wallet per call, so 50 wallets there
are 50 calls. The full parameter lists are on Archive download link and
Positions.
Quick answer
Ask for the link with redirect=1 and let curl follow it.
# ask for the link and download the current open positions of every wallet in one step
curl -L -H "X-API-Key: $VIKE_API_KEY" \
"https://data.vike.io/v1/hyperliquid/archive/url?dataset=positions&date=latest&redirect=1" \
-o positions-latest.parquetThen keep your wallets' rows, for example in DuckDB.
SELECT wallet, asset, direction, size_usd, entry_price, leverage, account_value
FROM 'positions-latest.parquet'
WHERE wallet IN ('0x25773676902085225ae5751075e4161369334897', '0x5b5d51203a0f9079f8aeb098a6523a13f298c060')
AND snapshot_ts = (SELECT max(snapshot_ts) FROM 'positions-latest.parquet')
ORDER BY wallet, size_usd DESC;Example response
Captured from the live API on 2026-10-24 at 17:16 UTC without redirect, all fields; the signed token in url is replaced
with <exp>.<kid>.<sig>, because a live link is a credential for five minutes. The link needs no key and works for
300 seconds. The file held 423,011 rows: one per open position of every wallet on every coin, with the same 19 columns
as the daily positions files, account_value included.
{
"url": "https://data.vike.io/dl/<exp>.<kid>.<sig>/venue=hyperliquid/latest/positions.parquet",
"expires_at": "2026-10-24T17:21:51Z",
"expires_in": 300,
"dataset": "positions",
"date": "latest",
"bytes": 32142106,
"rows": 423011
}Variations
One wallet through the API. The per-wallet call, when the list is short. 50 calls fit inside the 200 requests per minute cap.
# everything one wallet holds right now
curl -H "X-API-Key: $VIKE_API_KEY" \
"https://data.vike.io/v1/hyperliquid/positions?wallet=0x25773676902085225ae5751075e4161369334897&limit=200"Check the file before you download. The index says when the file was written, its size and how many assets it covers.
# snapshot time, write time, rows and bytes of the latest positions file
curl -s -H "X-API-Key: $VIKE_API_KEY" \
"https://data.vike.io/v1/hyperliquid/archive/datasets" \
| jq '.latest.positions | {snapshot_ts, generated_at, rows, bytes, assets}'Before you rely on it
Keep the newest cycle only
A position closed in the last 15 minutes can still be in the file with an older snapshot_ts, so keep the rows whose
snapshot_ts is the file's newest. Addresses are lowercase in the file. direction is 1 for long and -1 for
short. account_value is the wallet's main-venue equity as of the start of the clock hour, and null when unknown;
there is no opened_at (the API adds it per page).
Each link counts against a daily allowance
Links are limited to 20 GB per user per rolling 24 hours, counted by the size of each file you ask for. The latest file is about 32 MB, so asking every 5 minutes all day is about 9 GB. Download the whole file: it is replaced about every 5 minutes, and a ranged read can straddle a replacement and fail.
Ask your agent
Connected to the Vike MCP server (https://vike.io/mcp) in Claude, ChatGPT or Cursor, ask it in plain words.
The hl_market tool answers with view: positions and the wallet, one wallet per call, at 1 credit a call.
What positions does 0x25773676902085225ae5751075e4161369334897 hold on Hyperliquid right now?