VAST examples / Required fields
A Linear creative with no <Duration>
VAST 2.01 error1 warningVAST-2.0-linear-duration
The scenario
An SSAI (server-side ad insertion) vendor was stitching ads into a live sports stream. The ad decisioning system needs to know exactly how long each creative runs so it can fill a fixed 90-second commercial break without leaving black slate or clipping the next segment.
The broken tag
<?xml version="1.0" encoding="UTF-8"?>
<!-- Linear is missing Duration -->
<VAST version="2.0">
<Ad id="1">
<InLine>
<AdSystem>Test AdServer</AdSystem>
<AdTitle>Test Ad</AdTitle>
<Impression><![CDATA[https://example.com/impression]]></Impression>
<Creatives>
<Creative>
<Linear>
<MediaFiles>
<MediaFile delivery="progressive" type="video/mp4" width="640" height="360">
<![CDATA[https://example.com/video.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-2.0-linear-durationIAB VAST 2.0 §2.3.5.1line 11<Linear> is missing required <Duration>
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 Linear creative provides MediaFiles but omits <Duration>. <Duration> is required on every Linear and expresses the creative's runtime as HH:MM:SS. SSAI stitchers and most players read it before playback to schedule the timeline and to compute quartile tracking offsets. Without it, the stitcher cannot place the ad deterministically in the break.
What it costs
In a server-side stitching context a missing Duration is fatal: the ad decisioning system either drops the creative from the break (causing under-fill and lost revenue) or guesses a length, which desynchronizes the timeline and can cut off content. Even client-side, the player cannot compute firstQuartile/midpoint/thirdQuartile offsets, so measurement is degraded.
The fix
Add a <Duration> element in HH:MM:SS form (milliseconds optional) that matches the actual encoded length of the media. Keep it consistent with the real file duration — stitchers trust this value over the container metadata.
<Linear>
<!-- required: actual runtime, HH:MM:SS[.mmm] -->
<Duration>00:00:30</Duration>
<MediaFiles>...</MediaFiles>
</Linear>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
- 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
- A Linear creative with no <MediaFiles> — VAST-2.0-linear-mediafiles