/coins/{coin}/metrics
Hourly open-interest / position-count / bias series for one coin, optionally sliced to a single cohort. The current-value endpoint.
GET https://data.vike.io/v1/hyperliquid/coins/{coin}/metricsHourly open-interest / position-count / bias series for one coin, optionally sliced to a single
cohort. This is the current-value endpoint;
/cohort-metrics is the bulk-history one.
# the newest hourly rows for BTC, all cohorts combined; the first row is provisional
curl -s "https://data.vike.io/v1/hyperliquid/coins/BTC/metrics?limit=3" \
-H "X-API-KEY: $VIKE_API_KEY"
# persist only settled hours: drop the provisional row before storing a series
curl -s "https://data.vike.io/v1/hyperliquid/coins/BTC/metrics?limit=48" \
-H "X-API-KEY: $VIKE_API_KEY" \
| jq '[.metrics[] | select(.provisional | not)]'
# whale positioning on BTC for the last two days: one size cohort, by slug
curl -s "https://data.vike.io/v1/hyperliquid/coins/BTC/metrics?axis=size&cohort=4x_whale&limit=48" \
-H "X-API-KEY: $VIKE_API_KEY"
# a smart-money slice; the label is today's grading (this route serves only current labels),
# so read it as who is smart now, not as history
curl -s "https://data.vike.io/v1/hyperliquid/coins/BTC/metrics?axis=pnl&cohort=3x_smart&limit=48" \
-H "X-API-KEY: $VIKE_API_KEY"
# newly opened positioning only: positions opened in the 24 hours before each hour
curl -s "https://data.vike.io/v1/hyperliquid/coins/BTC/metrics?openedWithin=24h&limit=48" \
-H "X-API-KEY: $VIKE_API_KEY"
# a pinned week of hourly rows: limit must cover every hour in the range
curl -s "https://data.vike.io/v1/hyperliquid/coins/BTC/metrics?start=2026-08-10T00:00:00Z&end=2026-08-16T23:59:59Z&limit=168" \
-H "X-API-KEY: $VIKE_API_KEY"
# next page of the call just above: NEXT is its nextCursor, passed back verbatim
curl -s "https://data.vike.io/v1/hyperliquid/coins/BTC/metrics?start=2026-08-10T00:00:00Z&end=2026-08-16T23:59:59Z&limit=168&cursor=$NEXT" \
-H "X-API-KEY: $VIKE_API_KEY"
# a builder-DEX market is a coin like any other, namespaced with its dex prefix
curl -s "https://data.vike.io/v1/hyperliquid/coins/xyz:PLATINUM/metrics?limit=24" \
-H "X-API-KEY: $VIKE_API_KEY"coinpathrequiredstartqueryoptionalendqueryoptionalaxisqueryoptionalsize | pnl | pnl_abs. Omit for all cohorts combinedcohortqueryoptionalopenedWithinqueryoptional24h | 7d | 30d | all. Default all. Rolling per bucket, not relative to now — each hour counts positions opened in the window before THAT hour.limitqueryoptionalcursorqueryoptionallabelBasisqueryoptionalcurrent only. This endpoint resolves the cohort label from the wallet dictionary at QUERY time, so on the pnl ladders it can only serve current, and it REFUSES point_in_time by name instead of ignoring it. Every response declares label_basis and, for a pnl axis, label_computed.lookahead.{
"axis": "size",
"label_basis": "point_in_time",
"metrics": [
{
"ts": "2026-09-03T07:59:00+00:00",
"position_count": 36124,
"position_count_long": 22181,
"total_position_value": 3009666609.0,
"total_position_value_long": 1504833304.0,
"total_unrealized_pnl": -25275224.09,
"total_position_size": 38729.4635,
"total_position_size_long": 19364.73175,
"bias": -2.376528135E-16,
"provisional": true,
"label_basis": "point_in_time"
},
{
"ts": "2026-09-03T07:00:00+00:00",
"position_count": 37385,
"position_count_long": 22704,
"total_position_value": 3040705315.0,
"total_position_value_long": 1524148585.0,
"total_unrealized_pnl": -25163932.39,
"total_position_size": 39127.71343,
"total_position_size_long": 19612.467,
"bias": 0.002496741284,
"provisional": false,
"label_basis": "point_in_time"
},
{
"ts": "2026-09-03T06:00:00+00:00",
"position_count": 36982,
"position_count_long": 22508,
"total_position_value": 3038908973.0,
"total_position_value_long": 1518681456.0,
"total_unrealized_pnl": -25099074.21,
"total_position_size": 39060.76211,
"total_position_size_long": 19520.44664,
"bias": -0.0005087549732,
"provisional": false,
"label_basis": "point_in_time"
},
{
"ts": "2026-09-03T05:00:00+00:00",
"position_count": 37127,
"position_count_long": 22594,
"total_position_value": 3009207480.0,
"total_position_value_long": 1496950278.0,
"total_unrealized_pnl": -25051797.85,
"total_position_size": 38755.01536,
"total_position_size_long": 19278.62806,
"bias": -0.005086696384,
"provisional": false,
"label_basis": "point_in_time"
}
],
"nextCursor": "eyJtIjoibWV0cmljcyIsInQiOiIyMDI2LTA5LTAzIDA1OjAwOjAwIn0"
}openedWithin is rolling per bucket, not relative to now: each hour counts positions opened in
the window before that hour.
Hourly by construction. Summing the 5-minute snapshot table into hour buckets over-counts open interest roughly 12x, which is what forced the previous cohort aggregate to be rebuilt.
Every row carries provisional, true on at most one row: the newest, covering the hour still in progress. Drop it when persisting a series; Freshness says why it exists.
This endpoint refuses labelBasis=point_in_time by name, because its cohort label is resolved at query time. Use /coins/{coin}/cohort-metrics with axis=pnl&labelBasis=point_in_time; the measurement is on Label basis.