Skip to main content
The SOAR WebSocket API pushes live data as it happens, so you do not have to poll the REST API for prices, order books, or the status of your own orders.
Staging is at wss://ws.staging.trysoar.com. Every frame in both directions is a JSON object with a type field.

Two kinds of data

The socket carries two classes of traffic, and they have different access rules.

Market data

Trades, order books, tickers and implied values. Public — no credential required. Connect and subscribe.

Your private stream

Your fills, orders and positions. Requires an API key with the read scope.
Market data carries no per-user information, which is why it needs no credential. The private stream is scoped to the account that owns the API key you authenticate with.

Getting started

1

Connect

Open a socket to wss://ws.trysoar.com. No headers or handshake parameters are required.
2

Subscribe to market data

Send a subscribe frame naming the markets you care about.
3

Authenticate, if you want your own activity

Send an authenticate frame carrying an API key with the read scope.
4

Keep the socket alive

Send a ping at least every 5 minutes.

Message types

Server frames arrive under one of these envelopes. The specific payload lives in data, discriminated by data.type. Client frames are subscribe, authenticate and ping. There is no unsubscribe frame — subscribe replaces your entire subscription set, so sending a smaller set is how you unsubscribe.

Conventions

  • Prices are integer cents from 1 to 99. A price of 62 means 62¢, or an implied 62% probability.
  • Sizes are whole shares.
  • ts is a Unix timestamp in nanoseconds, not milliseconds. Divide by 1,000,000 before handing it to a millisecond-based date constructor.
  • orderId is always a string. See User Fills.

Versioning

This is the frozen v1 contract. The message types documented under Market Data and Private Stream will not change shape without a new version. There is no version handshake — omitting a version means v1. A data.protocolVersion field on authenticate is reserved for a future revision. The machine-readable contract is served as markdown at ws.trysoar.com/v1/contract. The REST API is described by api.trysoar.com/v1/openapi.yaml.
Some frames you may observe on the wire — project-viewer-update, notification, and market-update frames whose data.type is post or stats — are first-party application traffic. They may change or disappear without notice. Do not build on them.