curl --request GET \
--url https://partners.centaur.io/api/v1/traders/rankings \
--header 'x-api-key: <api-key>'import requests
url = "https://partners.centaur.io/api/v1/traders/rankings"
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://partners.centaur.io/api/v1/traders/rankings', 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://partners.centaur.io/api/v1/traders/rankings",
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://partners.centaur.io/api/v1/traders/rankings"
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://partners.centaur.io/api/v1/traders/rankings")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://partners.centaur.io/api/v1/traders/rankings")
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": {
"filtersApplied": {
"metric": "event_count",
"assetIds": [
123
],
"direction": "long",
"timeBasedPerformanceWindow": "1D",
"minPositions": 123,
"appliedTimeRange": {
"startTime": "2023-11-07T05:31:56Z",
"endTime": "2023-11-07T05:31:56Z"
}
},
"results": [
{
"traderId": 123,
"rank": 123,
"metricValue": 123,
"eventCount": 123,
"positionCount": 123,
"directionBias": {
"label": "long",
"longCount": 123,
"shortCount": 123,
"longPercentage": 123,
"shortPercentage": 123
},
"timeBasedPerformance": {
"window": "1D",
"averageReturnPercentage": 123,
"medianReturnPercentage": 123,
"winRatePercentage": 123,
"sharpeRatio": 123,
"positionsCount": 123
}
}
],
"meta": {
"totalCandidates": 123
}
},
"requestId": "c8e2c6e4-80dd-4ffc-9d66-4e31bf64c6b8"
}{
"success": false,
"error": {
"code": "UNAUTHORIZED",
"message": "Unauthorized"
},
"requestId": "c8e2c6e4-80dd-4ffc-9d66-4e31bf64c6b8"
}{
"success": false,
"error": {
"code": "FORBIDDEN",
"message": "Forbidden"
},
"requestId": "c8e2c6e4-80dd-4ffc-9d66-4e31bf64c6b8"
}{
"success": false,
"error": {
"code": "PERFORMANCE_WINDOW_NOT_ELAPSED",
"message": "No position opened in the applied time range can have a completed 30D time-based evaluation yet. Set startTime to at least 30 days before now, or use a shorter timeBasedPerformanceWindow."
},
"requestId": "c8e2c6e4-80dd-4ffc-9d66-4e31bf64c6b8"
}{
"success": false,
"error": {
"code": "AUTHENTICATION_UNAVAILABLE",
"message": "Authentication is temporarily unavailable"
},
"requestId": "c8e2c6e4-80dd-4ffc-9d66-4e31bf64c6b8"
}Rank traders
Ranks traders across the platform by activity or performance over an explicit UTC time window, without requiring trader IDs. Returns a small bounded result ordered by the applied metric. Use this instead of paging raw events or messages for “most active” or “best performing” questions.
curl --request GET \
--url https://partners.centaur.io/api/v1/traders/rankings \
--header 'x-api-key: <api-key>'import requests
url = "https://partners.centaur.io/api/v1/traders/rankings"
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://partners.centaur.io/api/v1/traders/rankings', 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://partners.centaur.io/api/v1/traders/rankings",
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://partners.centaur.io/api/v1/traders/rankings"
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://partners.centaur.io/api/v1/traders/rankings")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://partners.centaur.io/api/v1/traders/rankings")
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": {
"filtersApplied": {
"metric": "event_count",
"assetIds": [
123
],
"direction": "long",
"timeBasedPerformanceWindow": "1D",
"minPositions": 123,
"appliedTimeRange": {
"startTime": "2023-11-07T05:31:56Z",
"endTime": "2023-11-07T05:31:56Z"
}
},
"results": [
{
"traderId": 123,
"rank": 123,
"metricValue": 123,
"eventCount": 123,
"positionCount": 123,
"directionBias": {
"label": "long",
"longCount": 123,
"shortCount": 123,
"longPercentage": 123,
"shortPercentage": 123
},
"timeBasedPerformance": {
"window": "1D",
"averageReturnPercentage": 123,
"medianReturnPercentage": 123,
"winRatePercentage": 123,
"sharpeRatio": 123,
"positionsCount": 123
}
}
],
"meta": {
"totalCandidates": 123
}
},
"requestId": "c8e2c6e4-80dd-4ffc-9d66-4e31bf64c6b8"
}{
"success": false,
"error": {
"code": "UNAUTHORIZED",
"message": "Unauthorized"
},
"requestId": "c8e2c6e4-80dd-4ffc-9d66-4e31bf64c6b8"
}{
"success": false,
"error": {
"code": "FORBIDDEN",
"message": "Forbidden"
},
"requestId": "c8e2c6e4-80dd-4ffc-9d66-4e31bf64c6b8"
}{
"success": false,
"error": {
"code": "PERFORMANCE_WINDOW_NOT_ELAPSED",
"message": "No position opened in the applied time range can have a completed 30D time-based evaluation yet. Set startTime to at least 30 days before now, or use a shorter timeBasedPerformanceWindow."
},
"requestId": "c8e2c6e4-80dd-4ffc-9d66-4e31bf64c6b8"
}{
"success": false,
"error": {
"code": "AUTHENTICATION_UNAVAILABLE",
"message": "Authentication is temporarily unavailable"
},
"requestId": "c8e2c6e4-80dd-4ffc-9d66-4e31bf64c6b8"
}Authorizations
API key issued by Centaur.
Query Parameters
Ranking metric. Activity metrics: event_count (default) and position_count. Performance metrics: win_rate, avg_return, median_return, and sharpe_ratio.
event_count, position_count, win_rate, avg_return, median_return, sharpe_ratio Restrict the ranking to traders active in specific asset IDs.
Filter to a single direction: long or short.
long, short Time-based performance evaluation window for performance metrics. Defaults to 7D. Ignored for activity metrics. Positions are evaluated this long after they open, so startTime must be at least this far in the past or the request is rejected.
1D, 7D, 30D Minimum evaluated positions required for performance-metric rankings. Defaults to 3; pass 0 to include all traders. Ignored for activity metrics.
x >= 0Inclusive ISO-8601 lower time bound on position open time. Defaults to 7 days before the applied endTime. For performance metrics it must be at least the evaluation window before now.
Inclusive ISO-8601 upper time bound. Defaults to the current server time.
Maximum number of ranked traders to return. Defaults to 10, maximum 50.
1 <= x <= 50