Binary markets
YES / NO on a single question. Settled through
CTFExchange
against ConditionalTokens.Neg-risk markets
3+ mutually exclusive outcomes. Settled through
NegRiskAdapterPredictStreetNegRiskCtfExchange.
Lifecycle
Listing markets
Polymarket-equivalent fields
| Field | Meaning |
|---|---|
slug | Canonical URL-safe identifier — lowercased kebab-case derived from event.slug + groupItemTitle + title. Required path parameter for GET /api/markets/{slug} (see Breaking change below). symbol is the operator-facing identifier and is unchanged. |
groupItemTitle | Per-market label inside a multi-market event accordion ("Real Madrid", "Liverpool", "Draw"). Equal to title for single-market events. |
initialOutcomePrices | Per-outcome seed prices parallel to outcomeLabels. Polymarket calls this outcomePrices. |
feeTakerBps
The per-market quadratic taker-fee curve rate, in basis points
(1 bps = 0.01 %). Read this fresh from GET /api/markets/{slug}
each time you build an order digest — your EIP-712 feeRateBps
field MUST equal this value or the backend rejects the signed order
with bad_signature (see
EIP-712 signing).
Production fee on every listed market: 240 bps (2.4 %).
The admin.markets.fee_taker_bps column on every live market carries
240. Treat that as the working figure for any fee-cost projection
and partner integration test — there is no per-listing variation in
the production catalogue today.
The effective fee the user actually pays is not flat 2.4 % — the
quadratic curve fee = k × P × (1−P) × outcomeTokens brings the
effective rate down at the price extremes (≈ 0 % near 0/1, peak near
0.5). See the CTFExchange contract page
for the exact fee = feeRateBps × … formula split by BUY / SELL leg.
Maker fees are currently 0 across every market (taker pays).
Fees are immutable for the lifetime of a market. Listing operators
cannot change fee_taker_bps while a market is OPEN / resolving; if
a different rate is needed, they create a new market.
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
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
symbol. For live book updates, use the
orderbook WebSocket channel — polling is rate-limited and
latency-inferior.