Skip to Content
TerminalWallets

Wallet Endpoints

Profile any Solana wallet that trades pump.fun tokens: wallet PnL and win rate over its lifetime or a recent window, swaps and positions, funding chains and sybil clusters, execution cost, copytrade checks, failed transactions, dump history and sniper head-to-head comparisons. These 21 endpoints range from fast stats for wallet lists to a one-call deep-look bundle.

Paths are relative to https://terminal.raiden.wtf/api and every request carries your key in the X-API-Key header (see Authentication). Each call costs the credits shown next to it.

Wallet profile & PnL

Wallet stats

GET/wallets/{addr}/stats10 credits

The full trading profile of a wallet: PnL, volume, win rate, holding time, fees, flags and the tokens it created. It covers two horizons, so check which one a field comes from.

ParameterInDescription
addrpathWallet address.

Two horizons. The difference is deliberate:

  • Lifetime, from stored positions: PnL, volume, win rate, tokens_traded / tokens_closed / tokens_won, dist and avg_hold_sec.
  • Recent window only: fees, launch_buys, fast_flip and mc_dist, the four fields that require scanning raw swaps.

Swap window. The window is at most 60 days and is narrowed further for very high-volume wallets, so read swap_window_days instead of assuming a fixed horizon: a bot wallet with tens of millions of swaps may come back with 3. A wallet with no trades in that window returns zero for the four fields and omits swap_window_days.

To pick the window explicitly (1d, 7d or 30d), use /wallets/{addr}/window-stats.

Lifetime freshness. On the very largest wallets (hundreds of thousands of positions, whose lifetime profile takes over a second to compute), the lifetime fields can come from a computation up to 2 hours old while a fresh one runs in the background. computed_ago_sec then says how many seconds old they are, counted from when that computation started; it is absent when they are at most 30 s old.

Failed attempts. The response may include failed_cost: what the wallet spent on attempts that reverted. Solana charges the fee even when a transaction fails, and failed attempts never become positions, so realized_pnl does not account for them.

  • failed_cost.realized_pnl_net — accounts for them: realized_pnl minus the current fee_lamports. When computed_ago_sec is present, its realized_pnl part is that old while the fees are current.
  • fee_lamports — what was actually paid.
  • tip_bid_lamports — what was only offered: the tip transfer reverts with the transaction and never leaves the wallet. Never add it to fee_lamports.
  • covered_from — the oldest hour the history rollup has reached. While it is still walking back, the totals are a lower bound.

The four swap-scan fields are computed in the background. A call that finds no finished computation returns them as 0 without swap_window_days and starts one; a later call returns them once it has finished (they are then cached for 10 minutes).

Request
curl -s "https://terminal.raiden.wtf/api/wallets/8psN…VRtf/stats" \ -H "X-API-Key: $RAIDEN_KEY"
Response
{ "trader": "8psN…VRtf", "realized_pnl": "184500000000", "unrealized": "-12750000000", "total_pnl": "171750000000", "sol_invested": "642300000000", "sol_received": "826800000000", "volume": "1469100000000", "fees": "3820000000", "tokens_traded": 312, "tokens_closed": 287, "tokens_won": 168, "win_rate": 0.5853658536585366, "trades": 1944, "tokens_created": 4, "launch_buys": 41, "avg_hold_sec": 1837.42, "avg_cost": 2.0586538461538462, "avg_sold": 2.880836236933798, "sold_gt_bought": 153, "never_sold": 25, "fast_flip": 22, "dist": { "d500": 31, "d200": 54, "d0": 83, "dneg": 97, "drug": 22 }, "mc_dist": { "lo": 198, "mid": 89, "hi": 25, "buys": 312 }, "swap_window_days": 60, "first_seen": "2026-01-14T08:22:51Z", "last_seen": "2026-06-27T11:03:18Z", "flags": [ "dev", "sniper", "profitable", "whale" ], "created": [ { "mint": "9xQm…pump", "symbol": "WAGMI", "name": "We All Gonna Make It", "status": "graduated", "created_at": "2026-05-02T17:41:09Z", "last_price": "0.00000042", "dev_hold_pct": 3.45, "dev_realized_pnl": "28400000000", "dumped": false, "ath": "0" } ] }

Lightweight wallet stats

GET/wallets/{addr}/stats-lite10 credits

Fast, positions-only stats with no swap scan: a subset of wallet stats, built for lists.

ParameterInDescription
addrpathWallet address.
Request
curl -s "https://terminal.raiden.wtf/api/wallets/8psN…VRtf/stats-lite" \ -H "X-API-Key: $RAIDEN_KEY"
Response
{ "trader": "8psN…VRtf", "total_pnl": "12480000000", "realized_pnl": "9870000000", "unrealized": "2610000000", "win_rate": 0.6428571428571429, "tokens_traded": 42, "last_seen": "2026-06-21T09:41:14Z" }

Wallet stats for a recent window

GET/wallets/{addr}/window-stats8 credits

Same shape as wallet stats, but computed over a recent window that you choose.

