Skip to main content

State machine

The trading cut-off is the market’s tradingWindow.closesAt, or the end of the match for markets that trade in-play. Any status from PRE_MARKET through DISPUTED can also move to VOIDED. Pre-listing states (DRAFT, REJECTED, APPROVED, DEPLOYING) are internal: the public API never returns a market in them, and filtering by them is rejected with invalid_status. When a market reopens from PENDING_RESOLUTION, its book starts empty — resting orders were cancelled at the cut-off, so re-quote.

Status → trading effect

Terminal states — recovering value

Your shares sit in your vault, not in your EOA, so calling ConditionalTokens.redeemPositions from the EOA pays nothing. The vault owner can also redeem on-chain directly with Vault.redeemPositions(conditionId, indexSets) (binary) or Vault.redeemPositionsNegRisk(negRiskMarketId, questionIndex, amount) (neg-risk); the payout is credited to the vault either way. Once a market is in any terminal state, any open orders against it are cancelled by the platform (status CANCELLED) and locked balances refunded to available — you don’t need to cancel them yourself. See Settlement & Oracle for the end-to-end resolution timeline.

Subscribing to status changes

Subscribe on the public /ws/market gateway to the market_lifecycle channel with the market symbol:
Each status transition pushes a status_changed frame. The frame id is the symbol lower-cased; data.marketSymbol keeps the original case:
action and txHash are added when known and omitted otherwise. The same channel also carries market_disputed and market_resolved frames — see WebSocket messages. Market makers should treat any non-OPEN status as “pause all new orders” and wait for the transition back to OPEN.