Skip to content

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.


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).


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

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.


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.


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.