Skip to main content

Markets

A Market is a binary YES/NO outcome within a pool. Each market represents a single proposition that either happens or does not. Users trade by buying or selling YES and NO shares in a market.


Market types​

Intotes supports two distinct market types, determined by the market_type field:

TypeValueDescription
Orderbook"orderbook"Peer-to-peer matching. Prices are set by traders placing limit orders. The matching engine pairs buy and sell orders at compatible prices.
LMSR"lmsr"Automated Market Maker. Prices are derived from the LMSR cost function based on outstanding quantities. Every trade is against the AMM β€” no counterparty needed.

Most markets on the platform use the LMSR type. Orderbook markets are used when deeper peer-to-peer price discovery is desired.


Key fields​

FieldTypeDescription
idintegerUnique identifier.
pool_idintegerThe pool this market belongs to.
namestringDisplay name (English), e.g., "Manchester City" or "Above $100k".
name_rustringDisplay name (Russian).
yes_probabilityfloat (0-1)Current probability of the YES outcome. Displayed on the UI and updated by workers/trades.
market_typestring"orderbook" or "lmsr".
volumeintegerTotal trading volume in cents (sum of all trade amounts).
pausedbooleanWhen true, trading is temporarily halted.
resolvedbooleanWhen true, the market has been settled.
winning_outcomestring | null"YES" or "NO" after resolution. Null while unresolved.
outcome_indexintegerPosition of this market within its pool (0-based). Used during resolution: YES wins only when pool.won_side == outcome_index.
image_urlstringOptional image URL for the market.
created_attimestampWhen the market was created.

Custom outcome names​

By default, a market's two outcomes are labeled "YES" and "NO". For clarity, markets can define custom names:

FieldDescriptionExample
yes_nameCustom label for the YES outcome."Above $100k"
no_nameCustom label for the NO outcome."Below $100k"
yes_name_ruRussian label for YES.
no_name_ruRussian label for NO.

These names are displayed in the trading UI instead of generic YES/NO when present.


LMSR-specific fields​

Markets with market_type: "lmsr" have additional fields that drive the AMM pricing:

FieldTypeDescription
binteger | nullLiquidity parameter in cents. Controls price sensitivity β€” higher b means prices move less per trade. Null for orderbook markets.
q_yesintegerCurrent outstanding quantity of YES shares (in cents).
q_nointegerCurrent outstanding quantity of NO shares (in cents).

The LMSR cost function uses these values to compute prices:

C(q) = b * ln(e^(q_yes/b) + e^(q_no/b))

The YES probability at any moment is:

P(YES) = e^(q_yes/b) / (e^(q_yes/b) + e^(q_no/b))

When a user buys YES shares, q_yes increases, pushing the YES price up and the NO price down.

See LMSR AMM for the full pricing model.


Polymarket sync​

Markets can be linked to Polymarket outcomes for real-time price synchronization:

FieldDescription
polymarket_token_idCLOB token ID of the corresponding Polymarket outcome. When set, a background worker syncs the YES probability via WebSocket.

Market states​

A market progresses through several states during its lifecycle:

Active​

  • paused: false, resolved: false
  • Trading is open. Users can place orders and execute trades.
  • Prices update with each trade (LMSR) or order match (orderbook).

Paused​

  • paused: true, resolved: false
  • Trading is temporarily halted (e.g., during a live sport event break or pending a result announcement).
  • Existing orders remain in the book but no new trades execute.

Resolved​

  • resolved: true, winning_outcome is set to "YES" or "NO"
  • The outcome is known. All positions are settled:
    • Winners receive 10,000 per share (in cents).
    • Losers receive 0.
  • No further trading is possible.

Markets within a pool​

A pool can contain multiple markets. For a sport event with a draw option (has_draw: true), the typical structure is:

Marketoutcome_indexExample name
Market 00"Team A wins"
Market 11"Draw"
Market 22"Team B wins"

When the pool resolves, pool.won_side is set to the index of the winning market. For that market, YES holders win. For all other markets in the pool, NO holders win.

For a simple binary pool (e.g., "Will ETH be above $3,500?"), there is a single market where YES means the proposition is true and NO means it is false.


Base probability​

Each market also tracks a base_yes_probability (not exposed in the API). This is the baseline probability around which the probability drift worker operates. The drift worker introduces small random movements to simulate market activity, but keeps yes_probability bounded around this baseline.