Predictefy Docs
Browse documentation

Trader Intelligence API

Live wallet-attributed public activity, venue-scoped profiles, versioned scores, and the scored-trade feed.

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.

Endpoints

Market trader trades

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.

Market holders

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.

Venue leaderboard

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 the current stored score; window is retained for API consistency.

Cross-venue score leaderboard

GET /v1/traders/leaderboard

This endpoint supports by=score only, plus optional window and limit. 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; window is retained for API consistency.

Wallet profile

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.

Wallet trades

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.

Smart-money feed

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 all collected feed data; no historical backfill is included.

Error honesty

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.

Venue capabilities

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.

VenueTrader tradesHoldersLeaderboardWallet profileScored-trade feed
polymarketyesyesyesyesyes
limitlessyesyesyesyesyes
myriadyesyesnoyesyes
hyperliquidyesnoyesyesyes
sxbetyesnononoyes
predictfunyesnoyesyesyes
opinionnononoyesno
kalshinonononono
gemininonononono
smarketsnonononono
polymarket_usnonononono

Opinion is a lookup-only venue (no public per-market tape, so no scored-trade or smart-money coverage). The final four rows are a venue property, not a gap.

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's board is all-time volume only, with no keyless wallet history.
  • Myriad 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.
  • SXBET is trades-only: 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.

SDK examples

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})