Events reference
These are the frames the server sends you after you subscribe. Every
event is { "type": "<event>", "payload": { … } }. Group your handler by
type.
Orders
| Event | When |
|---|---|
order_create | A new order was accepted. |
order_update | An order was modified. |
order_cancel | An order was cancelled. |
order_rejected | An order was rejected (e.g. not enough margin). |
order_expired | A pending order hit its expiry. |
order_broker_received / order_broker_approval / order_trader_approval | Dealing-room approval steps. |
order_dealer_create / order_dealer_update / order_dealer_cancel | Dealer acted on the account. |
{ "type": "order_create", "payload": { "id": 260610013, "symbol_id": 26100001, "type": 1, "side": 0, "volume": 0.10, "order_limit_price": 1.07500 } }
Positions
| Event | When |
|---|---|
position_create | An order filled → a position opened. |
position_update | SL/TP changed, or break-even moved. |
position_pl | Floating P/L tick for an open position. |
position_closing / position_close | A position is closing / closed. |
position_rejected | A close/modify was rejected. |
position_close_by_hedge | Closed against an opposing position. |
{ "type": "position_create", "payload": { "id": 260610016, "symbol_id": 26100001, "side": 0, "volume": 0.10, "open_price": 1.08234, "stop_loss": null, "take_profit": null } }
{ "type": "position_pl", "payload": { "id": 260610016, "profit": 27.46 } }
Deals
| Event | When |
|---|---|
deal_create | A deal leg was booked (open or close). |
deal_update / deal_delete | Correction / cancellation. |
The close leg (direction: 1) carries the realized profit:
{ "type": "deal_create", "payload": { "id": 260610016, "direction": 1, "close_price": 1.06721, "profit": 6.58 } }
Account & money
| Event | When |
|---|---|
account_summary | Balance / equity / margin / margin-level tick. |
account_update | Account fields changed (leverage, status). |
money_change | Deposit / withdrawal / adjustment / credit. |
balance_correction | A balance correction was applied. |
event_liqudation_status | Margin call / stop-out reached. |
{ "type": "account_summary", "payload": { "balance": 1000547.09, "equity": 1010647.99, "floating_profit": 0.90, "used_margin": 9.0, "free_margin": 1010638.99, "margin_level": 11229422.11 } }
Market feed
| Event | When |
|---|---|
market_feed | A price tick for a subscribed symbol. |
new_quote | A new broker quote. |
{ "type": "market_feed", "payload": { "symbol_id": 26100001, "bid": 1.08018, "ask": 1.08038, "high": 1.08120, "low": 1.07880 } }
Sessions
| Event | When |
|---|---|
session_client_logout | Your session was killed (another login hit the limit, an admin disconnected you, or a trial expired) — the client should drop to the login screen. |
session_logout / session_logout_all | Logout broadcasts. |
Reports
| Event | When |
|---|---|
report_create | A report was queued. |
report_status | Generation finished / failed. |
report_delete | A report was removed. |
Errors
Error frames arrive as events too — branch on type:
bad_request, internal_server_error, not_found, forbidden,
unauthorized. The payload.message carries the reason.
NATS subjects (self-hosters)
Internally the server fans events out over NATS on subjects of the form:
websocket.accounts.{account_id}.* all events for one account
websocket.accounts.{account_id}.orders orders only
websocket.accounts.{account_id}.positions positions only
websocket.accounts.{account_id}.deals deals only
websocket.accounts.{account_id}.summary account summary ticks
websocket.accounts.* all accounts (admin)
You don't need these when using the WebSocket — they're documented for broker operators running their own NATS bus.