What changed between VAST 4.0 and VAST 4.1
VAST 4.1 was published by the IAB in 2018. It contains a breaking syntax change to <UniversalAdId> and adds several new required elements. Documents that validated against VAST 4.0 will not necessarily validate against 4.1.
Breaking changes summary
| Change | VAST 4.0 | VAST 4.1 |
|---|---|---|
<UniversalAdId> value location | idValue attribute | Text content of element |
<AdServingId> | Did not exist | Required in <InLine> |
<Mezzanine> type | Simple string element | Typed element with required attributes |
| VPAID | Discouraged | Officially deprecated in spec |
Breaking: <UniversalAdId> syntax change
This is the most common source of VAST 4.x bugs. In VAST 4.0, the ad ID was placed in the idValue attribute. In VAST 4.1, the idValue attribute was removed and the ID moves to the element's text content. Using the 4.0 syntax in a 4.1 document will silently drop the ID value.
<!-- ❌ VAST 4.0 syntax — invalid in 4.1+ -->
<UniversalAdId idRegistry="ad-id.org" idValue="ADID-12345678" />
<!-- ✅ VAST 4.1+ correct syntax -->
<UniversalAdId idRegistry="ad-id.org">ADID-12345678</UniversalAdId>→ Rule reference: VAST-4.1-universal-ad-id-value
<AdServingId> — new required element
Every <InLine> ad must now include <AdServingId>. This is a unique identifier for the specific ad serving event (as opposed to the creative identifier in <UniversalAdId>). It is used for impression deduplication in SSAI environments.
<InLine>
<AdServingId>a532d16d-ac45-11ec-b909-0242ac120002</AdServingId>
<AdTitle>Brand Campaign Q1</AdTitle>
...
</InLine>→ Rule reference: VAST-4.1-ad-serving-id
<Mezzanine> becomes a typed element
In VAST 4.0, <Mezzanine> was a free-form element. In 4.1 it gained four required attributes matching the <MediaFile> structure.
<!-- ✅ VAST 4.1 Mezzanine with required attributes -->
<Mezzanine delivery="progressive" type="video/mp4" width="1920" height="1080">
<![CDATA[https://example.com/mezzanine-1080p.mp4]]>
</Mezzanine>→ Rule reference: VAST-4.1-mezzanine-required-attrs
<ExecutableResource> in <Verification>
Alongside <JavaScriptResource>, 4.1 adds <ExecutableResource> for native/non-browser measurement SDKs. It carries an apiFramework and a type attribute identifying the platform SDK.
<Verification vendor="moat.com-omid">
<ExecutableResource apiFramework="omid" type="application/vnd.omid+native">
<![CDATA[moat-sdk://verify?ctx=12345]]>
</ExecutableResource>
</Verification>Unified <AdVerifications> type
In 4.0, <AdVerifications> existed only in <InLine>. In 4.1, it can also appear in <Wrapper>, allowing verification scripts to be injected at the wrapper level without waiting for the inner ad to resolve.
VPAID officially deprecated
While VPAID was discouraged from VAST 4.0 onward, 4.1 marks it as officially deprecated. CTV players typically zero-fill VPAID ads since there is no browser JavaScript runtime on most streaming TV hardware. Use <InteractiveCreativeFile> with apiFramework="SIMID" for interactive content.
→ See the VPAID migration guide for a full replacement guide.
adType attribute for audio ads
The adType attribute on <Ad> allows the ad server to declare that the ad is an audio-only creative, enabling audio ad workflows without a video track.
<Ad id="audio1" adType="audio">
<InLine>...</InLine>
</Ad>renderingMode on <Companion>
Tells the player how to render the companion ad: default (normal companion slot), concurrent (displayed alongside the video), or end-card (displayed after the video completes).
<Companion width="320" height="50" renderingMode="end-card">
<StaticResource creativeType="image/png">
<![CDATA[https://example.com/end-card.png]]>
</StaticResource>
</Companion><ClosedCaptionFiles>
Accessibility element added in 4.1. Contains one or more <ClosedCaptionFile> elements pointing to caption tracks (WebVTT, TTML, SRT).
<ClosedCaptionFiles>
<ClosedCaptionFile type="text/vtt" language="en">
<![CDATA[https://example.com/captions-en.vtt]]>
</ClosedCaptionFile>
</ClosedCaptionFiles><BlockedAdCategories>
Allows the publisher to signal which IAB content categories must not appear in the ad position. Typically populated by the SSP and passed through the wrapper chain.
<Expires>
An integer (seconds) after which a cached VAST response should be considered stale and re-fetched. Useful for SSAI systems that cache ad responses.
<Survey> deprecated
The <Survey> element, which had historically been used to embed survey URLs, was deprecated in 4.1.
Migration checklist: VAST 4.0 → 4.1
- Update
versionattribute on<VAST>to"4.1" - Critical: change
<UniversalAdId idValue="..." />to<UniversalAdId ...>value</UniversalAdId> - Add
<AdServingId>to every<InLine>(required) - Add
delivery,type,width,heightattributes to all<Mezzanine>elements - Replace VPAID
<MediaFile>with<InteractiveCreativeFile apiFramework="SIMID"> - Add
<ExecutableResource>to<Verification>for native measurement SDKs - Add
<ClosedCaptionFiles>for accessibility - Add
adType="audio"to audio-only ads - Add
renderingModeto<Companion>elements where applicable - Add
browserOptionalattribute to all<JavaScriptResource>elements - Remove or replace
<Survey>(deprecated) - Add
<Expires>if responses may be cached
Validate your VAST 4.1 documents at vastlint.org/validate. Continue to the VAST 4.1 to 4.2 migration guide →