Skip to content

Rejection Reason Codes ​

When FAST rejects a bet via POST /v1/bets/validate or POST /v1/bets (sync mode), the response includes one or more reason codes in the reasonCodes array. A single bet can trigger multiple rejection reasons simultaneously.

Codes ​

CodeDescriptionExample Trigger
min_stake_not_metStake is below the 1 EUR minimum. Applies to every ruleset.Bet stake is 0.50 EUR.
max_stake_exceededStake exceeds the maximum allowed percentage of the user's balance. On a funded account the percentage is always of the lower of the starting balance and the current balance (less the stake of open bets), so a winning run does not raise the limit and a losing one lowers it.Ruleset max stake is 10%. User balance is 50 EUR. Bet stake is 6 EUR (12%). Funded, 10% on a 5,000 EUR account: 500 EUR at 5,000 and at 7,000, 380 EUR at 3,800.
odds_limit_exceededOdds are above the maximum allowed.Ruleset max odds is 5.0. Bet odds are 7.5.
min_odds_not_metOdds are below the minimum required.Ruleset min odds is 1.5. Bet odds are 1.2.
max_payout_exceededPotential payout exceeds the maximum payout multiplier limit.Ruleset max payout multiplier is 10x. Stake is 5 EUR at odds 12.0 (60 EUR payout, 12x multiplier).
max_selections_exceededAccumulator bet has too many selections.Ruleset max accumulator selections is 5. Bet has 6 selections.
max_win_exceededPotential win exceeds the absolute EUR cap per ticket.Ruleset max win per ticket is 500 EUR. Bet at 10 EUR stake with odds 60.0 would win 590 EUR.
lucky_bet_profit_limitSingle-bet profit exceeds the lucky bet profit percentage of the challenge target.Ruleset lucky bet profit limit is 50% of target. Target is 100 EUR. Bet would profit 55 EUR (55%).
max_drawdown_exceededTotal cumulative loss has reached the maximum drawdown limit. Challenge fails or funded account is revoked.Ruleset max drawdown is 100%. User started at 50 EUR, balance is 0 EUR.
daily_drawdown_exceededDaily loss has reached the session stop limit. A cooldown period is triggered.Ruleset daily drawdown is 5% of starting balance. User lost 2.60 EUR today on a 50 EUR starting balance (5.2%).
cooldown_activeUser is currently in a cooldown period from a previous daily drawdown breach.User triggered daily drawdown at 14:00. Cooldown lasts until next calendar day. Bet placed at 16:00.
payout_pendingA payout request on the funded account is waiting for the operator. The account takes no new bets until the request is executed or rejected.User requests a 200 EUR payout at 10:00; the operator has not decided yet. Bet placed at 10:05.
cashout_not_allowed_during_challengeCash-out bets are blocked during the challenge phase. Allowed during funded account phase.User sends a bet with isCashOut: true while in an active challenge.

Payout conditions on a funded account (below_min_payout, payout_interval, first_payout_deadline, open_bets, ...) are not bet rejection codes: they come back in the reasons of GET /v1/users/:userId/withdrawable and of a refused POST /v1/users/:userId/withdraw. See Withdrawals.

Flagged Settlements ​

Besides accepted and rejected, a bet event can be stored with status flagged. This is not a validation result on a placed bet: it marks a settlement that contradicts an earlier one for the same externalBetId (won after lost, lost after won, or any settlement after a void).

CodeDescription
conflicting_settlementThe settlement was recorded without touching the balance, and a reconciliation flag was opened. Resolve it in the backoffice.
settlement_mismatchThe settlement reports a stake or odds different from the accepted placement, or pays more than the accepted stake at the accepted odds. It was recorded without touching the balance, and a reconciliation flag was opened. Check what your sportsbook sent and resolve it in the backoffice.
no_accepted_placementA settlement for a bet FAST did not accept against a challenge or funded account: one it rejected, or one placed before the user had either. It is recorded for the audit trail and changes no balance. Keep sending these; nothing to resolve.
program_closedA settlement for a bet FAST accepted on a challenge or funded account that has closed since, most often a challenge that passed while the bet was still open. The pass stands without it; the result is recorded under the program that accepted the bet and changes no balance. Keep sending these; nothing to resolve.

Response Example ​

json
{
  "validationResult": {
    "status": "rejected",
    "reasonCodes": ["max_stake_exceeded", "odds_limit_exceeded"]
  },
  "correlationId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}

Mapping to User-Friendly Messages ​

Map reason codes to messages appropriate for your users:

javascript
const messages = {
  min_stake_not_met: "Minimum stake is 1 EUR.",
  max_stake_exceeded: "Bet amount is too high for your current balance.",
  odds_limit_exceeded: "Odds are too high. Maximum allowed odds apply.",
  min_odds_not_met: "Odds are too low. Minimum odds apply.",
  max_payout_exceeded: "Potential payout exceeds the allowed limit.",
  max_selections_exceeded: "Too many selections in accumulator.",
  max_win_exceeded: "Potential win exceeds the maximum per ticket.",
  lucky_bet_profit_limit: "Potential profit is too high for a single bet.",
  max_drawdown_exceeded: "Total loss limit reached.",
  daily_drawdown_exceeded: "Daily loss limit reached. Try again tomorrow.",
  cooldown_active: "You are in a cooldown period. Try again later.",
  payout_pending: "Your payout is being processed. Betting resumes once it is complete.",
  cashout_not_allowed_during_challenge: "Cash-out is not allowed during challenges."
};

BLACKLINE CONSULTING d.o.o.