Recipe 3 of 33
Whales vs retail: alert when their positioning diverges
Poll a coin's Whale-vs-Shrimp Index, the whales' long share minus the small accounts' long share, and alert when it crosses your threshold.
GET /v1/hl-cohorts/symbols/{symbol}/indices answers it in one call. Its wsi, the Whale-vs-Shrimp Index, is the
long share of the whale accounts ($1m and up) minus the long share of the shrimp accounts (under $10k), from -1 to
+1; 0 means both groups are equally long. latest is the newest 5-minute snapshot and series the settled hours,
so one call gives the reading and its recent range. The full parameter list is on
Coin indices.
Quick answer
hours=24 adds the last day of settled readings to the current one.
# BTC whale-vs-shrimp divergence now, plus the last 24 settled hours
curl -H "X-API-Key: $VIKE_API_KEY" \
"https://data.vike.io/v1/hl-cohorts/symbols/BTC/indices?hours=24"Example response
Captured from the live API on 2026-10-24 at 17:12 UTC, trimmed to 4 of 24 series rows.
At the 17:07 UTC snapshot wsi was -0.33: the whales' long share was 33 points below the shrimps'.
Values are ratios; the website shows them multiplied by 100. An alert is a rule on this number, for
example "fire when latest.wsi is below -0.3 or above +0.3".
{
"symbol": "BTC",
"label_basis": "point_in_time",
"latest": {
"ts": "2026-10-24T17:07:00+00:00",
"smi": -0.105745,
"wsi": -0.333305,
"whale_bias": -0.196333,
"smart_bias": -0.1028,
"label_basis": "current"
},
"series": [
{
"ts": "2026-10-24T16:00:00+00:00",
"smi": -0.099091,
"wsi": -0.306365
},
{
"ts": "2026-10-24T15:00:00+00:00",
"smi": -0.111421,
"wsi": -0.377369
},
{
"ts": "2026-10-24T14:00:00+00:00",
"smi": -0.116197,
"wsi": -0.371108
},
{
"ts": "2026-10-24T13:00:00+00:00",
"smi": -0.137182,
"wsi": -0.335198
}
],
"has_more": false
}Variations
Poll one number. Keep only the field the rule needs.
# the current divergence and the snapshot it was read at
curl -s -H "X-API-Key: $VIKE_API_KEY" \
"https://data.vike.io/v1/hl-cohorts/symbols/BTC/indices?hours=1" \
| jq '{ts: .latest.ts, wsi: .latest.wsi}'Pick a threshold from history. A year of hourly wsi shows how far the index usually swings on this coin. limit caps a page at
5000 rows and has_more says older ones remain.
# up to a year of hourly readings, newest first
curl -s -H "X-API-Key: $VIKE_API_KEY" \
"https://data.vike.io/v1/hl-cohorts/symbols/BTC/indices?hours=8760" \
| jq '[.series[].wsi | select(. != null)] | {n: length, min: min, max: max}'Your own groups, with a freshness verdict. The size matrix lets you define "whale" and "retail" yourself, and its freshness.stale says
whether the newest settled hour is late.
# every account-size cohort on BTC for the newest settled hour, with freshness
curl -s -H "X-API-Key: $VIKE_API_KEY" \
"https://data.vike.io/v1/hl-cohorts/symbols/BTC/cohort-metrics?axis=size&hours=1" \
| jq '{freshness, rows: [.metrics[] | {cohort, bias}]}'Before you rely on it
You poll; nothing is pushed
There is no push or webhook for this index: an alert is your own job that polls the endpoint and
checks the rule. latest moves with the 5-minute snapshot, while series and the size matrix are
settled hours that land one to two hours late. Check latest.ts, or freshness.stale on
/cohort-metrics, before you fire on an old reading. A value is null, never 0, when one group holds
no position on the coin.
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 (view indices), at 1 credit a call.
Is the Whale-vs-Shrimp Index on BTC below -0.3 right now?