ParameterInDescription
addrpathWallet address.
wqueryWindow: 1d, 7d or 30d.
Request
curl -s "https://terminal.raiden.wtf/api/wallets/8psN…VRtf/window-stats?w=7d" \ -H "X-API-Key: $RAIDEN_KEY"
Response
{ "trader": "8psN…VRtf", "realized_pnl": "18450000000", "unrealized": "3200000000", "total_pnl": "21650000000", "sol_invested": "142000000000", "sol_received": "160450000000", "volume": "302450000000", "fees": "488888889", "tokens_traded": 47, "tokens_closed": 39, "tokens_won": 24, "win_rate": 0.6153846153846154, "trades": 213, "tokens_created": 0, "launch_buys": 6, "avg_hold_sec": 842.5, "avg_cost": 3.021276595744681, "avg_sold": 4.114102564102565, "sold_gt_bought": 21, "never_sold": 8, "fast_flip": 4, "dist": { "d500": 5, "d200": 9, "d0": 10, "dneg": 11, "drug": 4 }, "mc_dist": { "lo": 18, "mid": 21, "hi": 8, "buys": 47 }, "flags": [ "profitable", "whale" ], "created": [] }

Wallet PnL curve

GET/wallets/{addr}/pnl-curve8 credits

Realized PnL per bucket, in lamports, net of all fees and minus the cost of failed attempts.

ParameterInDescription
addrpathWallet address.
rangequery1d, 7d, 30d or all.
Request
curl -s "https://terminal.raiden.wtf/api/wallets/8psN…VRtf/pnl-curve?range=7d" \ -H "X-API-Key: $RAIDEN_KEY"
Response
{ "data": [ { "t": 1718960400, "net": "-488888889" } ] }

Realized PnL candles

GET/wallets/{addr}/flow-candles9 credits

The wallet’s realized PnL as OHLC candles.

ParameterInDescription
addrpathWallet address.
tfqueryTimeframe: swap, 5m, 15m, 1h, 4h or 1d.
wqueryWindow: 1d, 7d or 30d.
Request
curl -s "https://terminal.raiden.wtf/api/wallets/8psN…VRtf/flow-candles?tf=1h&w=7d" \ -H "X-API-Key: $RAIDEN_KEY"
Response
{ "data": [ { "t": 1718960400, "o": "488888889", "h": "1250000000", "l": "312500000", "c": "973400000" } ] }

Trades & positions

Wallet swaps

GET/wallets/{addr}/swaps18 credits

The wallet’s fills, with token filter, sorting and cursor pagination. Add failed=1 to interleave the attempts that reverted.

ParameterInDescription
addrpathWallet address.
orderquerySort order (the example uses desc).
mintqueryToken mint.
sortquerytime, amount, tokens or price.
cursorqueryPagination cursor (next_cursor from the previous page). Based on landed fills only.
limitqueryMaximum number of rows.
failedqueryOptional. 1 interleaves the wallet’s failed attempts in block order.

Failed attempts. With failed=1, the wallet’s failed attempts (landed on-chain but reverted, real buy/sell only) are interleaved in block order. With sort, failed rows interleave only for sort=time. The pagination cursor stays based on landed fills only. Failed rows have no amount or price (the transaction reverted) and carry:

  • failed: true and err_code.
  • err — the decoded error: the program that raised it, instruction index, variant, code, name and reason.
  • err.sure — false means the code is known but its meaning is not.
  • err.aborted — true means the routing contract stopped the transaction itself, so a higher fee would not have helped.

Routing.

  • router — the top-level program (custom contract, bot or aggregator) that routed the swap. Absent means a direct pump.fun / pump-amm call.
  • router_name — set for programs owned by a known trading platform (Axiom, GMGN, Trojan, …).

Compute budget. Each fill carries cu_price, cu_limit, priority_fee (lamports) and budget_source, with the meaning described under /tokens/{mint}/swaps:

  • priority_fee is the total paid only with budget_source 1 or 2. With 0 it is floor(cu_price × cu_limit ÷ 1,000,000), and 0 when no explicit CU limit was set.
  • With budget_source 2, the CU price and limit are unknown, not zero.
  • PumpSwap (venue 1) fills record no compute budget (all 0).

Bundled flag. bundled is true when another transaction on the same token landed in the same slot at block_index ±1 (the way a Jito bundle lands). It is decided per transaction and token:

  • Every leg of a transaction on the same token (same block_index, different ix_index) carries the same flag.
  • The legs of one transaction on two different tokens are each checked against their own token, so they can differ.
  • The neighbour can be anyone’s transaction, not only one of this wallet’s: the flag is checked against all the swaps of the token, also with mint and sort.

Non-SOL quotes. Fills quoted in a token other than SOL carry quote_mint, quote_amount, quote_symbol and quote_decimals, with the meaning described under QUOTE in /tokens/{mint}/swaps. xStocks fills (venue 2) keep sol_amount = quote_amount and price in USD per share.

