/positions/match
"Who else is in this trade" — open positions matching a coin/side/leverage/entry profile, the reverse lookup from a shared position card.
GET https://data.vike.io/v1/hyperliquid/positions/match"Who else is in this trade" — open positions matching a coin/side/leverage/entry profile, the
reverse lookup from a shared position card. Runs the same implementation as the hl_position_match
tool on the Data MCP server.
# who else holds this trade: a 40x BTC long entered at 78,001.68, ranked by closeness to the mark
curl -s "https://data.vike.io/v1/hyperliquid/positions/match?coin=BTC&side=long&leverage=40&entry_price=78001.68&mark_price=77710&limit=3" \
-H "X-API-KEY: $VIKE_API_KEY"
# the same lookup for a short; mark_price omitted, so ranking uses entry_price
curl -s "https://data.vike.io/v1/hyperliquid/positions/match?coin=BTC&side=short&leverage=25&entry_price=78500&limit=10" \
-H "X-API-KEY: $VIKE_API_KEY"
# ask for what the route will actually serve: limit is clamped into 1-50
curl -s "https://data.vike.io/v1/hyperliquid/positions/match?coin=BTC&side=long&leverage=10&entry_price=78000&limit=50" \
-H "X-API-KEY: $VIKE_API_KEY"
# how crowded is a low-leverage short: count the matches (at most 50)
curl -s "https://data.vike.io/v1/hyperliquid/positions/match?coin=BTC&side=short&leverage=5&entry_price=78000&limit=50" \
-H "X-API-KEY: $VIKE_API_KEY" \
| jq '.matches | length'coinqueryrequiredBTCsidequeryrequiredlong | shortleveragequeryrequiredentry_pricequeryrequiredmark_pricequeryoptionalentry_price when omittedlimitqueryoptional{
"matches": [
{
"address": "0x0000005178d55139ba21423218ea7290a7ccdc81",
"coin": "BTC",
"side": "long",
"snapshot_ts": 1788422340,
"size_token": 0.00467,
"size_usd": 362.90569999999997,
"entry_price": 78001.6773019272,
"mark_price": 77710.0,
"leverage": 40.0,
"liquidation_price": 77064.4662131028,
"unrealized_pnl": -1.362132999999992,
"entry_dist_pct": 0.0
},
{
"address": "0xf94d1cfd380bbaa0d7ca33e00700e7e6be836ab1",
"coin": "BTC",
"side": "long",
"snapshot_ts": 1788422340,
"size_token": 0.035,
"size_usd": 2719.8500000000004,
"entry_price": 78001.85714285714,
"mark_price": 77710.0,
"leverage": 40.0,
"liquidation_price": 0.0,
"unrealized_pnl": -10.215000000000074,
"entry_dist_pct": 0.0002
},
{
"address": "0x76d81fdfc8226f371529d596f52d208279127663",
"coin": "BTC",
"side": "long",
"snapshot_ts": 1788422340,
"size_token": 0.00015,
"size_usd": 11.6565,
"entry_price": 78002.0,
"mark_price": 77710.0,
"leverage": 40.0,
"liquidation_price": 77077.3805907173,
"unrealized_pnl": -0.0438,
"entry_dist_pct": 0.0004
}
],
"match_count": 3,
"tolerance_used": "tight",
"query": {
"coin": "BTC",
"side": "long",
"leverage": 40.0,
"entry_price": 78001.68,
"mark_price_hint": 77710.0
}
}limit is documented as max 500 and clamped to 50
The parameter is accepted up to 500 and then clamped into 1–50. A larger request is served at 50, not rejected.
It walks three widening tolerance bands on entry price — tight 0.05%, then 0.5%, then a 1.0% fallback — and returns the first band that matches, ranked by mark-price proximity. So a match is not necessarily a 0.05% match; check the reported band.
Only positions seen within 15 minutes of the newest snapshot batch are matched, which is why this returns fewer rows than the history holds: Freshness.