const res = await fetch('https://app.trdrs.co/api/partner/venues/{venueId}/usage/traders', {
headers: { Authorization: `Bearer ${process.env.TRDRS_VENUE_KEY}` },
})
const data = await res.json()curl 'https://app.trdrs.co/api/partner/venues/{venueId}/usage/traders' \
-H "Authorization: Bearer $TRDRS_VENUE_KEY"import requests
url = "https://app.trdrs.co/api/partner/venues/{venueId}/usage/traders"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.trdrs.co/api/partner/venues/{venueId}/usage/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 => [
"Authorization: Bearer <token>"
],
]);
$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://app.trdrs.co/api/partner/venues/{venueId}/usage/traders"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://app.trdrs.co/api/partner/venues/{venueId}/usage/traders")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.trdrs.co/api/partner/venues/{venueId}/usage/traders")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"month": "2026-11",
"frozen": true,
"invoiceState": "draft",
"currency": "USD",
"basis": "connect-traders",
"activeTraders": 1,
"priceCentsPerActiveTrader": 200,
"amountCents": 200,
"traders": [
{
"trader": "trader-8841",
"fills": 61,
"accounts": [
{
"accountId": "3f9c2a9b8e7d6c5b4a39281706f5e4d3",
"kind": "paper",
"provider": "paper",
"accountNumber": "DEMO-7C21A9",
"environment": null,
"fills": 40,
"firstFillAt": "2026-11-03T14:31:07.000Z",
"lastFillAt": "2026-11-27T19:58:40.000Z"
},
{
"accountId": "a1b2c3d4e5f60718293a4b5c6d7e8f90",
"kind": "connected",
"provider": "rithmic",
"accountNumber": "APEX-123456",
"environment": "prod",
"fills": 21,
"firstFillAt": "2026-11-05T15:02:11.000Z",
"lastFillAt": "2026-11-20T18:44:09.000Z"
}
]
}
]
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}Read the traders your Connect made active
Lists the traders who filled an order through your Connect in one month, each once, by your own id for them, with every account behind them: their Paper account and each account they connected. A Connect client is billed per active trader, however many accounts each one trades, under signed terms from the month they start. Where the month is invoiced with them, frozen is true and the list is the invoice’s own; otherwise it is counted now. Money is in US cents. A null price or amount means no signed terms price the month, never a zero bill, and an exempt or unattributable month carries no count at all. Required scope: trader:read. Preview: served on the sandbox to every venue, and production availability is arranged when a venue qualifies. Trading API keys and Partner keys do not authorize these routes.
const res = await fetch('https://app.trdrs.co/api/partner/venues/{venueId}/usage/traders', {
headers: { Authorization: `Bearer ${process.env.TRDRS_VENUE_KEY}` },
})
const data = await res.json()curl 'https://app.trdrs.co/api/partner/venues/{venueId}/usage/traders' \
-H "Authorization: Bearer $TRDRS_VENUE_KEY"import requests
url = "https://app.trdrs.co/api/partner/venues/{venueId}/usage/traders"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.trdrs.co/api/partner/venues/{venueId}/usage/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 => [
"Authorization: Bearer <token>"
],
]);
$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://app.trdrs.co/api/partner/venues/{venueId}/usage/traders"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://app.trdrs.co/api/partner/venues/{venueId}/usage/traders")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.trdrs.co/api/partner/venues/{venueId}/usage/traders")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"month": "2026-11",
"frozen": true,
"invoiceState": "draft",
"currency": "USD",
"basis": "connect-traders",
"activeTraders": 1,
"priceCentsPerActiveTrader": 200,
"amountCents": 200,
"traders": [
{
"trader": "trader-8841",
"fills": 61,
"accounts": [
{
"accountId": "3f9c2a9b8e7d6c5b4a39281706f5e4d3",
"kind": "paper",
"provider": "paper",
"accountNumber": "DEMO-7C21A9",
"environment": null,
"fills": 40,
"firstFillAt": "2026-11-03T14:31:07.000Z",
"lastFillAt": "2026-11-27T19:58:40.000Z"
},
{
"accountId": "a1b2c3d4e5f60718293a4b5c6d7e8f90",
"kind": "connected",
"provider": "rithmic",
"accountNumber": "APEX-123456",
"environment": "prod",
"fills": 21,
"firstFillAt": "2026-11-05T15:02:11.000Z",
"lastFillAt": "2026-11-20T18:44:09.000Z"
}
]
}
]
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}Authorizations
The Venue key (trdrs_vk_sandbox_… or trdrs_vk_production_…), in preview. It belongs to one venue in one environment and carries the scopes it was created with. The venue's verified owner creates it while signed in. It works on the /api/partner/venues/{venueId} routes and, with trader:read or trader:trade, on the account, market and trading routes for the venue's own traders, each request naming its trader in x-trdrs-trader. A trdrs_sk_… key can't be used in its place. It never signs in, manages keys or reaches a trdrs user's accounts. Keep it on your server.
Path Parameters
Query Parameters
The month, as YYYY-MM in UTC. Leave it out for the previous complete calendar month, the one being invoiced. The current month counts what has filled so far.
^\d{4}-\d{2}$Response
Success. The response is sent with Cache-Control: no-store, so don't cache it.
connect-traders, exempt, unattributable Why the month carries no count: internal_venue or missing_trade_dates. Only on an exempt or unattributable month.
Show child attributes
Show child attributes