Skip to content

Bonuses Guide ​

Wagering bonuses with playthrough requirements. Users receive a bonus amount and must wager a multiple of it before it's unlocked.

Works standalone - no challenge or funded account required.


How It Works ​

  1. Operator creates bonus offers in the backoffice
  2. Users activate a bonus (or it's granted automatically/manually)
  3. Every qualifying bet contributes stake toward the wagering target
  4. On completion (target met), bonus.completed webhook fires
  5. If user withdraws from sportsbook and offer has forfeitOnWithdrawal, bonus is forfeited

Deployment Modes ​

ModeDescription
Challenges + BonusesBonus wagering runs alongside challenge progress
Bonuses onlyPure wagering bonuses. Decoupled from challenges entirely.

Bonus Offer Fields ​

FieldRequiredDescription
nameYesDisplay name ("Welcome 100% Match")
bonusTypeYesdeposit_match, free_bet, no_deposit, cashback, reload
matchPercentFor match typesMatch percentage (100 = 100% match)
maxBonusAmountYesMax bonus in cents (e.g. 5000 = 50 EUR)
wageringMultiplierYesTimes to wager (e.g. 8 = 8x bonus amount)
minOddsNoMinimum odds for qualifying bets (default: 1.50)
maxBetFromBonusNoMax stake per bet from bonus (cents)
durationDaysYesDays before bonus expires
forfeitOnWithdrawalNoIf true, bonus forfeits on sportsbook withdrawal
maxPerUserNoMax activations per user (null = unlimited)

Bonus Types ​

TypeHow it works
deposit_matchMatches a deposit. 100% match on 50 EUR = 50 EUR bonus.
free_betFree bet credit with wagering requirement.
no_depositBonus without deposit. Just activate.
cashbackPercentage of losses returned as bonus.
reloadBonus on subsequent deposits (not first).

Wagering Mechanics ​

  • Target = maxBonusAmount * wageringMultiplier
  • Only placed bets with odds >= minOdds contribute
  • Contribution = min(stakeAmount, maxBetFromBonus) per bet
  • Progress is cumulative (doesn't reset on loss)
  • Only one bonus active at a time per user

API Reference ​

Operator (admin) ​

MethodEndpointPurpose
GET/v1/admin/bonus-offersList all offers
POST/v1/admin/bonus-offersCreate an offer
PUT/v1/admin/bonus-offers/:idUpdate an offer
DELETE/v1/admin/bonus-offers/:idDelete an offer
GET/v1/admin/bonusesList all active bonuses
POST/v1/admin/bonuses/:id/cancelCancel an active bonus
POST/v1/admin/bonuses/grantGrant bonus to specific user
GET/v1/admin/bonuses/statsBonus statistics

Public (widget key) ​

MethodEndpointPurpose
GET/v1/users/:userId/bonusesActive + available + completed
POST/v1/users/:userId/bonuses/activateActivate an available offer

Withdrawal notification ​

MethodEndpointPurpose
POST/v1/users/:userId/withdrawal-eventNotify FAST of sportsbook withdrawal (triggers forfeit)

SDK Usage ​

typescript
const offers = await fast.admin.bonuses.listOffers();
await fast.admin.bonuses.createOffer({
  name: 'Welcome 100%',
  bonusType: 'deposit_match',
  matchPercent: 100,
  maxBonusAmount: 5000,
  wageringMultiplier: 8,
  durationDays: 30,
});

// Activate for user
await fast.admin.bonuses.activate('player-42', offerId, 5000); // 50 EUR deposit

// Notify withdrawal (triggers forfeit if applicable)
await fast.users.notifyWithdrawal('player-42', 100);

Webhook Events ​

EventWhen
bonus.activatedBonus started for user
bonus.progressSignificant wagering milestone
bonus.completedWagering requirement met
bonus.forfeitedBonus cancelled/forfeited
bonus.expiredTime expired before completion

BLACKLINE CONSULTING d.o.o.