Boss HubBoss HubDocs
ChangelogStatus
Reference/Error codes

Error codes

There are two kinds of error. The operator API answers with an HTTP status code and a code. On wallet callbacks, you report a business rule error with HTTP 200 and a code in the body.

API errors

The error body of the operator API carries code, message and request_id; depending on the code, details (e.g. details.source, details.fields, details.reason) and, on 429, retry_after are added. message is in English, or Turkish with Accept-Language: tr; build your logic on code. Quote the request_id (the same as the X-Boss-Request-Id response header) when you open a support request.

403API error body
{
  "code": "GAME_DISABLED",
  "message": "This game cannot be opened right now.",
  "request_id": "req_01HF3Q2P",
  "details": { "source": "site_rule" }
}
CodeHTTPWhen
INVALID_SIGNATURE401Signature headers missing, or the signature could not be verified
TIMESTAMP_SKEW401X-Timestamp is outside ±30 s or not a number
CREDIT_LIMIT402Launch: credit limit exceeded
OPERATOR_SUSPENDED402Launch: operator suspended, or no production approval on Live
IP_NOT_ALLOWED403IP is not on the allowlist
SCOPE_MISSING403The key’s scope is not enough
MODULE_DISABLED403A required module is disabled (details.module; on launch details.source: module)
GAME_DISABLED403Launch: the game cannot be opened on this site; the reason is in details.source (Game launch)
SITE_DISABLED403Launch: the site is off, or a site called on Live is not in Live status
MARKET_RESTRICTED403Launch: no RTP variant is eligible under the site’s market rules
NOT_FOUND404No such record
REQUEST_ID_CONFLICT409Same X-Request-Id, different request
SITE_REQUIRED422Operator-wide key and several sites: site_id is needed
VALIDATION_ERROR422Missing or invalid field (details.fields), missing X-Request-Id (details.field) or a business rule (details.reason)
CURRENCY_NOT_SUPPORTED422Currency not supported
SCOPE_DENIED403The site or record is outside your key’s scope
PLAYER_BLOCKED403Launch: player restricted
FRAUD_CLOSURE403A game closed by a fraud rule cannot be opened through the API
COUNTRY_BLOCKED403Launch, demo, game detail: the game or the provider blocks the player’s country
COUNTRY_REQUIRED403Launch: the game has country restrictions and the player’s country is unknown; send country
DEMO_NOT_AVAILABLE404Demo: the provider offers no demo
REQUEST_IN_PROGRESS409The same X-Request-Id is still being processed; retry shortly
MANUAL_LOCKED409Stuck round: manual option before it unlocks. escalate first
ITEM_RESOLVED409Stuck round: the item is already resolved
APPROVAL_PENDING409Stuck round: an approval is pending
TX_NOT_RESENDABLE409Stuck round: the transaction cannot be resent in its current state
TX_CHANGED409Stuck round: the transaction changed in the meantime; read it again and decide
NO_TRANSACTION409Stuck round: the round has no suitable transaction for this resolution
CAMPAIGN_CLOSED409Free round: the campaign has finished or was cancelled
CAMPAIGN_CHANGED409Free round: the campaign changed status in the meantime (started or opened), retry
GRANT_CLOSED409Free round: the player’s grant is used, expired, cancelled or was rejected by the provider (details.status)
BUDGET_WARNING409Free round: with the added players the estimated cost exceeds the budget warning; your Owner adds them in the portal
FREEROUND_ADD_PLAYERS_UNSUPPORTED409Free round: the provider cannot add players to an open campaign
PROVIDER_CANCEL_UNSUPPORTED409Free round: the provider cannot cancel a single player; cancel the whole campaign
REFERENCE_CONFLICT409Free round: a campaign with different content was already created with the same reference
LAUNCH_TOKEN_EXPIRED410launch_url has expired or was used
INVALID_JSON422The body could not be read as JSON
INVALID_CURSOR422cursor did not come from a previous response
DATE_RANGE_INVALID422Report: from is not before to
DATE_RANGE_TOO_LONG422Report: the range is longer than 366 days; transaction feed: longer than 31 days (details.max_days)
DATE_IN_FUTURE422Daily reconciliation: totals cannot be sent for a future day
LIMIT_RANGE_INVALID422Limit: minimum above maximum, or zero
LIMIT_DEFAULT_INVALID422Limit: default bet outside the range
LIMIT_OUT_OF_RANGE422Limit: leaves the range of the upper level
TRANSACTION_REQUIRED422Stuck round: several open items, transaction_id is required
ACTION_NOT_ALLOWED422Stuck round: this resolution cannot be used for this issue
OUTCOME_NOT_ALLOWED422Stuck round: this outcome cannot be used for this issue
OPERATOR_CONFIRMATION_REQUIRED422Stuck round: cancelling a manually paid win needs operator_confirmed
TRANSACTION_MISMATCH422Stuck round: the transaction ID does not match the item
RATE_LIMITED429Per-minute request limit exceeded
PROVIDER_NOT_CONNECTED503Provider not connected
PROVIDER_UNAVAILABLE503Provider unreachable
MAINTENANCE503Maintenance
NOT_READY503/health/ready: the database or Redis is not answering, or the server is shutting down (details)

