Get top traders over time
Your organization’s top traders by profit over a recent window, with each trader’s running total for every trading day, so you can show how the ranking developed.
Shape
traders lists the top traders by total profit over the window, highest first, with a display name and profile picture where the trader has set one. frames has one entry per trading day in order; values maps each trader’s userId to their running total up to and including that day. A trader’s profit is the sum over all of their accounts at your organization. Reverted trading days are excluded.
Results refresh at most every 15 minutes; daily profit is final after each trading day closes.
Filters
| Parameter | Type | Example | Description |
|---|---|---|---|
days | integer 7–90 | 30 | Calendar days to cover. Defaults to 30 |
limit | integer 3–20 | 12 | Number of traders. Defaults to 12 |
Error codes
| HTTP | Code | When |
|---|---|---|
| 400 | VALIDATION_ERROR | days or limit is out of range |
| 401 | UNAUTHORIZED | Missing or invalid API key |
| 403 | FORBIDDEN | Credentials do not belong to any organization |
| 500 | TOP_TRADERS_ERROR | Internal error |
Example
curl -X GET "https://api.hyperprop.com/platform/v1/organization/analytics/top-traders?days=30&limit=10" \
-H "X-API-Key: hp_live_your_key_here"
Authentication: send your organization API key in the X-API-Key header.
curl --request GET \
--url https://api.hyperprop.com/platform/v1/organization/analytics/top-traders \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.hyperprop.com/platform/v1/organization/analytics/top-traders"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.hyperprop.com/platform/v1/organization/analytics/top-traders', 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.hyperprop.com/platform/v1/organization/analytics/top-traders",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$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.hyperprop.com/platform/v1/organization/analytics/top-traders"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
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.hyperprop.com/platform/v1/organization/analytics/top-traders")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hyperprop.com/platform/v1/organization/analytics/top-traders")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"organizationId": "a6fcc0ce-eb28-4f43-b256-96a3144b0d34",
"organizationName": "Acme Trading",
"generatedAt": "2026-10-11T10:30:00.000Z",
"days": 30,
"traders": [
{
"userId": "7e7bbd25-d873-42f4-834f-bda2bf5c16c8",
"name": "Ana Ruiz",
"avatarUrl": "https://example.com/avatars/ana.png",
"totalPnl": 18420.5
}
],
"frames": [
{
"tradingDay": "2026-10-09",
"values": {
"7e7bbd25-d873-42f4-834f-bda2bf5c16c8": 12650
}
}
]
}
}{
"success": false,
"statusCode": 400,
"error": "Bad Request",
"message": "\"days\" must be less than or equal to 90",
"code": "VALIDATION_ERROR"
}{
"statusCode": 401,
"error": "Unauthorized",
"message": "Invalid or expired token",
"code": "UNAUTHORIZED"
}{
"statusCode": 403,
"error": "Forbidden",
"message": "You do not belong to any organization",
"code": "FORBIDDEN"
}{
"statusCode": 500,
"error": "Internal Server Error",
"message": "An error occurred fetching top traders",
"code": "TOP_TRADERS_ERROR"
}Authorizations
Organization API key. Format: "hp_live_{key}". Organization admins manage the key in the dashboard.
Query Parameters
Calendar days to cover (7–90). Defaults to 30.
7 <= x <= 90Number of top traders (3–20). Defaults to 12.
3 <= x <= 20curl --request GET \
--url https://api.hyperprop.com/platform/v1/organization/analytics/top-traders \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.hyperprop.com/platform/v1/organization/analytics/top-traders"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.hyperprop.com/platform/v1/organization/analytics/top-traders', 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.hyperprop.com/platform/v1/organization/analytics/top-traders",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$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.hyperprop.com/platform/v1/organization/analytics/top-traders"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
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.hyperprop.com/platform/v1/organization/analytics/top-traders")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hyperprop.com/platform/v1/organization/analytics/top-traders")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"organizationId": "a6fcc0ce-eb28-4f43-b256-96a3144b0d34",
"organizationName": "Acme Trading",
"generatedAt": "2026-10-11T10:30:00.000Z",
"days": 30,
"traders": [
{
"userId": "7e7bbd25-d873-42f4-834f-bda2bf5c16c8",
"name": "Ana Ruiz",
"avatarUrl": "https://example.com/avatars/ana.png",
"totalPnl": 18420.5
}
],
"frames": [
{
"tradingDay": "2026-10-09",
"values": {
"7e7bbd25-d873-42f4-834f-bda2bf5c16c8": 12650
}
}
]
}
}{
"success": false,
"statusCode": 400,
"error": "Bad Request",
"message": "\"days\" must be less than or equal to 90",
"code": "VALIDATION_ERROR"
}{
"statusCode": 401,
"error": "Unauthorized",
"message": "Invalid or expired token",
"code": "UNAUTHORIZED"
}{
"statusCode": 403,
"error": "Forbidden",
"message": "You do not belong to any organization",
"code": "FORBIDDEN"
}{
"statusCode": 500,
"error": "Internal Server Error",
"message": "An error occurred fetching top traders",
"code": "TOP_TRADERS_ERROR"
}