const res = await fetch('https://app.trdrs.co/api/venues/{venueId}/accounts/{accountId}/analytics', {
headers: { Authorization: `Bearer ${process.env.TRDRS_VENUE_KEY}` },
})
const data = await res.json()curl 'https://app.trdrs.co/api/venues/{venueId}/accounts/{accountId}/analytics' \
-H "Authorization: Bearer $TRDRS_VENUE_KEY"import requests
url = "https://app.trdrs.co/api/venues/{venueId}/accounts/{accountId}/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/venues/{venueId}/accounts/{accountId}/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/venues/{venueId}/accounts/{accountId}/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/venues/{venueId}/accounts/{accountId}/analytics")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.trdrs.co/api/venues/{venueId}/accounts/{accountId}/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{
"accountId": "example-account",
"analytics": {
"netTradingPnl": 1250,
"tradingDays": 4,
"complete": true
}
}{
"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 an account's analytics
Reads one account’s performance in its current cycle: net trading P&L apart from balance operations, trading days, breaches and equity samples. Trading days are counted in the session of the stage rules the cycle is judged by, or the 17:00 America/Chicago roll when no stage judges it. For an account held at a provider the same read covers the provider’s records, with no equity history and no rules of yours. Required scope: account:read. Preview: served on the sandbox to every venue, and production availability is arranged when a venue qualifies. Trading API keys and pre-registration keys do not authorize these routes.
const res = await fetch('https://app.trdrs.co/api/venues/{venueId}/accounts/{accountId}/analytics', {
headers: { Authorization: `Bearer ${process.env.TRDRS_VENUE_KEY}` },
})
const data = await res.json()curl 'https://app.trdrs.co/api/venues/{venueId}/accounts/{accountId}/analytics' \
-H "Authorization: Bearer $TRDRS_VENUE_KEY"import requests
url = "https://app.trdrs.co/api/venues/{venueId}/accounts/{accountId}/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/venues/{venueId}/accounts/{accountId}/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/venues/{venueId}/accounts/{accountId}/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/venues/{venueId}/accounts/{accountId}/analytics")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.trdrs.co/api/venues/{venueId}/accounts/{accountId}/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{
"accountId": "example-account",
"analytics": {
"netTradingPnl": 1250,
"tradingDays": 4,
"complete": true
}
}{
"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/venues/{venueId} routes and, with trader:read or trader:trade, on the account, market and trading routes, reading the venue's own traders' accounts and routing their orders, each request naming its trader in x-trdrs-trader. A trdrs_sk_… key can't be used in its place. It reaches its venue's routes and its venue's own traders, and the owner manages keys from a signed-in session. Keep it on your server.
Query Parameters
To page back through equity samples, send the equityHistory.nextBefore of the previous response. Check the cycle id hasn't changed between pages.
Response
Success. The response is sent with Cache-Control: no-store, so don't cache it.
One account's current cycle. An account trdrs measures from its own risk decisions states in pnl.imported and tradingDays.imported what a cycle carried over when it moved from the older paper records. For an account held at a provider (book: provider), the current balance, equity, positions and orders are available where covered, while pnl.grossRealized, pnl.fees, pnl.netTrading, tradingDays.count and tradingDays.days stay null until the cycle's real start and full history are verified: the first provider snapshot is only a starting observation, completeness.trading is false with economic_cycle_unverified, equityHistory is null and risk.observedRules is empty. Never show a null as zero or use it for a stage.