Skip to content

Error codes

Errors return a JSON body { "error": { "code": "…", "message": "…" } } with the HTTP status below. Branch on code, not on the message text.

Authentication

codeHTTPwhen
MISSING_HEADERS401a required signing header is absent
INVALID_SIGNATURE401unknown/revoked key or signature mismatch
TIMESTAMP_SKEW401timestamp outside ±300s

Launch & session

codeHTTPwhen
GAME_DISABLED403game not in the operator’s enabled games
TENANT_SUSPENDED403operator is suspended
UNKNOWN_BOX404box not found
BOX_NOT_PLAYABLE409box inactive or has no current version
LAUNCH_TOKEN_INVALID401unknown / malformed launch token
LAUNCH_TOKEN_EXPIRED401past expiresAt
LAUNCH_TOKEN_CONSUMED409already exchanged for a session
SESSION_INVALID401unknown / revoked session token
SESSION_EXPIRED401past idle or max expiry

Purchase, cancel & wallet

codeHTTPwhen
INSUFFICIENT_FUNDS422wallet refused — balance
PLAYER_BLOCKED403wallet refused — player state
WALLET_UNAVAILABLE503wallet timeout / 5xx / unconfigured
ROUND_NOT_FOUND404round not found / not owned
ROUND_NOT_HELD409opening a round that isn’t held
ROUND_NOT_REFUNDABLE409cancelling a round that isn’t held
REFUND_NOT_ALLOWED403operator/box policy forbids refunds
FX_RATE_MOVED422open in a non-base currency (player-API or S2S /purchase) — the display-currency exchange rate moved past the operator’s tolerance (or became unavailable) since the price was shown; retry to re-quote at the current price

Inventory, cashback & shipping

codeHTTPwhen
INVENTORY_ITEM_NOT_FOUND404item not found or not owned
CASHBACK_NOT_AVAILABLE422item not unresolved, disabled, or no rule
INVENTORY_NOT_SHIPPABLE422batch contained a non-shippable item
SHIPPING_DISABLED403operator has shipping off
ORDER_NOT_FOUND404shipping order doesn’t exist for this player

Fairness & localization

codeHTTPwhen
INVALID_CLIENT_SEED422malformed clientSeed on rotate
UNSUPPORTED_LOCALE422locale not configured for the operator
UNSUPPORTED_CURRENCY422currency not configured for the operator

Validation

A malformed request body returns 422 with field-level details under error.fields.