Skip to main content
PredictStreet runs two market families, both resolved through the same oracle pipeline but with different on-chain settlement adapters.

Binary markets

YES / NO on a single question. Settled through CTFExchange against ConditionalTokens.

Neg-risk markets

3+ mutually exclusive outcomes. Settled through NegRiskAdapter
  • PredictStreetNegRiskCtfExchange.
Binary markets come in several verticals (sports, politics, crypto, …). Crypto markets are ordinary binary markets that carry two extra payload blocks describing the price rule they settle against:

Crypto markets

Price questions on BTC / ETH — the crypto rule block, the product catalog, and the underlying-price curve endpoint.

Up/Down windows

Short-dated Up / Down markets on a recurring window grid — the cryptoWindow block and series navigation.

Lifecycle

See Market status for the full state machine.

Listing markets

The endpoint uses offset pagination: Increment offset by limit for each page. A page containing fewer than limit markets is the last page. The response does not include total, hasMore, or nextOffset.
Response:
Crypto markets carry two additional blocks on the same shape — crypto (the machine-readable price rule) and cryptoWindow (Up/Down window facts). Both are null on every non-crypto market, so a client that ignores them is unaffected. See Crypto markets.

Polymarket-equivalent fields

On-chain identifiers

conditionId / questionId are the bytes32 hex values from ConditionalTokens. yesTokenId / noTokenId are the ERC-1155 position ids you sign over in your EIP-712 Order typed data. All four are null until the market’s deployment is confirmed (status PRE_MARKET or beyond). For multi-outcome (neg-risk) markets noTokenId is null — each outcome is its own YES token managed by the NegRiskAdapter. Pull the per-outcome token ids from the on-chain adapter via the conditionId. See Events overview for how markets group under events and how to filter the public catalog.

Individual market detail

Breaking change (2026-05-16) — root market lookup is now resolved by slug, not symbol. Sending a symbol returns 404 market_not_found. The list response above carries a slug field (canonical, URL-safe, derived from the parent event + title); pass that value here.The sub-resource paths (/orderbook, /trades, /ohlc, /traders below) still resolve by symbol — only the root market detail endpoint changed.
Same shape as the list item above. For the event metadata around the market (group, stage, teamA, teamB, tags, eventStartTime), call GET /api/events/{id} with the event id from the parent grouping (see the Events group in the API reference sidebar).

Orderbook snapshot

Sub-resource — still keyed by symbol. For live book updates, use the orderbook WebSocket channel — polling is rate-limited and latency-inferior.