Notell API Docs
Русский

Features

RTP management

RTP (return to player) is the share of the stakes that the games pay back over time. The platform lets you steer it between 60 % and 100 % — for the whole project and, optionally, for each player.

How a round gets its RTP#

The level is resolved before the debit, inside the same transaction as the paid round, and then stays fixed for that round. A change therefore applies from the next round; started rounds finish at their own level.

  1. No provider RTP set for the project → the game plays its natural mathematics, no RTP control.
  2. Provider RTP set, personal RTP off → every player's rounds are played at the project's provider RTP.
  3. Personal RTP on → each player has their own level (below).

The games that take part in RTP control are marked RTP-controlled in the admin panel (Games screen). Free-spin rounds go through the same logic; target-outcome rounds are marked as forced and do not count in the adaptive window.

Project settings#

In the admin panel: RTP & players → RTP settings (the owner edits, project staff read).

SettingMeaning
Provider RTP (switch Manage RTP of new games and a slider)The project's RTP, 60–100 %. It is the ceiling for everyone and the starting level of each new player. Already registered players keep their start
Enable personal RTPSwitches on per-player levels. Off = every player plays at the provider RTP
Adaptive ruleOptional automatic correction of a player's level (below)
Bet limits per gameMinimum / maximum round price per game and currency (Bet limits)

Changes are saved automatically and applied from the next round.

Personal RTP of a player#

  • A new player is bound at their first round to the provider RTP that is current at that moment (start level = current level).
  • The level can be changed manually (admin or operator API, 60–100 %, up to two decimals, with a reason shown in the player's journal). A manual level freezes the adaptive rule for that player until you return them to auto.
  • In auto mode the player plays at their current level, capped by the provider RTP at the time (if the provider RTP is lowered below a player's level, the player plays at the provider RTP).
  • A manual level is not capped by the provider RTP.
  • The journal of every player records who changed the level, when and why (binding, rule steps, manual changes).

Adaptive rule#

The rule watches the realised return of a player's last settled rounds. If a player is too lucky it lowers their level a little; when the luck ends it brings them back — but never above their starting level.

ParameterMeaningDefault
Window, roundsHow many recent settled rounds are examined (50–100 000)1000
Lower if player RTP is above, %Window RTP above this lowers the level150 %
Restore if below, %Window RTP below this raises the level back90 %
Step, p.p.Change per step (0.1–20 percentage points)2 p.p.
Not below start minus, p.p.The level never drops further than this below the player's start (0–40)6 p.p.
Minimum turnoverPer currency: the rule ignores windows with a smaller total stakenone

At most one step is made per window. The level never goes below 60 %. Players with a manual level are not touched. Free-spin rounds count with their nominal bet.

Reading actual return#

The admin panel shows the target RTP of a project, the actual RTP computed from settled stakes, and per-player actual return (all time and in the rule window). On short samples the observed value can differ from the target — that is normal.

Operator API: POST /playerRtp.do#

Requires partner, api_key and an allowlisted IP. Request fields:

FieldUsed byDescription
actionallget, set, auto or bet-limit
player_idallThe player
providerallendorphina (default), pragmatic or nolimitcity. Pass it explicitly
rtpsetPercent, 60–100, at most 2 decimals, e.g. 94.5
reasonset, autoUp to 200 characters, shown in the journal
currency, min_minor, max_minorbet-limitPlayer limit in minor units (strings); null for both removes it
bash
# set a manual level of 94.5 % for the Pragmatic Play titles
curl -s -X POST https://notell-api.com/playerRtp.do -H 'Content-Type: application/json' -d '{
  "partner": "YOUR_PARTNER_ID", "api_key": "YOUR_API_KEY",
  "action": "set", "player_id": "player-123", "provider": "pragmatic", "rtp": 94.5, "reason": "VIP agreement"
}'
ActionEffect
getReturns the player's state
setSets a manual level (mode manual)
autoReturns the player to automatic mode (the adaptive rule resumes)
bet-limitSets or removes the player's bet limit for a currency (Bet limits)

Every action answers {"status":"ok","player":{…}}. Main fields of player:

FieldMeaning
boundThe player already has a level for this provider
startBps, currentBpsStart and current level in basis points (9450 = 94.50 %)
modeauto or manual
roundsSinceAdjustRounds since the last rule step
providerBpsThe project's provider RTP in basis points (or null)
effective{bps, source} — the level used now; source is player, provider-cap or manual
betLimitsThe player's limits per currency
journalLatest changes, newest first (up to 100)

Errors: INVALID_ACTION, INVALID_PLAYER, RTP_PROVIDER_UNSUPPORTED, RTP_LEVEL_INVALID, RTP_LEVEL_OUT_OF_RANGE, RTP_POLICY_REQUIRED (the project has no provider RTP yet), INVALID_REASON, INVALID_CURRENCY, INVALID_BET_LIMIT, plus UNAUTHORIZED and IP_NOT_ALLOWED. See the error reference.

Admin panel#

Everything above is available on the RTP & players screen — see Admin: RTP and players.

Documentation for operators and integrators.TEST_ONLY platform: non-withdrawable units, no real payments.