VAST examples / Required fields
An InLine ad missing the <AdTitle> element
VAST 2.01 error2 warningsVAST-2.0-inline-adtitle
The scenario
A broadcaster's in-house creative team was uploading a slate of holiday spots into their ad server for a connected-TV sponsorship. Each spot needed to pass the platform's ingestion check before it could be scheduled into the pod.
The broken tag
<VAST version="2.0">
<Ad id="1">
<InLine>
<AdSystem>Test</AdSystem>
<!-- missing AdTitle -->
<Impression>http://t.example.com/imp</Impression>
<Creatives>
<Creative>
<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-2.0-inline-adtitleIAB VAST 2.0 §2.3.2line 3<InLine> is missing required <AdTitle>
The same tag also surfaces these secondary findings — real tags rarely fail in isolation:
VAST-2.0-tracking-httpsIAB VAST 2.0 §2line 6Tracking/click URL uses HTTP instead of HTTPS — may be blocked in secure contexts
VAST-2.0-linear-tracking-quartilesIAB VAST 4.1 §3.14.2line 9<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 InLine response carries AdSystem, Impression, and a valid creative, but no <AdTitle>. The spec requires <AdTitle> on every InLine ad as a human-readable name for the ad. While the absence of a title has no effect on playback, conformance-checking ingestion pipelines treat the missing required element as a schema violation and refuse the file.
What it costs
The spot never reaches the schedule. Unlike a runtime error that surfaces in a player, this fails at ingestion, so the creative team sees a rejected upload with a terse error and often cannot tell which field is at fault. Turnaround slips while the team re-exports from the editing tool, and time-sensitive seasonal flights risk missing their start date.
The fix
Add an <AdTitle> element with the ad's name. Keep it stable across versions of the same creative so reporting and troubleshooting can group by title.
<InLine>
<AdSystem>Broadcast AdServer</AdSystem>
<!-- required: human-readable ad name -->
<AdTitle>Holiday Sponsorship 30s</AdTitle>
<Impression><![CDATA[https://ads.example.com/imp]]></Impression>
...
</InLine>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
- A Linear creative with no <Duration> — VAST-2.0-linear-duration
- A Linear creative with no <MediaFiles> — VAST-2.0-linear-mediafiles