Rank traders on one chain

GET
/wallets

Traders ranked over a rolling window, filtered on win rate, volume, holding time, capital tier and behaviour.

exclude_bots removes market makers as well as bots: their edge is inventory and latency rather than directional skill, so ranking them beside discretionary traders compares two different games.

Sorting on win_rate only ranks wallets with enough rated positions for the ratio to carry information. A wallet that clearly has winning trades but reports win_rate 0 has too small a rated sample — read trade_win_rate instead, and rated_positions for the sample size.

Query Parameters

chain*string

chain slug (ton) or numeric chain id (950000)

Length1 <= length <= 32
window?string

rolling window the metrics are computed over

Default"30d"

Value in

  • "1d"
  • "7d"
  • "30d"
  • "1y"
  • "all"
sort?string

total_pnl ranks on realised profit plus open positions marked to market, so a wallet sitting on a large unrealised gain is not ranked below wallets that merely took profit. realized_pnl ranks on taken profit alone. win_rate ranks only wallets with enough rated positions for the ratio to carry information. user_score ranks on the wallet score.

Default"total_pnl"

Value in

  • "total_pnl"
  • "realized_pnl"
  • "volume"
  • "win_rate"
  • "trades"
  • "user_score"
order?string
Default"desc"

Value in

  • "asc"
  • "desc"
min_total_pnl_usd?number
Formatdouble
min_realized_pnl_usd?number
Formatdouble
min_volume_usd?number
Formatdouble
min_win_rate?number

0..1

Formatdouble
Range0 <= value <= 1
min_trades?integer
Formatuint32
max_avg_hold_seconds?integer
Formatint64
min_user_score?integer
Formatuint32
Range0 <= value <= 100
no_abuse_evidence?boolean

only wallets with no abuse evidence at all, not merely little

only_copy_eligible?boolean
exclude_bots?boolean
tiers?array<>

comma-separated capital tiers

Itemsitems <= 8
limit?integer

page size; plans above startup may raise the ceiling

Formatint32
Range1 <= value <= 100
Default10
cursor?string

opaque cursor from next_cursor or prev_cursor

Lengthlength <= 512

Header Parameters

Accept-Payment?string

payment methods the client can use, comma-separated, case-insensitive. With x402 in the list, a spent keyless budget answers 402 with the x402 challenge instead of 429.

PAYMENT-SIGNATURE?string

base64 x402 v2 payment payload for this request. A paid request skips the keyless budget and is settled only when it answers 2xx. The v1 header X-PAYMENT is accepted too.

Response Body

application/json

application/problem+json

application/problem+json

application/json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

curl -X GET "https://example.com/wallets?chain=string"
{  "items": [    {      "address": "string",      "chain": {        "slug": "hyperliquid",        "chain_id": 0      },      "tier": "string",      "type": "unknown",      "labels": [        {          "kind": 0,          "name": "string",          "confidence": 0.1,          "token_address": "string"        }      ],      "copy_eligible": true,      "user_score": {        "value": 0,        "status": "unknown"      },      "scammer_score": {        "value": 0,        "band": "none"      },      "metrics": {        "window": "1d",        "realized_pnl_usd": 0.1,        "unrealized_pnl_usd": 0.1,        "total_pnl_usd": 0.1,        "rated_pnl_usd": 0.1,        "gross_profit_usd": 0.1,        "gross_loss_usd": 0.1,        "invested_usd": 0.1,        "volume_usd": 0.1,        "roi": 0.1,        "win_rate": 0.1,        "trade_win_rate": 0.1,        "median_roi": 0.1,        "profit_factor": 0.1,        "avg_trade_usd": 0.1,        "avg_hold_seconds": 0,        "trades": 0,        "winning_trades": 0,        "losing_trades": 0,        "tokens_traded": 0,        "closed_positions": 0,        "open_positions": 0,        "rated_positions": 0,        "excluded_transfer_only": 0,        "excluded_untracked": 0,        "excluded_no_outcome": 0      }    }  ],  "next_cursor": "string"}