---
title: "Competition leaderboard"
method: GET
path: "/v1/competitions/{slug}/leaderboard"
tags: ["Competition"]
---

# Competition leaderboard

`GET /v1/competitions/{slug}/leaderboard`

## Request

- Base URL: `https://api.testnet.rise.trade`
- URL: `https://api.testnet.rise.trade/v1/competitions/{slug}/leaderboard`
- Auth: none required
- TypeScript: <https://skmtc.dev/rise/apis/risex-rest-api/docs/v1/competitions/:slug/leaderboard/get.ts> (a function with typed inputs; its response is checked against the schema)

Get a competition's ranked leaderboard with rank-change indicators.

## Path parameters

- `slug` string, required

## Query parameters

- `limit` integer
- `offset` integer
- `search` string
- `sort_by` string
- `sort_order` string
- `track` string

## Response `200`

A successful response.

- ApiGetCompetitionLeaderboardV2Response
  - `rows` ApiCompetitionLeaderboardRow[]
    - `rank` string, int64: Standing in the ordering being read: the track selected by `track`, re-sorted when `sort_by` is given. It is numbered across the whole competition rather than the returned page, so a row found by `search` reports the standing it actually holds. The single-row entry endpoint reports the track's own rank.
    - `rank_change` string, int64: prev_rank - rank; positive = moved up, negative = down, 0 = no change / new. Both ends are the track's own rank, so the movement is the same number whatever the board is currently sorted by.
    - `address` string
    - `username` string
    - `trading_score` string
    - `volume_score` string
    - `pnl_score` string
    - `window_volume` string
    - `realized_pnl` string
    - `qualified` boolean: Reward eligibility on the track being read, not a single competition-wide flag: every track requires the config's min_deposit_usd, and the ROI track additionally requires its min_volume_usd.
    - `oi_twap` string: Time-weighted average open notional held across the window so far, human USD — the OI track's metric. Sampled at fixed intervals, so holding $100k open for the whole window scores the same as $200k for half of it.
    - `oi_score` string: This wallet's share [0,1] of the cohort's total time-weighted OI, i.e. its share of the OI track's pool. The volume track's counterpart is `volume_score`. Both denominators include every cohort wallet's activity, including wallets below the qualifying floor that get no row.
    - `roi_percent` string: ROI % over the competition window. 0 for blended-score (non-ROI) competitions.
    - `win_rate` string: Win rate % = closed trades with positive PnL / total closed trades * 100. 0 for blended-score competitions.
    - `trades` string, int64: Number of trades in the competition window. 0 for blended-score competitions.
    - `qualifying_capital` string: The ROI denominator: equity at the competition start plus deposits made inside the window, human USD. Withdrawals are deliberately not subtracted — capital counts once it has been committed to the window. This is the same number `roi_percent` is a percentage of, except that ROI floors the denominator at $100, so a wallet below that floor shows its real capital here. 0 for blended-score (non-ROI) competitions.
    - `deposits_usd` string: Deposits made inside the competition window, human USD — the other half of qualifying_capital, and the figure the competition's min_deposit_usd gate is checked against, so it is what `qualified` measures progress toward. As of the last recompute, like every other number on this row and unlike GetMyCompetitionEntryResponse.deposits_usd, which is summed live. The two can differ by one recompute interval for a wallet that just deposited; this one is the figure `qualified` was actually decided from. 0 for blended-score competitions.
  - `total` integer
  - `updated_at` string, int64: Unix seconds of the last leaderboard recompute (max row updated_at); 0 when the leaderboard has no rows yet. Frontend renders this as "last updated".

## Other responses

- `default`: An unexpected error response.

## Changes

- **2026-11-03** `98eabcd6a6ad`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/rise/apis/risex-rest-api/changes/v1/competitions/:slug/leaderboard/get.md)

---

[API](https://skmtc.dev/rise/apis/risex-rest-api.md) - [All operations](https://skmtc.dev/rise/apis/risex-rest-api/llms.txt) - [OpenAPI document](https://skmtc.dev/rise/apis/risex-rest-api/revisions/98eabcd6a6ad?raw)