On pump.fun and PumpSwap fills (venue 0 / 1) quoted in a token other than SOL, sol_amount and price are 0, and fee / creator_fee are in raw units of the quote.

Request
curl -s "https://terminal.raiden.wtf/api/wallets/8psN…VRtf/swaps?order=desc&limit=2&failed=1" \ -H "X-API-Key: $RAIDEN_KEY"
Response
{ "data": [ { "time": "2026-06-21T09:41:14Z", "mint": "9xQm…pump", "symbol": "WIF", "name": "dogwifhat", "trader": "8psN…VRtf", "is_buy": true, "sol_amount": "488888889", "token_amount": "13977901234567", "price": "0.00000042", "fee": "4888888", "creator_fee": "2444444", "lp_fee": "1222222", "creator": "5Q5q…Funr", "tip": "1000000", "tip_wallet": "Cb3f…g9rE", "v_sol_reserves": "30488888889", "v_token_reserves": "1072000000000000", "real_sol_reserves": "488888889", "real_token_reserves": "206900000000000", "fee_payer": "8psN…VRtf", "cu_price": "250000", "cu_limit": "120000", "priority_fee": "30000", "slot": 348812904, "block_index": 1731, "sig": "4Fr4…ULFK", "ix_index": 3, "bundled": false, "quote_mint": "Xeq…AAPL", "quote_amount": "1250000", "venue": 0 }, { "time": "2026-06-21T09:41:13Z", "mint": "GJb2…pump", "symbol": "SNIPE", "trader": "8psN…VRtf", "is_buy": true, "sol_amount": "0", "token_amount": "0", "price": "0", "fee": "1005000", "tip": "1500000", "cu_price": "1100000", "cu_limit": "110000", "priority_fee": "400000", "slot": 348812903, "block_index": 902, "sig": "4thh…APCR", "ix_index": 0, "venue": 0, "failed": true, "err_code": "08000000031900000003000000", "err": { "raw": "08000000031900000003000000", "program": "GpmL…JhJd", "ix_index": 3, "variant": "Custom", "code": 3, "name": "Error 3", "reason": "The routing contract stopped the transaction itself — its own guard rejected the trade, so the venue never ran. A higher priority fee would not have changed the outcome.", "sure": false, "aborted": true } } ], "next_cursor": "2026-06-21T09:41:14Z" }

Wallet positions

GET/wallets/{addr}/positions2 credits

The wallet’s open and closed positions.

ParameterInDescription
addrpathWallet address.
sortquerylast, pnl, invested, balance, trades or first.
dirquerySort direction.
offsetqueryPagination offset.
limitqueryMaximum number of rows.
Request
curl -s "https://terminal.raiden.wtf/api/wallets/8psN…VRtf/positions?limit=1" \ -H "X-API-Key: $RAIDEN_KEY"
Response
{ "data": [ { "trader": "8psN…VRtf", "mint": "9xQm…pump", "symbol": "PEPE", "name": "Pepe the Frog", "token_balance": "488888888888888", "sol_invested": "2500000000", "sol_received": "1800000000", "tokens_bought": "732000000000000", "tokens_sold": "243111111111112", "realized_pnl": "-700000000", "avg_cost": "0.0000034153", "current_price": "0.00000042", "first_trade_at": "2026-06-21T09:41:14Z", "last_trade_at": "2026-06-24T17:08:53Z", "trade_count": 14 } ] }

Wallet position on a token

GET/wallets/{addr}/positions/{mint}1 credit

One wallet position on a single token. Returns 404 if there is none.

ParameterInDescription
addrpathWallet address.
mintpathToken mint.
Request
curl -s "https://terminal.raiden.wtf/api/wallets/8psN…VRtf/positions/9xQm…pump" \ -H "X-API-Key: $RAIDEN_KEY"
Response
{ "trader": "8psN…VRtf", "mint": "9xQm…pump", "symbol": "WIF", "name": "dogwifhat", "token_balance": "1280000000000", "sol_invested": "488888889", "sol_received": "210000000", "tokens_bought": "1840000000000", "tokens_sold": "560000000000", "realized_pnl": "73500000", "avg_cost": "0.00026570", "current_price": "0", "first_trade_at": "2026-06-21T09:41:14Z", "last_trade_at": "2026-06-24T17:03:52Z", "trade_count": 14 }

Tokens created by a wallet

GET/wallets/{addr}/created4 credits

The tokens the wallet created, with the dev position on each. The same shape is used by created in wallet stats and by tokens in /creators/{addr} (see Devs).

ParameterInDescription
addrpathWallet address.
limitqueryMaximum number of rows.

Dev position. dev_hold_pct, dev_realized_pnl (lamports) and dumped come from the dev’s SOL-quoted trades only.

dev_untracked: true marks a token whose dev position is not measured: the token is quoted in a token other than SOL (quote_mint, with quote_symbol / quote_decimals when known), or has never traded against SOL. Those three fields then read 0 and must not be used.

