Skip to main content
GET
Fetch a single market by CTF conditionId

Path Parameters

id
string
required

CTF conditionId (0x-prefixed bytes32 hex).

Response

Full public market row. Returned by GET /api/markets (list items, which also carry tradeCount / totalShares) and GET /api/markets/{slug}, in markets[] by GET /api/events/{slug} and GET /api/events/featured, and by GET /api/markets/by-token/{id}, GET /api/markets/by-condition/{id} and GET /api/markets/disputable. probabilityChange is only on the Events endpoints. The GET /api/events list carries a slimmer row — see EventListMarketDto.

id
string<uuid>
required

Internal market UUID.

eventId
string<uuid>
required

UUID of the parent event.

eventSlug
string | null
required

Canonical slug of the parent event (the key for GET /api/events/{slug}).

Example:

"fifa-world-cup-2026-winner"

homeCountry
string | null
required

Home participant's country of the parent event, ISO-3166-1 alpha-2 (tennis: the player's flag). Null when unknown — normal for events without participants and for uneven feed coverage.

awayCountry
string | null
required

Away participant's country, ISO-3166-1 alpha-2 — see homeCountry.

tags
object[]
required

The parent event's active tags (slug, name), featured first. Always an array; empty when the event has none.

symbol
string
required

Public market symbol — the key for the market sub-resources (/api/markets/{symbol}/orderbook, /trades, /ohlc, /traders).

Example:

"FRIENDLI-LIT-AND-MW-20260930-LIT"

slug
string
required

Canonical market slug — the key for GET /api/markets/{slug}.

Example:

"friendli-lithuania-andorra-2026-09-30-lit"

title
string
required

Display title.

question
string | null
required

Precise yes/no question for this market row (on a neg-risk leg, the per-outcome question, e.g. "Will France win the 2026 World Cup?"). Null ⇒ fall back to title.

groupItemTitle
string | null
required

Per-outcome label inside a multi-market event (e.g. Lithuania, <20). Null on standalone markets.

groupItemSubtitle
string | null
required

Display-only second line under groupItemTitle (e.g. the artist of a song outcome). Never part of the outcome's identity.

groupItemImageUrl
string | null
required

Team or contestant image URL for this row (per outcome on neg-risk legs). Display-only; null ⇒ use your own flag or placeholder.

conditionId
string | null
required

CTF conditionId (0x-prefixed bytes32) of a two-outcome market. Null on markets with more than two outcomes — read outcomes[].conditionId there.

questionId
string | null
required

CTF questionId (0x-prefixed bytes32).

yesTokenId
string | null
required

ERC-1155 token id of the YES outcome (uint256 as a decimal string) on a two-outcome market. Null on markets with more than two outcomes — read outcomes[].tokenId.

noTokenId
string | null
required

ERC-1155 token id of the NO outcome (uint256 as a decimal string) on a two-outcome market. Null on markets with more than two outcomes — read outcomes[].tokenId.

outcomes
object[]
required

Per-outcome chain identifiers in outcome-index order: 2 entries on a two-outcome market, N on an N-outcome market. The primary source of token ids and condition ids. Empty [] on some legacy markets.

outcomeCount
integer
required

Number of outcomes (2 on a binary market).

Example:

2

outcomeLabels
string[]
required

Canonical outcome labels in index order — the market's immutable on-chain identity. Not overlaid with display labels, so outcomeLabels[i] can differ from outcomes[i].label. Never string-match on it; join by index.

Example:
sourceSelections
object[]
required

Machine-readable bindings between outcomes and the data provider's selections ("this side means Over 8.5"). Join to outcomes[] by outcomeIndex, never by label. Empty on manual and legacy markets.

outcomePrices
(string | null)[]
required

Cost to buy per outcome, in outcome-index order: the best ask when the book has an offer, else the last trade; null when neither exists. Decimal string in USDC. For the implied probability use chances.

Example:
chances
string[]
required

The mark (implied probability) per outcome, in outcome-index order: the book midpoint when the book is two-sided and the spread is at most $0.10, else the last trade. 1/outcomeCount per outcome before any trade. Never null.

Example:
status
enum<string>
required

Lifecycle status. The open view of GET /api/events returns PRE_MARKET, OPEN, PAUSED and POSTPONED; closed statuses (SUSPENDED … VOIDED) appear on the closed view (closed=true), on in-play or postponed events, and on the detail endpoints. Use tradable to decide whether orders are accepted.

Available options:
PRE_MARKET,
OPEN,
PAUSED,
POSTPONED,
SUSPENDED,
CLOSED,
PENDING_RESOLUTION,
DELAYED,
DISPUTED,
RESOLVED,
VOIDED
Example:

"OPEN"

tradable
boolean
required

Whether the market accepts new orders right now (derived from status; a PAUSED market is not tradable). Use this to enable order entry instead of switching on status.

tradingMode
enum<string>
required

Trading-mode code derived from status, for banners and order-entry affordances.

Available options:
open,
pre_market_post_only,
closed,
paused,
under_review,
awaiting_settlement,
resolved,
voided,
delayed
notTradableReason
enum<string> | null
required

Machine code for why trading is unavailable; null when tradable is true. Distinguishes, e.g., a routine operator pause (paused) from an escalated suspension (suspended).

Available options:
closed_at_cutoff,
paused,
suspended,
postponed,
awaiting_settlement,
under_review,
awaiting_data,
resolved,
voided,
null
currentReviewRound
integer
required

Current resolution review round (≥ 1).

Example:

1

feeTakerBps
integer | null
required

