A linear tag ships with type="text/html", an HTTPS creative URL, and a sibling MP4. QA plays the video. The overlay never mounts. Nobody gets a parser error.
The attribute that broke interactivity is one character off:
<InteractiveCreativeFile apiFramework="simid" type="text/html">
<![CDATA[https://creative.example.com/simid.html]]>
</InteractiveCreativeFile>
VAST treats apiFramework as a free-form string. XSD does not enumerate it. A validator that only checks structure will pass this document. SIMID §5 does not treat the value as case-insensitive: spec-compliant players match the literal token "SIMID". Lowercase simid, title case Simid, and "SIMID " with trailing whitespace are near-misses. The interactive file is present in the XML and invisible to the handshake.
What the field actually means
<InteractiveCreativeFile> is how VAST 4.1+ carries a sandboxed interactive layer. SIMID loads that URL in a cross-origin iframe and talks to the player over postMessage. The player decides whether to enter SIMID mode from apiFramework before it ever fetches the HTML.
That gate is a string equality check, not fuzzy matching. IAB SIMID 1.0 §5 requires apiFramework="SIMID" exactly. VPAID used the same attribute with apiFramework="VPAID" (all caps). Teams that migrated with a case-preserving find-and-replace often land on simid because XML attribute values are routinely lowercased in templates, CMS exports, and JSON-to-XML serializers.
The failure is silent on many stacks. The linear <MediaFile> still plays. Reporting shows a completed view. The interactive contract (extra clicks, expandable units, SIMID interactiveStart tracking) never ran. On CTV, where interactivity is the differentiator, the ad looks like a plain pre-roll.
Contrast with the deprecated path. VAST-4.1-vpaid-apiframework fires when apiFramework="VPAID" still appears on a 4.1+ tag. That value is schema-legal and explicitly deprecated. Near-miss SIMID casing is schema-legal and spec-illegal for the handshake. Both survive XML-only QA.
How you catch it
Paste the live tag URL or the XML into the VAST tag tester. It fetches wrappers, renders the MP4, and surfaces tracking URLs so you can see whether the break is media or interactivity. If the tag is wrapped, run the same URL through the VAST inspector hop by hop. A casing bug on hop three still kills the overlay on the final InLine even when hop one looks fine.
For the SIMID handshake itself, the IAB-style VAST tester loads sample creatives and logs host transport messages. It is an independent fork, not an IAB Tech Lab product, but it exercises the same postMessage path a spec-compliant player uses. If the workbench never enters SIMID mode, fix apiFramework before you debug the HTML creative.
On the CLI, vastlint reports near-miss values as SIMID-1.0-simid-apiframework-case:
$ vastlint check simid-case.xml
simid-case.xml VAST 4.1
warning apiFramework must be exactly "SIMID" (case-sensitive per SIMID §5);
near-miss values are ignored by spec-compliant players
SIMID-1.0-simid-apiframework-case
The rule is a warning because some lenient players accept near-miss strings. That is not portable. Treat a warning here as a production defect if you expect SIMID anywhere in your delivery graph.
Fix is one attribute edit:
<InteractiveCreativeFile apiFramework="SIMID" type="text/html">
<![CDATA[https://creative.example.com/simid.html]]>
</InteractiveCreativeFile>
Where to go next
Casing is one migration leftover. The SIMID overview walks the full envelope: HTML MIME type, HTTPS URL, and the sibling <MediaFile> SIMID cannot replace. If the tag still carries both VPAID and SIMID entries, read VAST-4.1-vpaid-in-interactive-context: CTV will ignore the VPAID <MediaFile> and may reject the whole creative when both paths compete. The VPAID vs VAST reference maps which apiFramework values belong on <MediaFile> versus <InteractiveCreativeFile> so you do not paste a VPAID script into the SIMID element.
apiFramework="SIMID" is not cosmetic labeling. It is the switch that tells the player to spin up the iframe handshake. Lowercase simid validates as XML and fails as SIMID. Match the spec string, re-test the live URL, and only then chase bugs inside the creative.
Top comments (0)