155API

Error Codes

The canonical wallet-callback status enum used across the 155.io API


This page is the single source of truth for the status values your wallet returns on the operator callbacks (/balance, /bet, /win, /rollback). The callback pages link here rather than re-listing the enum, so this is the one place it lives.

Always return HTTP 200

Every operator callback response uses HTTP 200 — the outcome lives in the body status, never in the HTTP status code. Our system treats any non-200 response as a transport-level failure (which may trigger retries or rollbacks) before the body is ever parsed. A declined bet is still a 200 with an error status.

Status enum

These are the only status values 155.io recognises on a direct-integration wallet callback. Any value not in this list is treated the same as UNKNOWN_ERROR.

StatusMeaningTypical callback(s)
SUCCESSThe operation completed. Return this whenever you accept the request (and for idempotent replays of an already-applied /win or /rollback)./balance, /bet, /win, /rollback
INSUFFICIENT_BALANCE_ERRORThe player does not have enough balance to cover the bet./bet
DUPLICATE_TRANSACTION_ERRORThe transactionId has already been processed — reject the duplicate (idempotency)./bet
UNKNOWN_ERRORAny other failure. The operation could not be completed and no more specific status applies./balance, /bet, /win, /rollback
BONUS_ERRORThe bet does not pass your bonus / promotion rules./bet
BET_LIMIT_REACHED_ERRORThe player has reached a configured betting limit./bet

On HTTP-status vs `status`

Returning a non-200 HTTP status (e.g. 400/500) to signal a declined bet is the most common integration mistake. Return 200 with INSUFFICIENT_BALANCE_ERROR (or the relevant status above) instead.

These are NOT status values

  • ROUND_CLOSED — a 155-side internal error (code 4006), never something your wallet returns.
  • BET_LIMIT_REACHED — a common typo; the real value is BET_LIMIT_REACHED_ERROR (the _ERROR suffix is required).

Aggregator integrations (Hub88) use a different status set (RS_OK, …) — the enum above is for direct integrations only.

Error response format

Echo back the requestId and clientPlayerId alongside the status:

{
  "status": "INSUFFICIENT_BALANCE_ERROR",
  "requestId": "original-request-id",
  "clientPlayerId": "player-id"
}

Sign your operator-side responses (including error responses) with the X-Marbles-Signature header. 155.io does not currently verify response signatures, but signing now is forward-compatible — see Security.

On this page