// First-party cookie auth: this runs in a signed-in trdrs session, not under an API key.
const res = await fetch('https://app.trdrs.co/api/operator/venues/{venueId}/risk', {
credentials: 'include',
})
const data = await res.json()curl 'https://app.trdrs.co/api/operator/venues/{venueId}/risk' \
-b "session=$TRDRS_SESSION"import requests
url = "https://app.trdrs.co/api/operator/venues/{venueId}/risk"
headers = {"cookie": "session="}
response = requests.get(url, headers=headers)
print(response.text)<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.trdrs.co/api/operator/venues/{venueId}/risk",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_COOKIE => "session=",
]);
$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/operator/venues/{venueId}/risk"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("cookie", "session=")
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/operator/venues/{venueId}/risk")
.header("cookie", "session=")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.trdrs.co/api/operator/venues/{venueId}/risk")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["cookie"] = 'session='
response = http.request(request)
puts response.read_body{
"risk": {
"venueId": "00000000-0000-0000-0000-000000000001",
"environment": "sandbox",
"asOf": "2026-09-14T12:00:00.000Z",
"snapshot": {
"basis": "single_transaction",
"isolation": "repeatable_read"
},
"currency": "USD",
"currencies": [
"USD"
],
"scope": {
"listed": 2,
"included": 2,
"excluded": [],
"limit": 500,
"limitExceeded": false
},
"markPolicy": {
"maxAgeMs": 10000,
"notional": "quantity_times_mark_times_multiplier",
"valuationCurrency": "account_currency"
},
"totals": {
"balance": 99997,
"equity": 101497,
"unrealizedPnl": 1500,
"grossRealizedPnl": 0,
"fees": 3,
"netTradingPnl": -3,
"balanceAdjustments": 0
},
"counts": {
"openPositions": 2,
"workingOrders": 0,
"accountsWithPositions": 2,
"halted": 0,
"breaches": 0,
"incompleteAccounts": 0,
"unmarkedPositions": 0
},
"grossNotional": 903000,
"exposure": [
{
"instrument": "ES",
"mark": 6020,
"multiplier": 50,
"long": 2,
"short": 1,
"net": 1,
"gross": 3,
"accounts": 2,
"longNotional": 602000,
"shortNotional": 301000,
"netNotional": 301000,
"grossNotional": 903000,
"unrealizedPnl": 1500,
"dataStatus": "marked",
"hedges": []
}
],
"positions": [
{
"accountId": "acct:EVAL-7C21A9",
"accountNumber": "EVAL-7C21A9",
"email": "trader@example.com",
"groupId": "desk-a",
"instrument": "ES",
"side": "long",
"quantity": 2,
"averagePrice": 6000,
"mark": 6020,
"multiplier": 50,
"notional": 602000,
"unrealizedPnl": 2000,
"realizedPnl": 0,
"dataStatus": "marked"
}
],
"orders": [],
"accounts": [],
"hedging": {
"state": "unavailable",
"reason": "hedging_not_configured"
},
"history": {
"basis": "minute_bucket_samples",
"intervalMinutes": 5,
"windowMinutes": 1440,
"since": "2026-09-14T12:00:00.000Z",
"until": "2026-09-14T12:00:00.000Z",
"state": "unavailable",
"reason": "no_samples_in_window",
"points": []
},
"completeness": {
"complete": true,
"reasons": []
}
}
}{
"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 venue risk book
Preview: served on the sandbox to every venue; production availability is arranged when a venue qualifies. Trading API keys and Partner keys do not authorize these routes. Requires account:read through a verified operator session; the hedging section additionally needs hedge:read and otherwise reads unavailable. Every paper-book customer account the venue issued, up to 500, is read inside one repeatable-read transaction, so totals, exposure, positions and working orders describe one instant (asOf). Totals are stated only when every included account answered in one currency; a total a missing mark would change is null, never partial. Notional is quantity times a mark no older than markPolicy.maxAgeMs times the contract multiplier, in the account currency. Provider-held customer accounts keep their book at the provider and are listed under scope.excluded. Hedge targets are the hedge engine’s own figures at their calculatedAt and are listed beside the customer exposure for the identical instrument id, never netted into it. The history aggregates the equity samples written once per minute per account.
// First-party cookie auth: this runs in a signed-in trdrs session, not under an API key.
const res = await fetch('https://app.trdrs.co/api/operator/venues/{venueId}/risk', {
credentials: 'include',
})
const data = await res.json()curl 'https://app.trdrs.co/api/operator/venues/{venueId}/risk' \
-b "session=$TRDRS_SESSION"import requests
url = "https://app.trdrs.co/api/operator/venues/{venueId}/risk"
headers = {"cookie": "session="}
response = requests.get(url, headers=headers)
print(response.text)<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.trdrs.co/api/operator/venues/{venueId}/risk",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_COOKIE => "session=",
]);
$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/operator/venues/{venueId}/risk"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("cookie", "session=")
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/operator/venues/{venueId}/risk")
.header("cookie", "session=")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.trdrs.co/api/operator/venues/{venueId}/risk")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["cookie"] = 'session='
response = http.request(request)
puts response.read_body{
"risk": {
"venueId": "00000000-0000-0000-0000-000000000001",
"environment": "sandbox",
"asOf": "2026-09-14T12:00:00.000Z",
"snapshot": {
"basis": "single_transaction",
"isolation": "repeatable_read"
},
"currency": "USD",
"currencies": [
"USD"
],
"scope": {
"listed": 2,
"included": 2,
"excluded": [],
"limit": 500,
"limitExceeded": false
},
"markPolicy": {
"maxAgeMs": 10000,
"notional": "quantity_times_mark_times_multiplier",
"valuationCurrency": "account_currency"
},
"totals": {
"balance": 99997,
"equity": 101497,
"unrealizedPnl": 1500,
"grossRealizedPnl": 0,
"fees": 3,
"netTradingPnl": -3,
"balanceAdjustments": 0
},
"counts": {
"openPositions": 2,
"workingOrders": 0,
"accountsWithPositions": 2,
"halted": 0,
"breaches": 0,
"incompleteAccounts": 0,
"unmarkedPositions": 0
},
"grossNotional": 903000,
"exposure": [
{
"instrument": "ES",
"mark": 6020,
"multiplier": 50,
"long": 2,
"short": 1,
"net": 1,
"gross": 3,
"accounts": 2,
"longNotional": 602000,
"shortNotional": 301000,
"netNotional": 301000,
"grossNotional": 903000,
"unrealizedPnl": 1500,
"dataStatus": "marked",
"hedges": []
}
],
"positions": [
{
"accountId": "acct:EVAL-7C21A9",
"accountNumber": "EVAL-7C21A9",
"email": "trader@example.com",
"groupId": "desk-a",
"instrument": "ES",
"side": "long",
"quantity": 2,
"averagePrice": 6000,
"mark": 6020,
"multiplier": 50,
"notional": 602000,
"unrealizedPnl": 2000,
"realizedPnl": 0,
"dataStatus": "marked"
}
],
"orders": [],
"accounts": [],
"hedging": {
"state": "unavailable",
"reason": "hedging_not_configured"
},
"history": {
"basis": "minute_bucket_samples",
"intervalMinutes": 5,
"windowMinutes": 1440,
"since": "2026-09-14T12:00:00.000Z",
"until": "2026-09-14T12:00:00.000Z",
"state": "unavailable",
"reason": "no_samples_in_window",
"points": []
},
"completeness": {
"complete": true,
"reasons": []
}
}
}{
"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 signed session cookie of a logged-in trdrs user. First-party/browser only; an API key cannot reach a route secured this way.
Path Parameters
Query Parameters
0 <= x <= 23Minutes of history to return.
60 <= x <= 10080Minutes between points; window divided by interval may not exceed 1000.
1, 5, 15, 60 Response
Scoped result. Cache-Control: no-store.
Show child attributes
Show child attributes