Notell API Docs
English

Интеграция

Callbacks кошелька

У платформы нет собственного баланса. На каждое действие игрока, затрагивающее деньги, она вызывает ваш endpoint кошелька. Вы реализуете один HTTPS-endpoint, обрабатывающий несколько значений method.

Транспорт#

СвойствоЗначение
URLPOST <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 на валюту), чтобы вы могли попробовать игры до готовности своего кошелька.

Ответ#

На каждый метод отвечайте:

json
{"status": "ok", "balance": 988.5, "currency": "UAH"}
ПолеПравило
status"ok" или "error"
balanceБаланс игрока после операции, числом JSON (не строкой)
currencyДолжна совпадать с валютой в пути запроса; иначе ответ отклоняется как некорректный
messageПри "status":"error" — код вроде INSUFFICIENT_FUNDS

Методы#

session_info — чтение баланса#

Отправляется при запуске игры. Ничего не меняет.

json
{
  "method": "session_info",
  "player_id": "player-123",
  "session_id": "9d0c3f7e-…",
  "api_key": "YOUR_API_KEY"
}

Ответьте текущим балансом. Если вы ответите ошибкой или не ответите, запуск завершится BALANCE_UNAVAILABLE.

bet — списание ставки#

Отправляется перед платным раундом. Спишите amount и ответьте.

json
{
  "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:
json
"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}.

json
{
  "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 (после подтверждения начисления либо после раунда без выигрыша).

json
{
  "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"
}
ПолеОписание
statusstart или finish
bet_amountСтавка раунда (номинальная ставка для раундов фриспинов)
bet_typeТип ставки раунда, например spin или purchase
bonus_buyРаунд был покупкой бонуса
bonus_triggerРаунд запустил бонусную функцию
win_amount, multiplier, has_winТолько в finish: общий выигрыш, выигрыш ÷ ставка и признак положительного выигрыша
forcedtrue, если раунд создан под целевой исход оператора

Уведомление finish — итог раунда: используйте его для отчётности; деньги уже прошли через bet и win.

freespins_finished — итог выдачи фриспинов#

По одному на каждую завершённую выдачу фриспинов. Отвечайте в обычном формате ({"status":"ok","balance":…,"currency":"…"}); пока вы не ответите, он повторяется.

json
{
  "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 finish

round_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 при тестировании.
Документация для операторов и интеграторов.Платформа TEST_ONLY: невыводимые единицы, реальные платежи не используются.