DEV Community

Aleksander Sekowski
Aleksander Sekowski

Posted on

Lowercase apiFramework="simid" Passes VAST. SIMID Players Skip the Interactive Layer.

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>
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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>
Enter fullscreen mode Exit fullscreen mode

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)