CSAI Video Ads CSAI Video Ads

CSAI Video Ads

The "Video Ads" page shows the configuration options for ad servers:

Video Ads - Edit - 1.png

How to Use

The Apps Creator platform has native implementations for:

  • Google Ad Manager
  • SpotX
  • SpringServe

Any VAST compliant server can also be added via the "Advanced" option.

Settings to control request frequency, non-VMAP ad break scheduling, and ad targeting are available:

Video Ads - Edit - 2.png

Schedule Breaks without VMAP

You can play mid-roll ads in the videos at the pre-defined intervals by selecting any one of these options considering that the ad tag URL provided by you should be a simple VAST tag without any pre-rolls, mid-rolls, or post-rolls.

  • Make an ad call every X minutes - With this option, the mid-roll ads will play within the videos every X minutes (value should be greater than ZERO)

Example: If you set it to 5 minutes, then the mid-roll ad will play after every 5 minutes.

  • Make ad calls at cue points in your source feeds - With this option, the ads will play at the defined cue points in your video and will be picked from the MRSS feed
    (example - cuepoints, jwplayer:cuepoints, etc.)


<cuepoints>01:00:00.00, 01:03:00.00, 01:06:00.00, 01:08:00.00, 01:10:00.00</cuepoints>

If you are using JW Player for your content then the cue points should look like below for your JW Player MRSS:

<jwplayer:cuepoints>00:05:22.00, 00:10:20.00, 00:14:50.00<jwplayer:cuepoints/>

Sample MRSS for CuePoints:

<rss xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
<title>Home video feed</title>
<description>Some description text for the feed</description>
<lastBuildDate>Mon, 23 Nov 2015 11:52:32 ­0800</lastBuildDate>
<title>A BIG Title for your Video</title>
<description> Description of the video </description>
<pubDate>Mon, 23 Nov 2015 09:29:47 ­0800</pubDate>
<guid isPermaLink="false">9677095935</guid>
<cuepoints>01:00:00.00, 01:03:00.00, 01:06:00.00, 01:08:00.00, 01:10:00.00</cuepoints>
<media:content duration="36777" medium="video" type="application/x-mpegURL" url="http://zype.com/samplevideourl/4mmaddgkad.m3u8"/>
<media:title>Media Title</media:title>
<media:thumbnail url="http://zype.com/thumbnailsample/2ej2kdj"/>
<media:subTitle href="https://YourExampleSRTHere.com.srt"/>

Sample JW Player MRSS for CuePoints:

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss/" xmlns:jwplayer="http://rss.jwpcdn.com/">
<title>Cue Points for JW player</title>
<description>Items with and without cue points</description>
<jwplayer:link rel="first" href="https://cdn.jwplayer.com/v2/playlists/MucDrdnh?format=mrss&amp;internal=false&amp;page_offset=1&amp;page_limit=500"/>
<jwplayer:link rel="last" href="https://cdn.jwplayer.com/v2/playlists/MucDrdnh?format=mrss&amp;internal=false&amp;page_offset=1&amp;page_limit=500"/>
<title>This is the Video Title/title>
<description>This is a big Video</description>
<pubDate>Thu, 30 Apr 2020 16:47:04 -0000</pubDate>
<guid isPermaLink="false">seNHw4m2</guid>
<enclosure url="https://cdn.jwplayer.com/videos/seNHw4m2-NtlSGv2A.mp4" type="video/mp4" length="267"/>
<media:content url="https://cdn.jwplayer.com/manifests/seNHw4m2.m3u8" medium="video" type="application/vnd.apple.mpegurl" duration="266"/>
<media:content url="https://cdn.jwplayer.com/videos/seNHw4m2-Q7byC19B.mp4" medium="video" type="video/mp4" duration="267" width="320" height="160" fileSize="13570895"/>
<media:content url="https://cdn.jwplayer.com/videos/seNHw4m2-450kyKGV.mp4" medium="video" type="video/mp4" duration="267" width="480" height="240" fileSize="20267446"/>
<media:content url="https://cdn.jwplayer.com/videos/seNHw4m2-U3XBsYL0.mp4" medium="video" type="video/mp4" duration="267" width="1280" height="640" fileSize="56991682"/>
<media:content url="https://cdn.jwplayer.com/videos/seNHw4m2-cikvMk1M.m4a" medium="video" type="audio/mp4" duration="267" fileSize="3778566"/>
<media:content url="https://cdn.jwplayer.com/videos/seNHw4m2-NtlSGv2A.mp4" medium="video" type="video/mp4" duration="267" width="1920" height="960" fileSize="99767487"/>
<media:content url="https://cdn.jwplayer.com/videos/seNHw4m2-rjLc00yf.mp4" medium="video" type="video/mp4" duration="267" width="640" height="320" fileSize="22236099"/>
<media:content url="https://cdn.jwplayer.com/videos/seNHw4m2-UPK05zNt.mp4" medium="video" type="video/mp4" duration="267" width="960" height="480" fileSize="38104824"/>
<media:thumbnail url="https://cdn.jwplayer.com/v2/media/seNHw4m2/poster.jpg?width=720" width="720" />
<jwplayer:track file="https://cdn.jwplayer.com/strips/seNHw4m2-120.vtt" kind="thumbnails"/>
<jwplayer:cuepoints>00:02:00.00, 00:04:00.00, 00:06:00.00, 00:08:00.00, 00:10:00.00</jwplayer:cuepoints>