Per-fill taker fee rate in basis points (k × 10 000; the peak fee at P = 0.5 is feeTakerBps / 4 / 10 000). Null ⇒ the platform default rate applies.

Example:

600

executionDelayMs
integer | null
required

In-play taker execution delay in milliseconds. While it is in force, an aggressive order on a live market returns status=PENDING with an empty trades[] and the fills arrive asynchronously on the user WebSocket channel (user_fills). 0 or null = no delay.

Example:

0

liveTick
string | null
required

In-play price tick (decimal string). While the fixture is in play, order prices must be a multiple of it or the order is rejected with in_play_tick_violation. Null ⇒ the base 0.01 tick applies.

Example:

"0.05"

line
number | null
required

The market's numeric line (totals and handicaps) — do not parse it out of title. On handicaps this is the YES-side line. Null on line-less types (winners, BTTS) and on manual or legacy markets. Not the same field as prediction.line (a string).

Example:

8.5

lineGroup
object | null
required

The line family this market belongs to: markets of one event that differ only by their line (Total Runs 7.5 / 8.5 / 9.5, Run Line ±1.5, Total Maps 2.5 / 3.5, …). Group by lineGroup.id to render one card with a line strip, ordering families by lineGroup.order. Null for line-less types — and for a team-scoped line market whose binding names no single side, which still has a non-null line.

kickoff
string<date-time> | null
required

Real-world start time of the fixture this market is about. Null on non-fixture markets.

tradingWindow
object
required

Scheduled trading window: preMarketStartsAt, opensAt, closesAt.

lifecycle
object
required

Actual lifecycle transition timestamps (closedAt, pausedAt, resolvedAt, voidedAt); each is null until that transition happens.

resolutionWindowHours
integer | null
required

Resolution window in hours after kickoff.

Example:

2

resolution
object
required

Oracle proposal, dispute and final-outcome state. All fields are null until the oracle acts.

payoutNumerators
integer[] | null
required

Per-outcome payout numerators, set when the market resolves (e.g. [1, 0] = outcome 0 won). Null until then.

Example:
officialDataSource
string | null
required

Primary data provider the market settles from.

Example:

"lsports"

sourceMatchId
string | null
required

The provider's id of the fixture or question.

additionalSources
object[]
required

Secondary data sources for multi-source resolution (0–1 entries today). Empty on single-source markets.

resolutionCriteria
string | null
required

Plain-text settlement rules.

prediction
object | null
required

The vendor prediction question this market was listed on (politics, economics, climate, culture, financials, science): question text, rung, verbatim resolution rule and a best-effort threshold — the structured counterpart of resolutionCriteria, as crypto is for crypto markets. Descriptive only; settlement follows the vendor verdict. Null on every other market.

crypto
object | null
required

Machine-readable price rule of a crypto market (product type, direction, strike, instrument, window anchor) — the structured counterpart of resolutionCriteria. Null on every non-crypto market. Branch crypto handling on this block being non-null, not on marketType.

cryptoWindow
object | null
required

Up/Down window facts: bounds, the frozen open price (the price to beat), the settled close and the direction. Non-null only on short-crypto Up/Down window markets, where it comes with crypto.productType = "UP_DOWN_WINDOW".

negRiskEligible
boolean
required

True when this market is one leg of a neg-risk (mutually exclusive) group.

negRiskMarketId
string | null
required

Shared id (bytes32) of the neg-risk group — group sibling legs by it. Null on standalone markets.

negRiskQuestionIndex
integer | null
required

This leg's index (0 … N−1) within its neg-risk group. Null on standalone markets.

isNewMarketType
boolean
required

Reserved flag for the v2 market schema.

marketType
string | null
required

Canonical market type (MATCH_WINNER, BTTS, TOTAL_GOALS, MATCH_WINNER_AET, CRYPTO_PRICE_EVENT, …). Null is common and expected: automatically listed crypto Up/Down windows and manual or older markets have no type. New values are added over time — treat an unknown value as "other", never as an error. Detect crypto markets via crypto, not this field.

Example:

"MATCH_WINNER"

sport
string | null
required

Sport in the live-score vocabulary (soccer, tennis, baseball, politics, …) — the same word live.sport carries, but available before and after the game. For navigation use vertical.

Example:

"soccer"

vertical
string | null
required

This market's vertical (football, tennis, crypto, politics, …) — the value /api/events?vertical= filters on.

Example:

"football"

volume24h
string
required

Traded volume on this market over the last 24 h (USDC notional, decimal string); "0" when there were no trades.

Example:

"1234.50"

totalVolume
string
required

Lifetime traded volume on this market (USDC notional, decimal string); "0" when there were no trades.

Example:

"98765.00"

createdAt
string<date-time>
required

Creation time.

updatedAt
string<date-time>
required

Last update time.

live
object | null
required

Live clock + score frame while the fixture is in play. After the game a settled market can keep its final-score frame (provider: "final", inPlay: false). Null when there is no frame (pre-match, non-fixture market, no live feed). The key is always present.

probabilityChange
object | null

Signed per-outcome movement of chances over window, in percentage points. Returned by the Events endpoints; may be absent on other market surfaces. Null when the lookup degraded (best-effort — it never fails the request). A per-outcome change: null means no usable history, not zero.

tradeCount
integer

Lifetime trade count. Present only on GET /api/markets list items — absent on every Events endpoint and on market detail.

totalShares
string

Lifetime sum of trade quantities (decimal string). Present only on GET /api/markets list items — absent on every Events endpoint and on market detail.