How markets work
Every market on the STX exchange is a binary outcome contract: it either resolves yes
or no. When a market resolves, every outstanding contract settles at either the market’s
maxPrice (typically $100, represented as 10000 in the API) or at $0. The market’s
description field is the definitive statement of what constitutes a “yes” result:
{ "description": "Contracts for this market settle into $100 if the Boston Red Sox beats the New York Yankees by at least 1.5 runs and $0 if they do not.", "marketId": "becf9bf9-e2ff-4b50-879b-46054ad5c69a", "shortTitle": "NYY @ BOS -1.5"}Buying a contract means you believe the outcome described will happen. Selling means you believe it won’t. You are always trading against other participants on the exchange — not against STX.
Prices
Section titled “Prices”All prices in the API are integer cents. A price of 4500 means $45.00. The spread
between the best available bid and offer represents the current market consensus.
The maxPrice field on a market (typically 10000) is the settlement value for a winning
contract. It is also the reference point for calculating sell-order liability (see
Understanding Positions).
Market Status
Section titled “Market Status”| Status | Meaning |
|---|---|
pre_open |
Market created but not yet accepting orders |
open |
Orders can be placed and matched |
suspended |
Temporarily halted — existing orders remain in the book |
closed |
No new orders; awaiting official result |
cancelled |
Market voided — all contracts refunded at cost |
archived |
Settled and removed from active listings |
Querying Markets
Section titled “Querying Markets”Use the marketInfos query to fetch current markets.
Because this endpoint requires no authentication and is heavily cached, you can call it
frequently — it is designed to handle high query rates.
A minimal query for an odds display or market screener:
query { marketInfos(input: { filterBy: LIVE_AND_UPCOMING }) { marketId shortTitle title sport competition status result participants { abbreviation name role } bids(limit: 1) { price quantity } offers(limit: 1, sort: ASC) { price quantity } }}The top bid and offer prices are sufficient to calculate the current implied probability for
either side of the market. For example, a best bid of 5701 and a best offer of 5950
implies the market is trading around 58–60 cents, or roughly a 58–60% probability of the
“yes” outcome.
Filtering by Category
Section titled “Filtering by Category”Markets are organised into a filter tree. Use the marketFilter input to query a specific
category:
query { marketInfos( input: { marketFilter: { path: ["NFL", "Games"], group: BASIC } } ) { marketId shortTitle }}There are two grouping schemes:
BASIC— reflects the current app category, and changes as events progress (e.g., a market moves from “Upcoming” to “Live”).TRADE— participant-centric; rarely changes once set.
Use marketFilterTreeV2 to retrieve the full
filter tree for your current markets.
Real-Time Updates
Section titled “Real-Time Updates”Querying marketInfos gives you a snapshot. To receive live price and status changes without
polling, subscribe to the market_info WebSocket channel,
which pushes only the changed fields whenever a market is updated.