Please note: Both "Set request frequency" and "Schedule ad breaks without VMAP" settings will work in conjunction.

For example, if you choose to play an ad every 2nd video and you also choose to play the ad at every 3 minutes, the final ad will be played in every 2nd video at 3 minutes intervals. This applies to the cue points ad break as well. 


To begin using KVPs with the platform, you will need to set up your targeting tags in the dashboard and in the third-party ad server console. The platform will pick up the values within designated tags from your MRSS feed and pass them to the third-party ad server for targeted ads.

Please Note: The platform will not append any additional parameters or macros to your Ad tag URL except KVP if added.

Key-Value Pairs (KVPs) can be added to your ad targeting configuration:

Video Ads - Edit - 3.png

Apple App Tracking Transparency

With the release of iOS 14 and tvOS 14, Apple has introduced the AppTrackingTransparency framework. As per Apple's new guidelines, apps will need to request permission to track the user and access the device’s advertising identifier to display personalized ads.

Due to this, if your app is already on the Apple App Store and you decide to turn on or turn off ads on the dashboard, an app update will be required for iOS/tvOS apps to comply with the new guidelines.

After enabling or disabling ads on the Dashboard, please write to us at submissions@mazsystems.com to request an app update for your iOS/tvOS app.

Custom Ad Tag Configurations

Head over to the "Advanced" tab on the Video Ads page in if you would like to have more control over the ad tag URL and the macros that the platform passes on dynamically in the ad requests.

Here, you will provide an ad tag URL with placeholder values for macros and the system will replace only those placeholder values (with the actual values) that match the supported token (placeholder) values.

Form your ad tag URL and include the token values from that list for the macros that you want to be passed on dynamically. That is, if, when forming the ad request, you would like the platform to replace values of certain macros in your ad tag URL, please include the exact names (token values) for the respective macros to the right of the = sign. The platform will replace values of only those macros for which the names of the token (placeholder) values exactly match the respective token value names mentioned in the list of macros supported by the platform.

If we don't find any token value in your ad tag URL that matches any of the token values recognized by the platform (from the table below), no value will be passed on for any macro and the ad request will just be made with the ad tag URL untouched.

Please note that the names of the macros (to the left of the = sign) can be anything. It is just the names of their token values that the platform will be matching with the names of token values listed in the table below.

For example, if you have an ad tag supplied by your ad server as:


And would like to dynamically pass the "app_bundle" macro, the value to the macro should be replaced with the platform's token value. The modified ad tag which should be added to the dashboard should look like this:


If you would like to set up KVPs to be sent in the ad requests per video, please also specify the method of sending in those KVPs in the ad requests. This is required because different ad servers have different requirements for KVP parameters in ad requests and one way of sending in the KVPs might work for one ad server but not for others. For now, we support sending KVPs using the Google Ad Manager method and the SpringServe method. If your ad server is not listed in the "Method to send KVPs" drop-down, please contact success@mazsystems.com and let us know about your ad server requirements.

List of all supported token values

