Notell API Docs
Русский

Reference

Error reference

Errors are returned as {"status":"error","message":"<CODE>"} with the HTTP status shown below. Branch on the code, not on the HTTP status alone. Use the filter to search by code or text. Format rules: Conventions.

CodeHTTPWhereMeaningWhat to do
UNAUTHORIZED401API (any)The partner id is unknown or the api_key does not match.Check partner and api_key. If the key was rotated, install the new key.
INVALID_REQUEST400API (any)A required field is missing or has a wrong type or format (for example a bad currency, player_id, client_platform, region or demo_reset), or an unknown field was sent. /playGame.do, round_cancel and the reports accept only the documented fields.Compare the request with the method description and remove unknown fields. A body that is not valid JSON is answered with REQUEST_FAILED.
INVALID_IDEMPOTENCY_KEY400API (any)The Idempotency-Key header is not 1–128 printable ASCII characters (or was sent twice).Use a UUID or another short key without spaces.
IDEMPOTENCY_CONFLICT409 / 400API (any)The same Idempotency-Key was already used with a different request body. HTTP 409 on /gameActions.do; on /playGame.do the same code comes with HTTP 400.Use a new key for a new request; repeat the identical body to get the first answer.
REQUEST_FAILED400API (any)The request failed for a reason that has no public code: the body is not valid JSON, the content type is not JSON or form data, or a time-out or network failure happened (for example while calling your wallet at launch).Check the body and Content-Type: application/json. If the body is fine, retry once; if it repeats, contact the platform owner with the time of the request.
FORBIDDEN403API (any)The action is not allowed for this caller.Do not retry; check permissions (admin) or the launch parameters.
RATE_LIMITED429API (any)The per-project quota of the endpoint class (launch, actions, reports) is used up for this minute. The quota is counted before the key is checked, so requests with a wrong key also use it.Wait for Retry-After seconds and retry; spread bulk work. See Conventions, Rate limits.
DATABASE_UNAVAILABLE503API (any)GET /health could not reach the database.Retry shortly; if it persists, contact the platform owner.
UNSUPPORTED_GAME404/playGame.dosymbol is missing, is not a string, or is not a published game id.Take ids from GET /games/catalog (game_id).
UNSUPPORTED_LANGUAGE400/playGame.dolang is malformed or not supported by this game.Use a code from the game's languages list, or omit lang to use the project default.
REAL_MODE_DISABLED400/playGame.dogametype is neither demo (your wallet) nor fun (free-play demo). Real-money mode is not available.Send "gametype": "demo" or "gametype": "fun".
INVALID_DEMO_BALANCE400/playGame.dodemo_balance of a gametype: "fun" launch is outside 1.00–10,000,000.00 or is not a number with at most two decimals.Send a value in range, e.g. "100000.00", or omit it for the default.
DEMO_UNAVAILABLE503/playGame.doDemo mode is not provisioned on this server.Contact the platform owner.
PROMO_UNSUPPORTED400/playGame.doThe legacy freespins field was sent to the launch method.Remove it and grant free spins with /gameActions.do (freespins_create).
ROUND_IN_PROGRESS400/playGame.doThe player has an unfinished round in this game in another currency.Launch with the currency of the unfinished round (or let the round finish).
BALANCE_UNAVAILABLE400/playGame.doYour wallet answered the session_info request at launch with {"status":"error",…}, so the session was not created.Make session_info answer status: "ok" with the balance of a known player; use "Test connection" in the admin panel.
WALLET_IDENTITY_MISMATCH400/playGame.doThe wallet settings stored for the project do not match the server configuration, so the platform refuses to call your wallet.Contact the platform owner; this is not caused by the request.
IP_NOT_ALLOWED403/gameActions.doThe caller IP is not on the project allowlist (/gameActions.do, /playerRtp.do; /playGame.do has no IP check).Ask the platform owner or a project user with the credentials permission to add your server network (CIDR) in the admin panel, section IP Whitelist.
INVALID_METHOD400/gameActions.domethod is not one of the supported methods.Use freespins_* or outcome_* methods listed in this documentation.
METHOD_RETIRED400/gameActions.doA legacy method (freespins_set, freespins_delete, or freespins_get without an id) was called.Migrate to freespins_create, freespins_get, freespins_list, freespins_cancel.
GAME_NOT_FOUND404/gameActions.dosymbol is not a published game.Take ids from GET /games/health.
DUPLICATE_EXTERNAL_ID409/gameActions.doexternal_id is already used by another record of this project.Use a unique external_id, or read the existing record by it.
PROJECT_BET_LIMIT400/gameActions.doThe bet is outside the bet limits of the project, the game or the player. Also returned by a game when a stake is outside the limits.Choose a bet inside the limits (see Bet limits), or change the limits in the admin.
ROUND_NOT_FOUND404/gameActions.doround_id is not a round of this partner.Take the id from meta.round_id of a wallet callback or from report_rounds.
ROUND_NOT_CANCELLABLE409/gameActions.doThe round cannot be cancelled: it is finished, its win is being credited, the result was shown to the player, or it is a free-spin round.Nothing to do; read the round with report_rounds.
ROUND_BUSY409/gameActions.doA wallet call of this round is in flight at this moment.Retry after a few seconds.
ROUND_CANCEL_UNAVAILABLE400/gameActions.doRound cancellation is not enabled on the server yet.Contact the platform owner.
INVALID_PERIOD400/gameActions.dofrom is not before to, or the report_ggr period is longer than 366 days.Use ISO dates and a shorter period.
INVALID_CURSOR400/gameActions.docursor is not a next_cursor returned by the same report.Pass next_cursor unchanged, with the same filters.
INVALID_GROUP_BY400/gameActions.dogroup_by contains something other than day, symbol, currency.Use a subset of those three.
INVALID_STATE400/gameActions.dostate of report_rounds is not settled, pending, cancelled or rejected.Use one of those values.
INVALID_LIMIT400/gameActions.dolimit of a report is outside its range (rounds 1–500, reconciliation 1–1000).Use an integer in the range and page with cursor.
INVALID_FROM400/gameActions.dofrom is not an ISO 8601 date or date-time with a zone (Z or +hh:mm).Use 2027-01-15 or 2027-01-15T12:00:00Z.
INVALID_PLAYER_ID400/gameActions.doplayer_id of a report is not a short printable string.Pass the id exactly as you use it elsewhere.
INVALID_TO400/gameActions.doto is not an ISO 8601 date or date-time with a zone (Z or +hh:mm).Use 2027-01-15 or 2027-01-15T12:00:00Z.
INVALID_SYMBOL400/gameActions.dosymbol of a report is not a short printable string.Pass a game id from GET /games/catalog.
INVALID_ROUND_ID400/gameActions.doround_id of a report is not a short printable string.Take the id from meta.round_id of a wallet callback or from report_rounds.
INVALID_COUNT400Free spinscount is not a whole number from 1 to 1000.Send 1–1000.
INVALID_FREE_SPIN_BET400Free spinsbet is not a valid base-mode bet of the game (or not a decimal string).Use one of the game's own bets as a decimal string, for example "1.00".
INVALID_EXPIRY400Free spinsexpires_at is not an ISO 8601 date with a time zone, or is outside the allowed range (free spins: +1 hour to +30 days; target outcomes: +1 hour to +90 days).Send a value like 2026-11-01T12:00:00Z inside the range, or omit it for the default (7 days).
FREE_SPINS_UNSUPPORTED400Free spinsFree spins are not available for this game's provider.Check the free_spins flag in GET /games/health.
GRANT_NOT_FOUND404Free spinsNo free-spins grant with this grant_id / external_id in the project.Check the id; list grants with freespins_list.
FORCED_OUTCOMES_UNSUPPORTED400Target outcomesTarget outcomes are not available for this game's provider.Check the target_outcomes flag in GET /games/health.
GAME_HAS_NO_BONUS400Target outcomeskind is bonus but the game has no feature round.Use kind: "spin".
INVALID_MULTIPLIER400Target outcomesmultiplier is not a positive number with at most 2 decimals (up to 7 digits before the point).Send for example 50 or "12.5".
MULTIPLIER_ABOVE_MAX_WIN400Target outcomesmultiplier is above the maximum win of the game (in bets).Lower the multiplier.
INVALID_SPIN_NUMBER400Target outcomesspin_number is not a whole number from 1 to 100000.Send 1–100000.
INVALID_KIND400Target outcomeskind is neither spin nor bonus.Use spin or bonus.
OUTCOME_NOT_FOUND404Target outcomesNo target outcome with this outcome_id / external_id in the project.Check the id; list entries with outcome_list.
INVALID_ACTION400/playerRtp.doaction is not get, set, auto or bet-limit.Use one of the four actions.
RTP_PROVIDER_UNSUPPORTED400/playerRtp.doprovider is not endorphina, pragmatic or nolimitcity.Send a supported provider id.
RTP_LEVEL_INVALID400/playerRtp.dortp is not a number with at most 2 decimals.Send for example 94.5.
RTP_LEVEL_OUT_OF_RANGE400/playerRtp.doThe RTP is outside 60–100 %.Send a value from 60 to 100.
RTP_POLICY_REQUIRED400/playerRtp.doThe project has no provider RTP yet, so a new player cannot be bound.Set the provider RTP in the admin, RTP & players.
INVALID_REASON400/playerRtp.doreason is longer than 200 characters or not a string.Shorten the reason.
INVALID_CURRENCY400/playerRtp.docurrency is not a supported ISO 4217 fiat code (/playerRtp.do bet-limit: three uppercase letters; reports: a code outside the supported list).Send a supported code in upper case, for example EUR (see Currencies).
INVALID_BET_LIMIT400/playerRtp.domin_minor / max_minor are not digit strings, min is below 1, or max is below min.Send minor units as strings, min ≥ 1, max ≥ min; or both null to remove the limit.
INVALID_PLAYER400/playerRtp.doplayer_id is missing or invalid. /playerRtp.do accepts only letters, digits and _ . : @ -, 1–128 characters.Send the player id used at launch (a player id with other characters cannot be managed through this method).
INSUFFICIENT_FUNDS200Your walletYour answer to a bet when the player balance is too low: {"status":"error","message":"INSUFFICIENT_FUNDS",…}. The round is rejected and nothing is debited.Return it only when the balance really is too low; any other error makes the platform retry.
CALLBACK_HTTP_ERROR400Your walletYour wallet answered with a non-2xx HTTP status. At launch (session_info) this code is returned to you with HTTP 400. For a bet, any 4xx except 408 and 429 is a definitive refusal: the round is rejected at once and a refund is queued; 5xx, 408 and 429 are retried.Return HTTP 200 with the JSON answer (also for INSUFFICIENT_FUNDS). Use 4xx only to refuse a bet for good.
INVALID_CALLBACK_RESPONSE400Your walletThe wallet answer is not usable: not valid JSON, status is not ok/error, currency differs from the callback path, or balance is not a plain non-negative JSON number with at most 2 decimals. Error answers need balance and currency too. At launch this code is returned to you with HTTP 400.Answer {"status":"ok","balance":<number>,"currency":"<same currency>"}; for a refusal {"status":"error","message":"…","balance":<number>,"currency":"<same currency>"}.
TRANSACTION_CANCELLED200Your walletAnswer your wallet gives to a bet whose transaction id was already cancelled by a refund.Do not debit; answer {"status":"error","message":"TRANSACTION_CANCELLED",…}.
GAME_MODE_DISABLED400In the gameThe game mode (for example bonus buy or ante) is switched off for the project. Also returned by freespins_create.Enable the flag in the admin panel, Projects, Providers.
PROJECT_GAME_DISABLED400In the gameThe game or its provider is switched off for the project. Also returned by freespins_create.Enable the provider in the admin panel, Projects, Providers.
CURRENCY_REQUIRED400In the gameA currency from the supported list is required.Send a supported ISO 4217 fiat code (see Currencies).
FREE_SPINS_ACTIVE—In the gameThe player has active free spins in this game and tried a paid spin, ante or bonus buy. Shown by the game client, not returned by the operator API.The player plays the free spins first; they end when used up, expired or cancelled.
FREE_SPINS_CHANGED—In the gameThe free-spins grant of the player changed while a round was starting (for example it was cancelled). Shown by the game client, not returned by the operator API.The player repeats the spin.
UNKNOWN_PROJECT404Admin APIThe project (partner) does not exist.Check the project id.
INVALID_ADMIN_ORIGIN403Admin APIA change request of the admin API came without the expected Origin / X-Admin-Request headers.Use the admin panel itself; the admin API is not a public integration API.
PROJECT_SETTINGS_CONFLICT409Admin APISomeone else saved the project settings first.Reload the page and repeat your change.
UNSUPPORTED_BY_RUNTIME400Admin APIA setting that this platform cannot honour (legacy RTP policy, alerts, retention strategy).Leave it off; use personal RTP instead of the legacy policy.
INVALID_CALLBACK_URL400Admin APIThe callback URL is not acceptable.Use https://, no trailing slash, no user info, query or fragment, port 443 only, at most 512 characters, a public host name.
CONFIRMATION_REQUIRED400Admin APIKey rotation needs the project id typed as confirmation.Type the project id in the confirmation field.
CREDENTIALS_CHANGED409Admin APIThe API key was changed by someone else while you were working.Reload the page and decide again.
PARTNER_LOCKED403Admin APIThis project is internal (demo or site wallet); its key and callback are read-only.Nothing to do; use your own project.
CREDENTIALS_NOT_ENABLED503Admin APIChanging keys and callback URLs is not enabled on the server yet.Contact the platform owner.
INVALID_FRAME_ORIGINS400Admin APIThe list of allowed iframe origins is not valid: more than 16 entries, or an entry is not an https:// origin (no wildcard, path, query, user info; the host needs a dot).Send up to 16 origins such as https://casino.example.
AUTH_THROTTLED429Admin APIToo many failed sign-ins to the admin panel (5 per minute per user and address, 20 per minute per address).Wait a minute and sign in again with the right password.
INVALID_PROJECT_SETTINGS400Admin APIA project settings section has a wrong shape or value (also INVALID_PROVIDER_FLAGS, INVALID_BET_LIMIT, BET_LIMIT_OUT_OF_BOUNDS, UNSUPPORTED_PROVIDER_CAPABILITY, UNKNOWN_GAME).Check the field the admin panel marks and save again.
RTP_RULE_INVALID400Admin APIThe adaptive RTP rule has an invalid field (window 50–100000 rounds, step 10–2000 bps, maximum drop 0–4000 bps, upper above lower).Correct the rule fields in the admin panel, RTP & players.
INVALID_PROVIDER_FLAGS400Admin APIThe provider switches of a project are malformed.Send every provider flag as a boolean.
UNSUPPORTED_PROVIDER_CAPABILITY400Admin APIA provider flag asks for a capability the provider does not have (for example promo or ante).Leave that flag off.
BET_LIMIT_OUT_OF_BOUNDS400Admin APIA project bet limit lies outside the bounds set by the platform owner for this client.Choose a range inside the bounds.
UNKNOWN_GAME400Admin APIA per-game setting names a game id that is not published.Take ids from GET /games/catalog.