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.
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.
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).
# Discover slugs from the list endpoint, then fetch detail by slug.curl "$BASE/api/markets?status=OPEN" \ | jq -r '.markets[] | "\(.symbol)\t\(.slug)"'curl "$BASE/api/markets/real-madrid-vs-manchester-city-real-madrid-to-win-the-tie"