curl --request GET \
--url https://api.centaur.io/v1/assets/stats \
--header 'x-api-key: <api-key>'import requests
url = "https://api.centaur.io/v1/assets/stats"
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.centaur.io/v1/assets/stats', 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.centaur.io/v1/assets/stats",
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.centaur.io/v1/assets/stats"
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.centaur.io/v1/assets/stats")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.centaur.io/v1/assets/stats")
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": {
"traderIds": [
123
],
"direction": "long",
"appliedTimeRange": {
"startTime": "2023-11-07T05:31:56Z",
"endTime": "2023-11-07T05:31:56Z"
}
},
"results": [
{
"assetId": 123,
"summary": {
"marketPositioning": {
"label": "long",
"longCount": 123,
"shortCount": 123,
"longPercentage": 123,
"shortPercentage": 123
},
"topTraderIds": {
"long": [
123
],
"short": [
123
]
}
}
}
],
"meta": {
"requestedAssetIds": [
123
],
"missingAssetIds": [
123
],
"serverTime": "2023-11-07T05:31:56Z",
"requestedAssetRefs": [
"<string>"
],
"missingAssetRefs": [
"<string>"
]
}
},
"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": "UNAUTHORIZED",
"message": "Unauthorized",
"details": "<unknown>"
},
"requestId": "c8e2c6e4-80dd-4ffc-9d66-4e31bf64c6b8"
}{
"success": false,
"error": {
"code": "AUTHENTICATION_UNAVAILABLE",
"message": "Authentication is temporarily unavailable"
},
"requestId": "c8e2c6e4-80dd-4ffc-9d66-4e31bf64c6b8"
}List asset stats
Returns aggregate asset stats for numeric assetIds or text assetRefs, including market positioning and top trader IDs. Metadata keeps numeric requested/missing IDs and adds requested/missing refs when assetRefs is supplied.
curl --request GET \
--url https://api.centaur.io/v1/assets/stats \
--header 'x-api-key: <api-key>'import requests
url = "https://api.centaur.io/v1/assets/stats"
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.centaur.io/v1/assets/stats', 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.centaur.io/v1/assets/stats",
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.centaur.io/v1/assets/stats"
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.centaur.io/v1/assets/stats")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.centaur.io/v1/assets/stats")
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": {
"traderIds": [
123
],
"direction": "long",
"appliedTimeRange": {
"startTime": "2023-11-07T05:31:56Z",
"endTime": "2023-11-07T05:31:56Z"
}
},
"results": [
{
"assetId": 123,
"summary": {
"marketPositioning": {
"label": "long",
"longCount": 123,
"shortCount": 123,
"longPercentage": 123,
"shortPercentage": 123
},
"topTraderIds": {
"long": [
123
],
"short": [
123
]
}
}
}
],
"meta": {
"requestedAssetIds": [
123
],
"missingAssetIds": [
123
],
"serverTime": "2023-11-07T05:31:56Z",
"requestedAssetRefs": [
"<string>"
],
"missingAssetRefs": [
"<string>"
]
}
},
"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": "UNAUTHORIZED",
"message": "Unauthorized",
"details": "<unknown>"
},
"requestId": "c8e2c6e4-80dd-4ffc-9d66-4e31bf64c6b8"
}{
"success": false,
"error": {
"code": "AUTHENTICATION_UNAVAILABLE",
"message": "Authentication is temporarily unavailable"
},
"requestId": "c8e2c6e4-80dd-4ffc-9d66-4e31bf64c6b8"
}Query Parameters
Assets to fetch stats for. Supply assetIds or assetRefs. Positive integer asset IDs only. REST accepts comma-separated values or repeated parameters. MCP accepts an array. Numeric strings become IDs. Maximum 200 non-empty supplied entries per field, including duplicates. Use assetRefs for slugs, tickers, or legacy symbols. Do not supply assetIds and assetRefs together, even if one is empty.
"1,34"
Assets to fetch stats for. Supply assetIds or assetRefs. Asset slugs, tickers, or legacy symbols as strings only. REST accepts comma-separated values or repeated parameters. MCP accepts a string array, e.g. ["AAPL", "crypto-btc", "700"]. Values are trimmed and matched case-insensitively, in order: slug, ticker, then legacy symbol. Numeric text such as "700" is a literal reference, never an ID. Maximum 200 non-empty supplied entries per field, including duplicates. Do not supply assetIds and assetRefs together, even if one is empty. Unknown references match nothing. Retry ambiguous references with a returned numeric ID in assetIds, omitting assetRefs. Find names with asset discovery search.
"AAPL,crypto-btc,700"
Positive integer trader IDs only. REST accepts comma-separated values or repeated parameters. MCP accepts an array. Numeric strings become IDs. Maximum 200 non-empty supplied entries per field, including duplicates. Use traderRefs for slugs. Do not supply traderIds and traderRefs together, even if one is empty.
"7,12"
Trader slugs as strings only. REST accepts comma-separated values or repeated parameters. MCP accepts a string array, e.g. ["alpha-trades", "700"]. Values are trimmed and matched case-insensitively. Numeric text such as "700" is a literal slug, never an ID. Maximum 200 non-empty supplied entries per field, including duplicates. Do not supply traderIds and traderRefs together, even if one is empty. Unknown references match nothing. Retry ambiguous references with a returned numeric ID in traderIds, omitting traderRefs. Find names or handles with trader directory search.
"alpha-trades"