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

2 or more mutually exclusive outcomes. Settled through NegRiskAdapter
  • NegRiskCtfExchange.
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 and market-data questions on BTC, ETH and other crypto instruments — 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

Trading can be halted along the way (PAUSED, SUSPENDED, POSTPONED), and a market can be VOIDED from any status up to DISPUTED. See Market status for the full state machine.

Listing markets

The endpoint uses offset pagination: Increment offset by limit for each page. The response carries hasMore — true while a further page exists — but no total or nextOffset. With sort=activity or sort=shares on the default list, closed=true or status=OPEN, the order is recomputed about every 15 seconds, and pages read within that interval are usually cut from the same ordering, so a quick walk rarely repeats a market. A row’s tradeCount / totalShares can be a few seconds newer than its position. On any walk, a market that changes status between two pages drops out and moves the later rows up by one, so the row after it can be missed: de-duplicate by symbol.
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

Market types

marketType is the canonical bet type of a market — a closed enum, or null. It is the same value on GET /api/markets, on the markets[] embedded in GET /api/events, and on GET /api/me/positions. Three rules before you branch on it:
  • null is normal, not an error. Manual and legacy markets — including some older crypto Up/Down windows — carry no type. Treat null as “uncategorised”. To detect a crypto market, branch on the crypto block being non-null, never on marketType — see Crypto markets.
  • The set grows. New sports and bet types are added over time. Map unknown values to a generic “other” bucket rather than rejecting the market.
  • It is display and categorisation only. Settlement reads the provider criteria independently, so the type never changes how a market resolves.
The values, grouped by what they describe — the full set the API returns today: A market’s moneyline reuses the generic outcome type regardless of sport: a baseball, boxing or American-football winner market is MATCH_WINNER, not a sport-prefixed value. Only the sport-specific lines and props carry a prefix.

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). A neg-risk group is a set of sibling markets, each a YES/NO market on one outcome of the group. Each sibling carries its own yesTokenId / noTokenId once deployed, and the same ids appear in outcomes[] (outcomeIndex 0 = YES, 1 = NO). See Neg-risk markets. See Events overview for how markets group under events and how to filter the public catalog.

Individual market detail

Keyed by slug (since 2026-05-16) — the root market lookup takes the canonical slug. The list response above carries a slug field (canonical, URL-safe, derived from the parent event + title); pass that value here. A market symbol is still accepted as a fallback when no market has that slug, but the slug is the canonical key.The sub-resource paths (/orderbook, /trades, /ohlc, /traders below) resolve by symbol.
Same shape as the list item above. For the event metadata around the market (match, teamA, teamB, competition, tags, scheduledAt), call GET /api/events/{slug} with the event slug from the parent grouping (see Events overview).

Orderbook snapshot

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