Request
curl -s "https://terminal.raiden.wtf/api/wallets/8psN…VRtf/created?limit=1" \ -H "X-API-Key: $RAIDEN_KEY"
Response
{ "data": [ { "mint": "9xQm…pump", "symbol": "WIF", "name": "dogwifhat", "status": "graduated", "created_at": "2026-06-21T09:41:14Z", "last_price": "0.00000042", "dev_hold_pct": 3.85, "dev_realized_pnl": "488888889", "dumped": true, "ath": "0.00000311" }, { "mint": "H2cx…pump", "symbol": "GOON", "name": "Example Token", "status": "bonding", "created_at": "2026-09-24T18:57:02Z", "last_price": "0", "dev_hold_pct": 0, "dev_realized_pnl": "0", "dumped": false, "dev_untracked": true } ] }

Devs of tokens a wallet traded

GET/wallets/{addr}/devs1 credit

The devs of the tokens this wallet traded.

ParameterInDescription
addrpathWallet address.
sortquerytokens, pnl, invested or last.
dirquerySort direction.
limitqueryMaximum number of rows.
Request
curl -s "https://terminal.raiden.wtf/api/wallets/8psN…VRtf/devs?limit=1" \ -H "X-API-Key: $RAIDEN_KEY"
Response
{ "data": [ { "creator": "5Q5q…Funr", "tokens_traded": 7, "graduated": 2, "realized_pnl": "488888889", "sol_invested": "1250000000", "last_trade_at": "2026-06-21T09:41:14Z", "is_self": false } ] }

Funding & transfers

SOL transfer counterparties

GET/wallets/{addr}/transfers8 credits

The wallet’s native SOL counterparties over the last 30 days, counted from 00:00 UTC thirty days ago. in lists who the wallet received from, out who it sent to.

ParameterInDescription
addrpathWallet address.
limitqueryMaximum number of rows.
  • No per-wallet cap. Every transfer in the window is counted, except that transfers recovered late for an older day (after a data gap) can be missing from that day.
  • Sorting. By total lamports, descending; equal totals are ordered by address.
  • Caching. About 60 s.
Request
curl -s "https://terminal.raiden.wtf/api/wallets/8psN…VRtf/transfers?limit=1" \ -H "X-API-Key: $RAIDEN_KEY"
Response
{ "in": [ { "wallet": "Cb3f…g9rE", "lamports": 488888889, "count": 7, "last": "2026-06-21T09:41:14Z", "label": "Binance", "kind": "exchange" } ], "out": [ { "wallet": "Gm4w…9xZ2", "lamports": 123456789, "count": 3, "last": "2026-06-20T17:02:51Z", "label": "jito", "kind": "tip" } ] }

Wallet funder and sybil cluster

GET/wallets/{addr}/funding2 credits

The wallet’s origin funder plus the cluster of wallets with the same funder. Use it for sybil detection.

ParameterInDescription
addrpathWallet address.
Request
curl -s "https://terminal.raiden.wtf/api/wallets/8psN…VRtf/funding" \ -H "X-API-Key: $RAIDEN_KEY"
Response
{ "funder": "5Q5q…Funr", "funder_label": "jito", "funder_kind": "tip", "funded_at": "2026-06-21T09:41:14Z", "funded_lamports": 488888889, "funder_is_hub": false, "funder_funded_count": 42, "cluster": [ { "wallet": "Cb3f…g9rE", "lamports": 250000000, "time": "2026-06-21T10:02:37Z" } ], "cluster_total": 41 }

Wallet funding chain

GET/wallets/{addr}/funding-chain2 credits

The full funding chain behind a wallet, from depth 0 (the direct funder) up to the root: a CEX or a known entity.

ParameterInDescription
addrpathWallet address.
Request
curl -s "https://terminal.raiden.wtf/api/wallets/8psN…VRtf/funding-chain" \ -H "X-API-Key: $RAIDEN_KEY"
Response
{ "data": [ { "depth": 0, "wallet": "8psN…VRtf", "funder": "5Q5q…Funr", "funder_name": "Binance Hot Wallet", "funder_type": "Centralized Exchange", "amount": 488888889, "signature": "4Fr4…ULFK", "slot": 287654321, "funded_at": "2026-06-21T09:41:14Z", "no_funder": false } ] }

Wallet tip providers

GET/wallets/{addr}/tips1 credit

The submission / tip providers the wallet uses, ranked by total tipped.

ParameterInDescription
addrpathWallet address.
limitqueryMaximum number of rows.
Request
curl -s "https://terminal.raiden.wtf/api/wallets/8psN…VRtf/tips?limit=1" \ -H "X-API-Key: $RAIDEN_KEY"
Response
{ "data": [ { "provider": "jito", "txs": 142, "lamports": 488888889, "last": "2026-06-21T09:41:14Z" } ] }

Costs, failures & copytrading

Wallet execution cost

GET/wallets/{addr}/execution-cost8 credits

What trading actually costs this wallet. There are three costs and only one is visible: the venue fee is on the receipt, but the price impact is not, and neither are the fees burned on reverted transactions.

ParameterInDescription
addrpathWallet address.
wqueryWindow: 24h, 7d or 30d.

