My Games
My Games
Analytics Dashboard
Performance Overview
Top Performing Games
Revenue Sources
Integration Guide
✨ SDK v2.0.0 - Now Available!
Enhanced features, better performance, and improved user experience
🎉 What's New in v2.0
Powerful new features to boost your ad revenue and user experience
Ad Preloading
Automatically preload multiple ads in the background for instant playback. Configure with autoPreload: true and preloadCount: 3 for seamless user experience.
Smart Ad Availability
New methods like isAdAvailable() and getPreloadedAdCount() let you check ad status in real-time and update your UI dynamically.
Enhanced Callbacks
New onAdLoaded, onAdShown, and onAdClicked callbacks give you complete control over the ad lifecycle and user interactions.
Debug Mode
Built-in debug mode with enableDebug() for easier testing and troubleshooting. See detailed logs of ad requests, responses, and events.
Analytics API
Access real-time analytics with getAnalytics() to track impressions, revenue, and user engagement directly in your game.
Better Performance
Optimized ad loading, reduced latency, and improved error handling for a smoother experience across all devices and browsers.
Important: You Control All Rewards!
BZZE Ads delivers the video ads. You decide what rewards to give your users!
Whether it's coins, gems, diamonds, lives, power-ups, or anything else -
YOU manage your game's economy and rewards.
We just notify you when a user completes an ad via the onReward callback.
The rest is up to you! 🎮
🚀 Quick Start
Get BZZE Ads running in your game in under 5 minutes
Add the SDK Script
Include the BZZE Ads SDK in your HTML file
<script src="https://ads.bzze.com/sdk/rewarded.min.js"></script>
Initialize the SDK
Configure BZZE Ads with your game credentials and v2.0 features
RewardedAd.init({
appId: "YOUR_APP_ID",
apiKey: "YOUR_API_KEY",
userId: "user_" + Math.random().toString(36).substr(2, 9),
// 🆕 v2.0 Features
autoPreload: true, // Auto-preload ads in background
preloadCount: 3, // Number of ads to preload
// Reward callback - called when user completes ad
onReward: function(reward) {
console.log('✅ Ad completed!', reward);
// YOU control the reward amount for YOUR game
grantCoins(100); // Give 100 coins (or gems, lives, etc.)
},
// 🆕 Ad loaded callback - called when ad is preloaded
onAdLoaded: function() {
console.log('Ad preloaded and ready!');
updateAdButton(true); // Enable your ad button
},
// 🆕 Ad shown callback - called when ad starts playing
onAdShown: function() {
console.log('Ad is now showing');
},
// 🆕 Ad clicked callback - called when user clicks ad
onAdClicked: function() {
console.log('User clicked the ad');
},
// No fill callback - called when no ads available
onNoFill: function() {
console.log('No ads available');
showMessage('No ads available right now');
},
// Close callback - called when ad is closed
onClose: function() {
console.log('Ad closed');
},
// Error callback - called on ad errors
onError: function(error) {
console.error('Ad error:', error);
showMessage('Ad failed to load');
}
});
Show Rewarded Ads
Check ad availability and display ads with smart UI updates
// 🆕 Check if ads are available before showing
function showRewardedAd() {
if (RewardedAd.isAdAvailable()) {
RewardedAd.showAd({
rewardPreview: "100 coins"
});
} else {
showMessage('Loading ad, please wait...');
}
}
// 🆕 Update button state based on ad availability
function updateAdButton() {
const btn = document.getElementById('watchAdBtn');
if (RewardedAd.isReady() && RewardedAd.isAdAvailable()) {
btn.disabled = false;
btn.textContent = '🎬 Watch Ad for 100 Coins';
btn.style.background = '#10b981'; // Green
} else {
btn.disabled = true;
btn.textContent = '⏳ Loading ad...';
btn.style.background = '#9ca3af'; // Grey
}
}
// Check ad availability every second
setInterval(updateAdButton, 1000);
// HTML Button
// <button id="watchAdBtn" onclick="showRewardedAd()">Watch Ad</button>
📋 Complete Example
Full HTML page with BZZE Ads integration
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>My Game with BZZE Ads</title>
</head>
<body>
<div id="game-container">
<h1>My Awesome Game</h1>
<div id="coins">Coins: <span id="coin-count">0</span></div>
<button onclick="showRewardedAd()" class="reward-btn">
Watch Ad for 100 Coins
</button>
<div id="message"></div>
</div>
<!-- BZZE Ads SDK -->
<script src="https://ads.bzze.com/sdk/rewarded.min.js"></script>
<script>
let coins = 0;
// Initialize BZZE Ads
RewardedAd.init({
appId: "YOUR_APP_ID",
apiKey: "YOUR_API_KEY",
userId: "user_" + Math.random().toString(36).substr(2, 9),
onReward: function(reward) {
// YOU control the reward - give what you want!
const myReward = 100; // Your game's reward amount
grantCoins(myReward);
showMessage('You earned ' + myReward + ' coins!');
},
onNoFill: function() {
showMessage('No ads available right now');
},
onClose: function() {
console.log('Ad closed');
},
onError: function(error) {
console.error('Ad error:', error);
showMessage('Ad failed to load');
}
});
function showRewardedAd() {
RewardedAd.showAd({
rewardPreview: "100 coins"
});
}
function grantCoins(amount) {
coins += amount;
document.getElementById('coin-count').textContent = coins;
}
function showMessage(msg) {
const messageEl = document.getElementById('message');
messageEl.textContent = msg;
setTimeout(() => messageEl.textContent = '', 3000);
}
</script>
</body>
</html>
📚 API Reference
Complete SDK methods and callbacks documentation
RewardedAd.init(config)
Initialize the BZZE Ads SDK with your configuration
Parameters:
appId(string) - Your game's App IDapiKey(string) - Your game's API KeyuserId(string) - Unique identifier for the userautoPreload(boolean) - 🆕 Enable automatic ad preloading (default: false)preloadCount(number) - 🆕 Number of ads to preload (default: 1)onReward(function) - Called when user completes ad. YOU decide the reward amount (coins, gems, lives, etc.)onAdLoaded(function) - 🆕 Called when ad is preloaded and readyonAdShown(function) - 🆕 Called when ad starts playingonAdClicked(function) - 🆕 Called when user clicks adonNoFill(function) - Called when no ads availableonClose(function) - Called when ad is closedonError(function) - Called when ad fails to load
RewardedAd.showAd(options)
Display a rewarded video ad to the user
Parameters:
rewardPreview(string) - Preview text shown to user (e.g., "100 coins")
RewardedAd.isReady()
Check if the SDK is initialized and ready
Returns:
boolean- true if SDK is initialized, false otherwise
RewardedAd.isAdAvailable() NEW
Check if a preloaded ad is available to show right now
Returns:
boolean- true if ad is ready to show, false if loading
RewardedAd.getPreloadedAdCount() NEW
Get the number of ads currently preloaded and ready
Returns:
number- Count of preloaded ads (0-3)
RewardedAd.getAnalytics() NEW
Get real-time analytics data for the current session
Returns:
object- Analytics data with impressions, revenue, clicks, etc.
Example:
const analytics = RewardedAd.getAnalytics();
console.log('Impressions:', analytics.impressions);
console.log('Revenue:', analytics.revenue);
console.log('Click Rate:', analytics.clickRate);
RewardedAd.enableDebug() NEW
Enable debug mode to see detailed logs in console
Usage:
RewardedAd.enableDebug(); // Enable debug logs
RewardedAd.disableDebug(); // Disable debug logs
RewardedAd.getInfo() NEW
Get SDK version and configuration information
Returns:
object- SDK info including version, config, and status
💡 Best Practices
Tips for maximizing ad revenue and user experience
Strategic Ad Placement
Place rewarded ads at natural break points in your game, such as after completing a level, when the player runs out of lives, or when they want to unlock premium content.
YOU Control Rewards
Important: You decide what rewards to give! BZZE Ads just delivers the video - you control everything else: coins, gems, diamonds, lives, power-ups, etc. Give rewards that make sense for YOUR game economy. The platform doesn't manage rewards - you do!
Valuable Rewards
Offer meaningful rewards that players actually want. This could be in-game currency, power-ups, extra lives, or exclusive items. The more valuable the reward, the more likely players are to watch ads.
Check Ad Availability
Always check if ads are available before showing the reward button. Use RewardedAd.isReady() to avoid disappointing users with unavailable ads.
Handle All Callbacks
Implement all callback functions (onReward, onNoFill, onClose, onError) to provide smooth user experience and handle edge cases gracefully.
🌍 GDPR/COPPA Compliance
Required for EU users and kids apps (US)
🇪🇺 GDPR (European Union)
Required for EU UsersIf your game has users in the EU, you MUST ask for consent before showing personalized ads.
Step 1: Create Consent Popup
<div id="gdprPopup" style="position: fixed; bottom: 0; background: rgba(0,0,0,0.95); color: white; padding: 20px;">
<h3>🍪 Cookie Consent</h3>
<p>We use cookies to show you personalized ads. Do you accept?</p>
<button onclick="handleConsent(true)">✅ Accept</button>
<button onclick="handleConsent(false)">❌ Reject</button>
</div>
Step 2: Handle Consent
// 1. Detect if user is in EU
function checkIfInEU() {
// Option 1: IP Geolocation (Recommended)
return fetch('https://ipapi.co/json/')
.then(r => r.json())
.then(data => data.in_eu); // true/false
// Option 2: Browser Timezone (Less accurate)
const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
return timezone.startsWith('Europe/');
}
// 2. Show popup for EU users
const isEU = await checkIfInEU();
const storedConsent = localStorage.getItem('gdpr_consent');
if (isEU && storedConsent === null) {
document.getElementById('gdprPopup').style.display = 'block';
} else {
initSDK(storedConsent === 'true');
}
// 3. Handle user's choice
function handleConsent(accepted) {
localStorage.setItem('gdpr_consent', accepted.toString());
document.getElementById('gdprPopup').style.display = 'none';
initSDK(accepted);
}
// 4. Initialize SDK with GDPR data
function initSDK(hasConsent) {
RewardedAd.init({
appId: "YOUR_APP_ID",
apiKey: "YOUR_API_KEY",
userId: "player_123",
// ⬇️ GDPR Compliance Data
gdprApplies: isEU, // true if user is in EU
gdprConsent: hasConsent, // true if user clicked Accept
onReward: function(reward) {
console.log('Reward granted!');
}
});
}
- ✅ SDK automatically sends it with every ad request
- ✅ Platform uses it to filter campaigns (personalized vs non-personalized)
- ✅ No consent = lower CPM but still compliant
- ✅ Logged for legal compliance audits
🇺🇸 COPPA (United States)
Required for Kids AppsIf your game is directed at children under 13, you MUST comply with COPPA regulations.
Initialize SDK for Kids Apps
RewardedAd.init({
appId: "YOUR_APP_ID",
apiKey: "YOUR_API_KEY",
userId: "player_123",
// ⬇️ COPPA Compliance Data
coppaCompliant: true, // This is a kids app
isChildDirected: true, // Content is for under 13
onReward: function(reward) {
console.log('Reward granted!');
}
});
// SDK will automatically:
// ✅ Send COPPA flag with ad requests
// ✅ Platform filters out adult content
// ✅ Only non-personalized ads shown
// ✅ No user tracking or data collection
coppaCompliant: true. Failure to comply with COPPA can result in heavy fines (up to $43,000 per violation).
⚡ Advanced Features
Industry-standard features built into the SDK
Server-Side Rate Limiting
Cannot Be Bypassed - The platform enforces rate limits on the server:
- ✅ 10 ads per hour (enforced server-side)
- ✅ 50 ads per day (enforced server-side)
- ✅ 60-second cooldown between ads
- ✅ Prevents fraud and abuse
// Automatic - no code needed!
// Users cannot bypass by clearing cache/cookies
// Server tracks per userId
Viewability Tracking
IAB Standard - Ads are only counted as "viewable" if:
- ✅ 50%+ of the player is visible on screen
- ✅ For at least 2 continuous seconds
- ✅ Measured by IntersectionObserver API
- ✅ Higher viewability = better CPM rates
// Check viewability in analytics
const analytics = RewardedAd.getAnalytics();
console.log('Viewable:', analytics.viewableImpressions);
console.log('Total:', analytics.impressions);
// Viewability Rate: 75% (good!)
VAST Error Tracking
IAB Compliant - All VAST errors are logged with standard error codes:
- ✅ 18 IAB error codes (100-901)
- ✅ Helps debug SSP integration issues
- ✅ Automatically reported to platform
- ✅ Improves ad quality over time
// Automatic error tracking
// 100: XML parsing error
// 401: File not found
// 402: Timeout of VAST URI
// etc.
Ad Preloading & Queue
Zero-Delay Playback - Ads load in the background:
- ✅ Auto-preloads up to 3 ads
- ✅ Instant playback (no loading spinner)
- ✅ 5-minute freshness guarantee
- ✅ Better user experience
// Check preloaded ad count
console.log(RewardedAd.getPreloadedAdCount());
// 2 ads ready
// Check if ad available
console.log(RewardedAd.isAdAvailable());
// true - instant playback!
Built-in UI Overlay
Zero Configuration - SDK automatically shows status messages:
- ✅ "⏳ Wait 45s before next ad" (cooldown)
- ✅ "😔 No ads available" (no-fill)
- ✅ "❌ Ad failed to load" (errors)
- ✅ Auto-dismiss after 2-3 seconds
// No code needed!
// Just call showAd() - SDK handles everything
RewardedAd.showAd();
// ⏳ User sees auto-message if cooldown active
💰 Revenue & Payments
How you earn money and get paid
Revenue Share
You earn 70% of all ad revenue
We keep 30% to cover infrastructure, support, and platform costs. Your share is calculated based on actual advertiser spend.
Advertiser pays $10 CPM → You earn $7.00 per 1,000 impressions
Payment Schedule
NET-30 Monthly Payments
Earnings are paid out monthly, 30 days after the end of each month. Check the "Payouts" section for payment history and status.
January earnings → Paid on March 1st
February earnings → Paid on April 1st
Minimum Payout
$50 USD minimum
Earnings below $50 will roll over to the next month until the threshold is met. No fees or penalties for low balance.
January: $30 → Rolls over
February: $40 → Total $70 → Paid out
Payment Methods
Multiple options available
- ✅ PayPal - Instant, no fees
- ✅ Bank Transfer (ACH) - US only, 2-3 days
- ✅ Wire Transfer - International, 3-5 days
- ✅ Wise (TransferWise) - Global, low fees
Set up your payment method in the "Payouts" section.
Tax Information
Required for payments over $600/year
US publishers need W-9 form. International publishers need W-8BEN form. We'll send you a 1099 form at year-end if applicable.
How to Maximize Revenue
Tips to increase your earnings:
- ✅ Maintain high completion rate (80%+)
- ✅ Ensure good viewability (60%+ viewable impressions)
- ✅ Target high-CPM regions (US, UK, CA, AU)
- ✅ Show ads at natural break points in gameplay
- ✅ Offer valuable rewards to encourage ad views
- ✅ Keep your game quality high to retain users
🧪 Testing Your Integration
Verify everything works before going live
Enable Debug Mode
See detailed logs in your browser console to track what's happening
// Enable debug mode BEFORE init
RewardedAd.enableDebug();
RewardedAd.init({
appId: "YOUR_APP_ID",
apiKey: "YOUR_API_KEY",
userId: "test_user_123",
onReward: function(reward) {
console.log('✅ Test reward granted!');
}
});
// You'll now see detailed logs:
// [BZZE SDK] SDK initialized
// [BZZE SDK] Auto-preloading ads...
// [BZZE SDK] Ad preloaded successfully
// etc.
Test Ad Flow
Click through the entire ad experience to verify all callbacks work
Verify Analytics Tracking
Check that your stats are being recorded in the Publisher Dashboard
// After watching a test ad, check analytics:
const analytics = RewardedAd.getAnalytics();
console.log('Impressions:', analytics.impressions); // Should be 1+
console.log('Completions:', analytics.completions); // Should be 1+ if completed
console.log('Clicks:', analytics.clicks); // Should increment if clicked
// Then verify in Publisher Dashboard:
// 1. Go to Analytics section
// 2. Check "Total Requests" increased
// 3. Check "Total Impressions" increased
// 4. Check "Total Completions" increased (if completed)
// 5. Check revenue increased (by ~$0.005-0.01)
Test Edge Cases
Make sure error handling works correctly
Test GDPR/COPPA (If Applicable)
Verify compliance data is being sent correctly
// Test with GDPR enabled
RewardedAd.init({
appId: "YOUR_APP_ID",
apiKey: "YOUR_API_KEY",
userId: "test_user_123",
gdprApplies: true,
gdprConsent: true, // Test with true, then false
onReward: function(reward) {
console.log('Reward granted');
}
});
// Check browser Network tab:
// 1. Watch an ad
// 2. Look for POST to /v1/ads/request
// 3. Check request payload includes:
// "gdpr": { "applies": true, "consent": true }
Once all tests pass, you're ready for production! Start with a soft launch to a small percentage of users, monitor analytics for 24-48 hours, then scale up gradually.
🆘 Need Help?
We're here to support you
Email Support
support@bzze.com
Response time: 24-48 hours
For technical issues, include:
- Your App ID
- Browser console logs
- Steps to reproduce
- Expected vs actual behavior
Discord Community
discord.gg/bzze-ads
Join 500+ publishers
- Ask questions and get quick answers
- Share integration tips
- Get notified of updates
- Connect with other developers
Documentation
docs.bzze.com
Complete technical docs
- API reference
- SDK methods and callbacks
- Code examples
- Video tutorials
Platform Status
status.bzze.com
Real-time uptime monitoring
- API status: ● Operational
- SDK CDN: ● Operational
- Subscribe to incident alerts
- View historical uptime (99.9%)
Changelog & Updates
changelog.bzze.com
Stay informed of new features
- Latest SDK version: v2.0.0
- Recent updates and bug fixes
- Upcoming features roadmap
- Breaking changes announcements
Premium Support
For high-volume publishers (1M+ impressions/month)
- Dedicated account manager
- Priority email/Slack support
- Custom integration assistance
- Higher revenue share (80%)
Contact us to upgrade!
🔧 Troubleshooting
Common issues and solutions
❌ "Invalid API Key" Error
Solution: Make sure you're using the correct API Key from your game settings. Copy it exactly as shown in the "My Games" section.
❌ "No Fill" Messages
Solution: This means no ads are available at the moment. This is normal and can happen due to targeting, budget limits, or low ad inventory. Implement the onNoFill callback to handle this gracefully.
❌ Ads Not Loading
Solution: Check your browser's developer console for error messages. Ensure your game's domain is approved and matches the one registered in your account.
❌ Rewards Not Working
Solution: Make sure your onReward callback is properly implemented and actually grants the reward to the user. Test with console.log to verify the callback is being called.
Payouts & Earnings
Payout History
Settings
Account Settings
Account management and configuration options will be available here.