Skip to content

GuidesIntelligence

Dark venue. Smarkets is implemented but not served on this deployment: every /api/smarkets/… request returns 404 EXCHANGE_NOT_AVAILABLE, router fan-outs exclude it, and it is not counted among the served venues. It returns when a commercial API agreement is in place.

Trader Intelligence organizes public venue-published/on-chain activity by wallet and venue. Scores are versioned informational signals, not financial advice, and nothing on this page is a recommendation. Wallets remain venue-scoped; Predictefy does not claim that addresses on different venues belong to the same person.

All endpoints are authenticated, metered GET requests. List endpoints default to limit=20 and cap it at 100.

GET /v1/traders/{venue}/markets/{marketId}/trades

ParameterRequiredMeaning
venueyesOne supported Trader Intelligence venue id.
marketIdyesVenue-native market id.
limitno1–100 rows.
cursornoOpaque venue/keyset cursor from nextCursor.

Rows contain venue, marketId, outcomeId, tradeId, ts, wallet, optional displayName, side, price, amount, and usdSize. Nullable fields stay null when the venue payload cannot prove them.

GET /v1/traders/{venue}/markets/{marketId}/holders

Parameters: venue, marketId, and optional limit. Rows contain wallet, optional displayName, outcomeId, shares, and nullable usdValue. Venues without a public holder/outcome concept return TRADERS_UNSUPPORTED.

GET /v1/traders/{venue}/leaderboard

ParameterRequiredValues
bynoprofit, volume, or score; default profit.
windownoday, week, month, or all; default all.
limitno1–100 rows.

Native profit/volume rows contain venue, wallet, optional displayName, rank, window, nullable profitUsd, and nullable volumeUsd. by=score uses Predictefy scores and instead includes score, scoreVersion, factors, category, stats, refreshedAt, refreshState, asOf, and provenance. Wallet factors contain the versioned trackRecord, experience, scale, and discipline components when a w1 score is available.

The exact score note is:

Score ranking uses current stored scores and is all-time only; any other window is rejected rather than silently ignored.

GET /v1/traders/leaderboard

This endpoint supports by=score only. window may be omitted to use its all default or set explicitly to all; every other value is rejected with HTTP 400. limit is optional and accepts 1–100 rows. Profit and volume are venue-native and are never merged into a synthetic ranking. Rows use the score-leaderboard shape above and remain venue-tagged.

The response carries these exact honesty notes:

Wallets are venue-scoped; the cross-venue leaderboard interleaves venue-tagged entries without claiming same-person identity.

Score ranking uses current stored scores and is all-time only; any other window is rejected rather than silently ignored.

GET /v1/traders/{venue}/wallets/{addr}

Profiles contain venue, wallet, optional displayName, score, scoreVersion, factors, category, stats, refreshedAt, refreshState, asOf, and provenance. stats contains walletAgeDays, marketsTraded, totalVolumeUsd, winRate, realizedPnlUsd, firstSeen, lastSeen, and depositFirstAt.

A live fill-in can return score, scoreVersion, factors, and category as null until Predictefy scores that wallet. It says so in note; the API does not invent a score from incomplete venue data.

GET /v1/traders/{venue}/wallets/{addr}/trades

Parameters: venue, addr, optional limit, and optional cursor. The list uses the same wallet-attributed trade fields as the market tape. A venue without keyless wallet history returns TRADERS_UNSUPPORTED.

GET /v1/traders/smart-money

The route name is part of the API; the response is an informational scored-trade feed, not a recommendation.

ParameterRequiredMeaning
venuenoOne Trader Intelligence venue.
minScorenoMinimum trade score, 0–100.
marketnoExact market id.
walletnoExact venue-scoped wallet.
categorynobot, whale, smart, fresh, or fish.
windownoday, week, month, or all; default all.
limitno1–100 rows.
cursornoOpaque (ts, tradeId) keyset cursor.

Rows add tradeScore, tradeFactors, scoreVersion, walletScoreAtTrade, and categoryAtTrade to the normal trader-trade fields. Version t1 trade factors are walletScore, size, entry, and timing. The response carries these exact honesty notes:

window=all means since lane launch; feed coverage begins at deploy, no backfill.

An unknown venue or unsupported venue/verb returns HTTP 400:

{
"success": false,
"error": {
"code": "TRADERS_UNSUPPORTED",
"message": "market holders are unsupported for hyperliquid",
"retryable": false
}
}

