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
| Field | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Event name in English |
name_ru | string | No | Event name in Russian |
tags | string[] | No | Category tags for filtering |
versus_names | string[] | No | Names of opposing sides (e.g., team names) |
versus_images | string[] | No | Image URLs for opposing sides |
has_draw | boolean | No | Whether 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.
| Field | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Event name in English |
name_ru | string | No | Event name in Russian |
tags | string[] | No | Category tags |
versus_names | string[] | No | Opposing side names |
versus_images | string[] | No | Opposing side images |
has_draw | boolean | No | Draw outcome available |
pools | object[] | Yes | Array of pool definitions (see below) |
Pool Object
| Field | Type | Required | Description |
|---|---|---|---|
market_names | string[] | Yes | Names for each outcome market |
market_probabilities | float[] | Yes | Initial probabilities (must sum to 1.0) |
lmsr_b_kopecks | integer | Yes | LMSR liquidity parameter in kopecks |
volume_min_kopecks | integer | No | Minimum trade volume in kopecks |
volume_max_kopecks | integer | No | Maximum trade volume in kopecks |
polymarket_token_ids | string[] | No | Polymarket token IDs for odds syncing |
asset_symbol | string | No | Tracked asset symbol (e.g., BTC, ETH, SOL) |
asset_base_price | float | No | Base 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_probabilitiesmust sum to 1.0 across all markets in a pool. - The
lmsr_b_kopecksparameter 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).