Read-only API

Let a bot read your accounts: balance, open P&L, status, fills.

A read-only API key lets a program you choose — a signal provider's dashboard, a bot, your own script — read your accounts: the balance, the open profit and loss, the status, and the orders Tradeus placed with their fills. It can only read. A key is refused everywhere outside the read-only API, so it cannot place, change or cancel an order, change a setting, or create or revoke keys.

  1. 1
    Create a key
    In your profile, under API keys, give it a name — the program it is for — and create it. The key is shown once: copy it then. Tradeus keeps only a one-way hash of it and cannot show it again.
  2. 2
    Hand it to the program
    It sends the key as Authorization: Bearer tdk_… on every request. Never in a URL.
  3. 3
    Revoke it when you are done
    Revoking stops it on the program's next request. Make a new key for a new program rather than sharing one.

What it can read

GET /v1/accounts
Every account you have connected: id, broker account number, name, broker, firm, status (active, locked, disconnected, closed), balance, open P&L, today's P&L, open positions, the account lock, and when the broker was read (as_of).
GET /v1/accounts/:id
One of them.
GET /v1/accounts/:id/orders
The orders Tradeus sent to that account, newest first, with the fill price where the broker reported one. ?limit= up to 200, ?since= an ISO time.
GET /v1/signals/:id
What one alert did: the same per-account rows its webhook answer carried, and the orders it produced. The signalId is in every webhook answer.
A request and part of its answer
curl -H "Authorization: Bearer tdk_…" https://api.tradeus.app/v1/accounts

{
  "api_version": "1",
  "accounts": [
    { "id": "70276688", "account_number": "70276688", "name": "Apex 1", "broker": "Tradovate",
      "status": "active", "balance": 50412.5, "open_pnl": -37.5, "day_pnl": 412.5,
      "open_positions": 1, "lock": { "armed": true, "locked": false, "locked_until": null },
      "liquidation": null, "as_of": "2026-11-08T15:04:01.000Z" }
  ]
}

What it does not do

  • It does not ask your broker on every request. Each account is read at most once every 30 seconds for the API — as_of says when — and one key may make up to 60 requests a minute; past that it is answered 429 with Retry-After.
  • It does not know your firm's liquidation line. liquidation is there and null, so a program can be written against it now.
  • A fill price the broker did not report is null, never 0. Tradovate does not answer a market order with its price, so Tradeus reads it from Tradovate's own fills a few seconds later; an order placed a moment ago can show null until then.
  • day_pnl is null until one of your own screens has been opened that day — the day's starting point is taken there, on your own day.
  • A balance is only shown while the account's broker session is open; otherwise balance is null and last_known_balance carries the last one on record.
The API is on every plan and needs an active subscription, like the rest of the app. Fields are only ever added inside /v1, never renamed or removed; a change that would break a program is a new version.

Also in Strategies and signals