quotes and states — deliver per-symbol events and require you to subscribe with an explicit list of ticker symbols. The other two — alerts.in_force and alerts.simultaneous_breaks — are account-wide streams that deliver all events globally; no symbol list is needed. Each channel requires the ws:connect scope on your key plus the channel-specific scope listed below.
Your key must have both
ws:connect and the channel-specific scope to subscribe. If your key is missing a channel’s scope, that channel is silently excluded from the acknowledgment. Check the channels array in the subscribed response to confirm which subscriptions were accepted.quotes
Delivers real-time price updates as trades occur for each symbol you subscribe to.
| Property | Value |
|---|---|
| Required scope | prices:read |
| Symbol list required | Yes |
| Event type | quote |
Event payload
| Field | Type | Description |
|---|---|---|
symbol | string | Uppercase ticker symbol |
price | number | Trade price |
volume | integer | Cumulative volume at the time of this update |
event_ts | string | ISO 8601 timestamp of the originating market event |
Subscribe
Unsubscribe
You can unsubscribe from individual symbols without affecting others. Symbols you are still subscribed to continue delivering events.states
Delivers real-time TFC state and setup updates for each symbol you subscribe to. A state event fires when a symbol’s candle state changes on any tracked timeframe — for example, when a daily 2U break occurs or a weekly 1 completes.
| Property | Value |
|---|---|
| Required scope | states:read |
| Symbol list required | Yes |
| Event type | state |
Event payload
Thedata object contains the symbol’s current state snapshot at the time of the update. The exact fields reflect the same structure returned by the /states/{symbol} REST endpoint.
The full state payload includes TFC colors, candle IDs per timeframe, and active setup data. The structure matches the
/states/{symbol} REST endpoint response. Refer to the REST states reference for field-level documentation.Subscribe
Unsubscribe
alerts.in_force
Delivers a pushed event each time an in-force alert fires anywhere in the scan universe. This channel is account-wide — once subscribed, you receive every in-force alert without specifying symbols.
| Property | Value |
|---|---|
| Required scope | alerts:read |
| Symbol list required | No |
| Event type | alert.in_force |
Event payload
The fields in
data reflect the alert payload as produced by the StratAlerts alert engine. Field availability may vary by alert type and instrument. Always code defensively against missing keys.Subscribe
No symbol list is needed. A single subscription receives all in-force alerts across every scanned instrument.Unsubscribe
alerts.simultaneous_breaks
Delivers a pushed event each time a simultaneous break is detected — when multiple instruments break the same type of level in the same direction within a short time window. Like alerts.in_force, this is an account-wide channel with no symbol list.
| Property | Value |
|---|---|
| Required scope | alerts:read |
| Symbol list required | No |
| Event type | alert.simultaneous_break |
Event payload
The fields in
data reflect the simultaneous break payload as produced by the alert engine. Field availability may vary. Always code defensively against missing keys.Subscribe
Unsubscribe
Subscribing to multiple channels at once
You can subscribe to multiple channels in a single message. The server processes all topics and returns one acknowledgment listing every channel it accepted.Channel scope summary
| Channel | Scope required | Symbol list |
|---|---|---|
quotes | ws:connect + prices:read | Yes |
states | ws:connect + states:read | Yes |
alerts.in_force | ws:connect + alerts:read | No |
alerts.simultaneous_breaks | ws:connect + alerts:read | No |
Related
WebSocket overview
Connection setup, authentication, close codes, and reconnection strategy.
Authentication
How to obtain an API key and understand which scopes each key carries.