State machine
The trading cut-off is the market’stradingWindow.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:
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.