Skip to main content

GET Cash Balances

Cash-balance snapshots Tradovate​

Returns one {environment, userId, name, data} envelope for every linked identity. Each envelope's inner data array contains the raw Tradovate /cashBalance/list rows for that identity. For a single account's balance combined with its account record, /v1/api/tv/accounts/{account} is usually more convenient.

Endpoint​

GET /v1/api/tv/cashbalances

Headers​

NameValue
Content-Typeapplication/json
AuthorizationBearer <token>

Code examples​

import requests

token = 'my-secret-token'

url = "https://app.crosstrade.io/v1/api/tv/cashbalances"
headers = {
"Authorization": f"Bearer {token}",
"Content-Type": "application/json"
}

response = requests.get(url, headers=headers)
print(f"Response Code: {response.status_code}, Response Text: {response.text}")

Response​

{
"success": true,
"data": [
{
"environment": "demo",
"userId": "12345",
"name": "Demo Trader",
"data": [
{
"id": 45678,
"accountId": 123456,
"timestamp": "2026-07-15T14:32:05.184Z",
"tradeDate": { "year": 2026, "month": 7, "day": 15 },
"currencyId": 1,
"amount": 52340.18,
"realizedPnL": 340.18,
"weekRealizedPnL": 812.50
}
]
}
]
}

Each outer row identifies the linked identity queried. The inner data rows are raw Tradovate cash-balance records and may carry additional fields. These are balances, not a ledger of deposits, withdrawals, adjustments, or cash postings. A per-identity upstream failure appears inside that envelope's data as an error object without dropping successful identities.

Platform nuances​

Authentication uses the same bearer token as the rest of the CrossTrade API and requires a plan with API access (Pro) plus a linked Tradovate account. Unlinked users receive 403 tradovate_not_linked.

This endpoint is REST-only and has no WebSocket equivalent.