Request body
Response fields
Example: fresh add
Request:200 OK):
/v2/copy-pnl/leaderboard.
Example: re-add (dedupe)
Wallets already in your pool are silently skipped — sending the same address twice doesn’t count toward your cap. Request (one wallet already tracked, one new):200 OK):
0xdead…cc) was added and refresh-kicked. The duplicate was a no-op.
Errors
400 Missing or invalid addresses (covers: missing addresses field, non-string in array, malformed hex):
400 Too many addresses in one request:
401 Missing API key, 403 Free tier, 429 Rate limited — same as the on-demand /v2/copy-pnl/{wallet} endpoint. See Backtest Copy PnL → Errors.
Notes
- Wallets are normalized to lowercase. Mixing case across requests is fine; the same wallet in different case won’t double-track.
- Within a single request, duplicates are de-duped before the dedup-against-pool check. So passing the same address twice in one body counts as one.
- Pool isolation: each API key has its own private pool keyed on the SHA256 of your key. Adding wallets to one pool doesn’t affect any other customer.
- On-add freshening runs in the background — the HTTP response returns within milliseconds even though scoring takes 30s+ to complete. Poll
/v2/copy-pnl/leaderboardto see scores land. - Capacity behavior: if your request would have pushed your pool past
max, we accept the first N that fit and setcapped: trueplus ahintexplaining what was dropped. We do NOT reject the entire request.

