Gaming/Promo abuse checks

Catch the bonus abuse before the payout.

Signals tells your risk rules what a player did between the bonus and the withdrawal request, and how many accounts share a device or a card this week, so they can hold the payout for review before the money moves.

Lower promo abuse losses

Lose less to promo abuse by flagging the pattern before the payout.

By the time a scheduled review finds promo abuse, the payout has gone out. Signals gives your risk rules how many bets a player placed between the bonus and the withdrawal request, which risk tiers those bets sat in, and how many accounts share this device or this card this week. Your rules set the thresholds and decide whether to hold, flag or let it through.

Hold the payout when a bonus turns into a withdrawal without play

A player claimed a deposit bonus twenty minutes ago, placed one small bet and has just requested a withdrawal. The pattern is plain in the sequence of events, and the review that reads it usually runs on a schedule, so the first pass lands after the payment has cleared. Signals has the minutes since the bonus and the bets placed since the deposit at the moment the request arrives, which is when the hold has to be decided.

What Signals knows
minutes_since_bonus
Minutes since this player's last bonus was credited
bets_24h
Bets placed in the last 24 hours
stake_24h
Total amount staked in the last 24 hours
What your risk rules do

Holds the withdrawal for review when the request arrives inside the window your team sets after a bonus and the bets since then fall under the floor your rules name. A player who has played the bonus through goes to the normal payout queue.

risk.ts · 11 lines
// In the handler that receives a withdrawal request
const player = await signals.getServiceAttributes({
  name: "game_promos_withdrawal",
  attribute_key: "user_id",
  identifier: playerId,
});
// { minutes_since_bonus: 22.4, bets_24h: 1, stake_24h: 5 }

if (player.minutes_since_bonus < rules.bonusWindowMinutes && player.bets_24h <= rules.minBetsAfterBonus) {
  risk.hold({ withdrawal: withdrawalId, reason: "bonus_without_play" });
}

Try it on your own site.

Add the SDK, define one thing you want to know about a visitor, and watch it update while you click around. The free tier runs on the real engine: no card, no sales call.