Skip to main content
Copy-trading feeds, smart-money dashboards, KOL trackers: they are all the same product. Find wallets worth following, profile them, render their performance, and watch what they do next. This guide builds each screen of that product on the wallet endpoints, EVM and Solana with the same shapes throughout.
Setup is the same as the terminal guide: one Authorization header, { data, meta } envelopes, chain = evm:<id> or solana. The sd() helper below is the one defined there.

Find wallets worth tracking

The discovery entry point is a token, not a wallet: every trader you want to follow is printing on some market. Two rankings, same shape:
  • GET /v1/token/top-traders with timeframe=all is the lifetime leaderboard of a token: realized PnL, win rate over closed positions, current bag and its unrealized PnL, isDev / isSniper / isProTrader badges on every row.
  • The same endpoint with timeframe=1h → 30d, or GET /v1/pool/top-traders for a single market, ranks by net flow over the window: who is printing right now.
discover.ts
A third source is your own tape: every row of /v1/token/trades and the trades stream carries maker with the same badges, so “track this wallet” belongs on every trade row of your terminal.

Who is behind the address

Two calls turn an address into a person, or a red flag:
  • GET /v1/wallet/profile resolves the identity: display name, ENS / Basename / .sol, avatar, bio, social accounts with follower counts, the pro-trader flag, and linkedWallets, other addresses of the same person from our identity graph of 7.6M+ labeled wallets. A KOL tracker is this one endpoint.
  • GET /v1/wallet/funding answers where the wallet’s first funds came from: funder address, timestamp, amount, and funderTag when the funder is a known entity (exchange, bridge). A fresh wallet funded by another tracked wallet minutes before a launch is a signal; the insider and sybil heuristics start here.

The dashboard

Four calls render the whole trader page, and they are independent: fire them together and render each pane as its data lands, so one slow pane never blanks the page.
dashboard.ts
A 503 on one pane carries Retry-After: the snapshot behind it is being recomputed, so retry that pane alone after the delay while the rest of the page is already on screen. 5xx responses are never billed.
  • Headline tiles: positions.meta.summary carries the wallet-level totals (totalValueUsd, realizedPnlUsd, unrealizedPnlUsd, totalPnlUsd, positions), computed over every position whatever the page. With includeNative and includeStables the total is the real account value, native coin and stablecoins read on-chain at request time.
  • Win rate and cadence: pnl.data.summary has realizedPnlUsd, winRate, trades, wins, losses; pnl.data.history is the realized PnL series for the bar chart, daily buckets on 30d and all, hourly on 1d and 7d. Omit chain to combine every EVM chain in one figure.
  • Equity curve: equity.data.points is the { at, valueUsd } series behind the portfolio chart, currentValueUsd the latest mark.
  • Open positions: every row has the current bag (amount, amountUsd), entryPriceUsd vs currentPriceUsd, realized + unrealized PnL, and holdingSince, which resets when the wallet fully exits and re-enters: the honest “holding for 3d” display.
  • Closed positions: the realized track record, sortable by PnL, with realizedPnlPercent (realized over total bought) per token. Across positions and closed-positions the realized PnL of a token is counted exactly once, so the two tables never double-count.

The activity feed

GET /v1/wallet/swaps is built for the feed: one row per transaction, whatever the route did. sent is what the swap took from the wallet and received what it delivered, read from end to end: a USELESS to USDC sale routed through SOL reads as USELESS sent, USDC received, and the assets the route only passes through do not appear. Every asset carries its symbol and decimals, route lists every leg with its pool and venue, and on Solana each swap carries router (Jupiter, OKX DEX, DFlow, Titan, null for a direct swap), so a row renders as “swapped 14.55 USELESS for 3.42 USDC via DFlow” with no extra lookup. There is no wallet-scoped stream channel, and the pagination is designed so you do not need one: cursors are exact keyset, they never skip or repeat a transaction. The lossless live pattern is a short poll that walks until it meets a row it has seen:
activity-poll.ts
For a per-token tape of the wallet (every fill, not netted per transaction), use GET /v1/wallet/trades: multihop-deduplicated so volumes are never doubled, routing hops excluded by default, isWash flagged on Solana. /v1/wallet/transfers adds deposits and withdrawals with counterparties, which is how a feed distinguishes “sold” from “moved to another wallet”.

Track a fleet

A tracker follows N wallets, and N single calls do not scale. Every wallet endpoint has a POST batch twin taking up to 20 {chain, wallet} items, chains mixed freely (omit chain on a hex address to combine all its EVM chains), per-item error slots so one wallet never fails the others, billed per wallet: positions, PnL, closed positions, profile, trades, swaps, funding. The fleet overview (one leaderboard row per tracked wallet) is two batch calls. A positions slot is { data, summary, hasMore }, exactly the body of the single GET; a PnL slot is { data }, and period applies to the whole call:
fleet.ts
Refresh it on an interval and sort by 7d PnL: the fleet ranks itself.

The copy-trade check

The question a copy-trader asks is not “what does this wallet hold”, it is “is this wallet still in the token I copied”. tokens= scopes both position endpoints to specific tokens, one call, no paging:
A row back means they still hold, with the live unrealized PnL of their bag. Nothing back: check /v1/wallet/closed-positions?tokens=MINT for the exit and its realized PnL. Between the two, the answer is always exactly one call away.

What a tracker costs

A 15s activity poll is 4 credits per minute per watched wallet; widen the interval for the fleet, keep it tight for the wallet on screen. Only 2xx responses are billed. Plans and the full grid are on Authentication & Limits.

Ship it

The heavy machinery came with the endpoints: PnL folds over every trade of the wallet, multihop dedup so volumes are never doubled, route netting for readable feeds, an identity graph of 7.6M+ wallets, funding lineage, exact keyset pagination. Your tracker is the UI on top.

Build a Trading Terminal

The token side of the product: discovery, chart, tape, panels.

Get a key

Create an account, add a card to unlock 100,000 free credits, and create your key in the portal.