const res = await fetch('https://app.trdrs.co/api/partner/venues/{venueId}/risk', {
headers: { Authorization: `Bearer ${process.env.TRDRS_VENUE_KEY}` },
})
const data = await res.json()curl 'https://app.trdrs.co/api/partner/venues/{venueId}/risk' \
-H "Authorization: Bearer $TRDRS_VENUE_KEY"import requests
url = "https://app.trdrs.co/api/partner/venues/{venueId}/risk"
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}/risk",
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}/risk"
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}/risk")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.trdrs.co/api/partner/venues/{venueId}/risk")
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{
"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",
"positionId": null,
"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 risk across the venue's accounts
Reads every customer account the venue issued on the paper book, up to 500, as one snapshot at a single instant, asOf: totals, exposure by instrument, positions, working orders, per-account state and equity history. Use it as your risk desk. Each position is valued at the price and contract size the account’s own risk valuation uses, and is unmarked until that valuation covers it; the hedging section also needs hedge:read, and reads as unavailable without it. 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 Partner keys do not authorize these routes.
const res = await fetch('https://app.trdrs.co/api/partner/venues/{venueId}/risk', {
headers: { Authorization: `Bearer ${process.env.TRDRS_VENUE_KEY}` },
})
const data = await res.json()curl 'https://app.trdrs.co/api/partner/venues/{venueId}/risk' \
-H "Authorization: Bearer $TRDRS_VENUE_KEY"import requests
url = "https://app.trdrs.co/api/partner/venues/{venueId}/risk"
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}/risk",
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}/risk"
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}/risk")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.trdrs.co/api/partner/venues/{venueId}/risk")
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{
"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",
"positionId": null,
"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 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, and it works only on the /api/partner/venues/{venueId} routes. A trdrs_sk_… key can't be used in its place. It never lets you act as a trader, sign in or manage keys. Keep it on your server.
Path Parameters
Query Parameters
How many minutes of history to return, from 60 to 10,080. The default is 1,440, one day.
60 <= x <= 10080Minutes between history points: 1, 5, 15 or 60. The default is 5. The window divided by the interval can't exceed 1,000 points.
1, 5, 15, 60 Response
Success. The response is sent with Cache-Control: no-store, so don't cache it.
Show child attributes
Show child attributes