Notell API Docs
English

Возможности

Фриспины

Фриспины — спины, которые вы дарите игроку с фиксированной ставкой. Они разыгрываются в собственном клиенте игры и ничего не стоят игроку. Методы ниже позволяют выдавать их из вашей админки или CRM.

  • Доступны для игр с free_spins: true в /games/health (1009 из 1010 игр).
  • Все методы — POST https://notell-api.com/gameActions.do с полем method. Нужны partner, api_key и разрешённый IP.
  • Необязательный заголовок Idempotency-Key поддерживается всеми методами этой страницы (Соглашения). Общие ошибки (UNAUTHORIZED, IP_NOT_ALLOWED, INVALID_IDEMPOTENCY_KEY, IDEMPOTENCY_CONFLICT, RATE_LIMITED) перечислены в Ошибках и в таблицах ниже не повторяются.
  • Устаревшие методы freespins_set, freespins_delete и freespins_get без id отвечают METHOD_RETIRED.
  • В демо-режиме фриспины недоступны.

Как работают фриспины#

active --last spin settled--> used
active --expires_at passed--> expired     (unused spins are dropped)
active --freespins_cancel---> cancelled
  • У игрока может быть несколько выдач на игру. Первой разыгрывается выдача, которая истекает раньше (при равенстве — более старая). Выдача действует только для того же player_id и той же currency, для которых она создана.
  • Пока выдача активна, игрок может играть в этой игре только фриспины. Платные спины, анте-ставки и покупки бонуса отклоняются (FREE_SPINS_ACTIVE), пока выдача не использована, не истекла или не отменена.
  • Раунд, который уже начался к моменту истечения или отмены выдачи, завершается и оплачивается как обычно; выдача завершается только после него.
  • Раунды фриспинов проходят ту же логику RTP, что и платные, и учитываются в адаптивном окне игрока с номинальной ставкой (RTP).
  • bet и лимиты ставок проекта проверяются при создании выдачи и ещё раз при каждом спине.

Колбэки кошелька по выдаче#

Каждый раунд фриспина отправляет bet с суммой 0 и meta.is_freespins: true. Ваш кошелёк должен принимать нулевую ставку (Колбэки кошелька).

Выигрыши выдачи удерживаются и выплачиваются один раз. Выигравшие раунды не отправляются в ваш кошелёк по одному. Когда последний раунд выдачи рассчитан, платформа отправляет один win на всю сумму и только затем итоговый freespins_finished. win отправляется, только если сумма больше нуля. Его transaction одинаков при повторах, и он повторяется, пока вы не ответите ok.

json
{
  "method": "win",
  "player_id": "player-1024",
  "amount": 23.5,
  "meta": {
    "symbol": "gates-of-olympus",
    "time": 1803295800,
    "transaction": "e8a2b6c4-1d3f-4a57-9b0e-6c7d2f1a3e55",
    "round_id": "b2a74c1e-5d90-4f3a-8c21-0e9b7a6d4f12",
    "session_id": "9d0c3f7e-2b1a-4c58-a6d3-7e4f1b0c9a28",
    "is_freespins": true,
    "freespins": {
      "grant_id": "7b1c0e52-4f6a-4d8e-9a31-2c5e8f90b1d4",
      "external_id": "spring-promo-1",
      "nominal_bet": 1,
      "total_win": 23.5,
      "final_credit": true
    }
  },
  "api_key": "YOUR_API_KEY"
}

meta.round_id — последний рассчитанный раунд выдачи. Баланс игрока в игре обновляется локально по ходу спинов; ваш кошелёк пополняется этим одним win. После него отправляется итог.

Итоговый колбэк#

Когда выдача завершается (used, expired или cancelled), платформа отправляет на URL вашего кошелька ровно один колбэк freespins_finished и повторяет его, пока вы не ответите ok (задержки 10 с × 2<sup>попытки</sup>, не более 1 часа). Выдача с нерассчитанными раундами сначала ждёт их.

json
{
  "method": "freespins_finished",
  "grant_id": "7b1c0e52-4f6a-4d8e-9a31-2c5e8f90b1d4",
  "external_id": "spring-promo-1",
  "player_id": "player-1024",
  "currency": "EUR",
  "game": "gates-of-olympus",
  "status": "used",
  "total": 10,
  "played": 10,
  "bet": "1.00",
  "total_win": "23.50",
  "finished_at": "2027-02-15T12:30:00.000Z",
  "api_key": "YOUR_API_KEY"
}

Используйте его, чтобы закрыть акцию у себя. Деньги уже зачислены финальным win выше.

freespins_create#

POST/gameActions.domethodfreespins_create

Создаёт выдачу для одного игрока в одной игре.

Запрос#

curl
curl -s -X POST https://notell-api.com/gameActions.do \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: spring-promo-1-player-1024' \
  -d '{
    "method": "freespins_create",
    "partner": "demo-casino",
    "api_key": "YOUR_API_KEY",
    "player_id": "player-1024",
    "currency": "EUR",
    "symbol": "gates-of-olympus",
    "count": 10,
    "bet": "1.00",
    "external_id": "spring-promo-1",
    "meta": {"campaign": "spring"}
  }'
