VAST examples / Value formats
A <Duration> value in the wrong format
VAST 2.01 error1 warningVAST-2.0-duration-format
The scenario
A DSP's creative QA team noticed a single creative consistently failing across multiple publishers while identical-looking spots passed. The flight was a 30-second mobile in-app video ad delivered through an open-exchange wrapper.
The broken tag
<?xml version="1.0" encoding="UTF-8"?>
<VAST version="2.0">
<Ad id="1">
<InLine>
<AdSystem>Test</AdSystem>
<AdTitle>Test</AdTitle>
<Impression><![CDATA[https://example.com/imp]]></Impression>
<Creatives>
<Creative>
<Linear>
<Duration>0:30</Duration>
<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-duration-formatIAB VAST 2.0 §2.3.5.1line 11<Duration> value does not match required format HH:MM:SS or HH:MM:SS.mmm
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 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 includes <Duration>, but the value is not in the spec's HH:MM:SS (or HH:MM:SS.mmm) form — for example a bare number of seconds or a malformed time string. The VAST spec defines a strict time format for durations and offsets. Lenient players may coerce a bad value, but strict ones reject the creative, which is why the same ad passes on some publishers and fails on others.
What it costs
Inconsistent rendering across the supply path is operationally worse than a clean failure, because it looks intermittent and is hard to reproduce. On publishers with strict parsers the ad is discarded as malformed, producing partial delivery and skewed performance data that can cause the buyer to wrongly pause a healthy creative.
The fix
Format the duration as zero-padded HH:MM:SS, optionally with .mmm milliseconds. Thirty seconds is 00:00:30, not 30 or 0:30. Validate offsets (skipoffset, ProgressEvent) with the same rule.
<!-- wrong: <Duration>30</Duration> -->
<!-- right: zero-padded HH:MM:SS -->
<Duration>00:00:30</Duration>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 <Duration> — VAST-2.0-linear-duration