const res = await fetch('https://app.trdrs.co/api/partner/accounts/analytics?account=EVAL-7C21A9', {
headers: { Authorization: `Bearer ${process.env.TRDRS_API_KEY}` },
})
const data = await res.json()curl 'https://app.trdrs.co/api/partner/accounts/analytics?account=EVAL-7C21A9' \
-H "Authorization: Bearer $TRDRS_API_KEY"import requests
url = "https://app.trdrs.co/api/partner/accounts/analytics"
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/accounts/analytics",
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/accounts/analytics"
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/accounts/analytics")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.trdrs.co/api/partner/accounts/analytics")
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{
"accountNumber": "EVAL-7C21A9",
"currency": "USD",
"asOf": "2026-09-12T15:00:00.000Z",
"snapshotId": "snapshot-hash",
"status": "active",
"cycle": {
"id": "cycle-hash",
"startedAt": "2026-09-10T00:00:00.000Z",
"resetAt": null,
"priorTradingHistoryAvailable": false,
"resetBoundaries": []
},
"pnl": {
"grossRealized": 3010,
"fees": 10,
"netTrading": 3000,
"balanceAdjustments": 500,
"balance": 53500,
"unrealized": 0,
"equity": 53500
},
"tradingDays": {
"count": 2,
"session": {
"timeZone": "America/Chicago",
"rolloverHour": 17,
"qualifyingActivity": "any_fill",
"label": "session_end_date",
"weekendsExcluded": false
},
"days": [
{
"day": "2026-09-11",
"fills": 2
},
{
"day": "2026-09-12",
"fills": 2
}
]
},
"closedTrades": [],
"openPositions": [],
"openOrders": [],
"equityHistory": {
"basis": "forward_samples",
"intervalSeconds": 60,
"continuous": false,
"points": [
{
"at": "2026-09-12T14:59:00.000Z",
"balance": 53500,
"equity": 53500
}
],
"limit": 1000,
"mayHaveOlderSamples": false,
"nextBefore": null
},
"risk": {
"breaches": [],
"halted": true,
"lockReason": "firm_halt"
},
"completeness": {
"trading": true,
"reasons": [],
"risk": true,
"riskCoverageStartedAt": "2026-09-10T00:00:00.000Z",
"currentEquity": true,
"equityHistory": "sampled_not_continuous",
"unresolvedCommands": 0
}
}Read firm account analytics
One consistent snapshot of an account issued by the authenticated firm. Trading P&L is average-cost realized fill P&L minus all fill fees, excluding balance operations. Current cycle only; resets delete prior fills. Equity history contains up to 1000 forward minute samples, newest first, with null for unavailable valuations. Source walks are capped at 50000 rows; any cap marks trading incomplete. Never infer zero from unavailable data. See the firm analytics guide for coverage and session semantics.
const res = await fetch('https://app.trdrs.co/api/partner/accounts/analytics?account=EVAL-7C21A9', {
headers: { Authorization: `Bearer ${process.env.TRDRS_API_KEY}` },
})
const data = await res.json()curl 'https://app.trdrs.co/api/partner/accounts/analytics?account=EVAL-7C21A9' \
-H "Authorization: Bearer $TRDRS_API_KEY"import requests
url = "https://app.trdrs.co/api/partner/accounts/analytics"
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/accounts/analytics",
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/accounts/analytics"
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/accounts/analytics")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.trdrs.co/api/partner/accounts/analytics")
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{
"accountNumber": "EVAL-7C21A9",
"currency": "USD",
"asOf": "2026-09-12T15:00:00.000Z",
"snapshotId": "snapshot-hash",
"status": "active",
"cycle": {
"id": "cycle-hash",
"startedAt": "2026-09-10T00:00:00.000Z",
"resetAt": null,
"priorTradingHistoryAvailable": false,
"resetBoundaries": []
},
"pnl": {
"grossRealized": 3010,
"fees": 10,
"netTrading": 3000,
"balanceAdjustments": 500,
"balance": 53500,
"unrealized": 0,
"equity": 53500
},
"tradingDays": {
"count": 2,
"session": {
"timeZone": "America/Chicago",
"rolloverHour": 17,
"qualifyingActivity": "any_fill",
"label": "session_end_date",
"weekendsExcluded": false
},
"days": [
{
"day": "2026-09-11",
"fills": 2
},
{
"day": "2026-09-12",
"fills": 2
}
]
},
"closedTrades": [],
"openPositions": [],
"openOrders": [],
"equityHistory": {
"basis": "forward_samples",
"intervalSeconds": 60,
"continuous": false,
"points": [
{
"at": "2026-09-12T14:59:00.000Z",
"balance": 53500,
"equity": 53500
}
],
"limit": 1000,
"mayHaveOlderSamples": false,
"nextBefore": null
},
"risk": {
"breaches": [],
"halted": true,
"lockReason": "firm_halt"
},
"completeness": {
"trading": true,
"reasons": [],
"risk": true,
"riskCoverageStartedAt": "2026-09-10T00:00:00.000Z",
"currentEquity": true,
"equityHistory": "sampled_not_continuous",
"unresolvedCommands": 0
}
}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
Account issued by your firm.
For analytics history pagination, use equityHistory.nextBefore to retrieve the next older page. Verify cycle.id has not changed.
IANA timezone for qualifying fill days. Keep fixed throughout a stage.
Local session roll hour. Midnight uses calendar dates; other rolls label the session by its ending date. DST-aware.
0 <= x <= 23Response
Snapshot; eligible=false is a successful check with unmet conditions.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes