Skip to main content
The withdrawal limit is the ceiling on what a player can cash out, so it’s also the ceiling on how engaging your rewards can be. The time-based accrual described in Withdrawal Limits (Server) is a rough proxy for revenue; tying limits to actual monetization signals from your MMP (Singular, AppsFlyer, Adjust, and similar) is how you raise them meaningfully. Done this way the pool is self-funding: players who generate revenue earn the right to withdraw more, and you never give away more than that player has produced.
It also makes rewards easy to size. If you know a player has plenty of headroom, you can confidently issue larger rewards for completing tasks, while players with a lower limit get smaller ones. This is one pattern rather than a requirement, but it keeps rewards self-balancing against revenue.

Raise the limit, not the balance

Never credit a player’s rewards balance directly in response to a monetization event. “+100 points for watching an ad” is effectively cash-for-task, and it’s the pattern that runs into app store review problems.Use the monetization event to raise the withdrawal limit — the ceiling — and let players earn their rewards balance through genuine play: winning a match, completing a level, hitting a streak.
This keeps your reward economy backed by real revenue while keeping the player-facing earning experience tied to play, not ads. Every approach below joins an MMP event to a ZBD player, so the two systems have to know about each other’s identifiers. Do it in both directions — it’s cheap, and it means the mapping works whichever ID ends up on the postback.

1. Give ZBD your player ID

Pass your own internal player identifier when you initialize the SDK, or set it later with SetUserId:
See Integration.

2. Give your MMP the ZBD player ID

Read the ZBD-side identifier with Utils.GetUserId() and set it on your MMP’s SDK as a customer/user identifier or custom property, so it comes back on their postbacks:
Utils.GetUserId() returns an empty string until the SDK has registered the player, so call it after Init succeeds rather than at startup. Check the exact field name against your MMP’s own documentation — the concept is the same everywhere, but the method isn’t.
Without at least one of these links there’s nothing to match an MMP event against, and none of the options below will work.

Choose your integration

Three ways to get monetization data to ZBD, depending on what you have to build with:

Sizing rewards to available headroom

Once limits track revenue, you can check a player’s state before issuing a reward and scale it to what they can actually withdraw. Read it wherever you send rewards from:
Most games send rewards client-side, so check the player’s state with GetBalance in Unity:
See Player Balance & Limits for the full call, including maintenance handling.
Either way you learn two things: what the player currently has, and what they’re allowed to cash out. Players with more headroom can be given larger rewards, because you know the revenue is there to back them. Keeping the two roughly aligned matters — a player who can see a large balance they can’t withdraw disengages. See Best Practices.