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
200 OK):
Example: leader screening — best non-toxic, min volume
200 OK):
min_trade_count: 1000) and aren’t already flagged toxic.
Example: pagination (offset)
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:
/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.
pendinganderroredaren’t included inresults. Usepending_sampleanderrored_sampleto identify which specific wallets need attention. Theerrored_sampleincludes the upstream error message — typicallytimeout_180sfor the heaviest whales on long windows.computed_atper row. Use this to render “as of X minutes ago” in your UI. Newly-added wallets (via on-add freshening) typically have acomputed_atwithin ~30s of the add. Periodic refresh updates it once per chunk slot.last_refreshat 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-rowcomputed_atfield for exact freshness.- Sort ties + nulls. When two wallets share the exact sort_by value, secondary order is undefined. Wallets with
nullslippage_cost_rate_pctalways sort last when sorting on that field.

