POST /api/v1/partner/bets
Размещение ставки на рынке предсказаний за одного из пользователей партнёра. Стейк списывается с аккаунта-флоата партнёра, а позиция открывается на суб-аккаунте Intotes, привязанном к external_user_id.
Суммы — целые числа в копейках, где 1 RUB = 100 копеек. Соглашения о денежных значениях и ценах, принятые во всём API, см. в разделе Формат денежных значений.
Аутентификация
Обязательно. API-ключ партнёра в заголовке X-Partner-Key, а не Bearer-токен. См. Партнёрская интеграция.
Запрос
Параметры тела запроса
| Параметр | Тип | Обязательно | Описание |
|---|---|---|---|
external_user_id | string | Да | Идентификатор пользователя в вашей системе. Пользователь автоматически маппится на суб-аккаунт Intotes. |
market_id | int64 | Да | ID рынка, на котором размещается ставка. |
side | string | Да | Покупаемая сторона: "yes" или "no". |
amount_kopecks | int | Да | Стейк в копейках. Списывается с аккаунта-флоата партнёра. |
client_bet_id | string | Да | Ваш уникальный ключ идемпотентности для этой ста вки. |
ID рынков возвращает Рынки пула — список рынков одного пула; сами ID пулов приходят вместе с каждым событием в Все события.
Пример
curl -X POST https://api.intotes.com/api/v1/partner/bets \
-H "X-Partner-Key: <partner_key>" \
-H "Content-Type: application/json" \
-d '{
"external_user_id": "user_42",
"market_id": 12345,
"side": "yes",
"amount_kopecks": 50000,
"client_bet_id": "bet_abc_001"
}'
Ответ
200 OK
{
"status": "accepted",
"client_bet_id": "bet_abc_001",
"external_user_id": "user_42",
"user_id": 987654,
"market_id": 12345,
"side": "yes",
"cost_kopecks": 50000,
"shares_delta": 91234,
"fee_bps": 300
}
Полученная позиция идёт в общий LMSR-пул — тот же пул, что обслуживает обычные сделки платформы. См. LMSR AMM. Позицию можно закрыть позже через Sell Position.
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
status | string | "accepted", когда ставка размещена. |
client_bet_id | string | Ключ идемпотентности, отправленный в запросе. |
external_user_id | string | Идентификатор пользователя в вашей системе. |
user_id | int64 | ID суб-аккаунта Intotes, привязанного к external_user_id. |
market_id | int64 | Рынок, на котором размещена ставка. |
side | string | Купленная сторона: "yes" или "no". |
cost_kopecks | int | Сумма, списанная с аккаунта-флоата, в копейках. |
shares_delta | int | Количество акций, добавленных к позиции. 100 акций = 1 токен. |
fee_bps | int | Комиссия сделки в базисных пунктах. |
Как на платформе применяются комиссии сделок, описано в разделе Комиссии и сборы.
Идемпотентный повтор
Повтор запроса с client_bet_id, который уже был принят, возвращает следующее тело. Ставка не размещается второй раз, и повторного списания с аккаунта-флоата не происходит.
{
"status": "already_accepted",
"client_bet_id": "bet_abc_001"
}
Полный контракт идемпотентности см. в разделе Партнёрская интеграция.
Ошибки
| Статус | Код | Описание |
|---|---|---|
| 400 | BAD_BODY | Невалидный JSON в теле запроса. |
| 400 | BAD_PARAMS | Отсутствуют или неверны обязательные поля. |
| 400 | BET_LIMIT | Стейк выше лимита партнёра на ставку. |
| 400 | TRADE_FAILED | Сделка отклонена, например, если рынок закрыт. |
| 402 | INSUFFICIENT_FLOAT | На аккаунте-флоате не хватает средств. Пополните его. |
| 500 | RESOLVE_USER_FAILED | Не удалось создать или найти суб-аккаунт. |
| 500 | RECORD_FAILED | Внутренняя ошибка записи. |
Ошибки аутентификации, общие для всех партнёрских эндпоинтов, перечислены в разделе Обзор, а полный справочник кодов — в разделе Обработка ошибок.