const res = await fetch('https://app.trdrs.co/api/partner/usage?month=2026-07', {
headers: { Authorization: `Bearer ${process.env.TRDRS_API_KEY}` },
})
const data = await res.json()curl 'https://app.trdrs.co/api/partner/usage?month=2026-07' \
-H "Authorization: Bearer $TRDRS_API_KEY"import requests
url = "https://app.trdrs.co/api/partner/usage"
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/usage",
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/usage"
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/usage")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.trdrs.co/api/partner/usage")
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{
"firm": "yourfirm",
"month": "2026-07",
"basis": "rithmic-system",
"activeAccounts": 128,
"priceCentsPerActiveAccount": 200,
"amountCents": 25600
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}Get monthly usage
Returns what your firm is billed for in one month, computed from the execution ledger: activeAccounts is the number of distinct accounts that took at least one real fill inside the month. An account that connected but never traded does not count, and simulated fills never count.
These are the same numbers the trdrs invoice is computed from, from the same query, so you can reconcile a bill without asking us for a breakdown.
Scope is your own firm and nothing else. The firm is resolved from your key, not from a parameter, so there is no argument that reaches another firm’s accounts.
month is YYYY-MM and defaults to the previous complete month, the one being invoiced. Naming the current month is allowed and answers month-to-date, which keeps moving until the month closes. Months are UTC.
basis says how the count was attributed. rithmic-system means accounts were matched to your system, the normal case. unattributable means this deployment cannot attribute accounts to your firm on your connector, so the count is 0 and amountCents is null rather than a figure that looks like a real zero bill.
const res = await fetch('https://app.trdrs.co/api/partner/usage?month=2026-07', {
headers: { Authorization: `Bearer ${process.env.TRDRS_API_KEY}` },
})
const data = await res.json()curl 'https://app.trdrs.co/api/partner/usage?month=2026-07' \
-H "Authorization: Bearer $TRDRS_API_KEY"import requests
url = "https://app.trdrs.co/api/partner/usage"
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/usage",
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/usage"
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/usage")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.trdrs.co/api/partner/usage")
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{
"firm": "yourfirm",
"month": "2026-07",
"basis": "rithmic-system",
"activeAccounts": 128,
"priceCentsPerActiveAccount": 200,
"amountCents": 25600
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}Authorizations
A partner-scoped API key (trdrs_sk_…), issued to a trdrs Connect partner firm and accepted only under /api/partner/. Same format as the firm (tenant) key, different scope: a firm API key is refused here, and this key is refused everywhere else.
Query Parameters
The month to report, YYYY-MM. Defaults to the previous complete month.
^\d{4}-\d{2}$Response
The firm’s usage for the month (PartnerUsageResponse)
PartnerUsageResponse. Money is in cents and integral; a null price or amount means unpriced, never a zero bill.
Your firm’s name, as trdrs holds it.
The month reported, YYYY-MM (UTC).
How accounts were attributed. unattributable means this connector cannot attribute per firm here, so the count is 0 by construction.
rithmic-system, unattributable Distinct accounts with at least one real fill in the month. Connected-but-idle does not count; simulated fills never count.
Your agreed per-active-account price in cents. Null when no price is set.
activeAccounts × price, in cents. Null when unpriced or unattributable, never coerced to 0.