Partner Integration API
The Partner Integration API follows a float model: a partner β a casino, a bookmaker, or an app β funds a float account at Intotes and, with an API key, places bets on behalf of its own users in Intotes prediction markets.
Each partner user is identified by an external_user_id and is automatically mapped to an Intotes sub-account. The stake of every bet is funded from the float, and the resulting positions go into the shared LMSR AMM pool.
How It Worksβ
- The partner funds the float. The float account holds the partner's undistributed funds.
- A bet arrives with an
external_user_id. The identifier is resolved to an Intotes sub-account, which is created on the user's first bet. - The stake is debited from the float. The trade is then executed for that sub-account.
- The position goes into the shared LMSR pool. See Positions and Markets for what a position in a market is.
- A sale credits the payout to the sub-account. The payout stays there and can fund further bets, or be read through Get User State.
Onboardingβ
- Registration. Intotes registers the partner and links a float account to it.
- Funding. The partner tops the float account up with a normal deposit (crypto or card).
- Key issue. The partner receives access to the B2B bot and issues an API key once with
/gen_key. The key is shown a single time and is never reissued β keep it secret. - Integration. The partner integrates the endpoints listed below.
Authenticationβ
Every request requires the X-Partner-Key header:
X-Partner-Key: pk_xxxxxxxxxxxxxxxxxxxxxxxx
| Status | Code | Description |
|---|---|---|
| 401 | NO_PARTNER_KEY | The X-Partner-Key header is missing. |
| 401 | INVALID_PARTNER_KEY | The key is wrong, or the partner is disabled. |
Base URLβ
https://api.intotes.com
Confirm the host for your environment. It is not the platform base URL used by the rest of the API Reference.
Units and Conceptsβ
| Field | Description |
|---|---|
*_kopecks | Kopecks. 1 RUB = 100 kopecks. |
shares | Position shares. 100 = 1 token. |
avg_price_bps | Entry price in basis points. 10000 = 1 RUB. |
fee_bps | Fee in basis points. |
side | "yes" or "no". |
external_user_id | Identifier of the user in the partner's own system. |
client_bet_id | The partner's unique idempotency key. |
Monetary fields on these endpoints are integers. See Money Format for the platform-wide money conventions.
The rest of the docs name these scales differently: what this page calls shares is the integer those pages call shares in cents, and both count 100 units to one whole share or token. Prices there run on the same 0β10000 range, described as probability rather than in basis points β see Prices and Probability.
Idempotencyβ
The pair (partner, client_bet_id) is unique. After a network error or a timeout, repeat the request with the same client_bet_id:
- If the bet already went through, the response is
already_acceptedβ no second trade is executed and the float is not debited a second time. - If the previous attempt never executed, the reservation was released and the retry proceeds normally.
Error Formatβ
All endpoints share one error envelope:
{
"error": {
"code": "BET_LIMIT",
"message": "amount_kopecks 500000 exceeds partner max bet 100000"
}
}
See Error Handling for the full list of partner error codes.
Endpointsβ
| Endpoint | Path | Description |
|---|---|---|
| Place Bet | POST /api/v1/partner/bets | Place a bet for a partner user, funded from the float. |
| Sell Position | POST /api/v1/partner/sell | Sell shares of a position and credit the payout to the sub-account. |
| Get Float Balance | GET /api/v1/partner/balance | Read the float balance and the total balance of all sub-accounts. |
| Get User State | GET /api/v1/partner/users/{external_user_id} | Read a partner user's balance and open positions. |
The rest of the platform API is documented in the API Reference.