JSON
{
  "method": "freespins_create",
  "partner": "demo-casino",
  "api_key": "YOUR_API_KEY",
  "player_id": "player-1024",
  "currency": "EUR",
  "symbol": "gates-of-olympus",
  "count": 10,
  "bet": "1.00",
  "external_id": "spring-promo-1",
  "meta": {"campaign": "spring"}
}
ПолеТипОбязательноОписание
methodstringда"freespins_create".
partner, api_keystringдаИдентификатор проекта и API-ключ.
player_idstringдаВаш id игрока, 1–128 печатных ASCII-символов без пробелов.
currencystringдаЛюбой из 157 поддерживаемых кодов ISO 4217 (Валюты). Выдачу можно играть только в этой валюте.
symbolstringдаId игры с free_spins: true.
countintegerдаЧисло спинов, 1–1000.
betmoneyдаПолная ставка одного спина десятичной строкой. Должна совпадать с одной из ставок игры в базовом режиме и укладываться в лимиты ставок проекта, игры и игрока.
expires_atstringнетДата-время ISO 8601 с часовым поясом. От 1 часа до 30 дней после вызова. По умолчанию: сейчас + 7 дней.
external_idstringнетВаш id, уникальный в проекте, 1–128 печатных ASCII-символов без пробелов. Позволяет читать и отменять выдачу, не храня наш id.
metaobjectнетПроизвольный JSON-объект до 4096 байт. Сохраняется с выдачей, но методами чтения не возвращается.

Ответ#

json
{
  "status": "ok",
  "grant": {
    "grant_id": "7b1c0e52-4f6a-4d8e-9a31-2c5e8f90b1d4",
    "external_id": "spring-promo-1",
    "player_id": "player-1024",
    "currency": "EUR",
    "symbol": "gates-of-olympus",
    "provider": "pragmatic",
    "total": 10,
    "remaining": 10,
    "played": 0,
    "bet": "1.00",
    "total_win": "0.00",
    "status": "active",
    "created_at": "2027-02-15T10:00:00.000Z",
    "expires_at": "2027-02-28T12:00:00.000Z",
    "finished_at": null
  }
}
ПолеТипОписание
grant.grant_idstringId выдачи (UUID).
grant.external_idstring or nullВаш id, если вы его передали.
grant.player_id, grant.currency, grant.symbolstringКому, в какой валюте, в какой игре.
grant.providerstringpragmatic, endorphina или nolimitcity.
grant.total, grant.remaining, grant.playedintegerВыдано, осталось и уже сыграно спинов.
grant.betmoneyСтавка на спин.
grant.total_winmoneyСумма выигрышей рассчитанных раундов выдачи на данный момент.
grant.statusenumactive, used, expired или cancelled.
grant.created_at, grant.expires_atstringISO 8601, UTC.
grant.finished_atstring or nullnull, пока выдача не завершена.

Ошибки#

КодHTTPКогда
INVALID_REQUEST400Поле отсутствует, имеет неверный тип или формат, currency не поддерживается или meta слишком велик.
GAME_NOT_FOUND404symbol не игра каталога.
FREE_SPINS_UNSUPPORTED400Провайдер игры не поддерживает фриспины оператора.
INVALID_COUNT400count — не целое число от 1 до 1000.
INVALID_FREE_SPIN_BET400bet не строка или не является ставкой базового режима игры.
INVALID_EXPIRY400В expires_at нет часового пояса, либо срок меньше 1 часа или больше 30 дней.
DUPLICATE_EXTERNAL_ID409Выдача с таким external_id в проекте уже есть.
PROJECT_BET_LIMIT400bet вне лимита проекта, игры или игрока для этой валюты.
PROJECT_GAME_DISABLED400Игра или её провайдер выключены для проекта.
CURRENCY_REQUIRED400У проекта нет диапазона ставок для этой валюты.
GAME_MODE_DISABLED400Базовый режим игры выключен для проекта.

freespins_get#

POST/gameActions.domethodfreespins_get

Возвращает одну выдачу по grant_id или по вашему external_id.

Запрос#

curl
curl -s -X POST https://notell-api.com/gameActions.do \
  -H 'Content-Type: application/json' \
  -d '{"method":"freespins_get","partner":"demo-casino","api_key":"YOUR_API_KEY","external_id":"spring-promo-1"}'
JSON
{
  "method": "freespins_get",
  "partner": "demo-casino",
  "api_key": "YOUR_API_KEY",
  "external_id": "spring-promo-1"
}
ПолеТипОбязательноОписание
grant_idstringровно одно из grant_id / external_idId выдачи (UUID).
external_idstringровно одно из grant_id / external_idВаш id.

Ответ#

Тот же {"status": "ok", "grant": {…}}, что и у freespins_create, с текущими remaining, played, total_win и status.

