Large fills
One symbol's fills over $50,000 from the last 24 hours, newest first — the asset page's Whale Activity feed, with the wallet's cohorts and how far back the answer reaches.
GET https://data.vike.io/v1/hl-cohorts/symbols/{symbol}/large-fillsThe asset page's Whale Activity feed: one symbol's large fills, newest first, each with the wallet's
size and realized-PnL cohort. It reads the same view, with the same SQL, as the site. That view is
rebuilt every minute and keeps, per symbol, the newest 200 fills over $50,000 of the last 24 hours —
so covered_from says how far back an answer reaches, truncated whether the view's cap cut the
window, and has_more whether limit cut rows.
On a busy symbol the feed covers minutes, not a day
200 fills per symbol is the view's whole depth, whatever hours or limit ask for. On BTC it
reached back about 20 minutes (measured 2026-10-22). Read covered_from before treating an answer
as the whole of a window. Any closed UTC day of fills is one Parquet file in the
file archive.
# BTC's newest fills over $50,000: everything the view holds for the symbol
curl -s "https://data.vike.io/v1/hl-cohorts/symbols/BTC/large-fills" \
-H "X-API-KEY: $VIKE_API_KEY"
# how far back that answer reaches, and whether the view's cap cut the window
curl -s "https://data.vike.io/v1/hl-cohorts/symbols/BTC/large-fills" \
-H "X-API-KEY: $VIKE_API_KEY" \
| jq '{covered_from, truncated, has_more, fills: (.fills | length)}'
# only fills over $250,000 in the last 6 hours on ETH
curl -s "https://data.vike.io/v1/hl-cohorts/symbols/ETH/large-fills?min_usd=250000&hours=6" \
-H "X-API-KEY: $VIKE_API_KEY"
# who is taking liquidity: market orders only, with the wallet's cohorts
curl -s "https://data.vike.io/v1/hl-cohorts/symbols/HYPE/large-fills" \
-H "X-API-KEY: $VIKE_API_KEY" \
| jq '[.fills[] | select(.order_type == "market") | {ts, wallet, direction, size_usd, size_cohort, pnl_cohort}]'
# the newest 20 only; has_more says the view holds more that match
curl -s "https://data.vike.io/v1/hl-cohorts/symbols/BTC/large-fills?limit=20" \
-H "X-API-KEY: $VIKE_API_KEY"symbolpathrequiredmin_usdqueryoptionalhoursqueryoptionallimitqueryoptionalhas_more says a lower limit cut rows.{
"symbol": "BTC",
"min_usd": 50000.0,
"hours": 24,
"covered_from": "2026-10-24T06:07:13.456000+00:00",
"truncated": true,
"has_more": true,
"size_cohort_basis": "current",
"fills": [
{
"ts": "2026-10-24T07:07:34.851000+00:00",
"wallet": "0x7f62a7e331d83ead1b21f9ec4cdda089485ab77f",
"direction": "buy",
"size_token": 0.8049,
"size_usd": 65082.604199999994,
"price": 80858.0,
"order_type": "market",
"size_cohort": "2x shrimp",
"pnl_cohort": "2x smart",
"pnl_cohort_basis": "current"
},
{
"ts": "2026-10-24T07:07:34.851000+00:00",
"wallet": "0xecb63caa47c7c4e77f60f1ce858cf28dc2b82b00",
"direction": "sell",
"size_token": 0.8049,
"size_usd": 65082.604199999994,
"price": 80858.0,
"order_type": "limit",
"size_cohort": "4x whale",
"pnl_cohort": "3x smart",
"pnl_cohort_basis": "current"
}
]
}The response
| Field | What it is |
|---|---|
symbol | The symbol in its stored spelling (btc → BTC). |
min_usd, hours | The values applied. |
covered_from | How far back the answer reaches: the window start (now − hours) when truncated is false, else the oldest fill the view holds for the symbol. |
truncated | true when the view is at its 200-fill cap and its oldest fill is newer than the window start, so older fills of the window may have been cut. It ignores min_usd: above $50,000 the cut fills may all have been smaller than min_usd, so true means "may have been cut", never "were". |
has_more | true when limit cut fills that match. There is no cursor: ask for a larger limit. |
size_cohort_basis | Always current. |
fills | The fills, newest first. |
When truncated is false the view holds every fill over $50,000 of the window, so an empty or
short answer for a quiet symbol means there were no such fills. An unknown symbol answers with an
empty fills.
Each fill:
| Field | What it is |
|---|---|
ts | When the fill happened, ISO-8601 UTC. |
wallet | The wallet that filled. |
direction | buy or sell, the fill's side, as on /v1/hyperliquid/wallets/{address}/fills. |
size_token | size_usd / price, which is how the fill is stored. null when price is 0. |
size_usd | The fill's notional, USD. |
price | The fill price. |
order_type | market when the fill crossed the book (taker), limit when it rested — the site's MKT and LMT. |
size_cohort | The wallet's size rung on its latest position snapshot when the feed was last refreshed; null when there is none. |
pnl_cohort | The wallet's realized-PnL rung as of the fill's own hour where that hour is labelled, else today's; null when there is none. |
pnl_cohort_basis | point_in_time or current: which of the two pnl_cohort is. |
Not served: whether a fill was a liquidation (the fill record does not carry it;
/v1/hyperliquid/liquidations is the separate listing), and the
fill's open or close text, which is not stored.
Errors
| Status | When |
|---|---|
400 | The symbol is blank. The body is {"detail": "…"}. |
422 | min_usd is below 50000 or not a finite number, hours is outside 1–24, or limit is outside 1–1000. |
401 / 429 | No or bad credential, or the hourly budget or the per-minute cap is spent — see Authentication and Rate limits. |
503 | The store behind it is unavailable. |
The ladders behind size_cohort and pnl_cohort are on
Cohorts and axes; the two label bases are on
Label basis.