An unknown wallet returns 404 TRADER_NOT_FOUND. If Trader Intelligence is unavailable, /v1/traders/* returns 404.

Hyperliquid market selection follows the active catalog and refreshes periodically as that catalog changes. A listed capability is not a claim that every venue currently has collected rows: scored-trade and smart-money coverage requires activity from that venue.

The five columns mirror has.traderTrades, has.holders, has.leaderboard, has.walletProfile, and has.smartMoney. Smart-money capability follows trader-trade capability. The source column names the venue definition behind TRADER_CLIENTS; traderCapabilities supplies the all-false fallback for product venues without one.

VenueTrader tradesHoldersLeaderboardWallet profileScored-trade feedCapability source
polymarketyesyesyesyesyespolymarketTraders
kalshinononononotraderCapabilities fallback
smarkets (dark)nononononotraderCapabilities fallback
opinionnononoyesnoopinionTraders
myriadyesyesnoyesyesmyriadTraders
gemininononononotraderCapabilities fallback
hyperliquidyesnoyesyesyeshyperliquidTraders
limitlessyesyesby=volume + window=all onlyyesyeslimitlessTraders
polymarket_usnononononotraderCapabilities fallback
rainyesnononoyesrainTraders
predictfunyesnoyesyesyespredictfunTraders
sxbetnononononosxbetTraders
pascalyesnononoyespascalTraders
xoyesnononoyesxoTraders
predyesnononoyespredTraders
predictstreetnononononotraderCapabilities fallback
novignononononotraderCapabilities fallback

Opinion is a lookup-only venue (no public per-market tape, so no scored-trade or smart-money coverage). Kalshi, Smarkets (dark — not served), Gemini, Polymarket US, PredictStreet, and Novig do not register a Trader Intelligence client, so all five capability fields are false.

Venue-specific limits matter:

  • PredictFun ranks venue points only. by/sort has no venue effect, only all exists, and the board contains no profit or volume figures. Position pages do not prove lifetime totals, and match collateral is unknown, so usdSize is null.
  • Limitless has no keyless wallet history, and its board is all-time volume only: the leaderboard serves by=volume with window=all and answers 400 for anything else, including this reference’s own by=profit default. This is a fixed venue contract, not an outage.
  • Myriad serves trader-trade and holder reads but has no board. Sizes are token-denominated, so USD fields are null.
  • Hyperliquid has no holders. Its tape is push-based, and profile totals cover only the recent fills window returned by the venue.
  • SX Bet reports no trader-intelligence capability on the shipped V3 API: its default tape carries no bettor identity, so has.traderTrades and every flag derived from it are false. The client advertises trader trades only when SXBET_API_VERSION=v2 selects the retired sandbox API, where side is null and usdSize exists only for SX USDC.
  • Opinion wallet lookups require a venue API key held server-side; the venue hides order ids for privacy. Wallet trades paginate with an opaque cursor.

TypeScript uses venue subclients for venue lookups and root methods for merged score/feed reads:

const tape = await client.polymarket.fetchTraderTrades(conditionId, { limit: 25 });
const holders = await client.limitless.fetchHolders(marketSlug, { limit: 10 });
const board = await client.hyperliquid.fetchLeaderboard({
by: 'profit',
window: 'week',
limit: 20,
});
const profile = await client.polymarket.fetchWalletProfile(wallet);
const history = await client.sxbet.fetchWalletTrades(wallet, { limit: 25 });
const feed = await client.fetchSmartMoney({ venue: 'polymarket', minScore: 70, window: 'week' });
const top = await client.fetchTopTraders({ by: 'score', window: 'all', limit: 20 });

Python exposes the same surface in snake case:

tape = client.polymarket.fetch_trader_trades(condition_id, {"limit": 25})
holders = client.limitless.fetch_holders(market_slug, {"limit": 10})
board = client.hyperliquid.fetch_leaderboard(
{"by": "profit", "window": "week", "limit": 20}
)
profile = client.polymarket.fetch_wallet_profile(wallet)
history = client.sxbet.fetch_wallet_trades(wallet, {"limit": 25})
feed = client.fetch_smart_money(
{"venue": "polymarket", "minScore": 70, "window": "week"}
)
top = client.fetch_top_traders({"by": "score", "window": "all", "limit": 20})