I’m building a third-party trader verification platform that connects Tradovate accounts via OAuth to display verified P&L on a public leaderboard. OAuth authentication works fine — account/list, cashBalance/getCashBalanceSnapshot, and position/list all return 200 with valid data.
The problem: I cannot retrieve any historical trade data. Every endpoint returns empty arrays:
- fillPair/list → 200 OK,
- fill/list → 200 OK,
- order/list → 200 OK,
- cashBalanceLog/list → 200 OK,
- cashBalanceLog/deps?masterid={accountId} → 200 OK,
The account (live, accountType: Customer) has dozens of completed trades and 36 cash history entries visible in the Tradovate UI.
I contacted API Support and they confirmed:
- cashBalanceLog/deps should work with OAuth (Account Information: Read Only is sufficient)
- The Reporting API (rpt-live.tradovateapi.com/v1) exists as an alternative for historical data
- The recommended pattern is: Reporting API for initial historical load → WebSocket user/syncrequest for real-time updates going forward
However, they didn’t clarify whether the Reporting API is accessible with a standard OAuth token or requires Partner credentials.
Here’s what makes this confusing: I connected the exact same account to Kinfo (kinfo.com) today, and they immediately displayed every historical trade with P&L, entry/exit times, fill prices, and contracts. Kinfo’s OAuth consent screen requests the same scopes I do (Users, Orders, Accounting, Positions, ContractLibrary). Same account, same scopes, completely different result.
My questions to the community:
Has anyone successfully retrieved historical fills/fillPairs via OAuth? If so, which endpoint and what parameters? Am I missing something obvious?
Any insight would be greatly appreciated.