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β
| Field | Type | Required | Description |
|---|---|---|---|
market_names | string[] | Yes | Names for each outcome (e.g., ["Yes", "No"] or ["Team A", "Draw", "Team B"]) |
market_probabilities | float[] | Yes | Initial probabilities for each market. Must sum to 1.0 |
lmsr_b_kopecks | integer | Yes | LMSR liquidity parameter in kopecks. Controls AMM depth |
volume_min_kopecks | integer | No | Minimum allowed trade size in kopecks |
volume_max_kopecks | integer | No | Maximum allowed trade size in kopecks |
polymarket_token_ids | string[] | No | Polymarket token IDs for automatic odds syncing |
asset_symbol | string | No | Tracked cryptocurrency symbol (e.g., BTC, ETH, SOL) |
asset_base_price | float | No | Base 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_kopecksvalue.
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β
| Field | Type | Required | Description |
|---|---|---|---|
probabilities | float[] | Yes | New 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.