Skip to main content

Hyperliquid Liquidations: History by Wallet

Look up Hyperliquid liquidations for any address: every liquidated position, its market, method, mark price and size, as a query or a live stream.

The perpetuals page covers the market-wide liquidation feed. This page is the other direction: one address, its complete liquidation history.

That is the query you need to answer "was this position liquidated or did I close it", to reconstruct a blown-up account, or to fill the gap left when an export shows a position disappearing with no closing trade.

Checking once, or watching continuously?

Every query on this page becomes a live feed by changing query to subscription — see real-time liquidation alerts below. To watch a set of wallets, the whole exchange, or follow the liquidated funds to other chains, see Build on this. Hyperliquid is included in every Bitquery plan alongside Solana, Ethereum, Base, BNB and Tron.

API Key Required

To query or stream data outside the Bitquery IDE, you need an API access token.

Follow the steps here: How to generate Bitquery API token ➤

Every liquidation of one address​

LiquidatedUser is the address whose position was closed. Method is market for an open-market liquidation and backstop when the backstop vault takes over. Position.SizeBefore is the signed size that existed immediately before the liquidation — negative for a short.

Run it in the IDE: Hyperliquid Wallet Liquidation History ➤

query {
Hyperliquid {
PerpLiquidations(
limit: {count: 100}
orderBy: {descending: Block_Time}
where: {Liquidation: {LiquidatedUser: {is: "0x2b5dba3bc4cbb1b94d1e57fcbe0fbc82731ce5f2"}}, Block: {Time: {since_relative: {days_ago: 3}}}}
) {
Block { Time }
Liquidation {
Market { Symbol Kind }
Method
MarkPx
LiquidatedUser
Execution { Price Size Side Direction Hash }
Position { Leverage IsCross Side SizeBefore }
Fees { Fee FeeToken }
}
}
}
}

Sample response:

{
"Block": { "Time": "2026-09-04T09:58:14.257546Z" },
"Liquidation": {
"Market": { "Symbol": "SKR" },
"Method": "market",
"MarkPx": "0.024767",
"LiquidatedUser": "0x2b5dba3bc4cbb1b94d1e57fcbe0fbc82731ce5f2",
"Execution": { "Price": "0.024831", "Size": "2663.0", "Side": "Buy", "Direction": "Close Short" },
"Position": { "Leverage": 3, "IsCross": false, "Side": "Short", "SizeBefore": "-2663.0" },
"Fees": { "Fee": "0.028565", "FeeToken": "USDC" }
}
}

Execution.Direction reads Close Short because liquidating a short is a buy that closes it — the direction describes the effect on the liquidated position, not the trader's intent.

Liquidation totals per market​

One row per market and method, with the number of liquidation events, the total size closed and the fees charged.

Run it in the IDE: Hyperliquid Wallet Liquidation Totals ➤

query {
Hyperliquid {
PerpLiquidations(
where: {Liquidation: {LiquidatedUser: {is: "0x2b5dba3bc4cbb1b94d1e57fcbe0fbc82731ce5f2"}}, Block: {Time: {since_relative: {days_ago: 3}}}}
) {
Liquidation { Market { Symbol } Method }
events: count
size: sum(of: Liquidation_Execution_Size)
fees: sum(of: Liquidation_Fees_Fee)
}
}
}

Liquidations over a date range​

Bound the export to a tax year, a quarter, or the window around a specific market event.

Run it in the IDE: Hyperliquid Liquidations By Date Range ➤

query {
Hyperliquid {
PerpLiquidations(
limit: {count: 100}
orderBy: {ascending: Block_Time}
where: {
Liquidation: {LiquidatedUser: {is: "0x2b5dba3bc4cbb1b94d1e57fcbe0fbc82731ce5f2"}}
Block: {Time: {since: "2026-09-01T00:00:00Z", till: "2026-09-04T00:00:00Z"}}
}
) {
Block { Time }
Liquidation {
Market { Symbol }
Method
MarkPx
Execution { Price Size Side Direction }
Position { Leverage IsCross Side SizeBefore }
Fees { Fee FeeToken }
}
}
}
}

Backstop liquidations only​

Filter on Method to isolate the liquidations the backstop vault absorbed rather than the open market. These carry different Execution.Direction values from ordinary liquidations — Auto-Deleveraging and Partial Borrow Liquidation both appear here.

Run it in the IDE: Hyperliquid Backstop Liquidations By Wallet ➤

query {
Hyperliquid {
PerpLiquidations(
limit: {count: 100}
orderBy: {descending: Block_Time}
where: {
Liquidation: {
LiquidatedUser: {is: "0x2b5dba3bc4cbb1b94d1e57fcbe0fbc82731ce5f2"}
Method: {is: "backstop"}
}
Block: {Time: {since_relative: {days_ago: 3}}}
}
) {
Block { Time }
Liquidation {
Market { Symbol }
Method
MarkPx
Execution { Price Size Side Direction }
Position { Leverage IsCross SizeBefore }
}
}
}
}

Real-time liquidation alerts for one wallet​

Run it in the IDE: Hyperliquid Wallet Liquidation Stream ➤

subscription {
Hyperliquid {
PerpLiquidations(
where: {Liquidation: {LiquidatedUser: {is: "0x2b5dba3bc4cbb1b94d1e57fcbe0fbc82731ce5f2"}}}
) {
Block { Time }
Liquidation {
Market { Symbol }
Method
MarkPx
LiquidatedUser
Execution { Price Size Side Direction }
Position { Leverage IsCross Side SizeBefore }
}
}
}
}

Drop the where clause to stream every liquidation on the exchange, or swap the address for a list to watch a set of accounts.

Build on this​

A one-off lookup answers "was I liquidated". The same cube, kept open as a stream, is what bots, risk desks and dashboards run on:

  • Watch a list of wallets. Replace is with in: ["0x…", "0x…"] in the subscription above to get one stream for every account you care about — your own, a vault's, a set of market makers.
  • Exchange-wide liquidation feed. Drop the where clause and you have every liquidation on Hyperliquid in real time — the input for cascade detection, liquidation heatmaps and Telegram alerts. The perpetuals page has the market-wide variant.
  • Pair it with positions and funding. Stream CurrentPositions to see who is close to liquidation before it happens, and PerpFundings for what the position cost to hold.
  • Follow the money off Hyperliquid. The liquidated address is an ordinary EVM wallet. The same API key covers Solana, Ethereum, Base, BNB, Tron and Bitcoin, so "where did the collateral come from, and where did the rest go" is one more query — see Follow the wallet off Hyperliquid.
  • Lowest latency. For production alerting, the same liquidations arrive over Kafka as protobuf (hyperliquidcore.messages.proto).

Notes​

  • Liquidator is empty on open-market liquidations; it is populated when a specific liquidator address takes the position.
  • A single blow-up can produce several records — one per market the account held.
  • To see what the position looked like before it was closed, pair Position.SizeBefore here with the fills on the Trades API and the funding it accrued on the Funding Payments API.
Build with Bitquery

Ready to run this in production?

Get an API key and run these queries in minutes, or talk to us about plans and enterprise delivery.