Get per-interval (day or hour) trade volume broken down by exchange across a list of users, with gaps filled
curl --request POST \
--url https://perps-api.vooi.io/broker-statistics/users-volume/chart \
--header 'Content-Type: application/json' \
--header 'X-Broker-Key: <x-broker-key>' \
--data '
{
"usersList": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"startedFrom": 123
}
],
"exchanges": [],
"from": 1767225600000,
"resolution": "day",
"to": 1769903999000
}
'import requests
url = "https://perps-api.vooi.io/broker-statistics/users-volume/chart"
payload = {
"usersList": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"startedFrom": 123
}
],
"exchanges": [],
"from": 1767225600000,
"resolution": "day",
"to": 1769903999000
}
headers = {
"X-Broker-Key": "<x-broker-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-Broker-Key': '<x-broker-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
usersList: [{id: '3c90c3cc-0d44-4b50-8888-8dd25736052a', startedFrom: 123}],
exchanges: [],
from: 1767225600000,
resolution: 'day',
to: 1769903999000
})
};
fetch('https://perps-api.vooi.io/broker-statistics/users-volume/chart', 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://perps-api.vooi.io/broker-statistics/users-volume/chart",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'usersList' => [
[
'id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'startedFrom' => 123
]
],
'exchanges' => [
],
'from' => 1767225600000,
'resolution' => 'day',
'to' => 1769903999000
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-Broker-Key: <x-broker-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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://perps-api.vooi.io/broker-statistics/users-volume/chart"
payload := strings.NewReader("{\n \"usersList\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"startedFrom\": 123\n }\n ],\n \"exchanges\": [],\n \"from\": 1767225600000,\n \"resolution\": \"day\",\n \"to\": 1769903999000\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Broker-Key", "<x-broker-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://perps-api.vooi.io/broker-statistics/users-volume/chart")
.header("X-Broker-Key", "<x-broker-key>")
.header("Content-Type", "application/json")
.body("{\n \"usersList\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"startedFrom\": 123\n }\n ],\n \"exchanges\": [],\n \"from\": 1767225600000,\n \"resolution\": \"day\",\n \"to\": 1769903999000\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://perps-api.vooi.io/broker-statistics/users-volume/chart")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Broker-Key"] = '<x-broker-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"usersList\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"startedFrom\": 123\n }\n ],\n \"exchanges\": [],\n \"from\": 1767225600000,\n \"resolution\": \"day\",\n \"to\": 1769903999000\n}"
response = http.request(request)
puts response.read_body{
"items": [
{
"date": "2023-11-07T05:31:56Z",
"exchangesVolume": {
"aster": "<string>",
"binance": "<string>",
"bybit": "<string>",
"extended": "<string>",
"gate": "<string>",
"hyperliquid": "<string>",
"lighter": "<string>",
"mexc": "<string>",
"ondo": "<string>",
"robinhood": "<string>"
},
"totalVolume": "600"
}
]
}Broker Statistics
Get per-interval (day or hour) trade volume broken down by exchange across a list of users, with gaps filled
POST
/
broker-statistics
/
users-volume
/
chart
Get per-interval (day or hour) trade volume broken down by exchange across a list of users, with gaps filled
curl --request POST \
--url https://perps-api.vooi.io/broker-statistics/users-volume/chart \
--header 'Content-Type: application/json' \
--header 'X-Broker-Key: <x-broker-key>' \
--data '
{
"usersList": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"startedFrom": 123
}
],
"exchanges": [],
"from": 1767225600000,
"resolution": "day",
"to": 1769903999000
}
'import requests
url = "https://perps-api.vooi.io/broker-statistics/users-volume/chart"
payload = {
"usersList": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"startedFrom": 123
}
],
"exchanges": [],
"from": 1767225600000,
"resolution": "day",
"to": 1769903999000
}
headers = {
"X-Broker-Key": "<x-broker-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-Broker-Key': '<x-broker-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
usersList: [{id: '3c90c3cc-0d44-4b50-8888-8dd25736052a', startedFrom: 123}],
exchanges: [],
from: 1767225600000,
resolution: 'day',
to: 1769903999000
})
};
fetch('https://perps-api.vooi.io/broker-statistics/users-volume/chart', 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://perps-api.vooi.io/broker-statistics/users-volume/chart",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'usersList' => [
[
'id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'startedFrom' => 123
]
],
'exchanges' => [
],
'from' => 1767225600000,
'resolution' => 'day',
'to' => 1769903999000
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-Broker-Key: <x-broker-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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://perps-api.vooi.io/broker-statistics/users-volume/chart"
payload := strings.NewReader("{\n \"usersList\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"startedFrom\": 123\n }\n ],\n \"exchanges\": [],\n \"from\": 1767225600000,\n \"resolution\": \"day\",\n \"to\": 1769903999000\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Broker-Key", "<x-broker-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://perps-api.vooi.io/broker-statistics/users-volume/chart")
.header("X-Broker-Key", "<x-broker-key>")
.header("Content-Type", "application/json")
.body("{\n \"usersList\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"startedFrom\": 123\n }\n ],\n \"exchanges\": [],\n \"from\": 1767225600000,\n \"resolution\": \"day\",\n \"to\": 1769903999000\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://perps-api.vooi.io/broker-statistics/users-volume/chart")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Broker-Key"] = '<x-broker-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"usersList\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"startedFrom\": 123\n }\n ],\n \"exchanges\": [],\n \"from\": 1767225600000,\n \"resolution\": \"day\",\n \"to\": 1769903999000\n}"
response = http.request(request)
puts response.read_body{
"items": [
{
"date": "2023-11-07T05:31:56Z",
"exchangesVolume": {
"aster": "<string>",
"binance": "<string>",
"bybit": "<string>",
"extended": "<string>",
"gate": "<string>",
"hyperliquid": "<string>",
"lighter": "<string>",
"mexc": "<string>",
"ondo": "<string>",
"robinhood": "<string>"
},
"totalVolume": "600"
}
]
}Headers
Broker API key
Body
application/json
Users to compute stats for (1-100).
Required array length:
1 - 100 elementsShow child attributes
Show child attributes
Count trades only on these exchanges. When omitted, all supported exchanges are counted. Excluded exchanges are still present in the response with zero amounts.
Minimum array length:
1Supported perpetual exchange
Available options:
aster, binance, bybit, extended, gate, hyperliquid, lighter, mexc, ondo, robinhood Start of the period as unix timestamp in milliseconds (inclusive). Defaults to now - 30 days (1 day for hour resolution).
Required range:
x <= 9007199254740991Example:
1767225600000
Aggregation interval: day (UTC calendar day) or hour (UTC clock hour). from/to snap to interval boundaries. On series endpoints, items span one interval and hour limits the range to 7 days. Defaults to day.
Available options:
day, hour End of the period as unix timestamp in milliseconds (inclusive). Defaults to now.
Required range:
x <= 9007199254740991Example:
1769903999000
Response
200 - application/json
Show child attributes
Show child attributes