Operator guideEN

Bonuses / Create And Edit

Create and edit workspace for reusable bonus definitions, including targeting, per-currency reward settings, and linked promotional content.

How to use this guide

Start with the main guide

Follow the explanation and examples first. Extra definitions and formulas are available below when you need them.

What this surface does

This surface is the full create and edit workspace for reusable bonus definitions.

Even though the first create step opens as a modal from the list page, operators should treat the whole flow as one form surface because it controls both:

  • the bonus record itself
  • linked promotional content such as bonus banner and bonus page content

When to use create vs edit

  • Use Create when you need a new reusable bonus definition with its own type, validity, and content.
  • Use Edit when the bonus already exists and you need to change validity, activation logic, targeting, currency economics, or content.
  • Use the header Duplicate shortcut only as a quick way to open the create modal from the edit page. In the current page flow it does not clone the current bonus automatically.

Form map

The full workspace is split into four operator-facing sections:

  • General Covers the saved bonus type, status toggles, wagering type, schedule, activation timing, and type-specific settings.
  • Settings Covers tags, coupon codes, redirect URL, game or category targeting, and include or exclude country rules.
  • Currency Repeats reward-economics settings per currency code, with the visible keys controlled by the selected bonus type.
  • Content Covers banner text, bonus-page content, linked assets, and links into CMS banner/page editing after save.

What operators should enter carefully

  • Bonus Type is the main branch selector. It controls which currency keys and advanced fields the form shows later.
  • Valid From, Valid Till, Time From, Time Till, and Valid Days together define the usable schedule.
  • Activation fields such as Times to Activate Per Player, Activation Period to Check, Drop Start DateTime, and Activated Bonus Expiration Period should be reviewed together because they govern eligibility timing.
  • Include Tags, Exclude Tags, Coupon Codes, Next Coupon Codes, and geographic restrictions shape who can reach the bonus.
  • Free Spins Games is mandatory for freespins. The page blocks save if the game list is empty for that bonus type.
  • Per-currency settings should be reviewed in the EUR base first before operators use auto-calculation for other currencies.
  • Auto Payout should be treated as the main cashback-behavior switch for instant_cashback. If it is off, operators should not expect the bonus to behave like an automatically paid cashback configuration.
  • Auto Payout Days and the payout-distribution editor should be reviewed together. If the distribution does not total 100%, the page highlights the issue and offers auto-balance.
  • Banner and bonus-page content are part of the same workflow. Operators usually save the definition first, then open the linked CMS page or banner for translation polish.

Marketing-facing explanation for instant cashback payout settings

For marketing users, Auto Payout answers one practical question:

  • should this instant_cashback bonus behave as an automatically paid cashback configuration

Use this as the working rule:

  • Auto Payout = ON means the saved bonus can be used by automatic cashback/rakeback payout logic when the bonus is also active
  • Auto Payout = OFF means the bonus stays an instant_cashback definition, but automatic payout jobs and the current manual rakeback bonus selector should not pick it as an auto-paid cashback setup

This flag matters together with Auto Payout Days:

  • if Auto Payout is on, Auto Payout Days defines the payout timing window
  • if Auto Payout Days is greater than zero, the page reveals the payout-distribution editor so operators can split the payout percentage across days
  • if Auto Payout is off, Auto Payout Days and payout distribution lose most of their practical marketing meaning because the bonus is no longer being prepared as an auto-paid cashback setup

The distribution button switches between two materially different saved configurations:

  • Equal Distribution stores no custom percentage map. At payout time the amount is divided equally by Auto Payout Days.
  • Custom Distribution stores day_1, day_2, and subsequent percentage values. At payout time each day receives the configured share of the amount.
  • New equal shares shown by the editor use round(100 / days, 1). Auto-Balance to 100% rescales every custom row proportionally and rounds each result to one decimal place.
  • The warning that the total must equal 100% does not currently block Save. Marketing operators must correct the total before saving; payout processing follows the stored day values and does not repair an invalid custom total.
  • Actual day amounts are rounded down to two decimal places, including crypto wallet currencies. The rounding remainder is not added to the last day, so the sum of created day amounts can be slightly lower than the original amount.

The split uses the player's wallet currency. It does not convert the campaign amount into a reporting currency before calculating each day. Where transaction/reporting metadata needs a primary-currency amount, the payout flow reads the current source and primary currency rates at processing time and stores a separate converted value. No historical rate timestamp or later remeasurement was found, so do not compare that reporting amount as if it were a booking-time FX value.

After changing Auto Payout Days in custom mode, touch a day value or use Auto-Balance to 100% before Save. The editor can recalculate the displayed rows without immediately copying that recalculated map into the saved form value.

One downstream effect is already visible in the product:

  • the manual rakeback flow filters bonuses to instant_cashback bonuses where Auto Payout is enabled

