VASTlint

VAST examples / Deprecated features

A VPAID creative trafficked to CTV

VAST 4.10 errors3 warningsVAST-4.1-vpaid-apiframework

The scenario

An agency reused an old interactive web creative — built on VPAID — for a connected-TV extension of a campaign, expecting the same interactivity to carry over to the living-room screen.

The broken tag

<?xml version="1.0" encoding="UTF-8"?>
<!-- WARNING: VAST-4.1-vpaid-apiframework — apiFramework="VPAID" deprecated in VAST 4.1
     WARNING: VAST-2.0-flash-mediafile — Flash-based MediaFile type obsolete
     INFO:    VAST-4.0-mediafile-apiframework — apiFramework on MediaFile deprecated in 4.0+ -->
<VAST version="4.1">
  <Ad id="ad-001">
    <InLine>
      <AdSystem>Test</AdSystem>
      <AdTitle>Test Ad</AdTitle>
      <AdServingId>test-serving-id-001</AdServingId>
      <Impression><![CDATA[https://track.example.com/impression]]></Impression>
      <Creatives>
        <Creative>
          <UniversalAdId idRegistry="ad-id.org">TEST-001</UniversalAdId>
          <Linear>
            <Duration>00:00:30</Duration>
            <MediaFiles>
              <!-- VPAID is deprecated as of VAST 4.1 -->
              <MediaFile delivery="progressive" type="application/javascript" width="1920" height="1080"
                         apiFramework="VPAID">
                <![CDATA[https://cdn.example.com/vpaid-ad.js]]>
              </MediaFile>
              <!-- Flash MediaFile type is obsolete -->
              <MediaFile delivery="progressive" type="application/x-shockwave-flash" width="640" height="480">
                <![CDATA[https://cdn.example.com/ad.swf]]>
              </MediaFile>
            </MediaFiles>
          </Linear>
        </Creative>
      </Creatives>
    </InLine>
  </Ad>
</VAST>

What the validator reports

Running this tag through vastlint produces the following. The primary failure for this example:

warningVAST-4.1-vpaid-apiframeworkIAB VAST 4.1 §2.3.5.1line 19

apiFramework="VPAID" is deprecated as of VAST 4.1 — use SIMID or OMID instead

The same tag also surfaces these secondary findings — real tags rarely fail in isolation:

warningVAST-2.0-flash-mediafileIAB VAST 2.0 §2.3.5.2line 24

Flash-based MediaFile type is no longer supported in modern browsers

warningVAST-2.0-linear-tracking-quartilesIAB VAST 4.1 §3.14.2line 15

<Linear> has no standard quartile tracking events (start/firstQuartile/midpoint/thirdQuartile/complete) — ad will serve but measurement system receives no signal

infoVAST-4.1-mezzanine-recommendedIAB VAST 4.1 §3.9.2line 17

<MediaFiles> has no <Mezzanine> — ad-stitching servers may reject this tag in CTV/SSAI contexts

Why it breaks

The creative declares apiFramework="VPAID" (and even includes a Flash-type MediaFile). VPAID was deprecated by IAB Tech Lab and is not supported on CTV; the industry replacement for interactivity is SIMID, and OMID covers measurement. CTV players have no VPAID runtime (and certainly no Flash), so the interactive layer cannot execute on the target devices at all.

What it costs

On CTV the VPAID unit does not run: depending on the player it either fails to render (blank slot, no-fill) or falls back to a base video with all interactivity stripped. The campaign's entire premise — interactive engagement on the big screen — collapses, budget is wasted on non-delivering impressions, and the Flash MediaFile will not play on any modern device either.

The fix

Drop VPAID and Flash. For interactivity use SIMID with an HTTPS InteractiveCreativeFile plus a standard MediaFile fallback; for measurement use OMID via <AdVerifications>. Never traffic VPAID to CTV inventory.

<!-- replace VPAID with SIMID + a real MediaFile fallback -->
<MediaFile delivery="progressive" type="video/mp4" width="1920" height="1080">
  <![CDATA[https://cdn.example.com/base-1080.mp4]]></MediaFile>
<InteractiveCreativeFile type="text/html" apiFramework="SIMID">
  <![CDATA[https://cdn.example.com/simid/unit.html]]></InteractiveCreativeFile>

VAST XML fragment only. This excerpt belongs inside a complete VAST document, so standalone validation will fail until it is wrapped in a full <VAST>response.

Check your own version of this tag

Paste the resolved XML to run the same spec check, test a live tag URL, or inspect the wrapper chain hop by hop.

Related examples

Related reading