Notell API Docs
Русский

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. Use it for test scenarios, promotions and QA.

  • Available for games with target_outcomes: true in /games/health (974 of 1010 games).
  • All methods are POST https://notell-api.com/gameActions.do with a method field. They need partner, api_key and an allowlisted IP.
  • The optional Idempotency-Key header is supported by every method on this page (Conventions). Common errors (UNAUTHORIZED, IP_NOT_ALLOWED, INVALID_IDEMPOTENCY_KEY, IDEMPOTENCY_CONFLICT, RATE_LIMITED) are listed in Errors and not repeated in the tables below.
  • The round is always the game's own natural outcome, found for this one entry: boards and features are never constructed by hand, and the result is not revealed in advance.
  • Target outcomes apply to wallet sessions only, not to demo mode.

How an entry is applied#

Statuses:

StatusMeaning
pendingThe platform is still searching for a suitable round. Paid spins are not counted yet.
readyA round was found. The player's paid spins in this game are now counted towards spin_number.
unreachableNo 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.
appliedThe round was played; applied_at and round_id are set.
expiredexpires_at passed before the entry was applied.
cancelledCancelled with outcome_cancel or in the admin panel.

Rules:

  • The count starts when the entry becomes ready, not when it is scheduled. Only the player's paid spins in that game count; free-spin rounds do not.
  • The spin_number-th counted spin pays multiplier × the spin's bet, with a tolerance of ±2 %. The multiplier does not depend on the bet size.
  • When a spin does not fit the entry (for example an ante bet, a bonus buy for a spin entry, 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.
  • Target-outcome rounds are marked and excluded from the player's adaptive RTP window (RTP). Their round_info notifications carry "forced": true (Wallet callbacks).
  • Gamble after a target-outcome win is allowed in the games that offer it.

outcome_schedule#

POST/gameActions.domethodoutcome_schedule

Schedules a target outcome for a player in a game.

Request#

curl
curl -s -X POST https://notell-api.com/gameActions.do \
  -H 'Content-Type: application/json' \
  -d '{
    "method": "outcome_schedule",
    "partner": "demo-casino",
    "api_key": "YOUR_API_KEY",
    "player_id": "player-1024",
    "symbol": "gates-of-olympus",
    "multiplier": "50",
    "kind": "bonus",
    "spin_number": 3,
    "external_id": "qa-case-17",
    "comment": "QA: big bonus on spin 3"
  }'
JSON
{
  "method": "outcome_schedule",
  "partner": "demo-casino",
  "api_key": "YOUR_API_KEY",
  "player_id": "player-1024",
  "symbol": "gates-of-olympus",
  "multiplier": "50",
  "kind": "bonus",
  "spin_number": 3,
  "external_id": "qa-case-17",
  "comment": "QA: big bonus on spin 3"
}
FieldTypeRequiredDescription
methodstringyes"outcome_schedule".
partner, api_keystringyesYour project id and API key.
player_idstringyesYour player id, 1–128 printable ASCII characters (spaces allowed).
symbolstringyesGame id with target_outcomes: true.
multiplierstring or numberyesTarget win as a multiple of the spin's bet: greater than 0, up to 7 integer digits and up to 2 decimals ("50", "2.5", "12.34"). It must not exceed the game's maximum win where the game has a known cap.
kindenumnospin (default): a win without a feature. bonus: a win that comes with a feature (a natural trigger, or the feature the player buys). bonus needs a game that has a feature.
spin_numberintegernoWhich counted paid spin of the player, 1–100000. Default: 1.
expires_atstringnoISO 8601 date-time with a zone. From 1 hour to 90 days after the call. Default: now + 7 days.
external_idstringnoYour id, unique within the project, 1–128 printable ASCII characters without whitespace.
commentstringnoFree text, 1–500 printable ASCII characters.

Response#