Token Name Description Actual Value
[[W]] Player width Video player width as per current orientation
[[H]] Player height Video player height as per current orientation
[[CB]] Random number to prevent caching A random but unique number
[[IPADDRESS]] User IP address IP address of the user's device. Subject to user granting location tracking permission. Note: Only available for Roku.
[[UA]] User-agent string The user-agent string of the user's device. In the case of tvOS, since WebKit is not available, a custom UA string is passed on
[[LATITUDE]] User latitude Only supported on mobile. Latitude of user's location. Subject to user granting location tracking permission
[[LONGITUDE]] User longitude Only supported on mobile. Latitude of user's location. Subject to user granting location tracking permission
[[DESC]] Video description Video description taken from source feed, if available
[[DUR]] Video duration length in seconds Video duration length in seconds. For videos not hosted through the platform, the duration will be passed on if available in the feed
[[ATPLY]] 1 if the player is set to autoplay, 0 if not Since the player is always set to autoplay, 1 is passed on
[[PLCMNT]] Placement of video 1, as our video ads are in-stream ads only
[[DMAKE]] Device's make Device's make
[[DMODEL]] Device's model Device's model
[[AB]] App bundle App bundle
[[AN]] App name App name
[[ASU]] App store URL App store URL. For Roku, since we don't have the app store URL, the app bundle ID is passed on
[[DID]] User device ID for all device types User's device ID for all device types. For iOS/tvOS - Advertising Id is sent
[[MID]] Media ID Identifier of the video item
[[CID]] Content ID Identifier of the video item
[[VT]] Encoded video title Encoded title of the video item
[[VID]] Video ID Identifier of the video item
[[VURL]] Encoded video URL Encoded URL of the video item
[[GDPRFLAG]] GDPR Flag 1 (true, consenting) or 0 (false, non-consenting)
[[USPRIVACY]] US Privacy string US Privacy string as per IAB specifications and based on CCPA settings in the dashboard and whether the user has opted out or not
[[COPPAFLAG]] COPPA flag, indicating traffic that is subject to the Children's Online Privacy Protection Act of the United States. 1 (true) or 0 (false). The platform will pass on 0
[[BN]] Device's brand name Brand name of the user's device if available, otherwise name of the corresponding platform as determined by the application.
[[CID2]] Unique content ID for "content" object for PC and SSHB bid requests (see OpenRTB 2.5) Identifier of the video item
[[CTITLE]] Encoded content title for "content" object for PC and SSHB bid requests (see OpenRTB 2.5) Encoded title of the video item
[[SESSION_ID]] A unique identifier for the current app session, should be unique for each app launch

See the “‘Session’ IFAs” section of the OTT-IFA specification for more information.

[[IFA]] A unique identifier for the device or session, based on the user’s choice of whether or not to limit ad tracking

The identifier for advertising (IFA) must be a unique value and must never be (or be based on) a hardware-specific ID such as MAC address or IMEI.

The IFA may be based on IP Address, but should never be the IP address directly.

Overall, the IFA must never contain any Personally Identifiable Information (PII).

On many platforms, this ID is provided by the platform itself. When not provided by the platform, the Session ID (SID) token’s value should be used.

NOTE: For example, on VIZIO devices the IFA values can be retrieved by the app registering with the “VIZIO device IFA handler”, as documented here.

See the “Identifier for Advertising (ifa)” documentation in the “General Guidelines” section of the OTT-IFA specification for more information.

[[IFA_TYPE]] The IFA type of the device.

Possible values:

  • "dpid" - the generic “device provided id”, but based on historical usage, common device type specific values can be used
  • "rida" - Roku ID
  • "aaid" - Android ID
  • "idfa" - Apple ID
  • "afai" - Amazon Fire ID
  • "msai" - Microsoft ID
  • "ppid" - Publisher-provided ID
  • "sspid" - SSP-provided ID
  • "sessionid" - Session ID / Synthetic ID, used when no other ID is available; generated per session

See the “IFA Type (ifa_type)” documentation in the “General Guidelines” section of the OTT-IFA specification for more information.

[[LMT]] Indicates if a user has opted out of targeted advertising, per the OTT-IFA specification.

Possible values:

  • "0" - The consumer has NOT opted out targeting advertising
  • "1" - The consumer HAS opted out of targeting advertising
[[AD]] A unique identifier for the app’s domain

For example: "mygame.myapp.io"

[[SN]] The name of the page on which the content is being displayed.

In the web app, this is the value of the “Website title” property on the web output configuration page.

In native apps, this is the same value as the “[[AN]]” token.

[[PURL]] The URL of the page (or deep link to app screen) on which the content is being displayed.

In the web app, this is the web URL to the current page.

In native apps, this is the deep link to the current screen.

[[CONTENT_GENRE]] The genre of the content.

If the content comes from the Zype CMS, this will be the value of the “Genre” field.

Otherwise, if a custom attribute named “genre” exists, this will be that attribute’s value. If more than one attribute is configured, the first value (in terms of the attribute’s position in the list of attributes) will be used.

[[CONTENT_CHANNEL]] The name of the channel in which the content is appearing.

When content is being shown via the EPG, this is the name of the EPG channel.

Otherwise, this is the same value as the “App Name” (“[[AN]]”) token.

[[CONTENT_RATING]] The rating of the content.

If the content comes from the Zype CMS, this will be the value of the “Rating” field.

Otherwise, if a custom attribute named “rating” exists, this will be that attribute’s value. If more than one attribute is configured, the first value (in terms of the attribute’s position in the list of attributes) will be used.