How price impact is computed. Price impact is calculated, not estimated: every swap carries the curve’s virtual reserves, so the constant-product formula gives it exactly.

  • A buy of D SOL against reserves (S,T) pays (S+D)/T against a spot of S/T, so the cost versus spot is exactly D/S.
  • A sell of D tokens costs D/(T+D).

These are two different forms: using one for both would be wrong on half the trades.

Real-world example. Measured on a real wallet over 7 days: 13.02 SOL of venue fees against 18.20 SOL of price impact, so the invisible cost was the bigger one.

Response fields.

  • venue_fee_sol, price_impact_sol, burned_on_failed_sol — the three components.
  • total_cost_sol, total_cost_pct_of_volume — the total, and the total as a percentage of volume. The percentage is the figure that compares strategies, since it does not depend on size.
  • invisible_share_pct — the share of the cost that is invisible.
  • worst_trades — the ten trades that cost most, ranked by impact relative to their own size, so a big order does not automatically top the list.

Not slippage. This is not slippage in the limit-order sense: on a curve the output is deterministic, so there is no deviation from expected. It is the cost of consuming the curve, which is real, paid, and shown nowhere.

Trades without recorded reserves are counted and flagged: when present, the total is a lower bound. Burned fees are lifetime and are only added on w=30d.

Request
curl -s "https://terminal.raiden.wtf/api/wallets/8psN…VRtf/execution-cost?w=7d" \ -H "X-API-Key: $RAIDEN_KEY"
Response
{ "trader": "8psN…VRtf", "window": "7d", "trades": 862, "volume_sol": 2922.25, "venue_fee_sol": 13.021, "price_impact_sol": 18.203, "burned_on_failed_sol": 0, "total_cost_sol": 31.224, "total_cost_pct_of_volume": 1.07, "invisible_share_pct": 58.3, "headline": "Price impact cost 18.20 ◎ against 13.02 ◎ of venue fees — the invisible cost was the bigger one. It is the part of the curve this wallet's own orders consumed, and it appears on no receipt.", "worst_trades": [ { "mint": "GJb2…pump", "side": "buy", "venue": 0, "sol": 12.4, "impact_sol": 1.44, "impact_pct": 11.66 } ] }

Failed transactions

GET/wallets/{addr}/failed20 credits

Every pump.fun transaction by this wallet that landed on-chain but reverted, kept 6 months like the rest of the tick data. Dropped / mempool attempts are not visible.

ParameterInDescription
addrpathWallet address.
cursorquerynext_cursor from the previous response (RFC3339), to walk further back.
limitqueryMaximum number of rows.

Pagination. Newest first. Pass cursor=<next_cursor> to walk further back: next_cursor is returned on any non-empty page, and its absence means there is nothing older.

Error fields. Each row carries err_code, the raw bincode TransactionError exactly as the chain reports it, and a decoded err object:

  • program — the program that raised the error.
  • ix_index, variant, code, name, reason.
  • aborted — read aborted=true as “your own routing contract stopped the transaction”: its guard rejected the trade before the venue ran, so bidding higher would not have landed it. Errors raised by pump.fun / PumpSwap instead mean the venue rejected the trade (slippage, curve already migrated, and so on).
  • sure — false means the numeric code is known but its meaning is not published by that program.

Transaction kind. Each row has a kind:

kindMeaning
0Buy (buy, buy_v2, buy_exact_sol_in, buy_exact_quote_in_v2).
1Sell (sell, sell_v2).
2Other pump.fun instruction (create, migrate, unknown / spoof discriminator).
3pump referenced, but no pump instruction in the transaction.

Every buy / sell variant of the pump IDL is recognized, including pre-signed snipes that reverted before the pump instruction (e.g. an ATA create on a not-yet-existing mint).

  • disc — the raw 8-byte instruction discriminator (hex).
  • mint — best-effort for kind ≥ 2.

Analytics endpoints (Versus land-rate, token tape) only count kind 0 / 1.

err.program is recorded from the moment this field shipped: older attempts carry an empty program, and for those the code cannot be translated.

Request
curl -s "https://terminal.raiden.wtf/api/wallets/8psN…VRtf/failed?limit=50" \ -H "X-API-Key: $RAIDEN_KEY"
Response
{ "data": [ { "time": "2026-06-21T09:41:14Z", "mint": "9xQm…pump", "is_buy": true, "kind": 0, "disc": "66063d1201daebea", "slot": 348812904, "block_index": 1187, "tip": "2000000", "priority_fee": "488888", "fee": "5488888", "err_code": "08000000001900000072170000", "err": { "program": "6EF8…wF6P", "ix_index": 0, "variant": "Custom", "code": 6002, "name": "TooMuchSolRequired", "reason": "slippage: Too much SOL required to buy the given amount of tokens.", "sure": true }, "sig": "4Fr4…ULFK" }, { "time": "2026-06-21T09:40:02Z", "mint": "GJb2…pump", "is_buy": true, "kind": 0, "disc": "38fc74089edfcd5f", "slot": 348812511, "block_index": 903, "tip": "0", "priority_fee": "1000000", "fee": "1005000", "err_code": "08000000031900000007000000", "err": { "program": "7JwT…94ZG", "ix_index": 3, "variant": "Custom", "code": 7, "name": "Error 7", "sure": false, "aborted": true }, "sig": "4thh…APCR" } ] }

