Bonus system and platform-level freespins

Introduction

Bonuses and freespins are the central tool for attracting and retaining players in online casinos. Implementation at the platform level requires a flexible promotional engine, accurate accounting of the vager conditions and separate accounting of "wallets" for bonus funds. This article details the key components and processes that provide a full-fledged bonus system.

1. Promo Engine Architecture

1. Campaign Engine

Stores stock templates (deposit, no deposit, freespins) in the form of records with parameters: bonus type, size, vager, validity period, wagering conditions.
Processes triggers: events "first\_ deposit," "session\_ start," "custom\_ event" (for example, reaching turnover).
2. Workflow-service

Models the status of the action by user: 'initiated' → 'granted' → 'in _ wager' → 'completed/expired'.
Allows you to "hot" change the logic through the configuration without a code deposit.

2. Structure of "wallets" and balance sheet accounting

1. Individual wallets

Real Wallet: real player money.
Bonus Wallet: accrued bonuses and freespins blocked until the conditions of the vager are met.
2. Reserve funds

When the bonus is activated, the amount is reserved for Bonus Wallet, is not available for withdrawal, but participates in bets.
3. Bid partitioning

At each bet, the platform writes off first from Real Wallet, then automatically from Bonus Wallet in a given order (configurable).

3. Vager conditions and wagering

1. Vager parameters

Coefficient ('wager _ multiplier'), minimum and maximum bet when playing, excluded games.
2. Rate accounting

The required turnover counter is maintained:
  • ```
  • remaining_wager = wager_multiplier bonus_amount
  • on each spin:
      if game_id not in excluded:
      • remaining_wager -= bet_amount
      • ```
      • 3. Timeouts and Expiration

      Each stock has a'valid _ from'and'valid _ to' to start activation and automatically cancel the outstanding bonus.

      4. Freespins: Mechanics and Integration

      1. Free Spin Pack

      Stored in a separate entity'freespin _ package' with quantity, default rate and games list.
      2. Separate counter

      The client receives the number "free\_ spins\_ remaining" and "free\_ spin\_ bet\_ amount."
      3. Return the result

      The result of the freespin (win) first goes to Bonus Wallet, subject to the wager conditions (usually lower multiplier).
      4. API interaction with the engine

      At the start of each freespin, the engine asks for '/spin? mode=freespin&bet=…`; platform returns' session _ id ',' bet _ amount'and' remaining _ spins'.

      5. Activation Trigger Scenarios

      First deposit: auto-grant when the 'first _ deposit _ success' event is triggered.
      Re-engagement: after a period of inactivity ('inactive _ days> N'), an offer of freespins is automatically sent.
      VIP levels: upon reaching the turnover or deposit above the threshold - personalized bonuses.

      6. Safety and protection from abuse

      1. Antifraud modules

      Checking multiaccounting, geo-blocking by IP, Device Fingerprinting.
      2. Limit Checks

      Limit maximum bonus per IP/profile, minimum average bet in wagering mode.
      3. Audit Trail

      Writing all operations with bonuses and freespins to immutable logs with user\_ id, timestamp and operation.

      7. Monitoring and reporting

      1. Key metrics

      `bonuses_granted_total`, `bonuses_redeemed_total`, `freespins_used`, `average_wager_completion_rate`.
      2. Dashboards

      In Grafana or BI: dynamics of bonus activations by campaign, wagering CR, impact on ARPU.
      3. Export reports

      Automatic CSV/PDF upload for Marketing and Finance.

      8. Integration with CI/CD and TMS

      Configuration of the promo engine as code: storing YAML/JSON stock templates in the repository, automatic deploy via GitOps.
      Using TMS (Lokalise, Crowdin): to translate stock names and description texts without developer intervention.

      Conclusion

      The platform bonus system and the mechanics of freespins require a clear separation of wallets, flexible workflow engines, accurate vager accounting and fraud protection. Properly configured triggers, reporting and the "promo engine as code" architecture ensure quick launch of new promotions, transparency of calculations and growth of key retention and LTV indicators.