Интеграция
Callbacks кошелька
У платформы нет собственного баланса. На каждое действие игрока, затрагивающее деньги, она вызывает ваш endpoint кошелька. Вы реализуете один HTTPS-endpoint, обрабатывающий несколько значений method.
Транспорт#
| Свойство | Значение |
|---|---|
| URL | POST <callback URL>/<валюта>, например https://casino.example/wallet/UAH (валюта в пути: UAH, USD, EUR, RUB) |
| Где задать URL | Админ-панель → Projects → ваш проект → Integration (см. Админ: проекты) |
| Тело | JSON-объект с отсортированными ключами; содержит api_key |
| Аутентификация | api_key проекта в теле — сверяйте со своим ключом |
| Тайм-аут | 2 секунды на попытку; редиректы не выполняются |
| Успех | HTTP 2xx с JSON-ответом ниже. Статус не 2xx считается сбоем, даже если в теле ok |
| Идемпотентность | Каждый bet / win несёт уникальный meta.transaction; повтор содержит тот же id и тело |
Если у проекта не задан callback URL, платформа использует встроенный тестовый кошелёк (стартовый баланс 10 000.00 на валюту), чтобы вы могли попробовать игры до готовности своего кошелька.
Ответ#
На каждый метод отвечайте:
{"status": "ok", "balance": 988.5, "currency": "UAH"}| Поле | Правило |
|---|---|
status | "ok" или "error" |
balance | Баланс игрока после операции, числом JSON (не строкой) |
currency | Должна совпадать с валютой в пути запроса; иначе ответ отклоняется как некорректный |
message | При "status":"error" — код вроде INSUFFICIENT_FUNDS |
Методы#
session_info — чтение баланса#
Отправляется при запуске игры. Ничего не меняет.
{
"method": "session_info",
"player_id": "player-123",
"session_id": "9d0c3f7e-…",
"api_key": "YOUR_API_KEY"
}Ответьте текущим балансом. Если вы ответите ошибкой или не ответите, запуск завершится BALANCE_UNAVAILABLE.
bet — списание ставки#
Отправляется перед платным раундом. Спишите amount и ответьте.
{
"method": "bet",
"player_id": "player-123",
"amount": 1.5,
"meta": {
"symbol": "gates-of-olympus",
"time": 1789473600,
"transaction": "6f1d0c9e-…",
"round_id": "b2a7…",
"session_id": "9d0c3f7e-…"
},
"api_key": "YOUR_API_KEY"
}amount— положительное число JSON в единицах валюты.- Раунды фриспинов приходят с
amount: 0и дополнительной meta; принимайте нулевую ставку, когдаis_freespinsравноtrue:
"meta": {
"transaction": "…", "round_id": "…", "session_id": "…", "symbol": "…", "time": 1789473600,
"is_freespins": true,
"freespins": {"grant_id": "…", "external_id": "promo-1", "nominal_bet": 1, "remaining": 9}
}- Если баланса не хватает, ответьте
{"status":"error","message":"INSUFFICIENT_FUNDS","balance":0.5,"currency":"UAH"}. Раунд отклоняется, ничего не разыгрывается. Возвращайте этот код только при реальной нехватке средств.
win — начисление результата#
Отправляется, когда раунд выиграл. amount — общий выигрыш раунда (положительный; нулевые выигрыши не отправляются). Поля meta те же, что у bet (symbol, time, transaction, round_id, session_id). Для раунда фриспинов добавляются is_freespins: true и freespins: {grant_id, external_id, nominal_bet}.
{
"method": "win",
"player_id": "player-123",
"amount": 12.75,
"meta": {"symbol": "gates-of-olympus", "time": 1789473612, "transaction": "0b6e…", "round_id": "b2a7…", "session_id": "9d0c3f7e-…"},
"api_key": "YOUR_API_KEY"
}round_info — уведомление о раунде (итог раунда)#
Информационный: сохраните, ничего не меняйте, ответьте ok с текущим балансом. На раунд приходят два уведомления по порядку: start (после подтверждения списания) и finish (после подтверждения начисления либо после раунда без выигрыша).
{
"method": "round_info",
"player_id": "player-123",
"status": "finish",
"round_id": "b2a7…",
"session_id": "9d0c3f7e-…",
"game_symbol": "gates-of-olympus",
"currency": "UAH",
"timestamp": 1789473615,
"bet_amount": 1.5,
"bet_type": "spin",
"bonus_buy": false,
"bonus_trigger": true,
"win_amount": 12.75,
"multiplier": 8.5,
"has_win": true,
"api_key": "YOUR_API_KEY"
}| Поле | Описание |
|---|---|
status | start или finish |
bet_amount | Ставка раунда (номинальная ставка для раундов фриспинов) |
bet_type | Тип ставки раунда, например spin или purchase |
bonus_buy | Раунд был покупкой бонуса |
bonus_trigger | Раунд запустил бонусную функцию |
win_amount, multiplier, has_win | Только в finish: общий выигрыш, выигрыш ÷ ставка и признак положительного выигрыша |
forced | true, если раунд создан под целевой исход оператора |
Уведомление finish — итог раунда: используйте его для отчётности; деньги уже прошли через bet и win.
freespins_finished — итог выдачи фриспинов#
По одному на каждую завершённую выдачу фриспинов. Отвечайте в обычном формате ({"status":"ok","balance":…,"currency":"…"}); пока вы не ответите, он повторяется.
{
"method": "freespins_finished",
"grant_id": "7b1c…",
"external_id": "promo-2026-10",
"player_id": "player-123",
"currency": "UAH",
"game": "gates-of-olympus",
"status": "used",
"total": 10,
"played": 10,
"bet": "1.00",
"total_win": "23.50",
"finished_at": "2026-10-15T12:30:00.000Z",
"api_key": "YOUR_API_KEY"
}Порядок вызовов в раунде#
bet -> (списание подтверждено) -> round_info start -> [игра] -> win (если > 0) -> (начисление подтверждено) -> round_info finishround_info finish доставляется только после того, как round_info start подтверждён.
Повторы и сбои#
| Ситуация | Что делает платформа |
|---|---|
bet получил ответ INSUFFICIENT_FUNDS | Раунд отклоняется; повторов нет |
Любая другая ошибка, некорректный ответ, статус не 2xx или тайм-аут на bet / win | Операция считается неизвестной и позже повторяется с тем же id транзакции и телом, пока не будет подтверждена. Раунд при этом остаётся в ожидании |
round_info не получил ответ ok | Повторяется позже; партнёр, который не отвечает, на время пропускается, чтобы не блокировать остальных |
freespins_finished не получил ответ ok | Повторяется с нарастающей задержкой: 10 с × 2<sup>попытки</sup>, не более 1 часа |
Поскольку повторы ожидаемы, ваш кошелёк обязан быть идемпотентным: запоминайте ответ на каждый meta.transaction и возвращайте его же на повтор того же запроса. Повтор не должен списывать или начислять дважды.
Чек-лист кошелька#
- [ ] Проверяйте
api_key; только HTTPS; ответ в пределах 2 секунд. - [ ] Разбирайте
amountкак десятичное;balanceвозвращайте числом JSON. - [ ] Возвращайте в
currencyвалюту из пути URL. - [ ] Идемпотентность по
meta.transaction(тот же id и тело — тот же ответ). - [ ] Принимайте
amount: 0дляbet, когдаmeta.is_freespinsравноtrue. - [ ] Отвечайте на
round_infoиfreespins_finishedчерезok(status,balance,currency). - [ ] Используйте Test connection в админ-панели и следите за API Logs при тестировании.