const res = await fetch('https://app.trdrs.co/api/risk?provider=rithmic&account=PA-4821-07', {
headers: { Authorization: `Bearer ${process.env.TRDRS_API_KEY}` },
})
const data = await res.json()curl 'https://app.trdrs.co/api/risk?provider=rithmic&account=PA-4821-07' \
-H "Authorization: Bearer $TRDRS_API_KEY"import requests
url = "https://app.trdrs.co/api/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/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/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/risk")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.trdrs.co/api/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{
"settings": {
"provider": "rithmic",
"accountNumber": "PA-4821-07",
"dailyLossEnabled": false,
"dailyLossValue": null,
"weeklyLossEnabled": false,
"weeklyLossValue": null,
"dailyProfitEnabled": false,
"dailyProfitValue": null,
"weeklyProfitEnabled": false,
"weeklyProfitValue": null,
"eodCloseEnabled": false,
"eodCloseValue": null,
"lockSettingsWhenTradingLocked": false,
"updatedAt": 0
},
"lock": {
"provider": "rithmic",
"accountNumber": "PA-4821-07",
"tradingLocked": false,
"settingsLocked": false,
"lockReason": null,
"lockWindow": null,
"tradingUnlockAt": null,
"settingsUnlockAt": null,
"triggerPnl": null,
"flattenConfirmed": false,
"monitoring": "live",
"clearable": true,
"settings": {
"provider": "rithmic",
"accountNumber": "PA-4821-07",
"dailyLossEnabled": false,
"dailyLossValue": null,
"weeklyLossEnabled": false,
"weeklyLossValue": null,
"dailyProfitEnabled": false,
"dailyProfitValue": null,
"weeklyProfitEnabled": false,
"weeklyProfitValue": null,
"eodCloseEnabled": false,
"eodCloseValue": null,
"lockSettingsWhenTradingLocked": false,
"updatedAt": 0
}
},
"limits": {
"inForce": {
"version": "4f1c0e9a7b2d6e31a8c5f0d2b9e7a614",
"terms": [
{
"rule": "daily_loss",
"authority": "firm",
"amount": "2500"
}
],
"endOfDay": null,
"session": {
"timeZone": "America/Chicago",
"rolloverHour": 17
}
},
"next": null
}
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}Get the risk state (deprecated)
Deprecated: removed after 2026-10-30. A trader sets no risk controls of their own now, so every control reads off, and this returns the lock the account’s risk decisions hold and, on an account bound to a risk policy, the limits its venue set on it. While a venue’s limit is reached or its drawdown rule is breached, every order route answers 423 risk_locked. The same lock arrives live as the lock event on /api/account/stream, which replaces this route.
Required key: Trading API key. A Connect app’s backend can also send it with the app’s API key, and a venue’s backend with its Venue key, which carries trader:read or trader:trade, each naming one of its own traders in x-trdrs-trader: it then runs on that trader’s own accounts.
const res = await fetch('https://app.trdrs.co/api/risk?provider=rithmic&account=PA-4821-07', {
headers: { Authorization: `Bearer ${process.env.TRDRS_API_KEY}` },
})
const data = await res.json()curl 'https://app.trdrs.co/api/risk?provider=rithmic&account=PA-4821-07' \
-H "Authorization: Bearer $TRDRS_API_KEY"import requests
url = "https://app.trdrs.co/api/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/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/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/risk")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.trdrs.co/api/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{
"settings": {
"provider": "rithmic",
"accountNumber": "PA-4821-07",
"dailyLossEnabled": false,
"dailyLossValue": null,
"weeklyLossEnabled": false,
"weeklyLossValue": null,
"dailyProfitEnabled": false,
"dailyProfitValue": null,
"weeklyProfitEnabled": false,
"weeklyProfitValue": null,
"eodCloseEnabled": false,
"eodCloseValue": null,
"lockSettingsWhenTradingLocked": false,
"updatedAt": 0
},
"lock": {
"provider": "rithmic",
"accountNumber": "PA-4821-07",
"tradingLocked": false,
"settingsLocked": false,
"lockReason": null,
"lockWindow": null,
"tradingUnlockAt": null,
"settingsUnlockAt": null,
"triggerPnl": null,
"flattenConfirmed": false,
"monitoring": "live",
"clearable": true,
"settings": {
"provider": "rithmic",
"accountNumber": "PA-4821-07",
"dailyLossEnabled": false,
"dailyLossValue": null,
"weeklyLossEnabled": false,
"weeklyLossValue": null,
"dailyProfitEnabled": false,
"dailyProfitValue": null,
"weeklyProfitEnabled": false,
"weeklyProfitValue": null,
"eodCloseEnabled": false,
"eodCloseValue": null,
"lockSettingsWhenTradingLocked": false,
"updatedAt": 0
}
},
"limits": {
"inForce": {
"version": "4f1c0e9a7b2d6e31a8c5f0d2b9e7a614",
"terms": [
{
"rule": "daily_loss",
"authority": "firm",
"amount": "2500"
}
],
"endOfDay": null,
"session": {
"timeZone": "America/Chicago",
"rolloverHour": 17
}
},
"next": null
}
}{
"error": "invalid_instrument"
}{
"error": "invalid_instrument"
}Authorizations
The Trading API key (trdrs_sk_…), for market data, orders and account state on the accounts its owner holds. Use it server-to-server, and keep it on your server. Its scope is named trading in the API.
Query Parameters
The provider the account is at, such as rithmic, tastytrade or paper. Required, because a lock belongs to one account and never falls back to a default.
The account number, when the login holds more than one. It must be one of your own accounts, or the call is refused with 400. Omit it for the login's default account.
Response
Every control off, the lock state now and the account's limits.
The retired risk state: every control off, whether the account is locked now, and, on an account bound to a risk policy, every limit set on it by its venue.
Every control off.
Show child attributes
Show child attributes
Whether the account is locked now.
Show child attributes
Show child attributes
Every limit on an account bound to a risk policy, read-only. inForce is the version the account is held to now, and next is a version recorded since, which takes effect at the next session day. Null on an account no risk policy binds.
Show child attributes
Show child attributes