So for marketing configuration, the safe interpretation is:

  • enable Auto Payout when the campaign should be treated as an auto-paid cashback offer
  • disable it when the bonus should remain an instant_cashback definition without entering the auto-paid cashback selection flow
  • default/off behavior is stored as false: the saved auto_payout value defaults to false, and save only turns it on when the enabled value is submitted

Common caveats

  • The create modal bootstraps promotionTitle, termCondition, and description from Bonus Name before the first save.
  • New bonuses start with all weekdays enabled and a long validity window. Operators are expected to narrow that down where needed.
  • Bonus Type is chosen during create. In the edit workspace it is shown as a saved chip, not as a mutable field.
  • NoDeposit appears only for freespins and no_deposit variants.
  • Period To Check NGR, Auto Payout, and Auto Payout Days appear only for instant_cashback.
  • Auto Payout Days > 0 reveals the payout-distribution editor.
  • Changing the day count in custom mode can replace a saved 0% day with the newly calculated equal share in the displayed editor because zero is treated as an absent value during that recalculation.
  • The 100% distribution warning is advisory in the current form; Save accepts an invalid total.
  • Auto Payout is not just cosmetic. In current product behavior it affects which instant_cashback bonuses can be selected in the manual rakeback flow, and scheduled rakeback calendar logic also looks for active bonuses with autoPayout: true.
  • Save order on the edit page is not just one request. The save flow updates the core bonus, updates tags, then creates or updates linked CMS banner/page content, and finally publishes those linked content records.
  • Update and Translate is a content helper path around the same save flow. It tries to translate linked banner and page content after updating them.
  • Linked CMS page and banner routes become useful only after the bonus has been saved and has a stable bonusId.
More details

Definitions and formulas

Open only the section you need. The relevant section opens automatically when you request help for a specific item on screen.

Calculations14 topicsOpen details

Create bootstrap from bonus name

The initial create step generates placeholder promo title and text from the chosen bonus name.

Inputs
bonusName, promotionTitle, termCondition, description
Transform
In the create modal, the page seeds `promotionTitle`, `termCondition`, and `description` from `bonusName` before the first save.

Create bootstrap validity window

Operators start from a fully open schedule and then narrow the validity window if needed.

Inputs
validFrom, validTo, validOnDays
Transform
New bonus creation starts with today's date as `Valid From`, a far-future `Valid Till`, and all weekdays enabled.

Bonus type controls currency keys

Changing the bonus type changes which currency settings appear and which amounts the operator is expected to fill in.

Inputs
bonusType, currency
Transform
The form selects the allowed per-currency keys from `BONUS_TYPE_CURRENCY_SETTING_FIELDS[bonusType]`.

NoDeposit settings visibility

Operators see this toggle only for reward types that can behave like no-deposit bonuses.

Inputs
bonusType, noDepositFreespins
Transform
The `NoDeposit` selector is shown only when the bonus type is `freespins` or `no_deposit`.

Type-specific settings visibility

Operators should expect different advanced settings depending on the reward family they selected.

Inputs
bonusType, freeSpinsCount, freeSpinsSetup, freespinsTargetWinAmount, periodToCheckNgr, autoPayout, autoPayoutDays
Transform
`freespins` exposes free-spin count, bet level, and target-win fields; `instant_cashback` exposes NGR-period and payout fields.

Auto payout is the cashback-behavior gate

Marketing users should decide `Auto Payout` first, then configure payout timing and distribution. If the flag is off, the bonus remains a reusable `instant_cashback` definition but should not be treated as an auto-paid rakeback/cashback setup.

Inputs
bonusType, autoPayout, autoPayoutDays
Transform
For `instant_cashback`, the form treats `autoPayout` as the main switch for automatic cashback behavior; `autoPayoutDays` only refines the payout schedule after that path is enabled.
Source Basis
`public.bonus.auto_payout` defaults to false; create/update services convert enabled `1` values to boolean true; scheduled rakeback calendar logic selects active bonuses with `autoPayout: true`.

Auto payout distribution visibility

Payout splitting is configured only for cashback bonuses that have a multi-day automatic payout schedule.

Inputs
autoPayoutDays, percentDays
Transform
The page reveals the payout-distribution editor only when `Auto Payout Days` is greater than zero.

Payout distribution total must equal 100%

Operators should treat payout distribution as a complete percentage split rather than unrelated day rows. The warning is advisory and does not block Save.

Inputs
autoPayoutDays, percentDays
Transform
The page sums the displayed day values and treats the total as valid only when `abs(total - 100) < 0.1`.

Equal distribution editor seed

Equal mode means divide the payout across the selected number of days, not preserve a hand-edited percentage table.

Inputs
autoPayoutDays, percentDays
Transform
Each displayed day starts as `round((100 / autoPayoutDays) * 10) / 10` when there is no custom percentage map or when the operator switches back to Equal Distribution.
Stored Value
Equal Distribution writes `percentDays = null`; the displayed one-decimal percentages are not saved as a custom map.