json
{
  "status": "ok",
  "outcome": {
    "outcome_id": "5a3e91d2-7c4b-4e08-b6a1-3f9d2c8e1a70",
    "external_id": "qa-case-17",
    "player_id": "player-1024",
    "symbol": "gates-of-olympus",
    "provider": "pragmatic",
    "kind": "bonus",
    "multiplier": "50.00",
    "spin_number": 3,
    "paid_spins_since": 0,
    "status": "pending",
    "variants": [],
    "comment": "QA: big bonus on spin 3",
    "created_at": "2027-02-15T10:00:00.000Z",
    "expires_at": "2027-02-28T12:00:00.000Z",
    "applied_at": null,
    "round_id": null
  }
}
FieldTypeDescription
outcome.outcome_idstringId of the entry (UUID).
outcome.external_idstring or nullYour id, if you sent one.
outcome.player_id, outcome.symbol, outcome.providerstringPlayer, game and its provider.
outcome.kindenumspin or bonus.
outcome.multiplierstringThe target multiplier, always with two decimals ("50.00"), whatever you sent.
outcome.spin_numberintegerThe requested counted spin.
outcome.paid_spins_sinceintegerPaid spins counted since the entry became ready.
outcome.statusenumpending, ready, unreachable, applied, expired or cancelled.
outcome.variantsarray<string>The kinds of round the platform found (for example a regular spin and a bought feature). Empty while pending.
outcome.commentstring or nullYour comment.
outcome.created_at, outcome.expires_atstringISO 8601, UTC.
outcome.applied_atstring or nullWhen the entry was applied.
outcome.round_idstring or nullThe round that carried the target outcome, once applied.

Errors#

CodeHTTPWhen
INVALID_REQUEST400A field is missing, has the wrong type or format.
GAME_NOT_FOUND404symbol is not a catalog game.
FORCED_OUTCOMES_UNSUPPORTED400The game does not support target outcomes (target_outcomes: false).
INVALID_KIND400kind is neither spin nor bonus.
GAME_HAS_NO_BONUS400kind is bonus but the game has no feature.
INVALID_MULTIPLIER400multiplier is not a positive number with up to 2 decimals.
MULTIPLIER_ABOVE_MAX_WIN400multiplier exceeds the maximum win of the game. Checked only for games with a known maximum win; for other games a too large multiplier is accepted and the entry ends unreachable.
INVALID_SPIN_NUMBER400spin_number is not an integer from 1 to 100000.
INVALID_EXPIRY400expires_at has no zone, or is less than 1 hour or more than 90 days ahead.
DUPLICATE_EXTERNAL_ID409An entry with this external_id already exists in the project.

outcome_get#

POST/gameActions.domethodoutcome_get

Returns one entry by outcome_id or by your external_id.

Request#

curl
curl -s -X POST https://notell-api.com/gameActions.do \
  -H 'Content-Type: application/json' \
  -d '{"method":"outcome_get","partner":"demo-casino","api_key":"YOUR_API_KEY","external_id":"qa-case-17"}'
JSON
{
  "method": "outcome_get",
  "partner": "demo-casino",
  "api_key": "YOUR_API_KEY",
  "external_id": "qa-case-17"
}
FieldTypeRequiredDescription
outcome_idstringexactly one of outcome_id / external_idEntry id (UUID).
external_idstringexactly one of outcome_id / external_idYour id.

Response#

json
{
  "status": "ok",
  "outcome": {
    "outcome_id": "5a3e91d2-7c4b-4e08-b6a1-3f9d2c8e1a70",
    "external_id": "qa-case-17",
    "player_id": "player-1024",
    "symbol": "gates-of-olympus",
    "provider": "pragmatic",
    "kind": "bonus",
    "multiplier": "50.00",
    "spin_number": 3,
    "paid_spins_since": 1,
    "status": "ready",
    "variants": ["bonus"],
    "comment": "QA: big bonus on spin 3",
    "created_at": "2027-02-15T10:00:00.000Z",
    "expires_at": "2027-02-28T12:00:00.000Z",
    "applied_at": null,
    "round_id": null
  }
}

The outcome object is described under outcome_schedule.

Errors#

