Rewarded Video

Rewarded video - user-initiated ads where users can earn in-app rewards in exchange for viewing a video ad.

1. Manual Caching

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.

To disable automatic caching for Rewarded Video, use the code below before the SDK initialization:

Appodeal.setAutocache(false, types: .rewardedVideo)
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 cache Rewarded Video use:
Read more on manual caching in our FAQ.

2. 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.

Appodeal.isReadyForShow(with: .rewardedVideo)
We recommend you check caching it before trying to show. 

3. Display rewarded video

Appodeal.showAd(.rewardedVideo, rootViewController: self)

4. 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.

Appodeal.showAd(.rewardedVideo, forPlacement: placement, rootViewController: self)
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:

Appodeal.canShow(.rewardedVideo, forPlacement: placement)
You can configure your impression logic for each placement.

If you have no placements, or call  with placement that do 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.

5. Use 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 get them, you need to set the delegate as follows:

// set delegate
Usually, the class that implements rewarded video ads is also the delegate class. That’s why the delegate property can be set to self.

Now you can use the following callback methods:

extension YourViewController: AppodealRewardedVideoDelegate {
    // Method called when rewarded video loads
    // - Parameter precache: If precache is YES it means that precached ad loaded
    func rewardedVideoDidLoadAdIsPrecache(_ precache: Bool) {
    // Method called if rewarded video mediation failed
    func rewardedVideoDidFailToLoadAd() {

    // Method called if rewarded mediation was successful, but ready ad network can't show ad or
    // ad presentation was too frequent according to your placement settings
    // - Parameter error: Error object that indicates error reason
    func rewardedVideoDidFailToPresentWithError(_ error: Error) {

    // Method called after rewarded video start displaying
    func rewardedVideoDidPresent() {
    // Method called before rewarded video leaves screen
    // - Parameter wasFullyWatched: boolean flag indicated that user watch video fully
    func rewardedVideoWillDismissAndWasFullyWatched(_ wasFullyWatched: Bool) {

    //  Method called after fully watch of video
    // - Warning: After call this method rewarded video can stay on screen and show postbanner
    // - Parameters:
    //   - rewardAmount: Amount of app curency tuned via Appodeal Dashboard
    //   - rewardName: Name of app currency tuned via Appodeal Dashboard
    func rewardedVideoDidFinish(_ rewardAmount: Float, name rewardName: String?) {

    // Method is called when rewarded video is clicked
    func rewardedVideoDidClick() {


    // Method called when rewardedVideo did expire and can not be shown
    func rewardedVideoDidExpired(){

All callbacks are called on the main thread.

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

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

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

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

3. The 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 the duplication of transactions.

To set user ID, use the Appodeal.getUserSettings(this).setUserId("User#123") method before the SDK initialization.

We offer sample scripts 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 team and we will provide it to 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.

7. Get reward data for a specific placement

To get reward details (currency, name and amount) for any placement, use the rewardForPlacement:(NSString *)placement method:

let rewardCurrencyName = Appodeal.reward(forPlacement:"placement").currencyName
let rewardAmount = Appodeal.reward(forPlacement:"placement").amount

8. Get Predicted eCPM

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

Appodeal.predictedEcpm(for: .rewardedVideo)

9. Check if Rewarded Video was initialized

Appodeal.isInitialized(for: .rewardedVideo)

Returns true, if Rewarded Video was initialized.

10. Check if autocache is enabled for Rewarded Video


Returns true, if autocache is enabled for Rewarded Video.