curl --request GET \
--url https://api.limitless.exchange/leaderboard/pnl/unrealized/biggest-positionsimport requests
url = "https://api.limitless.exchange/leaderboard/pnl/unrealized/biggest-positions"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.limitless.exchange/leaderboard/pnl/unrealized/biggest-positions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.limitless.exchange/leaderboard/pnl/unrealized/biggest-positions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.limitless.exchange/leaderboard/pnl/unrealized/biggest-positions"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.limitless.exchange/leaderboard/pnl/unrealized/biggest-positions")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.limitless.exchange/leaderboard/pnl/unrealized/biggest-positions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"schemaVersion": 1,
"state": "BUILDING",
"scope": "BIGGEST_POSITIONS",
"limit": 25,
"data": [
{
"rank": 2,
"account": "<string>",
"username": "<string>",
"displayName": "<string>",
"pfpUrl": "<string>",
"positionSize": {
"raw": "9000000",
"formatted": "9",
"usd": "9"
},
"heldShares": {
"raw": "100000000",
"formatted": "100"
},
"toWin": {
"raw": "9000000",
"formatted": "9",
"usd": "9"
},
"mark": {
"raw": "<string>",
"formatted": "<string>",
"source": "CLOB_DEPTH_WEIGHTED_BID",
"asOf": "2023-11-07T05:31:56Z"
},
"unrealizedPnl": {
"raw": "9000000",
"formatted": "9",
"usd": "9"
},
"side": "YES",
"outcomeLabel": "<string>",
"market": {
"id": 123,
"slug": "<string>",
"address": "<string>",
"title": "<string>",
"category": "<string>"
}
}
],
"projectionVersion": "<string>",
"scopeVersion": "<string>",
"presentationVersion": "<string>",
"asOf": "2023-11-07T05:31:56Z",
"markAsOf": "2023-11-07T05:31:56Z",
"staleReason": "<string>",
"collateralToken": {
"id": 7,
"symbol": "USDC",
"address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"decimals": 6,
"priceOracleId": "usd-coin"
}
}Biggest Open Positions
Live leaderboard of the largest currently open position lines across all markets, ranked by position size. Public - no authentication required.
Responses are served from a live Redis projection with ETag support and short client cache. When the projection is still being rebuilt, callers may receive a BUILDING, STALE, or DEGRADED snapshot with Cache-Control: no-store and (for BUILDING) an empty data array - retry after a short delay.
curl --request GET \
--url https://api.limitless.exchange/leaderboard/pnl/unrealized/biggest-positionsimport requests
url = "https://api.limitless.exchange/leaderboard/pnl/unrealized/biggest-positions"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.limitless.exchange/leaderboard/pnl/unrealized/biggest-positions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.limitless.exchange/leaderboard/pnl/unrealized/biggest-positions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.limitless.exchange/leaderboard/pnl/unrealized/biggest-positions"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.limitless.exchange/leaderboard/pnl/unrealized/biggest-positions")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.limitless.exchange/leaderboard/pnl/unrealized/biggest-positions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"schemaVersion": 1,
"state": "BUILDING",
"scope": "BIGGEST_POSITIONS",
"limit": 25,
"data": [
{
"rank": 2,
"account": "<string>",
"username": "<string>",
"displayName": "<string>",
"pfpUrl": "<string>",
"positionSize": {
"raw": "9000000",
"formatted": "9",
"usd": "9"
},
"heldShares": {
"raw": "100000000",
"formatted": "100"
},
"toWin": {
"raw": "9000000",
"formatted": "9",
"usd": "9"
},
"mark": {
"raw": "<string>",
"formatted": "<string>",
"source": "CLOB_DEPTH_WEIGHTED_BID",
"asOf": "2023-11-07T05:31:56Z"
},
"unrealizedPnl": {
"raw": "9000000",
"formatted": "9",
"usd": "9"
},
"side": "YES",
"outcomeLabel": "<string>",
"market": {
"id": 123,
"slug": "<string>",
"address": "<string>",
"title": "<string>",
"category": "<string>"
}
}
],
"projectionVersion": "<string>",
"scopeVersion": "<string>",
"presentationVersion": "<string>",
"asOf": "2023-11-07T05:31:56Z",
"markAsOf": "2023-11-07T05:31:56Z",
"staleReason": "<string>",
"collateralToken": {
"id": 7,
"symbol": "USDC",
"address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"decimals": 6,
"priceOracleId": "usd-coin"
}
}metric=pnl to rank by live Unrealized PnL instead.
ETag; pass it back as If-None-Match to get 304 Not Modified while the projection is unchanged. ETag values are specific to the requested metric, marketPageId, and limit — validators do not cross variants.Ranking metric
The optionalmetric query parameter selects the ranking:
| Metric | Ranking | Notes |
|---|---|---|
position_size (default) | Largest open positions by position size in collateral. | Legacy behavior; omitting metric keeps existing clients unchanged. |
pnl | Open positions with the highest live Unrealized PnL. | Supports the optional marketPageId filter. |
metric so you can render the right column headers without tracking request state.
Filter by market page
Withmetric=pnl, pass marketPageId (a UUID) to scope the ranking to one public root navigation page, for example, a top-level category like Crypto or Sports. Get page ids from the navigation tree.
marketPageIdis accepted only together withmetric=pnl. Sending it with the default position-size metric returns400.- A
marketPageIdthat does not identify an active public root navigation page returns400. - The response echoes
marketPageId(nullwhen unfiltered).
curl "https://api.limitless.exchange/leaderboard/pnl/unrealized/biggest-positions?metric=pnl&marketPageId=1f0f7f3a-2c7e-4b9a-9c1d-3d2b6f4e8a11&limit=20"
Entry fields
Each entry identifies the trader and the market, and includes:heldShares,mark, andunrealizedPnl— the open position line and its live valuation.avgEntry— the position’s average entry price per share in collateral.market.routeSlug— the slug to use when building frontend market links; falls back tomarket.slugwhen no dedicated route exists.market.imageUrl— the market’s image, ornullwhen none is set.
State field
Every response carries astate. Treat it as the readiness signal:
| State | Meaning | How to handle |
|---|---|---|
READY | Complete, current snapshot. | Render data and cache per Cache-Control. |
STALE | Last complete snapshot is being replaced. | Render data; response is Cache-Control: no-store, refetch shortly. |
DEGRADED | Snapshot returned with a staleReason. | Render data; treat as best-effort and refetch shortly. |
BUILDING | No complete snapshot yet. | data is empty; retry after a short delay. |
unrealizedPnlProjectionChanged WebSocket event for the BIGGEST_POSITIONS scope and refetch this endpoint when a hint arrives. The same hint covers every metric and marketPageId variant of this endpoint.Query Parameters
Number of position lines to return (1-50).
1 <= x <= 50Response
Ranked biggest open positions
1 Readiness of the underlying projection. READY is a complete, current snapshot. BUILDING means the projection is being rebuilt and data is empty. STALE and DEGRADED return the last complete snapshot with Cache-Control: no-store; callers should retry shortly.
BUILDING, DEGRADED, READY, STALE BIGGEST_POSITIONS 1 <= x <= 50Show child attributes
Show child attributes
Show child attributes
Show child attributes