Skip to main content
Query the precomputed leaderboard over your private wallet pool. All reads come from cache — sub-second latency regardless of pool size or window. Sort by any output field, filter out toxic wallets or low-volume traders, paginate.

Query parameters

string
default:"30d"
Time window the scores were computed against. One of: 7d, 14d, 30d, 60d, 90d, 180d. Scores are precomputed for all six periods so any choice is sub-second.
string
default:"backtest_copy_pnl_usdc"
Field to sort by. One of: backtest_copy_pnl_usdc, actual_pnl_usdc, slippage_amount_usdc, slippage_cost_rate_pct, trade_count.
string
default:"desc"
asc or desc. Wallets with null slippage_cost_rate_pct (when abs(actual_pnl) < 1) always sort last regardless of direction.
int
default:"100"
Max results to return. 1 to 1000.
int
default:"0"
Skip the first N results. Useful for paginating beyond limit.
int
default:"0"
Filter out wallets with fewer than N fills in the window. Useful to drop sample-too-small noise.
boolean
default:"false"
When true, drops wallets where slippage_cost_rate_pct > 15. The leader-selection power filter.

Response shape

Per-result row

Example: top 3 by actual_pnl_usdc desc

Response (200 OK):

Example: leader screening — best non-toxic, min volume

Response (200 OK):
This is the canonical “find good leaders to copy” query: lowest slippage rate, but only among wallets that have actually traded enough (min_trade_count: 1000) and aren’t already flagged toxic.

Example: pagination (offset)

Response includes results with local_rank: 11, 12, 13 — i.e. ranks within your pool start at offset + 1. The default sort is backtest_copy_pnl_usdc desc.

Errors

400 Invalid period:
400 Invalid sort_by:
400 Invalid order:
Auth/rate-limit errors mirror the rest of the /v2/copy-pnl/* family.

Notes

  • Sub-second. All scores are precomputed and served from cache. Even a 1000-wallet pool with all six periods scored returns in under 100ms.
  • pending and errored aren’t included in results. Use pending_sample and errored_sample to identify which specific wallets need attention. The errored_sample includes the upstream error message — typically timeout_180s for the heaviest whales on long windows.
  • computed_at per row. Use this to render “as of X minutes ago” in your UI. Newly-added wallets (via on-add freshening) typically have a computed_at within ~30s of the add. Periodic refresh updates it once per chunk slot.
  • last_refresh at top level. When the most recent full refresh cycle completed. Individual wallets may have been refreshed earlier or later within the cycle — use the per-row computed_at field for exact freshness.
  • Sort ties + nulls. When two wallets share the exact sort_by value, secondary order is undefined. Wallets with null slippage_cost_rate_pct always sort last when sorting on that field.