GET Accounts Summary
- NT8
- Tradovate
Get list of all accounts NT8
Returns a consolidated snapshot of NT8 account balances, P&L, and positions.
Freshness contract
Each request makes an RPC call to the connected add-on, which reads NT8's in-memory account and position objects. The API does not serve a stored snapshot as a fallback when the add-on is disconnected.
The top-level timestamp and epoch describe when the add-on assembled the response. They are not the last broker-update time or a guarantee that balances and positions were refreshed recently. Check each account's connectionStatus; an active CrossTrade add-on connection does not establish that its broker connection is healthy. Account and position values are collected sequentially, so the response is not an atomic broker snapshot.
This endpoint currently has no per-field age, max_age option, or maximum staleness guarantee. Do not treat a recent response timestamp alone as proof that it is safe to trade. If your integration requires a bounded-age broker valuation, this endpoint does not currently provide that contract.
Endpoint
GET /v1/api/accounts/snapshot
Headers
| Name | Value |
|---|---|
| Content-Type | application/json |
| Authorization | Bearer <token> |
Code examples
- Python
- JavaScript
- cURL
import requests
url = "https://app.crosstrade.io/v1/api/accounts/snapshot"
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
try:
response = requests.get(url, headers=headers)
print(f"Response Code: {response.status_code}, Response Text: {response.text}")
except Exception as e:
print(f"An error occurred: {e}")
const url = "https://app.crosstrade.io/v1/api/accounts/snapshot";
fetch(url, {
method: "GET",
headers: {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
})
.then(res => res.json())
.then(data => console.log(data))
.catch(err => console.error(err));
curl -X GET "https://app.crosstrade.io/v1/api/accounts/snapshot" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json"
Response
- 200
- 400
{
"type": "snapshot",
"timestamp": "2025-03-10T07:53:13.0908809-07:00",
"epoch": 1741618393090,
"accounts": [
{
"account": {
"id": 15,
"name": "Sim110",
"type": "NinjaTrader.Cbi.Account",
"displayName": "Sim110",
"primaryUser": null,
"provider": "Simulator",
"denomination": "UsDollar",
"status": "Enabled",
"isAccountFlat": false,
"dailyLossLimit": 0.0,
"minCashValue": 0.0,
"maxOrderSize": 0,
"maxPositionSize": 0,
"connection": "NinjaTrader.Cbi.Connection",
"connectionStatus": "Connected",
"lastTransactionSum": 0.0,
"item": {
"buyingPower": 0.0,
"cashValue": 153772.375,
"commission": 0.0,
"dailyLossLimit": 0.0,
"dailyProfitTrigger": 0.0,
"excessInitialMargin": 0.0,
"excessIntradayMargin": 0.0,
"excessMaintenanceMargin": 0.0,
"excessPositionMargin": 0.0,
"fee": 0.0,
"grossRealizedProfitLoss": 0.0,
"initialMargin": 0.0,
"intradayMargin": 0.0,
"longOptionValue": 0.0,
"longStockValue": 0.0,
"lookAheadMaintenanceMargin": 0.0,
"maintenanceMargin": 0.0,
"netLiquidation": 154185.375,
"netLiquidationByCurrency": 0.0,
"positionMargin": 0.0,
"realizedProfitLoss": 0.0,
"shortOptionValue": 0.0,
"shortStockValue": 0.0,
"sodCashValue": 0.0,
"sodLiquidatingValue": 0.0,
"totalCashBalance": 0.0,
"trailingMaxDrawdown": 0.0,
"unrealizedProfitLoss": 412.99999999999727,
"weeklyLossLimit": 0.0,
"weeklyProfitLoss": 0.0,
"weeklyProfitTrigger": 0.0
}
},
"positions": [
{
"type": "NinjaTrader.Cbi.Position",
"account": "Sim110",
"instrument": "MGC 12-25",
"instrumentType": "Future",
"marketPosition": "Long",
"quantity": 1,
"averagePrice": 2916.8,
"marketPrice": 2958.1,
"unrealizedProfitLoss": 412.99999999999727
}
]
}
],
"success": true
}
{
"error": "Invalid request"
}
Platform nuances
The NT8 snapshot includes top-level type, timestamp, and epoch fields. Account details and
positions are grouped under accounts.
WebSocket API
This request can also be made over the WebSocket API.
{
"action": "rpc",
"id": "my-request-id",
"api": "GetAccountSummary",
"args": {}
}
Get list of all accounts Tradovate
Returns a consolidated snapshot of net liquidation, P&L, positions, and working orders for every linked Tradovate account. The request executes server-side against the Tradovate Web API and works while NinjaTrader is closed.
Endpoint
GET /v1/api/tv/accounts/snapshot
Headers
| Name | Value |
|---|---|
| Content-Type | application/json |
| Authorization | Bearer <token> |
Code examples
- Python
- JavaScript
- cURL
import requests
token = 'my-secret-token'
url = "https://app.crosstrade.io/v1/api/tv/accounts/snapshot"
headers = {
"Authorization": f"Bearer {token}"
}
try:
response = requests.get(url, headers=headers)
print(f"Response Code: {response.status_code}, Response Text: {response.text}")
except Exception as e:
print(f"An error occurred: {e}")
const token = 'my-secret-token';
const url = "https://app.crosstrade.io/v1/api/tv/accounts/snapshot";
fetch(url, {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
}
})
.then(res => res.json())
.then(data => console.log(data))
.catch(err => console.error(err));
TOKEN="my-secret-token"
curl -X GET "https://app.crosstrade.io/v1/api/tv/accounts/snapshot" \
-H "Authorization: Bearer $TOKEN"
Response
Unlike other Tradovate reads, this endpoint does not wrap its result in data. It returns the
raw snapshot object. Each account card includes name, accountId, environment, broker,
netLiq, openPnl, realizedPnl, weekRealizedPnl, positions, workingOrders, and
error. The top-level counts object summarizes accounts, positions, and working orders.
{
"success": true,
"accounts": [
{
"name": "DEMO12345678",
"accountId": "...",
"environment": "demo",
"broker": "tradovate",
"netLiq": null,
"openPnl": null,
"realizedPnl": null,
"weekRealizedPnl": null,
"positions": [],
"workingOrders": [],
"error": null
}
],
"asOf": "...",
"counts": {
"accounts": 1,
"positions": 0,
"workingOrders": 0
}
}
Platform nuances
- This is the exception to the normal Tradovate
{"success": true, "data": ...}read shape. - The snapshot covers all linked Tradovate accounts in one request.
workingOrdersincludesWorkingandSuspendedorders. Quantity, type, and price enrichment is capped at 20 OrderVersion lookups across the snapshot; failed or skipped lookups leave those fieldsnull. OrderVersion IDs are not returned.- Version-derived fields can reflect a subsequently rejected modification. Use the order lifecycle to reconcile command outcomes rather than treating these fields as confirmation.
- Per-position unrealized P&L is calculated by CrossTrade server-side from live market data. Tradovate market-data entitlement and broker
openPnLare not pricing fallbacks. openPnlis the sum of CrossTrade's own live-priced positions.netLiqis cash value plus that sum. If any open position lacks fresh pricing, both account-level fields arenullrather than presenting a partial or Tradovate-marked valuation.- The snapshot is cached for three seconds.
asOfis the time the snapshot was retrieved from Tradovate, so an identicalasOfon two calls means the second was served from cache. Poll at five seconds or slower to see fresh values on every call. - A
nullfigure means unusable, never zero. A per-identity read failure nulls that identity's balance fields and populates each affected account'serrorwith diagnostic text; treaterroras text for a human, not as something to parse. - The endpoint works while NinjaTrader is closed.
See the Tradovate API overview for the full field grammar, mutation safety guarantees, and error table.