Skip to main content
Market data requires no credential. Connect and subscribe.
subscribe replaces your entire subscription set. It is not additive. Send every target you want on every call — a subscribe naming one market unsubscribes you from everything else.This is also how you unsubscribe: send the set without the targets you no longer want. There is no unsubscribe frame.
At most 200 targets per message. More than that is rejected with too_many_targets; split the subscription across sockets.

Targets

There are two target types, and they carry different data.

event-market

A single valuation market. Keyed by ticker or eventMarketId.

market

A company’s spot market. Keyed by symbol or marketId.

event-market

Order flow for one market — one rung of a ladder.
Delivers market-update frames where data.type is:

market

A company’s implied-value reading.
Delivers market-update frames where data.type is:
These are separate id spaces. Subscribing to a market’s event-market does not also get you that company’s implied-value updates, and vice versa. Subscribe to both if you need both.

Naming things

Name a market by its ticker and a company by its symbol. The UUID keys eventMarketId and marketId are also accepted and are not going away in v1 — prefer the handle in new code. Supply exactly one key per target. Sending both, or neither, fails to parse and the frame is rejected.

Tickers are not symbols

The two handles do not carry the same promise. If you are storing a reference for the long term, store marketId. Treat symbol as a lookup key you re-resolve, not as an identity you persist.

Ticker levels

event-market resolves market tickers only — the individual rung, not the ladder above it. The error tells you where to go:

Normalization

Handles are trimmed and case-folded, then matched literally against what we have on file. A handle containing anything outside letters, digits, . and - is rejected rather than cleaned up. …-26Q3-1,05T is an error, not a match on …-26Q3-105T — which would be a different strike entirely.

Resolution failures

Because subscribe replaces your whole set, a target that cannot be resolved rejects the whole frame with unknown_target and leaves your existing subscriptions untouched. A partial apply would leave you worse off than doing nothing.
An unrecognized eventMarketId or marketId is still accepted silently. This asymmetry is deliberate: handles are checked against a directory, UUIDs are not.

What does not resolve

Newly created markets

A market or company you just created is not resolvable by handle until the directory’s periodic refresh picks it up — within about a minute, not on a deadline. There is no push invalidation on create. A UUID key skips the directory entirely and resolves instantly.
If you list something over REST and subscribe to it right away, use the id for that first subscribe, or retry the handle once the refresh window has passed.

Units

  • Prices are integer cents, 1–99.
  • Sizes are whole shares.
  • ts is a Unix timestamp in nanoseconds.