Error codes
status: generated by scripts/gen-error-catalogue.mjs from packages/contracts/src/lib/errors.ts and apps/api/src/app/modules/player/trading-error.filter.ts. Do not edit by hand. [BT]
Every error body has code, message, retryable and, on player routes, uiAction. Read retryable from the body.
Two name sets exist. With ERROR_CODES_V20_ENABLED off (the default) the API returns the code in column 1 with the status in column 2. With it on, the API returns the v2.0 name in column 3 with that status. Column 3 reads: name, HTTP status, retryable. [FO] Which v2.0 names are final is open: owner row N13.
On a 429 or 503 the API may send Retry-After (seconds).
| Code (flag off) | HTTP | v2.0 name, HTTP, retryable (flag on) | What the caller should do |
|---|---|---|---|
LOGIN_REQUIRED | 401 | SESSION_EXPIRED, 401, no | Start a new player session (new launch). |
KYC_REQUIRED | 403 | KYC_REQUIRED, 422, yes | The player must finish identity checks at the operator, then try again. |
RG_BLOCKED | 403 | RG_RESTRICTED, 422, no | Show a responsible-gambling message. Do not retry. |
INSUFFICIENT_FUNDS | 422 | INSUFFICIENT_FUNDS, 422, yes | Ask the player to add funds, then try again. |
QUOTE_EXPIRED | 409 | QUOTE_EXPIRED, 409, yes | Ask for a new quote and show it. |
PRICE_CHANGED | 409 | PRICE_MOVED, 409, yes | Show the new price and ask the player to confirm again. |
MARKET_SUSPENDED | 422 | MARKET_SUSPENDED, 422, yes | Close the bet slip. The market or order is gone. |
LIQUIDITY_UNAVAILABLE | 422 | LIQUIDITY_UNAVAILABLE, 422, yes | Show a "not available" message. Do not retry the same request. |
INSUFFICIENT_COLLATERAL | 422 | SERVICE_UNAVAILABLE, 503, yes | Show a "not available" message. Do not retry the same request. |
COLLATERAL_STOP | 422 | SERVICE_UNAVAILABLE, 503, yes | Show a "not available" message. Do not retry the same request. |
EXTERNAL_ACCOUNT_UNHEALTHY | 422 | SERVICE_UNAVAILABLE, 503, yes | Show a "not available" message. Do not retry the same request. |
EXECUTION_UNKNOWN | 409 | EXECUTION_UNKNOWN, 409, yes | Do not send the order again. Read the order status later. |
PAM_UNAVAILABLE | 503 | WALLET_UNAVAILABLE, 503, yes | Wait, then retry. Use the same Idempotency-Key. |
CONCURRENT_MODIFICATION | 409 | SERVICE_UNAVAILABLE, 503, yes | Wait, then retry. Use the same Idempotency-Key. |
APPROVAL_REQUIRED | 403 | FEATURE_UNAVAILABLE, 403, no | Show a "not available" message. Do not retry the same request. |
RESOLUTION_CODE_REQUIRED | 400 | VALIDATION_FAILED, 400, no | Show a "not available" message. Do not retry the same request. |
STAKE_OUT_OF_RANGE | 422 | LIMIT_EXCEEDED, 422, yes | Ask the player to change the amount. |
QUOTE_NOT_FOUND | 404 | QUOTE_NOT_FOUND, 404, no | Ask for a new quote and show it. |
ORDER_NOT_FOUND | 404 | ORDER_NOT_FOUND, 404, no | Close the bet slip. The market or order is gone. |
DUPLICATE_ORDER | 409 | IDEMPOTENCY_KEY_REUSED, 409, no | Do not send the order again. Read the order status later. |
PROVIDER_UNAVAILABLE | 503 | SERVICE_UNAVAILABLE, 503, yes | Wait, then retry. Use the same Idempotency-Key. |
CAPABILITY_DISABLED | 403 | FEATURE_UNAVAILABLE, 403, no | Show a "not available" message. Do not retry the same request. |
LIMIT_VIOLATION | 422 | VALIDATION_FAILED, 400, no | Change the limit to a value inside the allowed range. |
TENANT_DISABLED | 403 | FEATURE_UNAVAILABLE, 403, no | Show a "not available" message. Do not retry the same request. |
IDEMPOTENCY_KEY_REQUIRED | 400 | IDEMPOTENCY_KEY_REQUIRED, 400, no | Wait, then retry. Use the same Idempotency-Key. |
IDEMPOTENCY_KEY_MISMATCH | 400 | IDEMPOTENCY_KEY_REUSED, 409, no | Wait, then retry. Use the same Idempotency-Key. |
IDEMPOTENCY_KEY_REUSED | 409 | IDEMPOTENCY_KEY_REUSED, 409, no | Wait, then retry. Use the same Idempotency-Key. |
RISK_REJECTED | 422 | RISK_REJECTED, 422, no | Show a "not available" message. Do not retry the same request. |
RISK_REVIEW_REQUIRED | 422 | RISK_REJECTED, 422, no | Show a "not available" message. Do not retry the same request. |
CLOSE_ONLY | 422 | PLAYER_CLOSE_ONLY, 422, no | Show a "not available" message. Do not retry the same request. |
RATE_LIMITED | 429 | RATE_LIMITED, 429, yes | Wait, then retry. Use the same Idempotency-Key. |
BLOCKED | 422 | PLAYER_RESTRICTED, 422, no | Show a "not available" message. Do not retry the same request. |
SETTLEMENT_HOLD | 422 | PLAYER_RESTRICTED, 422, no | Show a "not available" message. Do not retry the same request. |
PAM_CONTEXT_UNAVAILABLE | 422 | WALLET_UNAVAILABLE, 503, yes | Wait, then retry. Use the same Idempotency-Key. |
PLAYER_RG_RESTRICTED | 422 | RG_RESTRICTED, 422, no | Show a responsible-gambling message. Do not retry. |
KILL_SWITCH_ACTIVE | 503 | SERVICE_UNAVAILABLE, 503, yes | Show a "not available" message. Do not retry the same request. |
ROUTE_CAPABILITY_UNAVAILABLE | 422 | FEATURE_UNAVAILABLE, 403, no | Show a "not available" message. Do not retry the same request. |
ROUTE_FINALITY_EXCEEDS_RESERVATION | 422 | FEATURE_UNAVAILABLE, 403, no | Show a "not available" message. Do not retry the same request. |
CAPABILITY_NOT_SUPPORTED | 422 | FEATURE_UNAVAILABLE, 403, no | Show a "not available" message. Do not retry the same request. |
POSITION_QUANTITY_UNAVAILABLE | 409 | POSITION_QUANTITY_UNAVAILABLE, 409, yes | Wait, then retry. Use the same Idempotency-Key. |
FEATURE_DISABLED | 403 | FEATURE_UNAVAILABLE, 403, no | Show a "not available" message. Do not retry the same request. |
EXECUTION_LIQUIDITY_LOW | 503 | SERVICE_UNAVAILABLE, 503, yes | Wait, then retry. Use the same Idempotency-Key. |
TREASURY_UNCONFIGURED | 503 | SERVICE_UNAVAILABLE, 503, yes | Show a "not available" message. Do not retry the same request. |
DAILY_CAP_EXCEEDED | 503 | SERVICE_UNAVAILABLE, 503, yes | Show a "not available" message. Do not retry the same request. |
STAKE_LIMITS_UNCONFIGURED | 503 | SERVICE_UNAVAILABLE, 503, yes | Show a "not available" message. Do not retry the same request. |
BET_LIMITS_UNCONFIGURED | 503 | SERVICE_UNAVAILABLE, 503, yes | Show a "not available" message. Do not retry the same request. |
FEE_MODE_UNCONFIGURED | 503 | SERVICE_UNAVAILABLE, 503, yes | Show a "not available" message. Do not retry the same request. |
FEE_SETTINGS_EXCEEDED | 503 | SERVICE_UNAVAILABLE, 503, yes | Show a "not available" message. Do not retry the same request. |
LIQUIDITY_LEVELS_UNCONFIGURED | 503 | SERVICE_UNAVAILABLE, 503, yes | Show a "not available" message. Do not retry the same request. |
INSUFFICIENT_SIGNERS | 409 | SERVICE_UNAVAILABLE, 503, yes | Show a "not available" message. Do not retry the same request. |
FEE_CAP_EXCEEDED | 422 | RISK_REJECTED, 422, no | Show a "not available" message. Do not retry the same request. |
MAX_WINNINGS_EXCEEDED | 422 | MAX_WINNINGS_EXCEEDED, 422, yes | Ask the player to change the amount. |
MARKET_NOT_ENABLED | 422 | FEATURE_UNAVAILABLE, 403, no | Show a "not available" message. Do not retry the same request. |
REASON_CODE_NOT_ALLOWED | 422 | VALIDATION_FAILED, 400, no | Show a "not available" message. Do not retry the same request. |
STEP_UP_REQUIRED | 401 | STEP_UP_REQUIRED, 401, no | Ask the player for stronger sign-in, then retry. |
LAUNCH_TOKEN_INVALID | 401 | LAUNCH_TOKEN_INVALID, 401, no | Start a new player session (new launch). |
PLAYER_STATUS_CONFLICT | 422 | PLAYER_STATUS_CONFLICT, 422, no | Show a "not available" message. Do not retry the same request. |
CURSOR_EXPIRED | 410 | CURSOR_EXPIRED, 410, no | Show a "not available" message. Do not retry the same request. |
LIMIT_ABOVE_CEILING | 422 | LIMIT_ABOVE_CEILING, 422, no | No player action. Fix the request or read the message. |
SESSION_EXPIRED | 401 | SESSION_EXPIRED, 401, no | Start a new player session (new launch). |
VALIDATION_FAILED | 400 | VALIDATION_FAILED, 400, no | No player action. Fix the request or read the message. |
QUOTE_ALREADY_USED | 409 | QUOTE_ALREADY_USED, 409, no | No player action. Fix the request or read the message. |
PRICE_MOVED | 409 | PRICE_MOVED, 409, yes | Ask for a new quote and show it. |
RG_RESTRICTED | 422 | RG_RESTRICTED, 422, no | Show a responsible-gambling message. Do not retry. |
PLAYER_RESTRICTED | 422 | PLAYER_RESTRICTED, 422, no | Show a "not available" message. Do not retry the same request. |
PLAYER_CLOSE_ONLY | 422 | PLAYER_CLOSE_ONLY, 422, no | Show a "not available" message. Do not retry the same request. |
LIMIT_EXCEEDED | 422 | LIMIT_EXCEEDED, 422, yes | Show the limit message. Ask the player to change the amount. |
POSITION_LIMIT_EXCEEDED | 422 | POSITION_LIMIT_EXCEEDED, 422, yes | Show the limit message. Ask the player to change the amount. |
ORDER_NOT_CANCELLABLE | 409 | ORDER_NOT_CANCELLABLE, 409, no | No player action. Fix the request or read the message. |
COMBO_NOT_ALLOWED | 422 | COMBO_NOT_ALLOWED, 422, yes | Show a "not available" message. Do not retry the same request. |
PROMOTION_NOT_APPLICABLE | 422 | PROMOTION_NOT_APPLICABLE, 422, yes | No player action. Fix the request or read the message. |
MARKET_CLOSED | 422 | MARKET_CLOSED, 422, no | Show a "not available" message. Do not retry the same request. |
FEATURE_UNAVAILABLE | 403 | FEATURE_UNAVAILABLE, 403, no | Show a "not available" message. Do not retry the same request. |
WALLET_UNAVAILABLE | 503 | WALLET_UNAVAILABLE, 503, yes | Wait for Retry-After seconds, then retry with the same Idempotency-Key. |
SERVICE_UNAVAILABLE | 503 | SERVICE_UNAVAILABLE, 503, yes | Wait for Retry-After seconds, then retry with the same Idempotency-Key. |
GEO_CLOSE_ONLY | 422 | GEO_CLOSE_ONLY, 422, no | Show a "not available" message. Do not retry the same request. |
GEO_BLOCKED | 422 | GEO_BLOCKED, 422, no | Show a "not available" message. Do not retry the same request. |
FEE_RATE_UNAVAILABLE | 422 | FEE_RATE_UNAVAILABLE, 422, no | Show a "not available" message. Do not retry the same request. |
FX_UNAVAILABLE | 503 | FX_UNAVAILABLE, 503, yes | Wait for Retry-After seconds, then retry with the same Idempotency-Key. |
BRAND_OVERRIDE_EXCEEDS_OPERATOR | 400 | BRAND_OVERRIDE_EXCEEDS_OPERATOR, 400, no | No player action. Fix the request or read the message. |
ORDER_COST_BELOW_MINIMUM | 422 | ORDER_COST_BELOW_MINIMUM, 422, yes | Show the limit message. Ask the player to change the amount. |
ORDER_COST_ABOVE_MAXIMUM | 422 | ORDER_COST_ABOVE_MAXIMUM, 422, yes | Show the limit message. Ask the player to change the amount. |
Wallet protocol codes
[BT] 400 UNSUPPORTED_VERSION; 401 INVALID_SIGNATURE, STALE_REQUEST, REPLAYED_NONCE; signed 409 IDEMPOTENCY_CONFLICT. Business outcomes are HTTP 200 with REJECTED{code}, using only the codes listed per operation in ADR-059.
Operator API
House error format by default. [FO] RFC 9457 problem+json only with S2S_PROBLEM_JSON_ENABLED. The limits route returns LIMIT_VIOLATION (ADR text: LIMIT_ABOVE_CEILING); accept both. When the operator API reuses an Idempotency-Key with a different body it also uses IDEMPOTENCY_KEY_IN_PROGRESS (409) for a request still running. See idempotency.