Skip to content

Response Codes & Error Codes

Response Headers

The API uses custom HTTP response header fields to report errors or information that is not specific to a request payload.

Custom header fieldDescription
X-H-ERROR-IDThe error ID that caused the call to fail. See below for a list of possible values. If this field is present and the HTTP code is 200, the API treats the call as failed. The failure equals HTTP code 400.
X-H-ERROR-MSGA text description of the error that caused the call to fail. This text is for diagnostics and logs only. It is not localized. Do not show it to the player. For a player-facing message on responsible-gambling prompts (for example, error 11/38), use passThroughData.clientMessage.msg on the reply body instead. See PassThroughData.

Error Reporting / Handling

The API answers every request with an HTTP return code. This code represents the overall success or failure of the call. Custom header fields and the response payload can give more information. See the table below for the retry rules.

NOTE: An HTTP return code of 200 usually means the call was successful. Ignore any error information in the response payload in this case. If the X-H-ERROR-ID response header field is present and the HTTP code is 200, the API treats the call as failed. The failure equals HTTP code 400.

HTTP return codes

Return codeDescriptionretry y/n
Success codes: the response is in JSON format
200The API received the request and authenticated it correctly. The operation succeeded without errors. NOTE: An HTTP code 200 means the call was successful. The API ignores any error reported in an errorCode object unless it also receives an X-H-ERROR-ID.can be repeated (all calls are idempotent)
Error codes: the API received the request, but an error occurred during processing. Check the optional X-H-ERROR-ID and X-H-ERROR-MSG response header fields for details. The response may also contain more information.
400The API could not process the request because of an error in the request payload.do not retry
401The signature of the request was wrong. The API could not perform other authorisation.do not retry
403The API authenticated the call, but the caller does not have permission to use the endpoint.do not retry
404The API could not find the endpoint.do not retry
405The method (GET/POST) is wrong or not allowed.do not retry
429The caller exceeded the rate limit. If you get this error repeatedly, contact customer support.retry after waiting some time
451The content is not available for legal reasons.do not retry
4xxSome other, unspecified error occurred.do not retry
Error codes for an internal problem. Treat these as temporary.
5xxAn unexpected error occurred.retry the call unless the response has a X-H-DONOTRETRY header
501The API does not implement this call.do not retry

Error codes sent via X-H-ERROR-ID field or used in errorCode object

The API can send the following error codes in the custom response header field. In most cases, you also get a text description of the error. The API also uses these values (column Return code) to identify known errors in an errorCode object.

ErrorcodeReturn codeDescription
SUCCESS0The call was successful.
PLAYERNOTFOUND1The operator could not find the player.
PLAYERBLOCKED2The player is blocked.
BALANCETOOLOW10The player's balance is too low for a debit.
BETLIMITREACHED11The bet limit is reached. The API cannot accept the bet. Game Studio API: if present, the reply body carries player-facing text in passThroughData.clientMessage.msg, not in this header. Whether this text is present depends on the operator's own decline message. Not every operator or account includes player-facing text, so the game studio must still have a static fallback ready for when it is absent. See PassThroughData.
GAMEROUNDALREADYSTARTED12The gameround already started (the operator already received an initial bet). The operator sends this error if it receives a second initial bet with a different transaction hash.
GAMEROUNDNOTACTIVE13The gameround is not active. The operator sends this error if it knows the gameround hash but the gameround already closed.
GAMEROUNDNOTFOUND14The operator did not find the gameround hash. The operator sends this error when it receives a transaction with an unknown gameround hash. Exception: an initial debit with isFirstDebit true indicates the start of a new gameround.
GAMEROUNDNOTSTARTED15The gameround has not started. The operator sends this error in this case: it receives a debit with isFirstDebit false, or a credit call, it knows the gameround hash, but it did not receive the initial debit. This does not normally happen. It indicates a problem in the implementation.
TRANSACTIONCOUNTWRONG16In a doTransaction call, transactionCount does not match the number of transactions passed. This does not normally happen. It indicates a problem in the implementation.
GAMEROUNDPLAYERMISMATCH17There is a mismatch between the gameround ID and the user ID. The gameround hash does not belong to the given player ID.
CURRENCYINVALID18The given currency is not valid, or it is not available for that player or game.
INVALIDPARAMETER19The operator received an invalid value for a parameter.
TRANSACTIONAFTEREND20In a gameTransaction package list, the operator received a debit or credit after an end transaction.
GAMEROUNDISLOCKED21The gameround is locked, or the operator is retrying a credit call. The player cannot start new games until the gameround unlocks. After 24 hours, the system marks the gameround as stranded. Perform manual reconciliation in this case. The player can start new games after that time.
GAMEROUNDISCLOSING22The gameround is closing, but the operator has not yet accepted the end gameround call. The player can start new games.
SPINNOTAVAILABLE23The requested spin type (free or bonus) is not available. Handle this the same way as a low balance error.
DEBITSHOULDBECANCELLED24A debit failed. Cancel it. (Internal EveryMatrix use only.)
COOLOFFPERIODACTIVE25The player is in a cool-off period.
TRANSACTIONSARERETRYING26The operator receives new transactions, but pending transactions still exist. (Internal error.)
ENDTRANSACTIONALREADYRECEIVED27The operator receives new transactions, but it already processed the end transaction. The operator is retrying it. (Internal error.)
REGIONISBLOCKED28The operator blocked the request for legal reasons.
NOTLOGGEDON29The player is not logged in to the casino.
RESPONSIBLEGAMINGLIMITREACHED30The player reached the bet limit.
RESPONSIBLESGAMINGSESSIONEXPIRED31The session limit is reached. The session expired.
PLAYERNOAUTHENTICATED32The casino does not know the player.
DISCOUNTNOTELIGIBLE33The discount submitted in doTransactions is not eligible.
GENERICBETERROR34An unexpected error occurred on a debit transaction.
GENERICWINERROR35An unexpected error occurred on a credit transaction.
OPERATIONBEINGPROCESSED36The operator is processing another transaction.
TRANSACTIONALREADYEXISTS37The operator already processed the transaction.
REALITYCHECK38The operator triggered a reality check. Game Studio API: for this code, passThroughData.clientMessage.msg always contains text. Use it for display, then retry the same call once the player acknowledges it. See PassThroughData.
SIGNATUREWRONG1001The signature is incorrect.
PAYLOADNOTJSON1002The received payload is not valid JSON.
WRONGHEADERS1003Header fields are missing or wrong.
PARAMETERMISSING1004The request is missing a mandatory parameter.
INVALIDGAMEMODE1005The request contains an invalid game mode.
GAMECODENOTFOUND1006The operator could not find the game code, or the game code is not available.
GAMECONFIGNOTSUPPORTED1007The requested game configuration is not supported.
SESSIONINVALID1008The session is expired or invalid. Reload the game by requesting a new launch URL with the getGameURL call.
RNGFAILURE1009The RNG failed.
NETWORKERROR1010A general network error occurred.
DATASTRUCTUREWRONG1200The sent payload is wrong.
RATELIMITEXCEEDED1300The caller exceeded a rate limit. The operator usually also reports this with HTTP status code 429.
UNEXPECTED-1An unexpected error occurred. The operator cannot specify it in more detail.