Whale transactions API GET /api/v1/transactions
API to track large Ethereum wallet transfers: GET /api/v1/transactions returns the latest moves by 20,000+ tracked whale wallets, labeled exchange deposit, exchange withdrawal or DEX swap.
Home › API docs › Recent whale moves · Updated 2026-10-26
GET /api/v1/transactions returns the newest moves by Deep Blue Alpha’s 20,000+ tracked Ethereum whale wallets, newest first, with a cursor for paging back. Every row is labeled CEX_WITHDRAW, CEX_DEPOSIT, SWAP_BUY or SWAP_SELL and names the exchange on exchange moves. Use it to poll for new whale moves from a bot, alerting script or dashboard; Business accounts can have the same moves pushed by signed webhooks instead.
Endpoint
Base URL https://deepbluealpha.io · JSON over HTTPS · Ethereum mainnet only.
X-API-Key header (or the ?api_key= query parameter). Create a key on your account page once you are on the Whale plan or a Business plan. Keys are shown once at creation.429.Parameters
| Name | Type | Default | Description |
|---|---|---|---|
limit | integer | 50 | Rows per page, 1 to 200. |
before_id | integer | 0 | Return rows with id lower than this. Pass next_before_id from the previous page to page back. 0 or empty = newest page. |
Example request (curl)
curl -s -H "X-API-Key: $DBA_API_KEY" \
"https://deepbluealpha.io/api/v1/transactions?limit=50"
Python example
import os, requests
BASE = "https://deepbluealpha.io/api/v1"
HEADERS = {"X-API-Key": os.environ["DBA_API_KEY"]} # dba_...
r = requests.get(f"{BASE}/transactions", headers=HEADERS,
params={"limit": 50}, timeout=10)
r.raise_for_status()
page = r.json()["data"]
for tx in page["transactions"]:
kind = "DEX swap" if tx["action"].startswith("SWAP_") else "exchange transfer"
print(tx["timestamp"], tx["token"], tx["action"], kind,
f'${tx["usd_value"]:,.0f}', tx["exchange"] or "-")
# older page:
# requests.get(f"{BASE}/transactions", headers=HEADERS,
# params={"limit": 50, "before_id": page["next_before_id"]})
Sample response EXAMPLE VALUES
{
"data": {
"transactions": [
{
"id": 10000002,
"tx_hash": "0x8b85…2b93",
"wallet": "0x83d8…e09e",
"token": "LINK",
"direction": "BUY",
"action": "CEX_WITHDRAW",
"usd_value": 412500.0,
"timestamp": "2026-01-01T12:00:00+00:00",
"exchange": "Binance"
},
{
"id": 10000001,
"tx_hash": "0x41c0…9a07",
"wallet": "0x5b2e…77d1",
"token": "PEPE",
"direction": "SELL",
"action": "SWAP_SELL",
"usd_value": 150000.0,
"timestamp": "2026-01-01T11:58:40+00:00",
"exchange": ""
}
],
"next_before_id": 10000001
},
"meta": {
"tier": "whale",
"endpoint": "/api/v1/transactions",
"generated_at": "2026-01-01T12:00:05+00:00"
}
}
Field names and structure are the real ones; the numbers, hashes and addresses are placeholders, not live data.
Fields
| Field | Meaning |
|---|---|
id | Row id, unique and increasing. Use it to de-duplicate and as the paging cursor. Webhook event_id is mv_<id> for the same move. |
tx_hash / wallet / token | Ethereum transaction hash, the tracked whale wallet, the token symbol. |
action | CEX_WITHDRAW (moved off an exchange), CEX_DEPOSIT (sent to an exchange), SWAP_BUY / SWAP_SELL (DEX swaps). Only the SWAP rows are trades. |
direction | BUY = accumulation side (DEX buy or exchange withdrawal), SELL = distribution side (DEX sell or exchange deposit). Read action to tell a transfer from a trade. |
usd_value | USD value at the time of the move. |
timestamp | UTC, ISO 8601. |
exchange | Exchange on the other side of an exchange move (Binance, Coinbase, OKX, Kraken, …); empty on DEX swaps. Heuristic labels from our exchange address list. |
next_before_id | Cursor for the next (older) page; null when the page is empty. |
Notes and limits
- Scope: moves by tracked whale wallets only. An exchange transfer counts when the wallet on our side is a tracked whale; exchanges’ own internal transfers are excluded, and rows priced above $1B are dropped.
- There is no size filter parameter: filter on
usd_valuein your code (the webhooks have amin_usdfilter). - Moves can arrive late (for example DEX history filled in after the fact), so de-duplicate on
idrather than assuming a gap-free stream. - Free alternative without a key: the MCP server tool
get_recent_whale_movesreturns the latest 15 moves at or above a size you choose.
Errors
401— Missing, invalid or revoked API key.403— The key belongs to a plan below Whale (and has no Business plan).429— Daily limit reached. Resets at 00:00 UTC. Back off; do not retry in a tight loop.
FAQ
Is there an API to track large Ethereum wallet transfers?
Yes. GET https://deepbluealpha.io/api/v1/transactions returns the latest moves by 20,000+ tracked Ethereum whale wallets with tx hash, wallet, token, USD value, timestamp and a label: exchange withdrawal, exchange deposit or DEX swap. It needs an API key (Whale plan, 25,000 calls/day per key, or Business, 250,000/day).
Is a CEX_WITHDRAW row a purchase?
No. CEX_WITHDRAW is a transfer off an exchange and CEX_DEPOSIT a transfer onto one. Only SWAP_BUY and SWAP_SELL rows are DEX trades.
How to page through older whale moves?
Pass next_before_id from one response as before_id in the next request. Rows are ordered newest first by id.
More endpoint docs
Guides: best Ethereum whale tracking APIs compared · real-time whale tracking for a trading bot · whale webhook APIs · methodology · OpenAPI 3.0 spec · Business plan