VASTlint

VAST examples / Universal Ad-ID

A VAST 4.x creative with no <UniversalAdId>

VAST 4.01 error2 warningsVAST-4.0-universaladid-present

The scenario

A measurement vendor was reconciling creative-level reporting for a multi-publisher CTV campaign and found a slice of impressions it could not attribute to any known creative. The spots in that slice were being delivered without a universal ad identifier.

The broken tag

<VAST version="4.0">
  <Ad id="1">
    <InLine>
      <AdSystem>Test</AdSystem>
      <AdTitle>Test</AdTitle>
      <Impression>https://t.example.com/imp</Impression>
      <Creatives>
        <Creative>
          <!-- UniversalAdId missing entirely -->
          <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>
    </InLine>
  </Ad>
</VAST>

What the validator reports

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

errorVAST-4.0-universaladid-presentIAB VAST 4.0 §3.8.1line 8

<Creative> is missing required <UniversalAdId> (required since VAST 4.0)

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

warningVAST-2.0-version-mismatchIAB VAST 2.0 §2.1

VAST version attribute does not match structural signals in the document

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

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

Why it breaks

The Linear creative under a VAST 4.x document has no <UniversalAdId> child. VAST 4.0 introduced UniversalAdId as a required creative identifier specifically so a single creative can be recognized consistently regardless of which ad server or wrapper delivered it. When it is omitted, the creative carries only path-specific server IDs that differ across the chain.

What it costs

Without a portable identity, creative-level frequency capping, competitive exclusion, and reporting all fragment. The measurement vendor cannot collapse the same spot seen via two paths into one creative, so reach and frequency numbers are wrong and brand-safety blocks keyed on creative ID can be evaded unintentionally.

The fix

Add a <UniversalAdId> with both idRegistry and a registered value to every Linear creative in 4.x documents. Treat it as mandatory creative metadata in your trafficking workflow, not an optional field.

<Creative>
  <UniversalAdId idRegistry="ad-id.org">CMLB0484000H</UniversalAdId>
  <Linear>...</Linear>
</Creative>

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