VAST examples / Universal Ad-ID
A <UniversalAdId> with no idRegistry attribute
VAST 4.01 error1 warningVAST-4.0-universaladid-idregistry
The scenario
A brand running a heavy CTV flight complained that viewers were seeing the same spot far more often than the agreed frequency cap allowed. The agency traced the problem to creative identity: the cap relies on a stable, registry-scoped ad ID.
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 present but missing idRegistry -->
<UniversalAdId>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>
</InLine>
</Ad>
</VAST>What the validator reports
Running this tag through vastlint produces the following. The primary failure for this example:
VAST-4.0-universaladid-idregistryIAB VAST 4.0 §3.8.1line 8<UniversalAdId> is missing required idRegistry attribute
The same tag also surfaces these secondary findings — real tags rarely fail in isolation:
VAST-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
Why it breaks
The creative includes <UniversalAdId> with a value, but no idRegistry attribute. Since VAST 4.0 the UniversalAdId is meant to uniquely and persistently identify a creative across the whole supply chain, and the idRegistry names the authority that issued the ID (for example ad-id.org). Without the registry, the same numeric value is not globally unique — it cannot be safely compared across sellers — so de-duplication and frequency systems cannot trust it.
What it costs
Frequency capping and competitive separation both depend on resolving one creative to one identity everywhere it appears. With an unscoped ID, buy-side and sell-side systems treat the creative as unknown or distinct per path, so caps silently leak and the audience is over-exposed. That drives viewer annoyance, wasted impressions, and complaints exactly like the brand reported.
The fix
Set idRegistry to the issuing authority (commonly ad-id.org) and put the registered code in the element value. Use the same registered ID across every channel the creative runs on.
<!-- registry scopes the value to a global authority -->
<UniversalAdId idRegistry="ad-id.org">CMLB0484000H</UniversalAdId>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
- A VAST 4.x creative with no <UniversalAdId> — VAST-4.0-universaladid-present
- An InLine ad with no <Impression> element — VAST-2.0-inline-impression
- An InLine ad missing the <AdSystem> element — VAST-2.0-inline-adsystem
- An InLine ad missing the <AdTitle> element — VAST-2.0-inline-adtitle