What’s New
Your trading day opens itself
The live-trading API stops being session-keyed: you trade an account and the day is resolved for you, history is read by date, and a dry-run opens the day. The old /accounts/{id}/sessions… paths are gone, and session_events can now be subscribed by account.
If you trade through the app, today changes nothing you can see — the desk already works this way. If you trade through the API, this one is for you, and it is a break: the session-keyed live paths are gone and the day you trade is now resolved for you.
You trade an account, not a session. POST /accounts/{id}/orders places an order. GET /accounts/{id}/positions, …/orders, …/transactions and …/history read your state. None of them names a day: a write resolves your account's open day, a read resolves its active day (the open day, else today's settled one), and an account with no day at all answers an empty list instead of an error.
There is no call that opens a trading day any more. POST /accounts/{id}/sessions is gone, along with the rest of the /accounts/{id}/sessions… family. Your day opens by itself, inside your first order of the day — and a dry-run opens it too, because the preview is priced by the live exchange, so the day has to exist first. Nothing else about a dry-run changed: it still persists no order. Ask GET /accounts/{id}/days/current afterwards to learn which day you got, or null when none is open.
History is keyed by date. GET /accounts/{id}/days lists every trading day, newest first, and /accounts/{id}/days/{date} — plus …/orders, …/positions, …/transactions, …/history under it — reads any one of them by YYYY-MM-DD. The date-keyed form also carries the writes, which is how you reach a day that is still open on an earlier date after a delayed settlement — a cancel is what goes through there, since a cancel is never gated on the clock; that day’s close has passed, so a revision on it answers 400 market_closed, and whatever is still working on it is resolved at its own close.
Over the WebSocket, subscribe by account. session_events now accepts {"action":"subscribe","channel":"session_events","account_id":"<uuid>"}, and it is the form a live client wants: at the moment you subscribe there may be no day to name, so the server enrolls the account's open day now and any day that opens later — including the one your own first order creates. Subscribe once when you pick the account and leave it. Bots keep the session_id form, since a bot runs several sessions per date.
An order write can now answer 202 Accepted. The five-second wait is only how long we wait for the exchange to answer — it is no longer how long your order is good for. A limit or a stop order, a replace and a cancel are now valid until the day’s close, so when the exchange has not confirmed one inside that wait you get 202 with the order exactly as we hold it: pending, placed, and still queued. Watch order_update for the rest. If the close arrives first the order ends rejected with rejection_reason: not_processed_before_close, so nothing is ever left working with nothing behind it. A market order keeps the old rule verbatim — it is worth nothing minutes later, so it is still given five seconds, still answers 503, and is still stamped rejected with deadline_exceeded.
Two things follow from that. Cancelling an order the exchange has not taken up yet resolves it immediately — we can prove the placement never left, so we cancel it ourselves, the exchange never sees it, and any queued revisions of it are cancelled with it. And today’s day will not open while an earlier day of the same account is still open and unsettled: that placement answers 409 previous_session_unsettled. Today’s opening balance is not final until that day settles, so starting on it would be starting on the wrong number. Retry later.
A few error codes moved with the vocabulary: session_closed is now day_closed, blocking an account archive or delete is now day_open, and a placement against an archived account or a broker engine answers 409 account_archived / 409 engine_not_available.
The full contract is in the live-trading reference, the day resource is on Accounts & trading days, and the walkthrough has been rewritten end to end. Practice sessions and the bot endpoints are unchanged.