Custom distribution after day-count changes

After changing the day count in custom mode, review every row and force the corrected map into the form before Save.

Inputs
autoPayoutDays, percentDays
Transform
Existing truthy `day_n` values remain; missing or zero-valued rows are displayed with `round((100 / autoPayoutDays) * 10) / 10`.
Persistence Caveat
The day-count effect updates the local displayed rows but does not call the form change handler. A row edit, mode toggle, or Auto-Balance is needed to copy the recalculated map into the form value.

Auto-Balance to 100%

Auto-Balance preserves the relative proportions of custom rows while scaling their combined target toward 100%.

Inputs
percentDays
Transform
For non-zero total `T`, each displayed value `v` becomes `round((v / T) * 1000) / 10`; a zero total is left unchanged.
Rounding Caveat
Every row is rounded independently to one decimal place, so the resulting displayed sum can still differ slightly from exactly `100.0%`.

Runtime payout amounts by day

A valid distribution must be confirmed before save because payout processing does not auto-correct custom percentages.

Inputs
amountConverted, autoPayoutDays, percentDays
Equal Mode Formula
Each day amount is `floor((amountConverted / days) * 100) / 100` when `percentDays` is null or empty.
Custom Mode Formula
Day `n` amount is `floor((amountConverted * percentDays.day_n / 100) * 100) / 100`; missing or invalid day percentages become zero.
Fallback
Invalid or zero payout days become one day. The calendar-creation path discards custom percentages when an explicit calendar date or day-count override is supplied; the direct payout path forces one day for an explicit calendar date but can still apply the stored `day_1` custom percentage.
Currency Basis
`amountConverted` and every created day amount remain in the player's wallet currency, recorded as the user-bonus/calendar/transaction currency code. Distribution does not first convert the amount into the platform primary currency.
Primary Reporting Conversion
When primary-currency transaction or tracking metadata is needed, the runtime reads the source currency and the current `isPrimary` currency from `public.currencies`, uses `source.exchangeRate / primary.exchangeRate`, and converts `dayAmount * conversionRate`. The helper selects the configured primary currency; it does not itself prove that the primary currency is EUR.
Exchange Rate Timestamp
Rates are read at payout/calendar processing time. No historical rate timestamp is stored on the calendar row and no period-average or booking-time lookup was found. Direct casino transactions retain the calculated `conversionRate` and `primaryCurrencyAmount`.
Currency Rounding
Day amounts are floored to two decimal places before calendar/transaction creation, including crypto wallet currencies. Primary reporting conversion separately uses `roundCurrencyAmount`, which rounds fiat to two decimals and truncates crypto precision to at most eight decimals based on the source currency code.
Missing Rate Behavior
No rate fallback to `1` was found. In the direct payout path a missing source or primary currency rate can fail the payout helper; in calendar creation the later primary-currency marketing conversion is caught separately, so already-created calendar rows can remain while converted tracking metadata is omitted.
Refund Reversal Handling
No refund, reversal, or later FX remeasurement branch was found in either day-split path. A correction is recorded separately from the scheduled day amounts.
Rounding Caveat
No final-day remainder reconciliation was found, so two-decimal flooring can leave the created day amounts slightly below the original amount.
Validation Caveat
Save accepts the custom map without enforcing a 100% total; payout processing uses the stored values as supplied.

Manual rakeback bonus selection requires auto payout

Turning off `Auto Payout` removes the bonus from the current manual rakeback bonus-selection flow and from the active auto-payout candidate set.

Inputs
bonusType, autoPayout
Transform
The manual rakeback modal filters the bonus list to `instant_cashback` bonuses where `autoPayout` is enabled; scheduled rakeback calendar logic also starts from active auto-payout bonuses.

Free spins require game selection

Free-spin bonus definitions are incomplete until operators choose eligible games in the settings section.

Inputs
bonusType, gameIds
Transform
Before save, the page blocks `freespins` bonuses that do not have at least one selected game id.
More help

Related pages

Bonuses

Operator documentation for bonus catalog management, bonus editing, and player-issued bonus follow-up.

Bonuses / List

Main working catalog for bonus definitions with search, archive mode, type filters, group filters, and row actions.

Bonuses / View

Read-only bonus detail screen used to inspect one reusable bonus definition before editing it.

Activity Tag Rules / Create

Create flow for a new activity tag rule, including optional clone-from-existing behavior, transaction condition testing, and one-or-two-rule save behavior.

Activity Tag Rules / Edit

Edit flow for one stored rule or an existing grouped add/remove pair, including grouped form rebuild, condition testing, and update-only save behavior.

Affiliate Deals / Form

Create and edit form for affiliate deals, including PID, date window, commercial terms, and responsible person.