Creatives (VAST)

Overview

Video Ad Serving Template (VAST) creatives are video ads that conform to standards set by the IAB. There are three types of VAST that can be further customized depending on your use case:

  1. Video media file is hosted outside of Kevel and the customer wants to get standardized reporting on that video fed back into Kevel
  2. Video asset is hosted by Kevel and VAST tag contains tracking and media information without reference to any third-party services
  3. Video asset is hosted by Kevel and VAST tag contains tracking and media information plus a reference to a third-party/partner’s VAST tag so that this secondary ad server can receive video events too

📘

Host your video with Kevel

Video assets make Kevel your one-stop shop for video-based ads: setup Flight configurations, upload an advertiser or in-house provided master video file, and activate your Campaign all from the Kevel user interface. Kevel handles transcoding videos into a streaming-optimized format and serves the video to end users ensuring the best experience for the myriad of devices accessing websites and apps today.

Learn more about Video Assets »

VAST Creative Template Definitions

Boilerplate versions of the three types of VAST are included below. Select the appropriate option for your use case and POST the JSON snippet to the Create Creative Template endpoint. You may add additional custom fields to the template, but do not remove the fields included here—these are required in order to deliver a valid VAST tag. The VAST itself is defined in the contents of the Creative Template.

NOTE: these templates can be made via Management API or Studio.

  1. Video media file is hosted outside of Kevel and the customer wants to get standardized reporting on that video fed back into Kevel. "Primary VAST URI" format is a VAST endpoint that renders XML.
{
    "Name": "VAST - External Media",
    "Description": "Receive video reporting for media files hosted outside of Kevel",
    "IsArchived": false,
    "Fields": [{
        "Name": "Primary VAST URI",
        "Description": "URI to the primary VAST response. Use this to subscribe Kevel to reporting from a video hosted on a different ad server.",
        "Required": true,
        "Variable": "ctadTagURI",
        "Type": "String"
    }],
    "Contents": [{
        "Type": "HTML",
        "Body": "<Ad><Wrapper><VASTAdTagURI><![CDATA[{{ctadTagURI}}]]></VASTAdTagURI><Error></Error><Impression id=\"Kevel\"><![CDATA[{{impressionUrl}}]]></Impression><Creatives><Creative><Linear><TrackingEvents><Tracking event=\"complete\"><![CDATA[{{event(74)}}]]></Tracking><Tracking event=\"firstQuartile\"><![CDATA[{{event(71)}}]]></Tracking><Tracking event=\"fullscreen\"><![CDATA[{{event(80)}}]]></Tracking><Tracking event=\"midpoint\"><![CDATA[{{event(72)}}]]></Tracking><Tracking event=\"mute\"><![CDATA[{{event(75)}}]]></Tracking><Tracking event=\"pause\"><![CDATA[{{event(77)}}]]></Tracking><Tracking event=\"resume\"><![CDATA[{{event(79)}}]]></Tracking><Tracking event=\"rewind\"><![CDATA[{{event(78)}}]]></Tracking><Tracking event=\"start\"><![CDATA[{{event(70)}}]]></Tracking><Tracking event=\"thirdQuartile\"><![CDATA[{{event(73)}}]]></Tracking><Tracking event=\"unmute\"><![CDATA[{{event(76)}}]]></Tracking></TrackingEvents><VideoClicks><ClickTracking><![CDATA[{{url}}]]></ClickTracking></VideoClicks></Linear></Creative></Creatives><AdSystem>Kevel</AdSystem></Wrapper></Ad>"
    }]
}
  1. Video asset is hosted by Kevel and VAST tag contains tracking and media information without reference to any third-party services. Media file format is HLS (.m3u8) — type=application/x-mpegURL.
    For best results, Kevel hosted video files should be high resolution (HD, 720p+)
{
  "Name": "VAST - Kevel Video Asset",
  "Description": "Self-contained VAST for use with Kevel Video Assets",
  "IsArchived": false,
  "Fields": [
    {
      "Name": "Video Playback ID",
      "Description": "The alphanumeric string immediately preceding .m3u8 in the Content URL eg kvgXCIiXAayWei8vT4L7B00TtFIvAiuCbuo1Spn7e6Yg",
      "Required": true,
      "Variable": "ctContentPlaybackId",
      "Type": "String",
      "AdQuery": false
    },
    {
      "Name": "Video Duration",
      "Description": "Length of the video in hh:mm:ss format (eg 00:00:10 for a 10 second video)",
      "Required": true,
      "Variable": "ctMediaDuration",
      "Type": "String",
      "AdQuery": false
    }
  ],
  "Contents": [
    {
      "Type": "HTML",
      "Body": "<Ad id=\"{{ad.id}}\"><InLine><AdSystem>Kevel</AdSystem><AdTitle><![CDATA[{{ad.creative.name}}]]></AdTitle><Error><![CDATA[{{event(803)}}]]></Error><Impression id=\"kevel\"><![CDATA[{{impressionUrl}}]]></Impression><Creatives><Creative id=\"{{ad.creative.id}}\"><Linear><Duration><![CDATA[{{ctMediaDuration}}]]></Duration><TrackingEvents><Tracking event=\"complete\"><![CDATA[{{event(74)}}]]></Tracking><Tracking event=\"firstQuartile\"><![CDATA[{{event(71)}}]]></Tracking><Tracking event=\"fullscreen\"><![CDATA[{{event(80)}}]]></Tracking><Tracking event=\"midpoint\"><![CDATA[{{event(72)}}]]></Tracking><Tracking event=\"mute\"><![CDATA[{{event(75)}}]]></Tracking><Tracking event=\"pause\"><![CDATA[{{event(77)}}]]></Tracking><Tracking event=\"resume\"><![CDATA[{{event(79)}}]]></Tracking><Tracking event=\"rewind\"><![CDATA[{{event(78)}}]]></Tracking><Tracking event=\"start\"><![CDATA[{{event(70)}}]]></Tracking><Tracking event=\"thirdQuartile\"><![CDATA[{{event(73)}}]]></Tracking><Tracking event=\"unmute\"><![CDATA[{{event(76)}}]]></Tracking><Tracking event=\"close\"><![CDATA[{{event(85)}}]]></Tracking><Tracking event=\"expand\"><![CDATA[{{event(82)}}]]></Tracking><Tracking event=\"collapse\"><![CDATA[{{event(83)}}]]></Tracking><Tracking event=\"acceptInvitation\"><![CDATA[{{event(84)}}]]></Tracking></TrackingEvents><VideoClicks><ClickThrough><![CDATA[{{url}}]]></ClickThrough></VideoClicks><MediaFiles><MediaFile delivery=\"progressive\" type=\"application/x-mpegURL\" scalable=\"true\" width=\"{{ad.creative.width}}\" height=\"{{ad.creative.height}}\"><![CDATA[https://stream.video-assets.kevel.com/{{ctContentPlaybackId}}.m3u8]]></MediaFile><MediaFile delivery=\"progressive\" width=\"1920\" height=\"1080\" type=\"video/mp4\" bitrate=\"4056480\" scalable=\"true\" maintainAspectRatio=\"true\"><![CDATA[https://stream.video-assets.kevel.com/{{ctContentPlaybackId}}/high.mp4]]></MediaFile><MediaFile delivery=\"progressive\" width=\"960\" height=\"540\" type=\"video/mp4\" bitrate=\"1422704\" scalable=\"true\" maintainAspectRatio=\"true\"><![CDATA[https://stream.video-assets.kevel.com/{{ctContentPlaybackId}}/medium.mp4]]></MediaFile><MediaFile delivery=\"progressive\" width=\"640\" height=\"360\" type=\"video/mp4\" bitrate=\"797464\" scalable=\"true\" maintainAspectRatio=\"true\"><![CDATA[https://stream.video-assets.kevel.com/{{ctContentPlaybackId}}/low.mp4]]></MediaFile></MediaFiles></Linear></Creative></Creatives></InLine></Ad>"
    }
  ]
}
  1. Video asset is hosted by Kevel and VAST tag contains tracking and media information plus a reference to a third-party/partner’s VAST tag so that this secondary ad server can receive video events too. Media file format is HLS (.m3u8) — type=application/x-mpegURL.
    For best results, Kevel hosted video files should be high resolution (HD, 720p+)
{
    "Name": "VAST - Kevel Video Asset",
    "Description": "Self-contained VAST for use with Kevel Video Assets",
    "IsArchived": false,
    "Fields": [
        {
            "Name": "Video Playback URL",
            "Description": "",
            "Required": true,
            "Variable": "ctMediaUrl",
            "Type": "ExternalFile",
            "AdQuery": false
        },
        {
            "Name": "Video Duration",
            "Description": "Length of the video in hh:mm:ss format (eg 00:00:10 for a 10 second video)",
            "Required": true,
            "Variable": "ctMediaDuration",
            "Type": "String",
            "AdQuery": false
        },
        {
            "Name": "Secondary VAST tag URI",
            "Description": "The redirecting URI to the next VAST response. Use this to subscribe a secondary ad server to video events.",
            "Required": false,
            "Variable": "ctadTagURI",
            "Type": "String",
            "AdQuery": false
        }
    ],
    "Contents": [
        {
            "Type": "HTML",
            "Body": "<Ad id=\"{{ad.id}}\"><InLine><AdSystem>Kevel</AdSystem><AdTitle><![CDATA[{{ad.creative.name}}]]></AdTitle><Error><![CDATA[{{event(803)}}]]></Error><Impression id=\"kevel\"><![CDATA[{{impressionUrl}}]]></Impression><VASTAdTagURI><![CDATA[{{ctadTagURI}}]]></VASTAdTagURI><Creatives><Creative id=\"{{ad.creative.id}}\"><Linear><Duration><![CDATA[{{ctMediaDuration}}]]></Duration><TrackingEvents><Tracking event=\"complete\"><![CDATA[{{event(74)}}]]></Tracking><Tracking event=\"firstQuartile\"><![CDATA[{{event(71)}}]]></Tracking><Tracking event=\"fullscreen\"><![CDATA[{{event(80)}}]]></Tracking><Tracking event=\"midpoint\"><![CDATA[{{event(72)}}]]></Tracking><Tracking event=\"mute\"><![CDATA[{{event(75)}}]]></Tracking><Tracking event=\"pause\"><![CDATA[{{event(77)}}]]></Tracking><Tracking event=\"resume\"><![CDATA[{{event(79)}}]]></Tracking><Tracking event=\"rewind\"><![CDATA[{{event(78)}}]]></Tracking><Tracking event=\"start\"><![CDATA[{{event(70)}}]]></Tracking><Tracking event=\"thirdQuartile\"><![CDATA[{{event(73)}}]]></Tracking><Tracking event=\"unmute\"><![CDATA[{{event(76)}}]]></Tracking><Tracking event=\"close\"><![CDATA[{{event(85)}}]]></Tracking><Tracking event=\"expand\"><![CDATA[{{event(82)}}]]></Tracking><Tracking event=\"collapse\"><![CDATA[{{event(83)}}]]></Tracking><Tracking event=\"acceptInvitation\"><![CDATA[{{event(84)}}]]></Tracking></TrackingEvents><VideoClicks><ClickThrough><![CDATA[{{url}}]]></ClickThrough></VideoClicks><MediaFiles><MediaFile delivery=\"progressive\" type=\"application/x-mpegURL\" scalable=\"true\" width=\"{{ad.creative.width}}\" height=\"{{ad.creative.height}}\"><![CDATA[{{ctMediaUrl}}]]></MediaFile></MediaFiles></Linear></Creative></Creatives></InLine></Ad>"
        }
    ]
}
  1. Video media file is hosted outside of Kevel and the customer wants to get standardized reporting on that video fed back into Kevel. Media File format is mp4.
{
    "Name": "VAST - External Media (mp4)",
    "Description": "Deliver VAST ads and video reporting for mp4 media files hosted outside of Kevel",
    "IsArchived": false,
    "Fields": [
        {
            "AdQuery": false,
            "Description": "Length of the video in hh:mm:ss format (eg 00:00:10 for a 10 second video)",
            "Name": "Video Duration",
            "Required": true,
            "Type": "String",
            "Variable": "ctMediaDuration"
        },
        {
            "AdQuery": false,
            "Description": "URL to the video file in mp4 format",
            "Name": "Video URI",
            "Required": false,
            "Type": "String",
            "Variable": "ctVideoURI"
        }
    ],
    "Contents": [
        {
            "Type": "HTML",
            "Body": " <Ad id=\"{{ad.id}}\"><InLine><AdSystem>Kevel</AdSystem><AdTitle> <![CDATA[{{ad.creative.name}}]]></AdTitle><Error> <![CDATA[{{event(803)}}]]></Error><Impression id=\"kevel\"> <![CDATA[{{impressionUrl}}]]></Impression><Creatives><Creative id=\"{{ad.creative.id}}\" sequence=\"1\"><Linear><Duration> <![CDATA[{{ctMediaDuration}}]]></Duration>   <TrackingEvents>  <Tracking event=\"complete\"> <![CDATA[{{event(74)}}]]>  </Tracking>  <Tracking event=\"firstQuartile\"> <![CDATA[{{event(71)}}]]>  </Tracking>  <Tracking event=\"fullscreen\"> <![CDATA[{{event(80)}}]]>  </Tracking>  <Tracking event=\"midpoint\"> <![CDATA[{{event(72)}}]]>  </Tracking>  <Tracking event=\"mute\"> <![CDATA[{{event(75)}}]]>  </Tracking>  <Tracking event=\"pause\"> <![CDATA[{{event(77)}}]]>  </Tracking>  <Tracking event=\"resume\"> <![CDATA[{{event(79)}}]]>  </Tracking>  <Tracking event=\"rewind\"> <![CDATA[{{event(78)}}]]>  </Tracking>  <Tracking event=\"start\"> <![CDATA[{{event(70)}}]]>  </Tracking>  <Tracking event=\"thirdQuartile\"> <![CDATA[{{event(73)}}]]>  </Tracking>  <Tracking event=\"unmute\"> <![CDATA[{{event(76)}}]]>  </Tracking>  <Tracking event=\"close\"> <![CDATA[{{event(85)}}]]>  </Tracking>  <Tracking event=\"expand\"> <![CDATA[{{event(82)}}]]>  </Tracking>  <Tracking event=\"collapse\"> <![CDATA[{{event(83)}}]]>  </Tracking>  <Tracking event=\"acceptInvitation\"> <![CDATA[{{event(84)}}]]>  </Tracking>   </TrackingEvents><VideoClicks><ClickThrough>  <![CDATA[{{url}}]]></ClickThrough></VideoClicks><MediaFiles><MediaFile id=\"5241\" delivery=\"progressive\" type=\"video/mp4\" bitrate=\"500\" width=\"400\" height=\"300\" minBitrate=\"360\" maxBitrate=\"1080\" scalable=\"1\" maintainAspectRatio=\"1\" codec=\"0\" apiFramework=\"VAST\"><![CDATA[{{ctVideoURI}}]]></MediaFile></MediaFiles></Linear></Creative></Creatives></InLine></Ad>"
        }
    ]
}

Setting Up a VAST Creative

  1. Flight Settings --> Creatives --> New Creative
  2. Select the Format "Custom Template"
  3. Select the custom template based on your chosen setup (eg "VAST - Kevel Video Asset")
  4. Complete the required fields (eg Video Playback URL and Video Duration)
  5. Select the Ad Size of your video
  6. Add any other creative settings and save the creative

Generating VAST Ad Tags

For more information on generating VAST tags to use in your inventory, refer to our VAST Ad Code article.

Viewing VAST Events in Reporting

VAST creatives will appear alongside other creatives in Kevel reporting. However, reports that include VAST creatives will also contain several additional columns that record VAST events:

These events are:

  • Start - Video began to play
  • First Quartile - Video played through the first quarter of its length
  • Mid Point - Video played through the midpoint of its length
  • Third Quartile - Video played through the third quarter of its length
  • Complete - Video played through its entire length
  • Pause - The user paused the video
  • Resume - The user continued to view the video after pausing
  • Fullscreen - Video was watched in full screen
  • Mute - Video was muted
  • Rewind - Video was rewound
  • Unmute - Video was unmuted

All VAST events are defined by the actions of the users when they view an ad.