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.
- No provider RTP set for the project → the game plays its natural mathematics, no RTP control.
- Provider RTP set, personal RTP off → every player's rounds are played at the project's provider RTP.
- 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).
| Setting | Meaning |
|---|---|
| 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 RTP | Switches on per-player levels. Off = every player plays at the provider RTP |
| Adaptive rule | Optional automatic correction of a player's level (below) |
| Bet limits per game | Minimum / 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.
| Parameter | Meaning | Default |
|---|---|---|
| Window, rounds | How many recent settled rounds are examined (50–100 000) | 1000 |
| Lower if player RTP is above, % | Window RTP above this lowers the level | 150 % |
| Restore if below, % | Window RTP below this raises the level back | 90 % |
| 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 turnover | Per currency: the rule ignores windows with a smaller total stake | none |
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:
| Field | Used by | Description |
|---|---|---|
action | all | get, set, auto or bet-limit |
player_id | all | The player |
provider | all | endorphina (default), pragmatic or nolimitcity. Pass it explicitly |
rtp | set | Percent, 60–100, at most 2 decimals, e.g. 94.5 |
reason | set, auto | Up to 200 characters, shown in the journal |
currency, min_minor, max_minor | bet-limit | Player limit in minor units (strings); null for both removes it |
# 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"
}'| Action | Effect |
|---|---|
get | Returns the player's state |
set | Sets a manual level (mode manual) |
auto | Returns the player to automatic mode (the adaptive rule resumes) |
bet-limit | Sets or removes the player's bet limit for a currency (Bet limits) |
Every action answers {"status":"ok","player":{…}}. Main fields of player:
| Field | Meaning |
|---|---|
bound | The player already has a level for this provider |
startBps, currentBps | Start and current level in basis points (9450 = 94.50 %) |
mode | auto or manual |
roundsSinceAdjust | Rounds since the last rule step |
providerBps | The project's provider RTP in basis points (or null) |
effective | {bps, source} — the level used now; source is player, provider-cap or manual |
betLimits | The player's limits per currency |
journal | Latest 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.