VASTlint

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:

errorVAST-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:

warningVAST-2.0-tracking-httpsIAB VAST 2.0 §2line 6

Tracking/click URL uses HTTP instead of HTTPS — may be blocked in secure contexts

warningVAST-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

Related reading