VPAID has been deprecated since VAST 4.1. The replacement is SIMID: Secure Interactive Media Interface Definition. It loads an HTML creative into a sandboxed cross-origin iframe and talks to the player over postMessage. No DOM access, no cookies, no running inside the publisher's page.
That is the whole point. VPAID ran in the page's JavaScript context. SIMID was designed so it would not.
The tags I see that claim apiFramework="SIMID" still fail it. The failures are small, they are in the XML rather than the creative, and they are the same five mistakes every time. Players that do not support SIMID then have nothing else to play, because the fallback was never there either.
I maintain vastlint, an open source VAST linter, and these are the SIMID rules it fires on real tags. Each one maps to a sentence in the spec.
The VPAID leftover
A linear SIMID creative lives in <InteractiveCreativeFile>. The spec is not flexible about the type:
<!-- rejected: this is a VPAID MIME type on a SIMID element -->
<InteractiveCreativeFile apiFramework="SIMID" type="application/javascript">
<![CDATA[https://cdn.example.com/creative.js]]>
</InteractiveCreativeFile>
SIMID 1.0 §5 requires type="text/html". The creative is an HTML document. If you still have a .js file, wrap it in a page that implements the SIMID postMessage API and point the tag at that page.
<InteractiveCreativeFile type="text/html" apiFramework="SIMID">
<![CDATA[https://cdn.example.com/creative.html]]>
</InteractiveCreativeFile>
vastlint reports the first form as SIMID-1.0-simid-type-required. Missing type entirely is the same error, plus the generic VAST warning that an <InteractiveCreativeFile> should name a MIME type at all.
This is the most common migration artefact I see. Someone grepped VPAID to SIMID and left the JavaScript type in place. The player that actually implements SIMID refuses to load it.
HTTP, and a blank URL
SIMID creatives load in an iframe. An http:// URL is mixed content in every modern browser and every CTV webview that is doing HTTPS correctly. The interactive layer is blank. There is often no player error, because the iframe failed the way mixed content always fails: silently.
SIMID-1.0-simid-url-https is an error, not a warning. Same for an empty or whitespace-only URL (SIMID-1.0-simid-url-empty): the player has nowhere to go.
Open the creative URL in a browser before you argue with the tag. It should return an HTML document over HTTPS, with no redirect loop and no application/javascript Content-Type.
SIMID is not a media file
This one is in the spec in so many words, and it is the one that costs a whole impression rather than just the overlay.
SIMID 1.0 §3.4: the media file must be present alongside the SIMID creative and delivered via the VAST <MediaFile> node. SIMID cannot pick the media on the client. A linear ad that only carries <InteractiveCreativeFile> has nothing to play on a player that does not implement SIMID, and nothing to play underneath the iframe on a player that does.
<MediaFiles>
<InteractiveCreativeFile type="text/html" apiFramework="SIMID">
<![CDATA[https://cdn.example.com/creative.html]]>
</InteractiveCreativeFile>
</MediaFiles>
That document is missing a <MediaFile>. vastlint reports both VAST-2.0-linear-mediafiles (the VAST rule: a linear ad needs a media file) and SIMID-1.0-simid-mediafile-required (the SIMID rule: the interactive file is not a substitute).
The correct shape is both, siblings under <MediaFiles>:
<MediaFiles>
<MediaFile delivery="progressive" type="video/mp4" width="1280" height="720">
<![CDATA[https://cdn.example.com/ad.mp4]]>
</MediaFile>
<InteractiveCreativeFile type="text/html" apiFramework="SIMID">
<![CDATA[https://cdn.example.com/creative.html]]>
</InteractiveCreativeFile>
</MediaFiles>
If the interactive layer fails, the video still plays. That is the contract. A SIMID-only linear tag breaks it.
variableDuration is not a boolean in the XML sense
The optional variableDuration attribute tells the player the creative may extend the break (a game, a survey). The only legal value, per SIMID §5, is the string "true".
<!-- ignored or rejected, depending on the player -->
<InteractiveCreativeFile type="text/html" apiFramework="SIMID" variableDuration="yes">
"1", "false", "YES", and an empty string are all undefined. SIMID-1.0-simid-variable-duration-value is a warning, because some players treat anything other than "true" as absent. If you do not need a longer break, omit the attribute.
Nonlinear is a different element
SIMID 1.1 added overlays. A <NonLinear apiFramework="SIMID"> does not use <InteractiveCreativeFile>. It uses <IFrameResource>, which is the URL the player loads in the overlay iframe.
<!-- missing the one child the player needs -->
<NonLinear apiFramework="SIMID" width="480" height="70">
<AdParameters><![CDATA[{"adid":123}]]></AdParameters>
</NonLinear>
SIMID-1.1-nonlinear-simid-no-iframe is an error. Give it an HTTPS HTML URL, with type="text/html":
<NonLinear apiFramework="SIMID" width="480" height="70">
<IFrameResource type="text/html">
<![CDATA[https://cdn.example.com/overlay.html]]>
</IFrameResource>
</NonLinear>
VAST 4.4's CTV Ad Portfolio work then moves nonlinear SIMID toward <InteractiveCreativeFile> the way linear already works. Until that draft is a release, 1.1 still says <IFrameResource>. Shipping both, with a real fallback asset, is the conservative move.
What the CLI actually prints
$ vastlint check simid.xml
simid.xml VAST 4.1
error <InteractiveCreativeFile apiFramework="SIMID"> must have
type="text/html" per SIMID §5
SIMID-1.0-simid-type-required
error Linear ad with <InteractiveCreativeFile apiFramework="SIMID">
must also include a video/audio <MediaFile>
SIMID-1.0-simid-mediafile-required
✖ 2 errors
Exit code 1. The same catalog runs in the browser validator, in the VS Code extension, and as validate_vast on the MCP server.
The SIMID troubleshooting guide is the longer checklist, including "does this player even support SIMID," which no linter can answer from the XML. Plenty of CTV environments still do not. That is why the <MediaFile> sibling is not optional.
The short version
apiFramework="SIMID" is not a rename of VPAID. The creative is HTML, the URL is HTTPS, linear ads still need a real media file, and nonlinear 1.1 still needs an <IFrameResource>. Get those four right and the remaining failures are in the creative, which is a different job.
vastlint is independent of IAB Tech Lab. The rule IDs above cite the SIMID spec because that is where the requirements live, not because this is an official tool.
Top comments (0)