Skip to main content

Managing Pools

Pools are the intermediate layer between events and markets. Each pool groups a set of outcome markets and defines their trading parameters. Markets are automatically generated from pool metadata -- you never create markets directly.

Adding a Pool to an Event​

POST /api/v1/events/{id}/pools

Adds a new pool to an existing event. The pool's market_names and market_probabilities arrays determine how many markets are created and their initial pricing.

Request Body​

FieldTypeRequiredDescription
market_namesstring[]YesNames for each outcome (e.g., ["Yes", "No"] or ["Team A", "Draw", "Team B"])
market_probabilitiesfloat[]YesInitial probabilities for each market. Must sum to 1.0
lmsr_b_kopecksintegerYesLMSR liquidity parameter in kopecks. Controls AMM depth
volume_min_kopecksintegerNoMinimum allowed trade size in kopecks
volume_max_kopecksintegerNoMaximum allowed trade size in kopecks
polymarket_token_idsstring[]NoPolymarket token IDs for automatic odds syncing
asset_symbolstringNoTracked cryptocurrency symbol (e.g., BTC, ETH, SOL)
asset_base_pricefloatNoBase price of the tracked asset at pool creation

Example​

curl -X POST https://your-domain.com/api/v1/events/123/pools \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"market_names": ["Above $4,000", "Below $4,000"],
"market_probabilities": [0.60, 0.40],
"lmsr_b_kopecks": 300000,
"volume_min_kopecks": 5000,
"volume_max_kopecks": 5000000,
"asset_symbol": "ETH",
"asset_base_price": 3850.0
}'

Automatic Market Creation​

When a pool is created, markets are generated automatically based on the provided metadata:

  • One market is created for each entry in market_names.
  • Each market receives its corresponding initial probability from market_probabilities.
  • The LMSR AMM is initialized with the specified lmsr_b_kopecks value.

For example, a pool with market_names: ["Yes", "No"] and market_probabilities: [0.55, 0.45] will produce two markets: "Yes" starting at 55% and "No" starting at 45%.

You do not need to create or configure markets individually -- all market management flows through the pool.

Updating Probabilities​

PUT /api/v1/events/{id}/pools/{pool_id}/probabilities

Updates the current probabilities for all markets in a pool. This is useful for manual odds adjustments before or during trading.

Request Body​

FieldTypeRequiredDescription
probabilitiesfloat[]YesNew probabilities for each market. Must sum to 1.0 and match the number of markets

Example​

curl -X PUT https://your-domain.com/api/v1/events/123/pools/456/probabilities \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"probabilities": [0.70, 0.30]
}'

Pool Configuration Fields​

Liquidity Parameter (lmsr_b_kopecks)​

The b parameter in the LMSR cost function controls how much liquidity the automated market maker provides:

  • Higher values -- More liquidity, smaller price impact per trade. Suitable for popular events with high expected volume.
  • Lower values -- Less liquidity, larger price swings. Suitable for niche events or when you want prices to react quickly to trades.

The value is specified in kopecks (1/100 of the base currency unit).

Volume Boundaries​

  • volume_min_kopecks -- The minimum trade size allowed. Prevents dust trades.
  • volume_max_kopecks -- The maximum trade size allowed. Limits exposure per single trade.

Polymarket Sync​

When polymarket_token_ids are provided, the platform's background worker (polymarket_ws_syncer) will subscribe to Polymarket's WebSocket feed and automatically sync odds from the corresponding Polymarket markets. This keeps Intotes probabilities aligned with the broader prediction market.

Asset Tracking​

For crypto price prediction events:

  • asset_symbol -- The cryptocurrency being tracked (e.g., BTC, ETH, SOL).
  • asset_base_price -- The reference price at the time of pool creation. Used to determine outcomes relative to price movement.

These fields enable the platform's asset price workers to automatically resolve events based on real-time price data.

Multiple Pools Per Event​

An event can have multiple pools, each representing a different question or angle on the same topic. For example, a football match event might have:

  • Pool 1: Match result -- ["Home Win", "Draw", "Away Win"]
  • Pool 2: Total goals -- ["Over 2.5", "Under 2.5"]
  • Pool 3: Both teams score -- ["Yes", "No"]

Each pool operates independently with its own markets, order book, and AMM state. Pools within the same event can be closed at different times with different outcomes.