VASTlint

VAST errors: all 38 error codes and how to fix them

Short answer

VAST error codes are runtime failure buckets emitted by players and ad servers. They are not the same as vastlint rule IDs. A code like 301 or 401 tells you where the failure happened; the vastlint rule pages tell you what in the XML actually broke.

Why this happens

Most players expose only a coarse numeric code because they do not ship a full validator or a structured diff of the XML they received. That means one code can hide several concrete failures: a missing wrapper URL, a malformed media URL, a deprecated VPAID creative on CTV, or a chain that never resolves inline.

The practical workflow is: use the runtime code to narrow the class of failure, then use the validator, tester, or inspector to find the exact broken element.

Common codes and likely root causes

CodeUsually meansWhere to look next
100XML parsing failureMalformed XML, broken CDATA, invalid nesting
301Wrapper timeout / wrapper resolution failureMissing <VASTAdTagURI>, timeout, or bad redirect target
302Wrapper limit reachedToo many redirects in the chain
303No ads after wrappersEmpty final response, often a legitimate no-fill
401Media file not found or unreachableBroken media URL, HTTP on HTTPS page, CDN issue
402Media file timeoutOversized file, high bitrate, slow CDN
403Unsupported media or player mismatchWrong format, deprecated VPAID, browser-only creative on CTV
405Problem displaying a supported media fileCodec/container mismatch, wrong reported type, CTV/SSAI specs
901General VPAID interactive failureWrong type, empty URL, unsupported runtime
902SIMID interactive creative failed at runtimeSIMID or verification-layer mismatch

Copyable fix example

A large share of player-side wrapper errors collapse down to one XML problem: the wrapper does not actually point to the next VAST response.

<!-- Copy this wrapper fix when the chain must continue -->
<VAST version="3.0">
  <Ad>
    <Wrapper>
      <AdSystem>Example Ad Server</AdSystem>
      <VASTAdTagURI><![CDATA[https://ads.example.com/final-inline.xml]]></VASTAdTagURI>
      <Impression><![CDATA[https://tracker.example.com/wrapper-imp]]></Impression>
      <Creatives />
    </Wrapper>
  </Ad>
</VAST>

Exact rule pages

Use the right tool for this failure

If you already have the resolved XML, run a pure spec check. If you only have a live tag URL, test that endpoint first. If the failure happens in the wrapper chain, inspect each hop.

Look up the message your player printed

Players surface the IAB wording rather than a plain-English explanation, so this is the table to scan if you have a message but no idea which code it belongs to. Every row is the verbatim description from the VAST 4.3 specification.

CodeWhat the spec calls it
100XML parsing error.
101VAST schema validation error.
102VAST version of response not supported.
200Trafficking error. Media player received an Ad type that it was not expecting and/or cannot play.
201Media player expecting different linearity.
202Media player expecting different duration.
203Media player expecting different size.
204Ad category was required but not provided.
205Inline Category violates Wrapper BlockedAdCategories (refer 3.19.2).
206Ad Break shortened. Ad was not served.
300General Wrapper error.
301Timeout of VAST URI provided in Wrapper element, or of VAST URI provided in a subsequent Wrapper element. (URI was either unavailable or reached a timeout as defined by the media player.)
302Wrapper limit reached, as defined by the media player. Too many Wrapper responses have been received with no InLine response.
303No VAST response after one or more Wrappers.
304InLine response returned ad unit that failed to result in ad display within defined time limit.
400General Linear error. Media player is unable to display the Linear Ad.
401File not found. Unable to find Linear/MediaFile from URI.
402Timeout of MediaFile URI.
403Couldn’t find MediaFile that is supported by this media player, based on the attributes of the MediaFile element.
405Problem displaying MediaFile. Media player found a MediaFile with supported type but couldn’t display it. MediaFile may include: unsupported codecs, different MIME type than MediaFile@type, unsupported delivery method, etc.
406Mezzanine was required but not provided. Ad not served.
407Mezzanine is in the process of being downloaded for the first time. Download may take several hours. Ad will not be served until mezzanine is downloaded and transcoded.
408Conditional ad rejected. (deprecated along with conditionalAd)
409Interactive unit in the InteractiveCreativeFile node was not executed.
410Verification unit in the Verification node was not executed.
411Mezzanine was provided as required, but file did not meet required specification. Ad not served.
500General NonLinearAds error.
501Unable to display NonLinearAd because creative dimensions do not align with creative display area (i.e. creative dimension too large).
502Unable to fetch NonLinearAds/NonLinear resource.
503Couldn’t find NonLinear resource with supported type.
600General CompanionAds error.
601Unable to display Companion because creative dimensions do not fit within Companion display area (i.e., no available space).
602Unable to display required Companion.
603Unable to fetch CompanionAds/Companion resource.
604Couldn’t find Companion resource with supported type.
900Undefined Error.
901General VPAID error.
902General InteractiveCreativeFile error code.

Not seeing your message? Player SDKs wrap these in their own text. A Video.js log line like [error] (101): Failed to load VAST is still error 101, and Failed to load VAST on its own is usually 100, 101, or 301, depending on whether the response was unparseable, structurally invalid, or never arrived.

Every VAST error code

Each code has a dedicated page with its likely causes, the fix, and the exact vastlint rules that catch it before launch.

Parsing and schema

Ad type and trafficking

Wrapper errors

Linear and media errors

Interactive and verification

NonLinear and companion

General

Further reading