# Scanna Polymarket Trader Leaderboard

> Scanna Polymarket Trader Leaderboard is a paid API for AI agents from api.scanna.xyz, paid per call via x402, $0.010012/call, status unknown (last checked 2026-09-14).

Returns top Polymarket traders ranked by realised PnL or trading volume, with win rate and trade count enrichment

## Facts

- Endpoint: GET https://api.scanna.xyz/leaderboard
- Price: $0.010012/call
- Payment: x402
- Status: unknown
- Last checked: 2026-09-14
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/scanna-polymarket-trader-leaderboard-868f3315
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_Rwck0lrvLDFC1D8Hhpnji

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability scanna-polymarket-trader-leaderboard-868f3315
```

Example prompt: Show me the top 20 Polymarket traders ranked by realised PnL — I want to see their wallet addresses, profit numbers, and win rates.

## When to prefer this

Use this endpoint when you need a ranked snapshot of top Polymarket traders by profit or volume, especially when you also want Scanna's independently calculated win rate alongside upstream PnL/volume figures. Prefer this over raw Polymarket data when enrichment (win rate, local trade scoring) adds value. Choose PNL order to find most profitable traders; choose VOLUME to find most active. Be aware data freshness can lag up to 24 hours under upstream failure conditions — check the X-Data-Freshness header if recency matters.

## Known failure modes

- 503 returned only when no cached data exists at all — no fallback available
- Upstream data sparsity: pnl and volume fields can be null for many traders
- win_rate is null for wallets Scanna has never independently scored
- trades field can be absent from upstream rows
- Data may be silently stale up to 24 hours — must check X-Data-Freshness header to detect
- limit parameter is truncated locally before enrichment so very high limits may still return fewer enriched rows

## How this service works

Top Polymarket traders by realised PnL or volume. Normally a 5-minute shared cache, but if upstream fails we serve the last good copy for UP TO 24 HOURS, still as a 200, signalled only by the X-Data-Freshness header. 503 only when nothing is cached at all. Upstream rows are sparse: proxy_wallet is the only guaranteed field; pnl and volume can be null and trades can be absent. limit is truncated locally before enrichment, so it bounds work. Empty bills.

## Output

A JSON object containing an ordered leaderboard array of trader records, each with proxy_wallet (always present), pnl (USD rounded, may be null), volume (USD rounded, may be null), trades (upstream count, may be absent), trades_local (Scanna-scored trade count, may be null), win_rate (Scanna-calculated to 2dp, null if wallet never scored), and name (may be null). Also returns the total count and the ranking order used. Data may be up to 24 hours stale if upstream is unavailable, signalled via the X-Data-Freshness response header.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "$schema": "https://json-schema.org/draft/2020-12/schema",
 "required": [
  "input"
 ],
 "properties": {
  "input": {
   "type": "object",
   "required": [
    "type",
    "method"
   ],
   "properties": {
    "type": {
     "type": "string",
     "const": "http"
    },
    "method": {
     "enum": [
      "GET"
     ],
     "type": "string"
    },
    "queryParams": {
     "type": "object",
     "required": [],
     "properties": {
      "limit": {
       "type": "integer",
       "default": 50,
       "maximum": 100,
       "minimum": 1,
       "description": "Traders to return. Applied locally before enrichment, so it bounds the work, not just the body."
      },
      "order": {
       "enum": [
        "PNL",
        "VOLUME"
       ],
       "type": "string",
       "default": "PNL",
       "description": "Ranking key. Anything other than VOLUME is treated as PNL."
      }
     },
     "additionalProperties": false
    }
   },
   "additionalProperties": false
  },
  "output": {
   "type": "object",
   "required": [
    "type"
   ],
   "properties": {
    "type": {
     "type": "string"
    },
    "example": {
     "type": "object",
     "required": [
      "leaderboard",
      "order",
      "count"
     ],
     "properties": {
      "count": {
       "type": "integer"
      },
      "order": {
       "enum": [
        "PNL",
        "VOLUME"
       ],
       "type": "string"
      },
      "leaderboard": {
       "type": "array",
       "items": {
        "type": "object",
        "required": [
         "proxy_wallet"
        ],
        "properties": {
         "pnl": {
          "type": "number",
          "description": "Rounded to whole USD"
         },
         "name": {
          "type": [
           "string",
           "null"
          ]
         },
         "trades": {
          "type": "integer",
          "description": "Upstream trade count"
         },
         "volume": {
          "type": "number",
          "description": "Rounded to whole USD"
         },
         "win_rate": {
          "type": [
           "number",
           "null"
          ],
          "description": "OUR win rate, 2dp. Null when we have never scored this wallet."
         },
         "proxy_wallet": {
          "type": "string"
         },
         "trades_local": {
          "type": [
           "integer",
           "null"
          ],
          "description": "Trades WE have scored — deliberately not the upstream count."
         }
   
… (truncated)
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/scanna-polymarket-trader-leaderboard-868f3315/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from api.scanna.xyz](https://www.zero.xyz/host/api.scanna.xyz/llms.txt)