Copytrade check

GET/wallets/{addr}/copytrade12 credits

Would copying this wallet actually have made money? This answers the real question instead of the flattering one: their PnL is not yours, because you only see their buy after it lands in a block, so you enter later and at a price that has already moved, often because they bought.

ParameterInDescription
addrpathWallet address.
wqueryWindow: 24h, 7d or 30d. Covers up to 60 tokens by capital.

How it’s simulated. Every price is a trade that really happened: the copier’s fill is the first trade observed on that token after you could have reacted, never an estimate.

Four delays. The copy is simulated at 0, 1, 2 and 5 slots (~400 ms each) so the sensitivity is visible: if the edge disappears between 2 and 5 slots, the strategy is not copyable, and a single number would hide that.

Fees. The medians actually observed on-chain (0.95% bonding, 0.90% PumpSwap), charged on both legs.

Response fields.

  • verdict — worth_copying, not_worth_copying or insufficient_data, with a headline and a confidence level driven by sample size.
  • primary, by_delay — summaries: gross and after-fee medians, win rate, and how much worse your entry is.
  • legs — per token, whether it was executable and, if not, why.
  • risks:
    • self_created_tokens — tokens the wallet created itself (copying means buying their own launch).
    • still_open_positions — positions still open.
    • too_fast_to_copy — trades held for less than the copy delay (they were out before you could be in).
    • top1_profit_share_pct — how much of the profit comes from a single token: a positive median means little if one lucky hit made all of it.
Request
curl -s "https://terminal.raiden.wtf/api/wallets/8psN…VRtf/copytrade?w=7d" \ -H "X-API-Key: $RAIDEN_KEY"
Response
{ "wallet": "8psN…VRtf", "window": "7d", "verdict": "not_worth_copying", "headline": "The median copied trade loses money once fees are paid: their edge does not survive the delay before you can react.", "confidence": "medium", "primary": { "delay_slots": 2, "approx_ms": 800, "tokens": 24, "skipped_not_executable": 9, "median_return_pct": 1.4, "median_return_pct_after_fees": -0.5, "win_rate_pct": 54.2, "entry_worse_median_pct": 0.31 }, "by_delay": [ { "delay_slots": 0, "median_return_pct_after_fees": 2.1 }, { "delay_slots": 5, "median_return_pct_after_fees": -3.8 } ], "risks": { "self_created_tokens": 0, "still_open_positions": 4, "too_fast_to_copy": 5, "top1_profit_share_pct": 38.2, "sample_size": 33 }, "cost_model": { "venue_fee_pct_bonding": 0.95, "venue_fee_pct_amm": 0.9, "fixed_cost_sol_round_trip": 0.00011 }, "legs": [ { "mint": "GJb2…pump", "symbol": "WIF", "hold_slots": 412, "their_entry": "0.0000031", "copy_entry": "0.0000034", "copy_exit": "0.0000052", "return_pct": 52.9, "return_pct_after_fees": 51.0, "executable": true }, { "mint": "9xQm…pump", "hold_slots": 1, "executable": false, "why": "held for less than the copy delay — you could not have entered before they were out" } ] }

Coordination & rug history

Coordinated wallets

GET/wallets/{addr}/related50 credits

Wallets that trade the same token in the same slot as this one: coordinated wallets.

ParameterInDescription
addrpathWallet address.
limitqueryMaximum number of rows.
Request
curl -s "https://terminal.raiden.wtf/api/wallets/8psN…VRtf/related?limit=1" \ -H "X-API-Key: $RAIDEN_KEY"
Response
{ "data": [ { "wallet": "Cb3f…g9rE", "count": 47, "tokens": 12 } ] }

Wallet dump history

GET/wallets/{addr}/dumps3 credits

The full, paginated dump history of a wallet: every rugged token it took part in, not just the seen_in sample from rug-wallets / repeat-offenders (see Aggregated data and Token detail).

ParameterInDescription
addrpathWallet address.
sincequeryRFC3339 timestamp.
min_solqueryMinimum SOL extracted.
same_slotquery1 returns only dumps in the dev’s exact slot.
limitqueryMax 500.

Rows. One row per (wallet, token):

  • same_slot — the same-slot flag.
  • as_operator / as_sniper — the wallet’s role: operator or sniper.
  • sol_extracted — SOL extracted, in SOL.

Pagination. Recent-first, keyset-paginated on (token_created_at, mint): pass next_cursor back to get the next page.

summary, the all-time aggregate, is returned on the first page only.

