Appearance
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 field | Description |
| X-H-ERROR-ID | The 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-MSG | A 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 code | Description | retry y/n |
| Success codes: the response is in JSON format | ||
| 200 | The 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. | ||
| 400 | The API could not process the request because of an error in the request payload. | do not retry |
| 401 | The signature of the request was wrong. The API could not perform other authorisation. | do not retry |
| 403 | The API authenticated the call, but the caller does not have permission to use the endpoint. | do not retry |
| 404 | The API could not find the endpoint. | do not retry |
| 405 | The method (GET/POST) is wrong or not allowed. | do not retry |
| 429 | The caller exceeded the rate limit. If you get this error repeatedly, contact customer support. | retry after waiting some time |
| 451 | The content is not available for legal reasons. | do not retry |
| 4xx | Some other, unspecified error occurred. | do not retry |
| Error codes for an internal problem. Treat these as temporary. | ||
| 5xx | An unexpected error occurred. | retry the call unless the response has a X-H-DONOTRETRY header |
| 501 | The 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.
| Errorcode | Return code | Description |
| SUCCESS | 0 | The call was successful. |
| PLAYERNOTFOUND | 1 | The operator could not find the player. |
| PLAYERBLOCKED | 2 | The player is blocked. |
| BALANCETOOLOW | 10 | The player's balance is too low for a debit. |
| BETLIMITREACHED | 11 | The 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. |
| GAMEROUNDALREADYSTARTED | 12 | The 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. |
| GAMEROUNDNOTACTIVE | 13 | The gameround is not active. The operator sends this error if it knows the gameround hash but the gameround already closed. |
| GAMEROUNDNOTFOUND | 14 | The 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. |
| GAMEROUNDNOTSTARTED | 15 | The 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. |
| TRANSACTIONCOUNTWRONG | 16 | In a doTransaction call, transactionCount does not match the number of transactions passed. This does not normally happen. It indicates a problem in the implementation. |
| GAMEROUNDPLAYERMISMATCH | 17 | There is a mismatch between the gameround ID and the user ID. The gameround hash does not belong to the given player ID. |
| CURRENCYINVALID | 18 | The given currency is not valid, or it is not available for that player or game. |
| INVALIDPARAMETER | 19 | The operator received an invalid value for a parameter. |
| TRANSACTIONAFTEREND | 20 | In a gameTransaction package list, the operator received a debit or credit after an end transaction. |
| GAMEROUNDISLOCKED | 21 | The 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. |
| GAMEROUNDISCLOSING | 22 | The gameround is closing, but the operator has not yet accepted the end gameround call. The player can start new games. |
| SPINNOTAVAILABLE | 23 | The requested spin type (free or bonus) is not available. Handle this the same way as a low balance error. |
| DEBITSHOULDBECANCELLED | 24 | A debit failed. Cancel it. (Internal EveryMatrix use only.) |
| COOLOFFPERIODACTIVE | 25 | The player is in a cool-off period. |
| TRANSACTIONSARERETRYING | 26 | The operator receives new transactions, but pending transactions still exist. (Internal error.) |
| ENDTRANSACTIONALREADYRECEIVED | 27 | The operator receives new transactions, but it already processed the end transaction. The operator is retrying it. (Internal error.) |
| REGIONISBLOCKED | 28 | The operator blocked the request for legal reasons. |
| NOTLOGGEDON | 29 | The player is not logged in to the casino. |
| RESPONSIBLEGAMINGLIMITREACHED | 30 | The player reached the bet limit. |
| RESPONSIBLESGAMINGSESSIONEXPIRED | 31 | The session limit is reached. The session expired. |
| PLAYERNOAUTHENTICATED | 32 | The casino does not know the player. |
| DISCOUNTNOTELIGIBLE | 33 | The discount submitted in doTransactions is not eligible. |
| GENERICBETERROR | 34 | An unexpected error occurred on a debit transaction. |
| GENERICWINERROR | 35 | An unexpected error occurred on a credit transaction. |
| OPERATIONBEINGPROCESSED | 36 | The operator is processing another transaction. |
| TRANSACTIONALREADYEXISTS | 37 | The operator already processed the transaction. |
| REALITYCHECK | 38 | The 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. |
| SIGNATUREWRONG | 1001 | The signature is incorrect. |
| PAYLOADNOTJSON | 1002 | The received payload is not valid JSON. |
| WRONGHEADERS | 1003 | Header fields are missing or wrong. |
| PARAMETERMISSING | 1004 | The request is missing a mandatory parameter. |
| INVALIDGAMEMODE | 1005 | The request contains an invalid game mode. |
| GAMECODENOTFOUND | 1006 | The operator could not find the game code, or the game code is not available. |
| GAMECONFIGNOTSUPPORTED | 1007 | The requested game configuration is not supported. |
| SESSIONINVALID | 1008 | The session is expired or invalid. Reload the game by requesting a new launch URL with the getGameURL call. |
| RNGFAILURE | 1009 | The RNG failed. |
| NETWORKERROR | 1010 | A general network error occurred. |
| DATASTRUCTUREWRONG | 1200 | The sent payload is wrong. |
| RATELIMITEXCEEDED | 1300 | The caller exceeded a rate limit. The operator usually also reports this with HTTP status code 429. |
| UNEXPECTED | -1 | An unexpected error occurred. The operator cannot specify it in more detail. |