Features
Target outcomes
A target outcome tells the platform: on this player's n-th paid spin in this game, produce a round whose win is about X times the bet. It is meant for test scenarios, promotions and QA.
- Available for games with
target_outcomes: truein/games/health(433 of 446 games). - Methods are
POST /gameActions.do; the call needspartner,api_keyand an allowlisted IP. The admin panel has a Target outcomes screen (Admin: operations). - The round is always the game's own natural outcome, generated for this one entry; the board and features are never constructed by hand and the result is not revealed in advance.
Methods#
method | Fields | Answer |
|---|---|---|
outcome_schedule | player_id, symbol, multiplier, kind?, spin_number?, expires_at?, external_id?, comment? | {"status":"ok","outcome":{…}} |
outcome_get | outcome_id or external_id | {"status":"ok","outcome":{…}} |
outcome_list | player_id?, symbol?, status? | {"status":"ok","outcomes":[…]} (at most 200, newest first) |
outcome_cancel | outcome_id or external_id | {"status":"ok","outcome":{…}} |
curl -s -X POST https://notell-api.com/gameActions.do \
-H 'Content-Type: application/json' \
-d '{
"method": "outcome_schedule",
"partner": "YOUR_PARTNER_ID",
"api_key": "YOUR_API_KEY",
"player_id": "player-123",
"symbol": "gates-of-olympus",
"multiplier": 50,
"kind": "bonus",
"spin_number": 3,
"external_id": "qa-case-17",
"comment": "QA: big bonus on spin 3"
}'| Field | Rules |
|---|---|
player_id | 1–128 printable characters |
symbol | Game id with target_outcomes: true (GAME_NOT_FOUND, FORCED_OUTCOMES_UNSUPPORTED) |
multiplier | Target win as a multiple of the spin's bet: a positive number (or numeric string) with up to 2 decimals. Not above the game's maximum win (MULTIPLIER_ABOVE_MAX_WIN, INVALID_MULTIPLIER) |
kind | spin (default): a win without a feature. bonus: a win that comes with a feature (natural trigger, or a feature buy when the player buys). bonus needs a game with a feature (GAME_HAS_NO_BONUS, INVALID_KIND) |
spin_number | Which paid spin of the player, 1–100000, default 1 (INVALID_SPIN_NUMBER) |
expires_at | ISO 8601 with a zone; default now + 7 days; minimum now + 1 hour; maximum now + 90 days (INVALID_EXPIRY) |
external_id | Your id, unique in the project (DUPLICATE_EXTERNAL_ID) |
comment | Free text up to 500 characters |
The outcome object#
{
"outcome_id": "5a3e…",
"external_id": "qa-case-17",
"player_id": "player-123",
"symbol": "gates-of-olympus",
"provider": "pragmatic",
"kind": "bonus",
"multiplier": "50",
"spin_number": 3,
"paid_spins_since": 0,
"status": "pending",
"variants": [],
"comment": "QA: big bonus on spin 3",
"created_at": "2026-10-15T10:00:00.000Z",
"expires_at": "2026-10-22T10:00:00.000Z",
"applied_at": null,
"round_id": null
}multiplier is returned as a string. variants names the kinds of round the platform found (for example a regular spin and a bought feature). round_id is filled once the entry has been applied.
Statuses#
| Status | Meaning |
|---|---|
pending | The platform is still searching for a suitable round. Paid spins are not counted yet |
ready | A round was found. Paid spins of the player in this game are now counted towards spin_number |
unreachable | No round was found within the search budget (for example x50 in a regular spin of a game that cannot pay that much). Choose another multiplier or kind |
applied | The round was played; applied_at and round_id are set |
expired | expires_at passed before the entry was applied |
cancelled | Cancelled by the operator or the admin |
outcome_cancel cancels entries that are pending, ready or unreachable; for other statuses it returns the entry unchanged.
How a spin is chosen#
- The count starts when the entry becomes
ready. Only the player's paid spins in that game count; free-spin rounds do not. - The
spin_number-th counted spin wins multiplier × the spin's bet, with a tolerance of ±2 %. The multiplier is independent of the bet size. - When a spin does not fit the entry (for example an ante bet, or a bonus buy for a
spinentry, or no suitable round), the entry is postponed to the next paid spin. - Several entries are allowed. Entries due on the same spin fire one per spin, oldest first.
- If the game asks the player to choose after the debit, the target applies to every option.
Interplay with RTP and the wallet#
- Forced rounds are marked and excluded from the player's adaptive RTP window (RTP management).
- The
round_infonotifications of a forced round carry"forced": true(Wallet callbacks). - Gamble after a forced win is allowed in the games that offer it.
Errors#
UNAUTHORIZED, IP_NOT_ALLOWED, INVALID_REQUEST, GAME_NOT_FOUND, FORCED_OUTCOMES_UNSUPPORTED, GAME_HAS_NO_BONUS, INVALID_MULTIPLIER, MULTIPLIER_ABOVE_MAX_WIN, INVALID_SPIN_NUMBER, INVALID_KIND, INVALID_EXPIRY, DUPLICATE_EXTERNAL_ID, OUTCOME_NOT_FOUND — see the error reference.