Возможности
Управление RTP
RTP (return to player) — доля ставок, которую игры возвращают на дистанции. Платформа позволяет управлять им в диапазоне 60–100 %: для всего проекта и, по желанию, для каждого игрока. Эта страница объясняет, какой уровень получает раунд, и как управлять уровнями игроков через API.
Какой RTP получает раунд#
Уровень определяется до списания, в той же транзакции, что и платный раунд, и затем остаётся неизменным для этого раунда. Изменение действует со следующего раунда; начатые раунды завершаются на своём уровне.
- По умолчанию. Проект без сохранённых настроек RTP играет на 90 % (RTP провайдера). Естественная математика игр используется, только если владелец явно сохранил «нет RTP провайдера».
- RTP провайдера задан, персональный RTP выключен. Раунды всех игроков играются на RTP провайдера проекта. Ручные уровни игроков игнорируются.
- Персональный RTP включён. У каждого игрока свой уровень (ниже).
Раунды фриспинов проходят ту же логику и учитываются в адаптивном окне с номинальной ставкой. Раунды целевых исходов помечаются и в окне не учитываются.
Настройки проекта#
Задаются в админ-панели на экране RTP & players (проектные настройки меняет владелец платформы; см. Админ-панель).
| Настройка | Значение |
|---|---|
| RTP провайдера | RTP проекта, 60–100 %. По умолчанию 90 %. Потолок для автоматических уровней и стартовый уровень каждого нового игрока. Уже зарегистрированные игроки сохраняют свой старт. |
| Персональный RTP | Включает уровни по игрокам. Выключен — все играют на RTP провайдера. |
| Адаптивное правило | Необязательная автоматическая коррекция уровня игрока (ниже). |
| Лимиты ставок по играм | Минимальная и максимальная ставка по игре и валюте (Лимиты ставок). |
Персональный RTP игрока#
- Новый игрок привязывается при первом раунде к RTP провайдера, актуальному в тот момент (стартовый уровень = текущий).
- Уровень можно менять вручную (админ-панель или API, 60–100 %, до двух знаков после запятой, с причиной, которая сохраняется в журнале игрока). Ручной уровень замораживает адаптивное правило для этого игрока, пока вы не вернёте его в
auto. - В режиме
autoигрок играет на текущем уровне, ограниченном RTP провайдера на данный момент. Если RTP провайдера снижен ниже уровня игрока, игрок играет на RTP провайдера. - Ручной уровень RTP провайдера не ограничивает.
- Журнал каждого игрока фиксирует, кто менял уровень, когда и почему (привязка, шаги правила, ручные изменения).
Адаптивное правило#
Правило следит за фактической доходностью последних рассчитанных раундов игрока. Если игроку слишком везёт, оно немного снижает его уровень; когда везение заканчивается, возвращает уровень, но никогда выше стартового.
| Параметр | Значение | По умолчанию |
|---|---|---|
| Окно, раундов | Сколько последних рассчитанных раундов анализируется (50–100 000). | 1000 |
| Снижать, если RTP игрока выше, % | RTP окна выше этого значения снижает уровень. | 150 % |
| Восстанавливать, если ниже, % | RTP окна ниже этого значения возвращает уровень. | 90 % |
| Шаг, п.п. | Изменение за шаг (0,1–20 процентных пунктов). | 2 п.п. |
| Не ниже старта минус, п.п. | Уровень никогда не опускается ниже старта игрока больше чем на это значение (0–40). | 6 п.п. |
| Минимальный оборот | По валюте: правило игнорирует окна с меньшей суммой ставок. | нет |
За окно делается не более одного шага. Уровень никогда не опускается ниже 60 %. Игроков с ручным уровнем правило не трогает.
На коротких выборках наблюдаемый RTP может отличаться от целевого; это нормально.
POST /playerRtp.do#
Управление уровнем игрока и его личными лимитами ставок. Каждому действию нужны partner, api_key и разрешённый IP. Запрос не использует Idempotency-Key и не ограничивается по частоте. Общие поля:
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
partner, api_key | string | да | Идентификатор проекта и API-ключ. |
action | enum | да | get, set, auto или bet-limit. |
player_id | string | да | Игрок. Только латинские буквы, цифры и _ . : @ -, 1–128 символов. Строже, чем при запуске: игрок с другими символами в id может играть, но управлять им здесь нельзя. |
provider | enum | нет | endorphina, pragmatic или nolimitcity. По умолчанию endorphina, поэтому передавайте его явно. |
Каждое действие отвечает {"status": "ok", "player": {…}}; объект игрока описан в разделе get.
Ошибки, общие для всех действий: INVALID_ACTION (400) для неизвестного action, INVALID_PLAYER (400) для player_id с недопустимыми символами, RTP_PROVIDER_UNSUPPORTED (400) для другого provider.
get#
/playerRtp.doactiongetВозвращает состояние игрока по одному провайдеру.
Запрос#
curl -s -X POST https://notell-api.com/playerRtp.do \
-H 'Content-Type: application/json' \
-d '{"partner":"demo-casino","api_key":"YOUR_API_KEY","action":"get","player_id":"player-1024","provider":"pragmatic"}'{
"partner": "demo-casino",
"api_key": "YOUR_API_KEY",
"action": "get",
"player_id": "player-1024",
"provider": "pragmatic"
}Других полей, кроме общих, нет.
Ответ#
{
"status": "ok",
"player": {
"partner": "demo-casino",
"player": "player-1024",
"nickname": null,
"bound": true,
"provider": "pragmatic",
"startBps": 9000,
"currentBps": 8800,
"mode": "auto",
"roundsSinceAdjust": 120,
"providerBps": 9000,
"effective": {"bps": 8800, "source": "player"},
"betLimits": [{"currency": "EUR", "minMinor": "10", "maxMinor": "5000"}],
"journal": [
{
"provider": "pragmatic",
"actor": "bind",
"reason": "bound before the first round by a level change",
"fromBps": null,
"toBps": 9000,
"fromMode": null,
"toMode": "auto",
"windowRounds": null,
"windowRtpPpm": null,
"at": "2027-02-15T10:00:00.000Z"
}
],
"providers": [
{"provider": "pragmatic", "startBps": 9000, "currentBps": 8800, "mode": "auto", "roundsSinceAdjust": 120, "effective": {"bps": 8800, "source": "player"}, "updatedAt": "2027-02-15T10:00:00.000Z"}
]
}
}| Поле | Тип | Описание |
|---|---|---|
player.partner, player.player | string | Идентификатор проекта и id игрока. |
player.nickname | string or null | Никнейм игрока собственного сайта платформы, иначе null. |
player.bound | boolean | У игрока уже есть уровень по этому провайдеру. При false startBps и currentBps равны 0, а effective — null. |
player.provider | string | Провайдер, для которого показан этот вид. |
player.startBps, player.currentBps | integer | Стартовый и текущий уровень в базисных пунктах (9450 = 94,50 %). |
player.mode | enum | auto или manual. |
player.roundsSinceAdjust | integer | Раундов с последнего шага правила. |
player.providerBps | integer or null | RTP провайдера проекта в базисных пунктах или null, если у проекта нет RTP провайдера. |
player.effective | object or null | {bps, source}: уровень, который действует при включённом персональном RTP. source — player, provider-cap (уровень ограничен RTP провайдера) или manual. |
player.betLimits | array<object> | Лимиты игрока по валютам, {currency, minMinor, maxMinor} в минорных единицах (строки). |
player.journal | array<object> | Последние изменения, новые первыми, до 100. |
player.providers | array<object> | Строки игрока по каждому провайдеру, у которого они есть. |
Ошибки#
| Код | HTTP | Когда |
|---|---|---|
INVALID_PLAYER | 400 | player_id отсутствует или содержит символы вне A-Z a-z 0-9 _ . : @ -. |
RTP_PROVIDER_UNSUPPORTED | 400 | provider — не один из трёх провайдеров. |
set#
/playerRtp.doactionsetЗадаёт ручной уровень (режим manual). При первом использовании игрок привязывается к провайдеру.
Запрос#
curl -s -X POST https://notell-api.com/playerRtp.do \
-H 'Content-Type: application/json' \
-d '{"partner":"demo-casino","api_key":"YOUR_API_KEY","action":"set","player_id":"player-1024","provider":"pragmatic","rtp":94.5,"reason":"VIP agreement"}'{
"partner": "demo-casino",
"api_key": "YOUR_API_KEY",
"action": "set",
"player_id": "player-1024",
"provider": "pragmatic",
"rtp": 94.5,
"reason": "VIP agreement"
}| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
rtp | number | да | Процент, 60–100, не более 2 знаков после запятой, JSON-числом (94.5, не строкой). |
reason | string | нет | До 200 символов, сохраняется в журнале. По умолчанию: manual change. |
Ответ#
{"status": "ok", "player": {…}} с mode: "manual", currentBps: 9450 и effective.source: "manual". Объект описан в разделе get.
{
"status": "ok",
"player": {
"partner": "demo-casino",
"player": "player-1024",
"nickname": null,
"bound": true,
"provider": "pragmatic",
"startBps": 9000,
"currentBps": 9450,
"mode": "manual",
"roundsSinceAdjust": 0,
"providerBps": 9000,
"effective": {"bps": 9450, "source": "manual"},
"betLimits": [],
"journal": [],
"providers": []
}
}(journal и providers здесь сокращены; в реальном ответе они заполнены.)
Ошибки#
| Код | HTTP | Когда |
|---|---|---|
RTP_LEVEL_INVALID | 400 | rtp — не число или имеет больше 2 знаков после запятой. |
RTP_LEVEL_OUT_OF_RANGE | 400 | rtp ниже 60 или выше 100. |
INVALID_REASON | 400 | reason — не строка до 200 символов. |
RTP_POLICY_REQUIRED | 400 | У проекта нет RTP провайдера (он явно выключен). |
auto#
/playerRtp.doactionautoВозвращает игрока в автоматический режим: адаптивное правило продолжает работу с текущего уровня. При первом использовании игрок привязывается к провайдеру.
Запрос#
curl -s -X POST https://notell-api.com/playerRtp.do \
-H 'Content-Type: application/json' \
-d '{"partner":"demo-casino","api_key":"YOUR_API_KEY","action":"auto","player_id":"player-1024","provider":"pragmatic","reason":"VIP period over"}'{
"partner": "demo-casino",
"api_key": "YOUR_API_KEY",
"action": "auto",
"player_id": "player-1024",
"provider": "pragmatic",
"reason": "VIP period over"
}| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
reason | string | нет | До 200 символов, сохраняется в журнале. По умолчанию: manual change. |
Ответ#
{"status": "ok", "player": {…}} с mode: "auto". Объект описан в разделе get.
Ошибки#
| Код | HTTP | Когда |
|---|---|---|
INVALID_REASON | 400 | reason — не строка до 200 символов. |
RTP_POLICY_REQUIRED | 400 | У проекта нет RTP провайдера (он явно выключен). |
bet-limit#
/playerRtp.doactionbet-limitЗадаёт или снимает личный лимит ставки игрока для одной валюты. Лимит действует вместе с лимитами проекта; побеждает наименьший максимум (Лимиты ставок).
Запрос#
curl -s -X POST https://notell-api.com/playerRtp.do \
-H 'Content-Type: application/json' \
-d '{"partner":"demo-casino","api_key":"YOUR_API_KEY","action":"bet-limit","player_id":"player-1024","provider":"pragmatic","currency":"EUR","min_minor":"10","max_minor":"5000"}'{
"partner": "demo-casino",
"api_key": "YOUR_API_KEY",
"action": "bet-limit",
"player_id": "player-1024",
"provider": "pragmatic",
"currency": "EUR",
"min_minor": "10",
"max_minor": "5000"
}| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
currency | string | да | Код ISO 4217, три заглавные буквы. |
min_minor | string or null | да | Минимальная ставка на спин в минорных единицах, только цифры, не менее "1". "10" = 0,10. |
max_minor | string or null | да | Максимальная ставка на спин в минорных единицах, только цифры, не меньше min_minor. "5000" = 50,00. |
Оба предела обязательны: передайте оба строками либо оба как null, чтобы снять лимит.
Ответ#
{"status": "ok", "player": {…}}; betLimits показывает новый лимит. Объект описан в разделе get.
Ошибки#
| Код | HTTP | Когда |
|---|---|---|
INVALID_CURRENCY | 400 | currency — не три заглавные буквы. |
INVALID_BET_LIMIT | 400 | min_minor / max_minor — не обе строки из цифр (и не оба null), min_minor меньше 1 либо max_minor меньше min_minor. |
См. также#
- Лимиты ставок: как личные лимиты сочетаются с лимитами проекта.
- Целевые исходы и Фриспины: как учитываются их раунды.
- Админ-панель: где редактируются настройки RTP проекта и уровни игроков.