Skip to content

Emails and events ​

Player messaging runs through Customer.io. The platform does not hold templates, subject lines or sending schedules — it reports what happened, and the campaigns you build there decide what the player receives.

The platform's own CRM

The platform also has a CRM of its own, in the admin panel, with templates, broadcasts, journeys and results. It receives the same events as Customer.io and runs alongside it. See CRM.

The split matters when something goes wrong: an email that did not arrive is almost always a campaign question, not a platform one.

Two directions ​

The platform tells Customer.io what happened. Every event below is sent as it occurs, attached to the player's profile.

Customer.io can tell the platform to award a bonus. A campaign can call back and grant a player a bonus — the mechanism behind "here is a free spin, come back and play". This is how a marketing decision becomes real money without anyone touching the admin panel.

Events the platform sends ​

EventWhen
deposit_successA deposit settles
first_deposit_successThe player's first deposit ever
withdrawal_successA withdrawal is paid out
withdrawal_rejectedA withdrawal is refused
bonus_createdA bonus is granted
kyc_approved / kyc_rejectedA verification decision
player_blockedAn account is blocked
vip_cashback_paidVIP cashback is paid — see below

Every event carries the player's ID, so it lands on the profile you already have rather than creating a second one.

Cashback emails ​

vip_cashback_paid is raised once per player per payout, at the moment the money is credited. See VIP cashback for how the payment itself is configured.

FieldContent
total_amountThe whole award
real_amountThe part paid into the real balance
bonus_amountThe part issued as bonus
currencyCurrency code
percentThe rate applied
basiswagering, net_cash or gaming_loss
basis_amountThe figure the rate was applied to
period_start / period_endThe period the award covers
level_idThe VIP level that paid

The event does not exist until the first payout

Customer.io only recognises an event once it has received one. Configure a level, let the first payout run, and vip_cashback_paid will then be selectable as a campaign trigger. Build the campaign after that, not before.

Two things to get right in the template ​

Amounts arrive as text, not numbers. This is deliberate — sending a decimal as a number is how 12.10 reaches an inbox as 12.099999. Print them as they are; do not do arithmetic on them in the template.

A level paying 100% real money always reports bonus_amount as 0. Make the bonus sentence conditional, or the message will congratulate the player on winning nothing.

Sending is independent of the money ​

Every event is fire-and-forget. If Customer.io is unreachable, the deposit still completes, the bonus is still granted and the cashback is still paid — only the message is missed.

The practical consequence: you can switch a feature on before its campaign is written, and nobody is left unpaid while marketing catches up. It also means a missing email is never evidence that the underlying action failed. Check the player's wallet or bonus list before assuming anything went wrong.

Testing a new campaign ​

Trigger the underlying action once on staging and watch the event arrive, rather than writing the template against a payload you have assumed. Field names are easy to get subtly wrong, and a template referencing a field that does not exist renders an empty space rather than an error.

Internal documentation. Every page states what has been verified and what has not.