Skip to main content

Creating Events

Intotes provides several endpoints for event creation, ranging from basic event shells to full event-with-pools creation in a single call.

All creation endpoints require the is_creator flag on the authenticated user. Pass a valid Bearer token in the Authorization header.

Basic Event Creation​

POST /api/v1/events

Creates an event without any pools or markets. Pools must be added separately afterward.

Request Body​

FieldTypeRequiredDescription
namestringYesEvent name in English
name_rustringNoEvent name in Russian
tagsstring[]NoCategory tags for filtering
versus_namesstring[]NoNames of opposing sides (e.g., team names)
versus_imagesstring[]NoImage URLs for opposing sides
has_drawbooleanNoWhether a draw outcome is possible

Example​

curl -X POST https://your-domain.com/api/v1/events \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"name": "Champions League Final 2026",
"name_ru": "Финал Лиги Чемпионов 2026",
"tags": ["football", "champions-league"],
"versus_names": ["Real Madrid", "Manchester City"],
"versus_images": ["https://example.com/real.png", "https://example.com/city.png"],
"has_draw": true
}'

Full Event Creation​

POST /api/v1/events/create-full

Creates an event with all pools and markets in a single request. This is the recommended approach for most use cases, as it avoids intermediate states where an event exists without tradeable markets.

Request Body​

The request includes all event fields plus a pools array. Each pool entry contains the metadata needed to auto-generate its markets.

FieldTypeRequiredDescription
namestringYesEvent name in English
name_rustringNoEvent name in Russian
tagsstring[]NoCategory tags
versus_namesstring[]NoOpposing side names
versus_imagesstring[]NoOpposing side images
has_drawbooleanNoDraw outcome available
poolsobject[]YesArray of pool definitions (see below)

Pool Object​

FieldTypeRequiredDescription
market_namesstring[]YesNames for each outcome market
market_probabilitiesfloat[]YesInitial probabilities (must sum to 1.0)
lmsr_b_kopecksintegerYesLMSR liquidity parameter in kopecks
volume_min_kopecksintegerNoMinimum trade volume in kopecks
volume_max_kopecksintegerNoMaximum trade volume in kopecks
polymarket_token_idsstring[]NoPolymarket token IDs for odds syncing
asset_symbolstringNoTracked asset symbol (e.g., BTC, ETH, SOL)
asset_base_pricefloatNoBase price for asset tracking

Example​

curl -X POST https://your-domain.com/api/v1/events/create-full \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"name": "BTC above $70,000 by end of day?",
"name_ru": "BTC выше $70,000 к концу дня?",
"tags": ["crypto", "btc"],
"pools": [
{
"market_names": ["Yes", "No"],
"market_probabilities": [0.55, 0.45],
"lmsr_b_kopecks": 500000,
"volume_min_kopecks": 1000,
"volume_max_kopecks": 10000000,
"asset_symbol": "BTC",
"asset_base_price": 68500.0
}
]
}'

Response​

Returns the created event object with its ID, nested pools, and auto-generated markets.

User Event Suggestions​

POST /api/v1/events/suggest

Regular users (without the is_creator flag) can suggest events for creators to review. This endpoint accepts a free-form suggestion payload.

Uploading Event Images​

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

Uploads an image for the event. The image is stored in Cloudflare R2 and displayed in the event feed.

Request​

Send the image as multipart/form-data with the file in the image field.

curl -X POST https://your-domain.com/api/v1/events/{id}/image \
-H "Authorization: Bearer <token>" \
-F "image=@event-banner.png"

Notes​

  • Event names should be concise and clearly state the prediction question.
  • Initial probabilities in market_probabilities must sum to 1.0 across all markets in a pool.
  • The lmsr_b_kopecks parameter controls AMM liquidity depth -- higher values mean more liquidity and less price slippage per trade. See the LMSR Trading docs for details.
  • After creation, the event is not yet visible to users. You must activate it separately (see Activation and Lifecycle).