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.
| Code | HTTP | Where | Meaning | What to do |
|---|---|---|---|---|
UNAUTHORIZED | 401 | API (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. |
IP_NOT_ALLOWED | 403 | API (any) | The caller IP is not on the project allowlist (/gameActions.do, /playerRtp.do). | Ask the platform owner to add your server network (CIDR) in the admin panel, section IP Whitelist. |
INVALID_REQUEST | 400 | API (any) | The body is malformed, a required field is missing or has a wrong type, or an unknown field was sent (launch accepts only documented fields). | Compare the request with the method description; remove unknown fields. |
INVALID_IDEMPOTENCY_KEY | 400 | API (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_CONFLICT | 409 | API (any) | The same Idempotency-Key was already used with a different request body. | Use a new key for a new request; repeat the identical body to get the first answer. |
REQUEST_FAILED | 400 | API (any) | The request failed for a reason that has no public code. | Retry once; if it repeats, contact the platform owner with the time of the request. |
FORBIDDEN | 403 | API (any) | The action is not allowed for this caller. | Do not retry; check permissions (admin) or the launch parameters. |
UNSUPPORTED_GAME | 404 | /playGame.do | symbol is not a published game id. | Take ids from GET /games/health (game_id). |
UNSUPPORTED_LANGUAGE | 400 | /playGame.do | lang 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_DISABLED | 400 | /playGame.do | gametype is not demo. Real-money mode is not available. | Send "gametype": "demo". |
PROMO_UNSUPPORTED | 400 | /playGame.do | The legacy freespins field was sent to the launch method. | Remove it and grant free spins with /gameActions.do (freespins_create). |
ROUND_IN_PROGRESS | 400 | /playGame.do | The 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_UNAVAILABLE | 400 | /playGame.do | The session_info request to your wallet did not succeed, so the session was not created. | Check your callback URL and response format (see Wallet callbacks); use "Test connection" in the admin. |
INVALID_METHOD | 400 | /gameActions.do | method is not one of the supported methods. | Use freespins_* or outcome_* methods listed in this documentation. |
METHOD_RETIRED | 400 | /gameActions.do | A 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_FOUND | 404 | /gameActions.do | symbol is not a published game. | Take ids from GET /games/health. |
DUPLICATE_EXTERNAL_ID | 409 | /gameActions.do | external_id is already used by another record of this project. | Use a unique external_id, or read the existing record by it. |
PROJECT_BET_LIMIT | 400 | /gameActions.do | The 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. |
INVALID_COUNT | 400 | Free spins | count is not a whole number from 1 to 1000. | Send 1–1000. |
INVALID_FREE_SPIN_BET | 400 | Free spins | bet 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_EXPIRY | 400 | Free spins | expires_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_UNSUPPORTED | 400 | Free spins | Free spins are not available for this game's provider. | Check the free_spins flag in GET /games/health. |
GRANT_NOT_FOUND | 404 | Free spins | No free-spins grant with this grant_id / external_id in the project. | Check the id; list grants with freespins_list. |
FORCED_OUTCOMES_UNSUPPORTED | 400 | Target outcomes | Target outcomes are not available for this game's provider. | Check the target_outcomes flag in GET /games/health. |
GAME_HAS_NO_BONUS | 400 | Target outcomes | kind is bonus but the game has no feature round. | Use kind: "spin". |
INVALID_MULTIPLIER | 400 | Target outcomes | multiplier 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_WIN | 400 | Target outcomes | multiplier is above the maximum win of the game (in bets). | Lower the multiplier. |
INVALID_SPIN_NUMBER | 400 | Target outcomes | spin_number is not a whole number from 1 to 100000. | Send 1–100000. |
INVALID_KIND | 400 | Target outcomes | kind is neither spin nor bonus. | Use spin or bonus. |
OUTCOME_NOT_FOUND | 404 | Target outcomes | No target outcome with this outcome_id / external_id in the project. | Check the id; list entries with outcome_list. |
INVALID_ACTION | 400 | /playerRtp.do | action is not get, set, auto or bet-limit. | Use one of the four actions. |
RTP_PROVIDER_UNSUPPORTED | 400 | /playerRtp.do | provider is not endorphina, pragmatic or nolimitcity. | Send a supported provider id. |
RTP_LEVEL_INVALID | 400 | /playerRtp.do | rtp is not a number with at most 2 decimals. | Send for example 94.5. |
RTP_LEVEL_OUT_OF_RANGE | 400 | /playerRtp.do | The RTP is outside 60–100 %. | Send a value from 60 to 100. |
RTP_POLICY_REQUIRED | 400 | /playerRtp.do | The project has no provider RTP yet, so a new player cannot be bound. | Set the provider RTP in the admin, RTP & players. |
INVALID_REASON | 400 | /playerRtp.do | reason is longer than 200 characters or not a string. | Shorten the reason. |
INVALID_CURRENCY | 400 | /playerRtp.do | currency is not a three-letter uppercase code. | Send for example EUR. |
INVALID_BET_LIMIT | 400 | /playerRtp.do | min_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_PLAYER | 400 | /playerRtp.do | player_id is missing or invalid. | Send the player id used at launch. |
INSUFFICIENT_FUNDS | 200 | Your wallet | Your 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_ERROR | — | Your wallet | Seen in the admin API Logs: your wallet answered with a non-2xx HTTP status. | Return HTTP 200 with the JSON answer (also for INSUFFICIENT_FUNDS). |
INVALID_CALLBACK_RESPONSE | — | Your wallet | Seen in the admin API Logs: the answer is not valid JSON, status is not ok/error, or currency differs from the request currency. | Answer {"status":"ok","balance":<number>,"currency":"<same currency>"}. |
GAME_MODE_DISABLED | 400 | In the game | The game mode (for example bonus buy or ante) is switched off for the project. | Enable the flag in the admin, Projects, Providers. |
PROJECT_GAME_DISABLED | 400 | In the game | The game or its provider is switched off for the project. | Enable the provider in the admin, Projects, Providers. |
CURRENCY_REQUIRED | 400 | In the game | A currency from the supported list is required. | Send UAH, USD, EUR or RUB. |
FREE_SPINS_ACTIVE | — | In the game | The 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. |
UNKNOWN_PROJECT | 404 | Admin API | The project (partner) does not exist. | Check the project id. |
INVALID_ADMIN_ORIGIN | 403 | Admin API | A 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_CONFLICT | 409 | Admin API | Someone else saved the project settings first. | Reload the page and repeat your change. |
UNSUPPORTED_BY_RUNTIME | 400 | Admin API | A 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_URL | 400 | Admin API | The 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_REQUIRED | 400 | Admin API | Key rotation needs the project id typed as confirmation. | Type the project id in the confirmation field. |
CREDENTIALS_CHANGED | 409 | Admin API | The API key was changed by someone else while you were working. | Reload the page and decide again. |
PARTNER_LOCKED | 403 | Admin API | This project is internal (demo or site wallet); its key and callback are read-only. | Nothing to do; use your own project. |
CREDENTIALS_NOT_ENABLED | 503 | Admin API | Changing keys and callback URLs is not enabled on the server yet. | Contact the platform owner. |
General advice#
- 4xx: fix the request; repeating it unchanged will fail again (except
IDEMPOTENCY_CONFLICT, where repeating the original request returns the first answer). - Network error or time-out: repeat with the same
Idempotency-Key(Conventions). REQUEST_FAILED: retry once, then contact the platform owner.- Wallet-side failures show up in the admin API Logs with the same codes (Admin: operations).