Wallet reply codes

You return these codes. A business rule error goes out with HTTP 200; the body carries status: ERROR and a code. Add balance if you know it.

200Business rule error (HTTP 200 + code)
{
  "status": "ERROR",
  "code": "INSUFFICIENT_FUNDS",
  "balance": 0.40
}
CodeMeaningUse
INSUFFICIENT_FUNDSInsufficient balancebet; rollback when reversing a win
INVALID_TOKENSession invalid or expiredauthenticate, balance, bet. Do not return it on win or rollback
INVALID_SIGNATURESignature could not be verifiedAll calls
DUPLICATE_TRANSACTIONSame transaction with different contentbet, win, rollback
PLAYER_BLOCKEDPlayer restricted / self-exclusionAll calls
LIMIT_EXCEEDEDResponsible gaming limit exceededbet, win, rollback
TRANSACTION_ROLLED_BACKYou hold a cancellation record for this transactionbet, win. On rollback it means “already reversed”
INTERNAL_ERROROperator errorAll calls

Reply classes

Boss Hub puts every reply into one of three classes: clean OK, clean business rejection or uncertain. Uncertain means it is unknown whether money moved. On a bet, uncertainty is settled by an automatic rollback; win and rollback are retried on the schedule.

ReplyClassbetwinrollback
200 OK, ID and currency matchClean OKAcceptedAcceptedAccepted, source transaction reversed
200 ERROR: INSUFFICIENT_FUNDS, LIMIT_EXCEEDED, PLAYER_BLOCKED, INVALID_TOKENClean business rejectionRejectedNo retry, win_rejected itemNo retry, rollback_rejected item
Same codes, an earlier attempt was uncertainUncertainAutomatic rollbackRetried on the schedule; then win_rejectedRetried on the schedule; then an item opens
TRANSACTION_NOT_FOUND (HTTP 409 or 200)Clean business rejection for rollbackTreated as uncertainTreated as uncertainContract violation, rollback_rejected item
TRANSACTION_ROLLED_BACKClean (cancellation record)Rejected, warningRejected, win_rejected, warningCounted as OK: already reversed
DUPLICATE_TRANSACTIONUncertainAutomatic rollback, duplicate_conflict itemSchedule stops, duplicate_conflict itemSame as win
INVALID_SIGNATUREUncertainAutomatic rollback, alarmRetried on the schedule, alarmSame as win
Timeout, connection error, 5xx, INTERNAL_ERRORUncertainRetried within the time budget, then automatic rollbackRetried on the scheduleRetried on the schedule
200 but the body cannot be parsed, currency is missing or does not match, transaction_id does not match, or balance is invalidUncertainSame + alarmSame + alarmSame + alarm
WAF 403, other 3xx and 4xx, 429UncertainSameSameSame
Unknown error codeUncertainSame + alarmSame + alarmSame + alarm

Retry schedule

CallScheduleWhen it ends
betSynchronous, no wait between attempts. First attempt + 2 retries, 3 s each (5 s and 3 retries can be selected in the portal). Total time budget of at most 20 s.Automatic rollback
winT0, +30 s, +2 min, +10 min, +30 min. 5 attempts in total.The round becomes stuck after attempt 4; manual resolution after attempt 5
rollbackSame as win.bet_timeout item for a bet rollback, rollback_rejected item for a win rollback
win (amount 0)Same as win; no retry after a rejection.No item opens; the round and invoice are not affected
← PreviousOther endpointsNext →Webhook events