Recipe 19 of 65
Copy-trade watcher: alert when a Hyperliquid wallet opens, adds or closes
Poll /wallets/{address}/fills with start set to the last fill you saw to catch every new fill within seconds, and diff /positions?wallet= between polls to tell an open, an add and a close apart.
GET /v1/hyperliquid/wallets/{address}/fills answers it, polled: there is no push channel. It returns the wallet's
fills newest first, each with symbol, side, size, price, order_id, is_maker, crossed and closed_pnl. Ask again
with start set to the newest ts you hold and alert on anything new. To label an event as an open, an add or a
close, compare the wallet's open positions from GET /v1/hyperliquid/positions with the previous poll. The full
parameter lists are on Wallet fills and
Positions.
Quick answer
Read the wallet's newest fills.
# the wallet's newest fills
curl -H "X-API-Key: $VIKE_API_KEY" \
"https://data.vike.io/v1/hyperliquid/wallets/0xfc667adba8d4837586078f4fdcdc29804337ca06/fills?limit=5"Example response
Captured from the live API on 2026-10-24 at 17:17 UTC, trimmed to 3 of 5 rows. The legacy asset copy of symbol is left out.
The newest fill was served about 8 seconds after it happened. The two NEAR sells reduce the wallet's NEAR long, so the venue
reports a closed_pnl on them; the MU sell carries none. is_maker: true and a negative fee mean resting orders that
earned a rebate. fee is in fee_token.
{
"wallet": "0xfc667adba8d4837586078f4fdcdc29804337ca06",
"items": [
{
"ts": "2026-10-24T17:16:58.916000+00:00",
"symbol": "NEAR",
"side": "sell",
"direction": "sell",
"size_token": 37.0,
"price": 4.426,
"size_usd": 163.762,
"fee": -0.001637,
"fee_token": "USDC",
"is_maker": true,
"crossed": false,
"closed_pnl": -0.97162,
"order_id": 584771810682,
"trade_id": 507206740892077,
"dex_name": "HL"
},
{
"ts": "2026-10-24T17:16:58.916000+00:00",
"symbol": "NEAR",
"side": "sell",
"direction": "sell",
"size_token": 121.4,
"price": 4.426,
"size_usd": 537.3164,
"fee": -0.005373,
"fee_token": "USDC",
"is_maker": true,
"crossed": false,
"closed_pnl": -3.187964,
"order_id": 584771810690,
"trade_id": 302300364497393,
"dex_name": "HL"
},
{
"ts": "2026-10-24T17:16:43.979000+00:00",
"symbol": "xyz:MU",
"side": "sell",
"direction": "sell",
"size_token": 4.442,
"price": 876.61,
"size_usd": 3893.90162,
"fee": -0.003893,
"fee_token": "USDC",
"is_maker": true,
"crossed": false,
"closed_pnl": 0.0,
"order_id": 584771610549,
"trade_id": 435950047636822,
"dex_name": "XYZ"
}
],
"nextCursor": "eyJpIjo5NTc4MDQ1ODM3NTMwOTksInQiOiIyMDI2LTEwLTI0IDE3OjE2OjI5Ljc2MiJ9"
}Variations
Only what is new since the last poll. Pass the newest ts you hold as start.
# fills at or after the last one already seen
curl -H "X-API-Key: $VIKE_API_KEY" \
"https://data.vike.io/v1/hyperliquid/wallets/0xfc667adba8d4837586078f4fdcdc29804337ca06/fills?start=2026-10-24T17:16:58.916Z&limit=500"Open, add or close. Snapshot the wallet's open positions on each poll. A new symbol and direction pair is an open, a larger size_token
is an add, a smaller one a partial close, and a pair that disappears is a close.
# the wallet's open positions, one row per symbol and side
curl -s -H "X-API-Key: $VIKE_API_KEY" \
"https://data.vike.io/v1/hyperliquid/positions?wallet=0xfc667adba8d4837586078f4fdcdc29804337ca06&limit=500" \
| jq '.positions | map({symbol, direction, size_token, entry_price, snapshot_ts})'One market only. Add symbol.
# the wallet's newest BTC fills
curl -H "X-API-Key: $VIKE_API_KEY" \
"https://data.vike.io/v1/hyperliquid/wallets/0xfc667adba8d4837586078f4fdcdc29804337ca06/fills?symbol=BTC&limit=100"Before you rely on it
Polling, two clocks, and repeats at the boundary
Nothing is pushed: you decide the poll interval and pay for each call. Fills arrive within seconds, but positions come
from a snapshot taken about every 5 minutes, so the position diff lags the fills. start is cut to the whole second and is
inclusive, so drop fills whose trade_id you already hold. One order can fill in many pieces with one order_id, and direction repeats side
(buy or sell); it does not say whether the fill opened or closed a position.
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_wallet_activity tool answers with view: fills, at 1 credit a call.
What did Hyperliquid wallet 0xfc667adba8d4837586078f4fdcdc29804337ca06 trade in the last 10 minutes?