VASTlint

VAST examples / OMID / verification

An OMID <Verification> with no resource to load

VAST 4.10 errors2 warningsVAST-4.1-verification-no-resource

The scenario

An advertiser added Open Measurement to an existing CTV creative by inserting an <AdVerifications> block, but the trafficking step that should inject the vendor's script URL was misconfigured, leaving the verification node empty.

The broken tag

<VAST version="4.1">
  <Ad id="1">
    <InLine>
      <AdSystem>Test</AdSystem>
      <AdTitle>Test</AdTitle>
      <AdServingId>srv-001</AdServingId>
      <Impression>https://t.example.com/imp</Impression>
      <Creatives>
        <Creative>
          <UniversalAdId idRegistry="ad-id.org">ABCD1234567</UniversalAdId>
          <Linear>
            <Duration>00:00:30</Duration>
            <MediaFiles>
              <MediaFile delivery="progressive" type="video/mp4" width="640" height="360">
                https://cdn.example.com/ad.mp4
              </MediaFile>
            </MediaFiles>
          </Linear>
        </Creative>
      </Creatives>
      <AdVerifications>
        <Verification vendor="company.com-omid">
          <!-- no JavaScriptResource or ExecutableResource -->
        </Verification>
      </AdVerifications>
    </InLine>
  </Ad>
</VAST>

What the validator reports

Running this tag through vastlint produces the following. The primary failure for this example:

warningVAST-4.1-verification-no-resourceIAB VAST 4.1 §2.4line 22

<Verification> should contain at least one JavaScriptResource or ExecutableResource

The same tag also surfaces these secondary findings — real tags rarely fail in isolation:

warningVAST-2.0-linear-tracking-quartilesIAB VAST 4.1 §3.14.2line 11

<Linear> has no standard quartile tracking events (start/firstQuartile/midpoint/thirdQuartile/complete) — ad will serve but measurement system receives no signal

infoVAST-4.1-mezzanine-recommendedIAB VAST 4.1 §3.9.2line 13

<MediaFiles> has no <Mezzanine> — ad-stitching servers may reject this tag in CTV/SSAI contexts

Why it breaks

The <Verification> node names a vendor but contains no JavaScriptResource (or ExecutableResource). A verification node exists precisely to tell the player what measurement code to load; with no resource there is nothing to execute. The OM SDK has no script to run in its sandbox, so the verification is a no-op even though the structure looks present.

What it costs

This is a subtle failure: the creative passes a superficial check because <AdVerifications> and <Verification> exist, yet zero measurement actually happens. Viewability and IVT reporting come back empty or absent, and the discrepancy is often blamed on the publisher or player before anyone notices the verification node never carried a resource. Make-good and billing disputes follow.

The fix

Ensure every <Verification> contains the vendor's resource — a JavaScriptResource for OMID web/CTV — plus the appropriate verification tracking events. Validate after trafficking, not just after creative build, since this is where injection fails.

<Verification vendor="measureco.com-omid">
  <JavaScriptResource apiFramework="omid" browserOptional="true">
    <![CDATA[https://verify.example.com/omid.js]]></JavaScriptResource>
</Verification>

VAST XML fragment only. This excerpt belongs inside a complete VAST document, so standalone validation will fail until it is wrapped in a full <VAST>response.

Check your own version of this tag

Paste the resolved XML to run the same spec check, test a live tag URL, or inspect the wrapper chain hop by hop.

Related examples

Related reading