---
title: "PnL Sharpe leaderboard"
method: GET
path: "/api/public/v1/pulse/sharpe-leaderboard"
---

# PnL Sharpe leaderboard

`GET /api/public/v1/pulse/sharpe-leaderboard`

## Request

- Base URL: `https://api.coinversa.ai`
- URL: `https://api.coinversa.ai/api/public/v1/pulse/sharpe-leaderboard`
- Auth: API key in header `X-API-Key`
- TypeScript: <https://skmtc.dev/coinversa/apis/coinversa-api/docs/api/public/v1/pulse/sharpe-leaderboard/get.ts> (a function with typed inputs; its response is checked against the schema)

Annualized gross realized-PnL Sharpe proxy: sqrt(365) * mean daily PnL / sample standard deviation, with risk-free return zero. Not equity-normalized portfolio Sharpe; excludes fees, funding and unrealized PnL. Days without fills count as zero. Only completed UTC days are included; today is excluded. No equity eligibility filter applies to wallet routes. Uses 30 completed UTC calendar days. Top 50 wallets with latest stored account equity >= $2,500, at least minActiveDays completed UTC days with a fill in the window (default 10) and window realized PnL >= minPnl (default $1,000); equity and activity eligibility are applied before ranking. minActiveDays=1 with minPnl=-1000000000 removes the activity floors. Missing equity and zero-variance scores are excluded. No checkpoint-age cutoff is applied. EquityUpdatedAt identifies checkpoint age. Ranking breaks ties by realized PnL descending, then wallet ascending. Cached and proactively refreshed every 30 minutes; failed refreshes may serve the previous result. Cache refresh does not refresh equity checkpoints.

## Query parameters

- `days` integer: Completed UTC days; only 30 is currently supported.
- `minActiveDays` integer: Minimum distinct completed UTC days inside the 30-day window with at least one fill (default 10, 1-30). Same fill-day definition as /pulse/hidden-gems, which counts over all time instead. Applied before ranking. Filters out wallets whose score rests on a few trading days.
- `minPnl` number, double: Minimum gross realized PnL in USD summed over the window, inclusive (default 1,000; -1,000,000,000 to 1,000,000,000). Same name, USD meaning and default as on /pulse/max-pain-events and /pulse/perfect-exits; unlike there, negatives are allowed so the floor can be switched off. Applied before ranking.

## Response `200`

OK

- SharpeLeaderboardBody
  - `$schema` string, uri: A URL to the JSON Schema for this object.
  - `asOf` string, date-time, required: Midnight UTC at the exclusive end of the data window; not the calculation time.
  - `calculatedAt` string, date-time, required
  - `days` integer, required
  - `endDayExclusive` string, required: Exclusive UTC date.
  - `minActiveDays` integer, required: Applied minimum fill days in the window.
  - `minEquity` number, double, required
  - `minPnl` number, double, required: Applied minimum window realized PnL, USD.
  - `startDay` string, required: Inclusive UTC date.
  - `traders` SharpeLeaderboardTrader[], nullable, required
    - `accountValue` number, double, required: Equity at the latest stored checkpoint, not necessarily live equity.
    - `activeDays` integer, required: Completed UTC days in the window with at least one fill.
    - `annualizedPnlSharpe` number, double, nullable, required: Null with fewer than two completed days or zero daily PnL variance.
    - `equityUpdatedAt` string, date-time, nullable, required
    - `meanDailyPnl` number, double, required
    - `realizedPnl` number, double, required
    - `stdDailyPnl` number, double, required
    - `trades` integer, required
    - `wallet` string, required

## Other responses

- `400`: Bad Request
- `403`: Forbidden
- `422`: Unprocessable Entity
- `429`: Too Many Requests
- `500`: Internal Server Error
- `504`: Gateway Timeout

## Changes

- **2026-10-15** `d47dcb25c95a`: 5 info
  - added the new optional `query` request parameter `minActiveDays`
  - added the new optional `query` request parameter `minPnl`
  - added the required property `minActiveDays` to the response with the `200` status
  - added the required property `minPnl` to the response with the `200` status
  - …1 more
- **2026-10-14** `e668ee30bd24`: 1 info
  - added the required property `asOf` to the response with the `200` status
- **2026-10-13** `2f6ac7d2050f`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/coinversa/apis/coinversa-api/changes/api/public/v1/pulse/sharpe-leaderboard/get.md)

---

[API](https://skmtc.dev/coinversa/apis/coinversa-api.md) - [All operations](https://skmtc.dev/coinversa/apis/coinversa-api/llms.txt) - [OpenAPI document](https://skmtc.dev/coinversa/apis/coinversa-api/revisions/3454317a5830?raw)
