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).