json
{
  "status": "ok",
  "grant": {
    "grant_id": "7b1c0e52-4f6a-4d8e-9a31-2c5e8f90b1d4",
    "external_id": "spring-promo-1",
    "player_id": "player-1024",
    "currency": "EUR",
    "symbol": "gates-of-olympus",
    "provider": "pragmatic",
    "total": 10,
    "remaining": 6,
    "played": 4,
    "bet": "1.00",
    "total_win": "7.20",
    "status": "active",
    "created_at": "2027-02-15T10:00:00.000Z",
    "expires_at": "2027-02-28T12:00:00.000Z",
    "finished_at": null
  }
}

Ошибки#

КодHTTPКогда
INVALID_REQUEST400Переданы оба или ни одного из grant_id и external_id, либо значение некорректно.
GRANT_NOT_FOUND404В вашем проекте нет такой выдачи.
METHOD_RETIRED400Не передан ни grant_id, ни external_id (устаревшая форма без id).

freespins_list#

POST/gameActions.domethodfreespins_list

Возвращает выдачи проекта, сначала новые, не более 200.

Запрос#

curl
curl -s -X POST https://notell-api.com/gameActions.do \
  -H 'Content-Type: application/json' \
  -d '{"method":"freespins_list","partner":"demo-casino","api_key":"YOUR_API_KEY","player_id":"player-1024","status":"active"}'
JSON
{
  "method": "freespins_list",
  "partner": "demo-casino",
  "api_key": "YOUR_API_KEY",
  "player_id": "player-1024",
  "status": "active"
}
ПолеТипОбязательноОписание
player_idstringнетТолько выдачи этого игрока.
symbolstringнетТолько выдачи на эту игру.
currencystringнетТолько выдачи в этой валюте.
statusstringнетactive, used, expired или cancelled. Другие значения дают пустой список.

Ответ#

json
{
  "status": "ok",
  "grants": [
    {
      "grant_id": "7b1c0e52-4f6a-4d8e-9a31-2c5e8f90b1d4",
      "external_id": "spring-promo-1",
      "player_id": "player-1024",
      "currency": "EUR",
      "symbol": "gates-of-olympus",
      "provider": "pragmatic",
      "total": 10,
      "remaining": 6,
      "played": 4,
      "bet": "1.00",
      "total_win": "7.20",
      "status": "active",
      "created_at": "2027-02-15T10:00:00.000Z",
      "expires_at": "2027-02-28T12:00:00.000Z",
      "finished_at": null
    }
  ]
}
ПолеТипОписание
grantsarray<object>Объекты выдач, см. freespins_create. Пусто, если ничего не найдено.

Ошибки#

КодHTTPКогда
INVALID_REQUEST400У фильтра неверный тип.

freespins_cancel#

POST/gameActions.domethodfreespins_cancel

Отменяет активную выдачу: неиспользованные спины сгорают. Повтор возвращает ту же выдачу. Выдача, которая не active или без оставшихся спинов, возвращается без изменений.

Запрос#

curl
curl -s -X POST https://notell-api.com/gameActions.do \
  -H 'Content-Type: application/json' \
  -d '{"method":"freespins_cancel","partner":"demo-casino","api_key":"YOUR_API_KEY","grant_id":"7b1c0e52-4f6a-4d8e-9a31-2c5e8f90b1d4"}'
JSON
{
  "method": "freespins_cancel",
  "partner": "demo-casino",
  "api_key": "YOUR_API_KEY",
  "grant_id": "7b1c0e52-4f6a-4d8e-9a31-2c5e8f90b1d4"
}
ПолеТипОбязательноОписание
grant_idstringровно одно из grant_id / external_idId выдачи (UUID).
external_idstringровно одно из grant_id / external_idВаш id.

Ответ#

json
{
  "status": "ok",
  "grant": {
    "grant_id": "7b1c0e52-4f6a-4d8e-9a31-2c5e8f90b1d4",
    "external_id": "spring-promo-1",
    "player_id": "player-1024",
    "currency": "EUR",
    "symbol": "gates-of-olympus",
    "provider": "pragmatic",
    "total": 10,
    "remaining": 6,
    "played": 4,
    "bet": "1.00",
    "total_win": "7.20",
    "status": "cancelled",
    "created_at": "2027-02-15T10:00:00.000Z",
    "expires_at": "2027-02-28T12:00:00.000Z",
    "finished_at": "2027-02-17T09:15:00.000Z"
  }
}

finished_at заполняется, а итог ставится в очередь, как только у выдачи не остаётся нерассчитанных раундов: сразу или после расчёта раунда, который шёл (до этого он null).

Ошибки#

КодHTTPКогда
INVALID_REQUEST400Переданы оба или ни одного из grant_id и external_id.
GRANT_NOT_FOUND404В вашем проекте нет такой выдачи.

См. также#

Документация для операторов и интеграторов.Платформа TEST_ONLY: невыводимые единицы, реальные платежи не используются.