CodeHTTPWhen
INVALID_REQUEST400Both or neither of outcome_id and external_id were sent.
OUTCOME_NOT_FOUND404No such entry in your project.

outcome_list#

POST/gameActions.domethodoutcome_list

Lists entries of your project, newest first, at most 200.

Request#

curl
curl -s -X POST https://notell-api.com/gameActions.do \
  -H 'Content-Type: application/json' \
  -d '{"method":"outcome_list","partner":"demo-casino","api_key":"YOUR_API_KEY","player_id":"player-1024","status":"ready"}'
JSON
{
  "method": "outcome_list",
  "partner": "demo-casino",
  "api_key": "YOUR_API_KEY",
  "player_id": "player-1024",
  "status": "ready"
}
FieldTypeRequiredDescription
player_idstringnoOnly entries of this player.
symbolstringnoOnly entries for this game.
statusstringnopending, ready, unreachable, applied, expired or cancelled.

Response#

json
{
  "status": "ok",
  "outcomes": [
    {
      "outcome_id": "5a3e91d2-7c4b-4e08-b6a1-3f9d2c8e1a70",
      "external_id": "qa-case-17",
      "player_id": "player-1024",
      "symbol": "gates-of-olympus",
      "provider": "pragmatic",
      "kind": "bonus",
      "multiplier": "50.00",
      "spin_number": 3,
      "paid_spins_since": 1,
      "status": "ready",
      "variants": ["bonus"],
      "comment": "QA: big bonus on spin 3",
      "created_at": "2027-02-15T10:00:00.000Z",
      "expires_at": "2027-02-28T12:00:00.000Z",
      "applied_at": null,
      "round_id": null
    }
  ]
}
FieldTypeDescription
outcomesarray<object>Entry objects, see outcome_schedule. Empty when nothing matches.

Errors#

CodeHTTPWhen
INVALID_REQUEST400A filter has the wrong type.

outcome_cancel#

POST/gameActions.domethodoutcome_cancel

Cancels an entry that is pending, ready or unreachable. For any other status the entry is returned unchanged.

Request#

curl
curl -s -X POST https://notell-api.com/gameActions.do \
  -H 'Content-Type: application/json' \
  -d '{"method":"outcome_cancel","partner":"demo-casino","api_key":"YOUR_API_KEY","outcome_id":"5a3e91d2-7c4b-4e08-b6a1-3f9d2c8e1a70"}'
JSON
{
  "method": "outcome_cancel",
  "partner": "demo-casino",
  "api_key": "YOUR_API_KEY",
  "outcome_id": "5a3e91d2-7c4b-4e08-b6a1-3f9d2c8e1a70"
}
FieldTypeRequiredDescription
outcome_idstringexactly one of outcome_id / external_idEntry id (UUID).
external_idstringexactly one of outcome_id / external_idYour id.

Response#

json
{
  "status": "ok",
  "outcome": {
    "outcome_id": "5a3e91d2-7c4b-4e08-b6a1-3f9d2c8e1a70",
    "external_id": "qa-case-17",
    "player_id": "player-1024",
    "symbol": "gates-of-olympus",
    "provider": "pragmatic",
    "kind": "bonus",
    "multiplier": "50.00",
    "spin_number": 3,
    "paid_spins_since": 1,
    "status": "cancelled",
    "variants": ["bonus"],
    "comment": "QA: big bonus on spin 3",
    "created_at": "2027-02-15T10:00:00.000Z",
    "expires_at": "2027-02-28T12:00:00.000Z",
    "applied_at": null,
    "round_id": null
  }
}

Errors#

CodeHTTPWhen
INVALID_REQUEST400Both or neither of outcome_id and external_id were sent.
OUTCOME_NOT_FOUND404No such entry in your project.

See also#

  • RTP: why these rounds are excluded from the adaptive window.
  • Wallet callbacks: the forced flag of round_info.
  • Admin: the same entries can be managed in the admin panel.
Documentation for operators and integrators.TEST_ONLY platform: non-withdrawable units, no real payments.