Perpetuals API

Whale alerts: perpetual positions over $1M just opened or closed

The latest $1M+ perpetual positions opened or closed, newest first: account, coin, side, size, entry and liquidation price, USD value. About the last two hours; filter by coin, side or action.

GET/api/external/perps/perps-whale-alerts

What it returns

A live feed of large positions on the perpetual-futures venue this family covers: every open or close of a position worth over $1M, newest first, with the trading account, the coin, the side, the size in coin units, the entry and liquidation prices and the position value in USD. The feed holds only the latest alerts — measured 2026-09-22, the 50 newest, about two hours — so coverageFrom says how far back it reached, and a filter that matches nothing answers an empty list rather than a 404. trader is a trading-account address, the same one perps-trader and perps-trader-positions take, not a wallet on any of this API's chains.

Chains

This endpoint is not tied to a chain: it takes no chain in its request.

Request

Send your key in the x-dex-data-key header. Replace each <placeholder> with a real value.

curl -H "x-dex-data-key: $DEXDATA_API_KEY" \
  "https://api.dexdata.io/api/external/perps/perps-whale-alerts"
Parameters
ParameterDescription
limit

query · integer · optional

How many alerts to return, newest first. Defaults to 50; at most 200.
symbol

query · string · optional

Keep only one coin, by ticker, e.g. "BTC". Case-insensitive. Not a token mint or contract address.
side

query · string · optional

Keep only longs or only shorts.longshort
action

query · string · optional

Keep only opens or only closes.openclose
minValueUsd

query · number · optional

Keep only alerts whose positionValueUsd is at least this, USD (an alert without one fails).

Response fields

A JSON response. Every field is always present; null means the value could not be established, never zero.

Response fields of Whale alerts: perpetual positions over $1M just opened or closed
FieldTypeDescription
alertsobject[]The alerts kept, newest first. Empty when no alert in the feed matches the filters.
alerts[].traderstringThe trading account that moved, e.g. "0x7f47…". Not a wallet on this API's chains.
alerts[].symbolstringThe coin of the perpetual market, e.g. "BTC".
alerts[].sidestringWhich way the position faces.
alerts[].actionstringWhether the position was opened or closed.
alerts[].sizenumberPosition size in COIN UNITS, not USD. Always positive; side gives the direction.
alerts[].entryPricenumber | nullAverage entry price of the position, USD.
alerts[].liquidationPricenumber | nullThe price at which the position would be liquidated, USD. null when none was published. Values far from the market (a short liquidating at billions) mean the position is barely leveraged. The latest figure held for the position, so it can change between calls.
alerts[].positionValueUsdnumber | nullThe position value in USD, the latest figure held for the position: it is not frozen when the alert fires and can change between calls while the position stays open. It need not equal size × entryPrice or size × the current price; do not recompute it.
alerts[].alertedAtintegerWhen the alert fired, Unix seconds.
coverageFromintegerWhen the oldest alert in the whole feed fired, Unix seconds, before any filter: how far back this answer looked.

Start building with DexData today

Sign in, create a key and make your first call in a minute. Free credits every month, and you only pay for calls that succeed.

Get a free API key