---
title: "Wallets ranked by Smart Score"
method: GET
path: "/smart-money/top"
tags: ["Top wallets"]
---

# Wallets ranked by Smart Score

`GET /smart-money/top`

## Request

- Base URL: `https://api.getchord.xyz/v1`
- URL: `https://api.getchord.xyz/v1/smart-money/top`
- Auth: none declared

Which wallets make money on the chain, from the tape, ranked by a skill-adjusted score rather than raw profit (realized-weighted, luck-corrected, recency-decayed). Routers, executors and bots are removed before ranking (`botsRemoved` counts them). On Arc the board moves between rebuilds: a live delta of the last minutes' trades sits on top of the last roll (`live`).

**Notes**: `source=onchain` is required on 5042 / 4663. The board is rebuilt on a schedule per window (15 min for 24h, hourly for 7d / 30d, 3 h for all) and served from cache in between. `503 CHAIN_NOT_ENABLED` until the board is published for the chain.

## Query parameters

- `chain` 5042 | 4663 | 143, required
- `source` 'onchain' | 'nullterminal', required
- `window` '24h' | '7d' | '30d' | 'all'
- `category` 'all' | 'memes' | 'majors'
- `limit` integer

## Response `200`

- object
  - `wallets` SmartWallet[]
    - `wallet` string: EVM address, hex, case-insensitive.
    - `pnlUsd` number: Realized plus open PnL at current prices.
    - `realizedUsd` number
    - `unrealizedUsd` number
    - `volumeUsd` number
    - `trades` integer
    - `tokensTraded` integer
    - `winningTokens` integer
    - `winRate` number: 0–1.
    - `topToken` object
      - `symbol` string, nullable
      - `pnlUsd` number
    - `lastActiveTs` integer: Unix time, seconds, UTC.
    - `pnlMeme` number
    - `pnlMajor` number
    - `memeVol` number
    - `archetype` string: `degen` · `allrounder` · `majors` …
    - `memeShare` number
    - `winRateAdj` number: Luck-corrected win rate.
    - `smartScore` number: The ranking key: realized-weighted, luck-corrected, recency-decayed profit.
  - `totalWallets` integer: Wallets that qualified after the bot passes.
  - `window` string
  - `category` string
  - `chain` integer
  - `source` string
  - `indexedToBlock` integer: The chain block the tape had reached when this board was built.
  - `updatedAt` integer: Unix time, milliseconds — when the server built this answer.
  - `live` object: Arc only — the in-memory delta on top of the last roll.
  - `botsRemoved` object
    - `cadence` integer
    - `nonceOrDenylist` integer
    - `behavior` integer
  - `note` string

## Other responses

- `400`: Invalid parameters — `error` names the check that failed (`INVALID_PARAMS`, `BAD_ADDRESS`, `BAD_LIMIT`, `BAD_HOURS`, …).
- `503`: The lane behind this endpoint is not ready or not enabled here (`NOT_READY`, `CHAIN_NOT_ENABLED`, `NOT_ENABLED`, `*_UNAVAILABLE`). Retry later; do not treat it as an empty answer.

---

[API](https://skmtc.dev/getchord/apis/chord-api.md) · [All operations](https://skmtc.dev/getchord/apis/chord-api/llms.txt) · [OpenAPI document](https://skmtc.dev/getchord/apis/chord-api/revisions/d3bc4640fea0?raw)
