vike

Recipe 22 of 65

HyperCore ↔ HyperEVM transfers of a user

Read the user's spotTransfer and send ledger events and keep the ones whose counterparty is a Hyperliquid system address, such as 0x2222…2222 for HYPE; the sign of amount_usd gives the direction.

GET /v1/hyperliquid/wallets/{address}/ledger answers it, filtered on your side. A move between HyperCore and HyperEVM is a transfer to or from a system address, so it shows up as a spotTransfer or send row whose counterparty is that system address: 0x2222…2222 for HYPE, and in this capture 0x2000…0000 for USDC. A positive amount_usd arrived on HyperCore from HyperEVM; a negative one left HyperCore for HyperEVM. The full parameter list is on Wallet ledger.

Quick answer

Read the user's spot transfers.

cURL
# the user's spot transfers, where the Core and EVM moves sit
curl -H "X-API-Key: $VIKE_API_KEY" \
  "https://data.vike.io/v1/hyperliquid/wallets/0xbf49ffdc3008791900bb96ebccb61118f70c1bc9/ledger?event_type=spotTransfer&limit=5"

Example response

Captured from the live API on 2026-10-24 at 17:17 UTC, trimmed to 3 of 5 rows.

The first row is HYPE worth $426.85 arriving on HyperCore from HyperEVM: counterparty 0x2222…2222, amount positive. The third is $1,974 of USDC arriving the same way through 0x2000…0000. The second is an ordinary transfer from another user, not a Core and EVM move.

Example response
{
  "wallet": "0xbf49ffdc3008791900bb96ebccb61118f70c1bc9",
  "items": [
    {
      "ts": "2026-10-10T17:41:23.018000+00:00",
      "event_type": "spotTransfer",
      "amount_usd": 426.845,
      "fee": 0.0,
      "token": "HYPE",
      "counterparty": "0x2222222222222222222222222222222222222222",
      "hash": "0x2dd0fb68ec2c0b7b2f4a044644fb4602010c004e872f2a4dd199a6bbab2fe565"
    },
    {
      "ts": "2026-10-10T17:08:00.445000+00:00",
      "event_type": "spotTransfer",
      "amount_usd": 9097.890783,
      "fee": 0.0,
      "token": "USDC",
      "counterparty": "0x6cd5661646289fb6e65ea5c032310fded797d0a2",
      "hash": "0x61d3646e0ca791e9634d0446448d3c0106007c53a7aab0bb059c0fc0cbab6bd4"
    },
    {
      "ts": "2026-09-01T19:18:47.089000+00:00",
      "event_type": "spotTransfer",
      "amount_usd": 1974.093818,
      "fee": 0.0,
      "token": "USDC",
      "counterparty": "0x2000000000000000000000000000000000000000",
      "hash": "0x9ad617e33e1ba3199c4f044378707b0201ba00c8d91ec1eb3e9ec335fd1f7d04"
    }
  ],
  "nextCursor": "eyJoIjoiMHhmOWY5YTY5ZDEyYjRjNzc4ZmI3MzA0M2FjNmM4ZWIwMjBkNjQwMDgyYWRiN2U2NGI5ZGMyNTFlZmQxYjhhMTYzIiwidCI6IjIwMjYtMDUtMDYgMTE6NTY6NTUuMDU0In0"
}

Variations

Only the Core and EVM moves. Keep rows whose counterparty is the HYPE system address or matches the token system-address pattern: 0x20, zeros, then the token index in the last hex digits.

cURL — system-address rows
# spot transfers to or from a system address, newest 1000
curl -s -H "X-API-Key: $VIKE_API_KEY" \
  "https://data.vike.io/v1/hyperliquid/wallets/0xbf49ffdc3008791900bb96ebccb61118f70c1bc9/ledger?event_type=spotTransfer&limit=1000" \
  | jq '[.items[] | select((.counterparty // "") | test("^0x(2{40}|20{35}[0-9a-f]{4})$"))] | map({ts, token, amount_usd, counterparty, direction: (if .amount_usd > 0 then "evm_to_core" else "core_to_evm" end)})'

The send events too. Some moves to the system address are recorded as send rather than spotTransfer. Run the same filter on them.

cURL — send events
# the user's send events, to filter the same way
curl -H "X-API-Key: $VIKE_API_KEY" \
  "https://data.vike.io/v1/hyperliquid/wallets/0xbf49ffdc3008791900bb96ebccb61118f70c1bc9/ledger?event_type=send&limit=1000"

The HyperEVM side. The same address's token and native transfers on HyperEVM.

cURL — HyperEVM transfers
# HyperEVM transfers of the same address over 90 days
curl -H "X-API-Key: $VIKE_API_KEY" \
  "https://data.vike.io/v1/onchain/wallets/0xbf49ffdc3008791900bb96ebccb61118f70c1bc9/transactions?chain=hyperevm&days=90&limit=100"

Before you rely on it

No Core or EVM tag: you match the counterparty

The ledger has no field that says "bridge to HyperEVM"; the counterparty is the only signal, so match it exactly. A loose 0x20 prefix also catches ordinary addresses: this wallet's ledger holds a transfer with 0x2077…e06a, which is not a system address. A send can be recorded on one side only, so a move may be missing from the user's ledger. amount_usd is the venue's USD value and can be 0 for a token with no price.

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: ledger and event_type: spotTransfer, at 1 credit a call.

Ask your agent
Has Hyperliquid wallet 0xbf49ffdc3008791900bb96ebccb61118f70c1bc9 moved HYPE or USDC between HyperCore and HyperEVM?
Example response
{  "wallet": "0xbf49ffdc3008791900bb96ebccb61118f70c1bc9",  "items": [    {      "ts": "2026-10-10T17:41:23.018000+00:00",      "event_type": "spotTransfer",      "amount_usd": 426.845,      "fee": 0.0,      "token": "HYPE",      "counterparty": "0x2222222222222222222222222222222222222222",      "hash": "0x2dd0fb68ec2c0b7b2f4a044644fb4602010c004e872f2a4dd199a6bbab2fe565"    },    {      "ts": "2026-10-10T17:08:00.445000+00:00",      "event_type": "spotTransfer",      "amount_usd": 9097.890783,      "fee": 0.0,      "token": "USDC",      "counterparty": "0x6cd5661646289fb6e65ea5c032310fded797d0a2",      "hash": "0x61d3646e0ca791e9634d0446448d3c0106007c53a7aab0bb059c0fc0cbab6bd4"    },    {      "ts": "2026-09-01T19:18:47.089000+00:00",      "event_type": "spotTransfer",      "amount_usd": 1974.093818,      "fee": 0.0,      "token": "USDC",      "counterparty": "0x2000000000000000000000000000000000000000",      "hash": "0x9ad617e33e1ba3199c4f044378707b0201ba00c8d91ec1eb3e9ec335fd1f7d04"    }  ],  "nextCursor": "eyJoIjoiMHhmOWY5YTY5ZDEyYjRjNzc4ZmI3MzA0M2FjNmM4ZWIwMjBkNjQwMDgyYWRiN2U2NGI5ZGMyNTFlZmQxYjhhMTYzIiwidCI6IjIwMjYtMDUtMDYgMTE6NTY6NTUuMDU0In0"}