VPAID and SIMID together is the compatibility idea that survives deprecation memos. The tag lists a VPAID media file for old web players and a SIMID interactive file for everyone else. IAB's SIMID page does not describe that pair as a fallback chain. It says VPAID is being replaced, OMID takes measurement, SIMID takes interactivity, and the interactive layer is separate from the media asset so the player keeps the stream. The asset is a media file. VPAID was allowed to be that asset. SIMID is not allowed to be that asset.
A player that implements SIMID and finds no media file does not owe you a VPAID session as consolation. A player that only implements VPAID does not open the SIMID sidecar. You have two products in one response, and each audience misses one of them. vastlint checks both apiFramework values in a VAST 2.0–4.4 inline, and whether a non-executable file remains. It does not execute VPAID and it does not open a SIMID session. Seeing both strings is not a pass.
The together that matches the standards
Media file, always, if you want the ad to play when interaction is skipped. SIMID, only when there is an interaction, as InteractiveCreativeFile with type text/html. OMID, only when a vendor must measure, in AdVerifications. That trio is the replacement. VPAID is absent from it. If a named HTML5 seat still requires VPAID, that is a separate tag or a documented exception, not a silent sibling on the CTV copy.
Google publishes the two as separate HTML5 documents: VPAID 2 limited to the HTML5 SDK, and SIMID support with its own list of messages. A player can implement a subset of SIMID and none of VPAID. Counting on both to be present because both were in the XML overstates what either document promised.
Wrappers make the double declaration look like one creative
Hop one can be a plain wrapper. The inline can carry VPAID as the media file and SIMID as a URL that 404s, or the reverse. QA that stops on the wrapper blesses the campaign. The player that unwraps finds out which half is real. Inspect the chain, then validate the inline you would actually serve.
Measurement does not get to hide inside whichever half runs. If the VPAID unit used to carry the viewability script, moving that script into the SIMID file repeats the bundle. Put it in the verification node so it does not depend on which framework the player chose to ignore.
If both strings are in the inline
- Confirm a decodable media file exists that is neither framework.
- Treat the VPAID file as legacy HTML5, not as the spare for SIMID.
- Treat SIMID as optional interaction, not as the media.
- Keep OMID in AdVerifications.
- Do not read a structural pass as proof that both runtimes executed.
Two frameworks in one response are two bets, and the screen that can run one of them was never the audience for the other.
See both apiFramework values in the inline
Run VAST 2.0–4.4 tags against specification-derived rules. Nothing is stored. vastlint does not execute VPAID, open a SIMID session, run OMID, or certify an MRAID SDK.
Sources
SIMID page, updated January 3, 2024. SIMID 1.2 separates the interactive layer from the media asset. Both are delivered by VAST 4.x. OMID is named for measurement and SIMID for interactivity, as the replacement for VPAID.
VAST standards hub. VPAID is marked deprecated and replaced with SIMID.
Only the IMA HTML5 SDK supports VPAID 2 JavaScript creatives.
SIMID support is documented on its own page, including which messages the HTML5 SDK implements.
Why the ranking still depends on the job.
The three objects that replace the pair.
Why they are not one fallback chain.
