Rewarded video is a user-initiated ad type. It allows end-users to get in-app rewards or other benefits in exchange for viewing a video ad.

1. Initialize rewarded video

1. Import the namespaces:

using AppodealStack.Monetization.Api;
using AppodealStack.Monetization.Common;
2.  Add the following code within the  Start() method of your main scene’s MonoBehavior:  
Appodeal.Initialize("YOUR_APPODEAL_APP_KEY", AppodealAdType.RewardedVideo, this);
Initialization method requires 2 parameters:

  • appKey - appKey is generated when you add an application to Appodeal.
  • adType - Ad types can be combined using "|" operator. For example, AppodealAdType.Interstitial | AppodealAdType.RewardedVideo.

By default, auto caching is enabled: Appodeal SDK starts to load rewarded video right away after the initialization method is called. The next rewarded video ad starts to load after the previous one was shown.

2. Manual caching

If you need more control of Rewarded video ads loading use manual caching. Manual caching for Rewarded video can be useful to improve display rate or decrease SDK loads when several ad types are cached.

To disable automatic caching for rewarded videos use the code below before the SDK initialization:

Appodeal.SetAutoCache(AppodealAdType.RewardedVideo, false);
To cache rewarded video use:

3. Display rewarded video

To display rewarded video, you need to call the following code in the activity:


4. Check if rewarded video is loaded

You can check status of loading before showing. This method return  a boolean value indicating whether the rewarded video is loaded.

We recommend you always check whether an ad is available before trying to show it.


if(Appodeal.IsLoaded(AppodealAdType.RewardedVideo)) {

5. Rewarded video placements

Appodeal SDK allows you to tag each impression with different placement. For using placements you need to create placements in Appodeal Dashboard. Read more about placements.

To show an ad with placement, you have to call show method like this in your activity:

Appodeal.Show(AppodealShowStyle.RewardedVideo, “placementName”);

If the loaded ad can’t be shown for a specific placement, nothing will be shown. If auto caching is enabled, sdk will start to cache another ad, which can affect display rate. To save the loaded ad for future use (for instance, for another placement) check if the ad can be shown before calling show method:

if(Appodeal.CanShow(AppodealAdType.RewardedVideo, “placementName”)){
	Appodeal.Show(AppodealShowStyle.RewardedVideo, “placementName”);

You can configure your impression logic for each placement.

If you have no placements, or call  with a placement that does not exist, the impression will be tagged with 'default' placement and its settings will be applied.


Placement settings affect ONLY ad presentation, not loading or caching.

6. Rewarded video callbacks 

The callbacks are used to track different events in the lifecycle of an ad, e.g. when an ad was clicked on or closed. To implement them, you need to follow three steps:

1. Extend your class with IRewardedVideoAdListener:

YourClassName : IRewardedVideoAdListener;
2. Then call the following method before SDK initialization:
3. Now you can use the following callback methods within your public class :
#region Rewarded Video callback handlers

//Called when rewarded video was loaded (precache flag shows if the loaded ad is precache).
public void OnRewardedVideoLoaded(bool isPrecache) 
	print("Video loaded"); 

// Called when rewarded video failed to load
public void OnRewardedVideoFailedToLoad() 
	print("Video failed"); 

// Called when rewarded video was loaded, but cannot be shown (internal network errors, placement settings, or incorrect creative)
public void OnRewardedVideoShowFailed() 
	print ("Video show failed"); 

// Called when rewarded video is shown
public void OnRewardedVideoShown() 
	print("Video shown"); 

// Called when reward video is clicked
public void OnRewardedVideoClicked()
	print("Video clicked"); 

// Called when rewarded video is closed
public void OnRewardedVideoClosed(bool finished) 
	print("Video closed"); 

// Called when rewarded video is viewed until the end
public void OnRewardedVideoFinished(double amount, string name) 
	print("Reward: " + amount + " " + name); 

//Called when rewarded video is expired and can not be shown
public void OnRewardedVideoExpired() 
	print("Video expired"); 

All callbacks are called on native main threads that do not match the main thread of the Unity. If you need to receive callbacks in the main Unity thread follow our Callback Usage Guide.

6.1. Server-to-server (S2S) rewarded video callbacks

To secure your apps' economy we offer S2S reward callbacks. To validate each reward first you need to set up a callback URL on your server that will receive reward information. We will pass user data to your callback URL. Then you will need to validate and adjust users' balance accordingly.

1. Create reward callback URL on your server that will receive reward information.

2. Fill created URL and encryption key in the app settings in your dashboard.

3. Reward callback will be sent to your URL using GET request with two parameters:

4. Your URL should decrypt the data and validate it.

5. Check impression_id for uniqueness and store it in your system to prevent duplicate transactions.

To set user ID use Appodeal.SetUserId("User#123") method before the SDK initialization.

We offer sample script in Go, PHP, Ruby, Java, Node.js, Python 3 and C# to decrypt the data. If you need samples in other languages please contact our support and we will provide it for you.

Sample in PHP:  reward.php .

Sample in Ruby:  reward.rb .

Sample in Java: .

Sample in Node.js:  reward.js

Sample in Python 3: .

Sample in C#:  reward.cs .

Sample in Go:  reward.go.

6.2. Get reward data for a specific placement

To get reward data and notify your users of it before the video ad is shown, use this method. It returns KeyValuePair with the currency type and amount of the reward.


7. Get predicted eCPM

This method return expected eCPM for cached ad. Amount is calculated based on historical data for the current ad unit.


8. Mute rewarded video (Only for Android platform)

You can mute video ads if calls is muted on the device. For muting you need to call the following code before the initialization method