Request
curl -s "https://terminal.raiden.wtf/api/wallets/8psN…VRtf/dumps?min_sol=0.1&limit=100" \ -H "X-API-Key: $RAIDEN_KEY"
Response
{ "as_of": "2026-07-22T14:03:00Z", "wallet": "8psN…VRtf", "count": 100, "data": [ { "mint": "9xQm…pump", "symbol": "WIF", "token_created_at": "2026-07-20T11:00:00Z", "same_slot": true, "as_operator": false, "as_sniper": true, "sol_extracted": 3.42 } ], "next_cursor": "2026-07-20T11:00:00.482913Z|9xQm…pump", "summary": { "total_dumps": 1670, "same_slot": 595, "sol_extracted": 421.7 } }

Comparisons & bundles

Sniper head-to-head

GET/versus120 credits

Compares 2–5 sniper wallets on the last N tokens they touched in common: bought by ≥2 of them, or bought by one while another tried and failed. It ranks who landed first on each token, covers the “one enters / the other fails” case and builds a per-wallet leaderboard.

ParameterInDescription
wquery2–5 wallet addresses, comma-separated.
nqueryNumber of recent common tokens: 50, 100 or 200. Default 100.
max_behindqueryOptional. Keeps only “tight” tokens where every wallet landed within N slots of the winner. Filters entries[] only; contested and per_wallet stay full.

Per-token entries (entries[]). Wallets are ranked per mint by landing: slot, then block index.

  • sides[] — the landed fills, each with its tip provider and transaction signature (provider / sig, to link Solscan).
  • failed[] — who attempted and failed, with slot + block_index, so the reverted attempt ranks against the winner too: a negative Δ means it tried first but reverted. Each entry also carries err, the decoded failure reason (name, reason, program that raised it, aborted).
  • created_slot / created_block_index — the token creation slot and index (the latter from the dev buy), for the distance from creation.
  • leader on each sides[] and failed[] entry — the validator that produced its slot (identity / client / version / jito / stake), for snapshotted epochs.
  • router on each sides[] fill — the top-level program (bot, aggregator or custom contract). Absent means a direct pump call.

Leaderboard (per_wallet). For each wallet: a true land rate (landed / (landed + failed)), avg_from_creation, average CU price and limit, direct / via_router counts and top_router (the most-used router address), with top_router_name when that program belongs to a known trading platform.

Exclusive tokens (exclusive[]). Per wallet, the tokens among its last N touched (buys + failed attempts) that no other wallet in the group ever touched. tokens[] is capped at the 40 most recent; landed=false means the wallet only tried and reverted.

Overlap (overlap). A group overview over the union of the recent sets: union, shared (touched by ≥2), shared_all (touched by every wallet) and overlap_pct, plus per_wallet counts (touched, landed, failed_only, exclusive) with exclusive_pct.

Compute budget. sides[] and failed[] carry budget_source (see /tokens/{mint}/swaps; absent means 0).

  • avg_cu_price and avg_cu_limit average only the entries whose CU price is known: v1 transactions with budget_source 2 are left out, and per_wallet cu_price_unknown counts them (absent when 0).
  • avg_priority_fee averages every entry, since the priority fee is never unknown. It is the total paid only for budget_source 1 and 2: with 0 it is floor(cu_price × cu_limit ÷ 1,000,000), and 0 when no explicit CU limit was set.
  • PumpSwap (venue 1) fills record no compute budget (0), so they pull the averages down.

Access. On the website, comparing wallets needs a signed-in wallet (401 login_required otherwise). With an API key it is priced like any other call.

aborted=true means that wallet’s own routing contract stopped the transaction, which is not the same as losing the race: treat it as a self-abort, not as a defeat on speed.

