DEV Community

Aleksander Sekowski
Aleksander Sekowski

Posted on

Mezzanine-Only SIMID Validates for SSAI. Nobody Runs the Interactive Iframe.

A CTV campaign ships SIMID for the expandable unit. Trafficking exports VAST 4.1 with a high-bitrate <Mezzanine>, an HLS <MediaFile delivery="streaming">, and <InteractiveCreativeFile apiFramework="SIMID" type="text/html">. The SSAI pipeline ingests the mezzanine, stitches the pod, and the stream plays. The interactive layer never appears. No VAST error code fires because every element the schema cares about is present.

The gap is not missing SIMID markup. It is which <MediaFile> delivery mode survives on the client after server-side insertion.

What Mezzanine and progressive actually mean

VAST 4.1 added <Mezzanine> so ad stitching platforms can transcode from a single high-quality source (VAST 4.1 §1.1.2). The mezzanine is the input to the stitcher. It is not a promise that the end device receives a progressive MP4 it can hand to a SIMID-capable player alongside an iframe.

<MediaFile delivery="streaming"> is the correct shape for HLS or DASH after stitch. <MediaFile delivery="progressive"> is the shape a client player downloads and decodes locally. SIMID 1.0 §3.4 still requires a real video or audio <MediaFile> sibling to the interactive file because the iframe does not replace linear media. On SSAI inventory the stitcher consumes the mezzanine and emits a stream. The device player may never see a progressive file at all.

When the only <MediaFile> in the tag is delivery="streaming" and the mezzanine sits next to it, the document satisfies many XSD checks and the SIMID-1.0-simid-mediafile-required rule (there is a media node). The SSAI-specific failure is different: there is no progressive asset for a client-side player to attach SIMID to after the break is already in the manifest. The interactive HTML URL is in the XML. Nothing in the SSAI path loads it.

That is what SIMID-1.0-simid-ssai-no-client flags at info severity: linear SIMID with a mezzanine present and no progressive <MediaFile>. It is easy to dismiss as informational until you realize the tag was authored for dynamic ad insertion, not for a browser that could have run SIMID on a downloaded MP4.

A minimal broken shape looks like the fixture vastlint uses:

<MediaFiles>
  <MediaFile delivery="streaming" type="application/x-mpegURL" width="1920" height="1080">
    <![CDATA[https://cdn.example.com/ad.m3u8]]>
  </MediaFile>
  <Mezzanine delivery="progressive" type="video/mp4" width="1920" height="1080">
    <![CDATA[https://cdn.example.com/ad-mezzanine.mp4]]>
  </Mezzanine>
  <InteractiveCreativeFile apiFramework="SIMID" type="text/html">
    <![CDATA[https://creative.example.com/simid.html]]>
  </InteractiveCreativeFile>
</MediaFiles>
Enter fullscreen mode Exit fullscreen mode

The fix for mixed SSAI and SIMID is operational, not a one-line attribute swap: keep a progressive <MediaFile> in the tag for client players that still execute SIMID after stitch, or stop selling SIMID on pure SSAI paths where no client runtime exists (the same constraint that killed VPAID in the stitcher). The VPAID rule pack documents why script and iframe APIs fail server-side; SIMID is sandboxed, but it still needs a client.

How you catch it

Paste the live tag URL into the VAST tag tester. It fetches the chain, previews the linear media, and lists tracking URLs so you can see whether the break is empty or only the video layer rendered. For wrapped tags, run the same URL through the VAST inspector hop by hop. A mezzanine-only SIMID shape on the final InLine still breaks interactivity even when the wrapper hops are clean.

SIMID handshake debugging belongs in the IAB-style VAST tester. That workbench loads sample creatives, logs host transport, and exercises postMessage the way a spec-compliant player would. It is an independent fork, not an IAB Tech Lab product. If the workbench never enters SIMID mode on a pasted tag but the MP4 or HLS preview plays, delivery mode and apiFramework are the first suspects before you open the HTML creative.

CLI check on the fixture above:

$ vastlint check simid-ssai.xml
simid-ssai.xml  VAST 4.1
  info     Linear SIMID creative has a <Mezzanine> but no progressive
           <MediaFile>; an SSAI stitcher cannot execute the SIMID iframe
           SIMID-1.0-simid-ssai-no-client
Enter fullscreen mode Exit fullscreen mode

Info severity does not mean optional on SIMID campaigns. It means the schema alone will not save you.

Where to go next

If the buy is CTV and the trafficking template still emits VPAID next to SIMID, read the VPAID-on-CTV example: deprecated script media and SSAI are incompatible for different reasons, but the revenue symptom is the same (video without the interactive or verification layer you sold). VAST 4.2 added interactiveStart tracking for the moment SIMID takes control; a tag that never mounts SIMID will not fire that event either, which shows up as a measurement gap rather than a parser failure.

vastlint is independent of IAB Tech Lab. The rule ids above cite SIMID and VAST because that is where the requirements live, not because this is an official tool.

Top comments (0)