vike
API EndpointsHyperliquid

/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}/metrics

Hourly 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.

cURL
# 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"
coinpathrequired
HL coin ticker
startqueryoptional
ISO-8601 UTC bounds
endqueryoptional
ISO-8601 UTC bounds
axisqueryoptional
size | pnl | pnl_abs. Omit for all cohorts combined
cohortqueryoptional
One label on that axis
openedWithinqueryoptional
24h | 7d | 30d | all. Default all. Rolling per bucket, not relative to now — each hour counts positions opened in the window before THAT hour.
limitqueryoptional
Default 500, max 5000
cursorqueryoptional
Keyset cursor
labelBasisqueryoptional
current 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.
Example response
{
  "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.

cURL
# the newest hourly rows for BTC, all cohorts combined; the first row is provisionalcurl -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 seriescurl -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 slugcurl -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 historycurl -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 hourcurl -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 rangecurl -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 verbatimcurl -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 prefixcurl -s "https://data.vike.io/v1/hyperliquid/coins/xyz:PLATINUM/metrics?limit=24" \  -H "X-API-KEY: $VIKE_API_KEY"
Example response
{  "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"}