Request
curl -s "https://terminal.raiden.wtf/api/versus?w=8psN…VRtf,Cb3f…g9rE&n=100&max_behind=10" \ -H "X-API-Key: $RAIDEN_KEY"
Response
{ "wallets": [ "8psN…VRtf", "Cb3f…g9rE", "Gm4w…9xZ2" ], "contested": 1, "per_wallet": [ { "wallet": "8psN…VRtf", "participated": 1, "wins": 1, "win_rate": 1, "avg_tip": 0.002, "avg_priority_fee": 0.0005, "avg_cu_price": 1500000, "avg_cu_limit": 120000, "avg_fee": 0.00251, "avg_from_creation": 3, "failed": 0, "land_rate": 1, "direct": 1, "via_router": 0, "top_router": "" }, { "wallet": "Cb3f…g9rE", "participated": 1, "wins": 0, "win_rate": 0, "avg_tip": 0.001, "avg_priority_fee": 0.0003, "avg_cu_price": 900000, "avg_cu_limit": 100000, "avg_fee": 0.00131, "avg_from_creation": 5, "failed": 0, "land_rate": 1 }, { "wallet": "Gm4w…9xZ2", "participated": 0, "wins": 0, "win_rate": 0, "avg_tip": 0, "avg_priority_fee": 0, "avg_cu_price": 0, "avg_cu_limit": 0, "avg_fee": 0, "avg_from_creation": 0, "failed": 1, "land_rate": 0 } ], "entries": [ { "mint": "9xQm…pump", "symbol": "PEPE", "name": "Pepe Coin", "created_at": "2026-06-21T09:41:14Z", "created_slot": 348812900, "created_block_index": 7, "winner": "8psN…VRtf", "present": 2, "sides": [ { "wallet": "8psN…VRtf", "rank": 1, "slot": 348812903, "block_index": 12, "time": "2026-06-21T09:41:15Z", "price": 0.00000042, "sol_amount": "488888889", "tip": "2000000", "priority_fee": "500000", "cu_price": "1500000", "cu_limit": "120000", "fee": "2505000", "sig": "4Fr4…ULFK", "provider": "jito", "router": "JUP6Lkb…VTaV4", "leader": { "identity": "Jee7…xQ2", "name": "Laine", "client": "agave", "version": "2.1.11", "jito": true, "stake": "1875432000000000", "country": "DE", "city": "Frankfurt am Main" } }, { "wallet": "Cb3f…g9rE", "rank": 2, "slot": 348812905, "block_index": 4, "time": "2026-06-21T09:41:16Z", "price": 0.00000045, "sol_amount": "250000000", "tip": "1000000", "priority_fee": "300000", "cu_price": "900000", "cu_limit": "100000", "fee": "1305000", "sig": "5Gh2…RtfK", "provider": "nextblock", "leader": { "identity": "Jee7…xQ2", "name": "Laine", "client": "agave", "version": "2.1.11", "jito": true, "stake": "1875432000000000", "country": "DE", "city": "Frankfurt am Main" } } ], "failed": [ { "wallet": "Gm4w…9xZ2", "slot": 348812904, "block_index": 9, "tip": "1500000", "priority_fee": "400000", "cu_price": "1100000", "cu_limit": "110000", "fee": "1905000", "sig": "5Gh2…RtfK", "leader": { "identity": "Jee7…xQ2", "name": "Laine", "client": "agave", "version": "2.1.11", "jito": true, "stake": "1875432000000000", "country": "DE", "city": "Frankfurt am Main" } } ] } ], "exclusive": [ { "wallet": "8psN…VRtf", "total": 34, "landed": 29, "failed_only": 5, "tokens": [ { "mint": "F2ab…pump", "symbol": "WIF2", "name": "dogwifhat 2", "time": "2026-07-02T11:03:41Z", "landed": true }, { "mint": "9kQe…pump", "symbol": "SNIPE", "time": "2026-07-02T10:58:12Z", "landed": false } ] }, { "wallet": "Cb3f…g9rE", "total": 61, "landed": 61, "failed_only": 0, "tokens": [ { "mint": "Hh1x…pump", "symbol": "MOON", "time": "2026-07-02T11:01:07Z", "landed": true } ] }, { "wallet": "Gm4w…9xZ2", "total": 48, "landed": 35, "failed_only": 13, "tokens": [ { "mint": "C7dd…pump", "symbol": "RUGME", "time": "2026-07-02T10:44:55Z", "landed": false } ] } ], "overlap": { "union": 214, "shared": 44, "shared_all": 12, "overlap_pct": 0.206, "per_wallet": [ { "wallet": "8psN…VRtf", "touched": 100, "landed": 88, "failed_only": 12, "exclusive": 34, "exclusive_pct": 0.34 }, { "wallet": "Cb3f…g9rE", "touched": 100, "landed": 100, "failed_only": 0, "exclusive": 61, "exclusive_pct": 0.61 }, { "wallet": "Gm4w…9xZ2", "touched": 100, "landed": 87, "failed_only": 13, "exclusive": 48, "exclusive_pct": 0.48 } ] } }

Wallet profile pack

GET/wallets/{addr}/packup to 60 credits

A deep-look bundle for a wallet: one call returns the full profile instead of fanning out to the individual endpoints.

ParameterInDescription
addrpathWallet address.

How it works. Each key under pack is the exact response of the matching standalone endpoint, or null if that part failed; the pack itself never fails. Sub-calls reuse the same cache as the individual endpoints. as_of is when the bundle was assembled.

The example response shows stats, funding_chain, related and positions.

Access. API key only: on the website, without a key, it answers 403 api_key_required.

In stats, the four fields that need a scan of raw swaps (fees, launch_buys, fast_flip, mc_dist) come from a background computation that only GET /wallets/{addr}/stats starts. The pack returns them when that result is already cached for the wallet (swap_window_days is present); otherwise they read 0 and swap_window_days is omitted.

Request
curl -s "https://terminal.raiden.wtf/api/wallets/8psN…VRtf/pack" \ -H "X-API-Key: $RAIDEN_KEY"
Response
{ "wallet": "8psN…VRtf", "as_of": "2026-07-22T14:03:00Z", "pack": { "stats": { "...": "= GET /wallets/{addr}/stats" }, "funding_chain": { "...": "= GET /wallets/{addr}/funding-chain" }, "related": { "...": "= GET /wallets/{addr}/related" }, "positions": { "...": "= GET /wallets/{addr}/positions" } } }
Last updated on