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
| Code | Usually means | Where to look next |
|---|---|---|
100 | XML parsing failure | Malformed XML, broken CDATA, invalid nesting |
301 | Wrapper timeout / wrapper resolution failure | Missing <VASTAdTagURI>, timeout, or bad redirect target |
302 | Wrapper limit reached | Too many redirects in the chain |
303 | No ads after wrappers | Empty final response, often a legitimate no-fill |
401 | Media file not found or unreachable | Broken media URL, HTTP on HTTPS page, CDN issue |
402 | Media file timeout | Oversized file, high bitrate, slow CDN |
403 | Unsupported media or player mismatch | Wrong format, deprecated VPAID, browser-only creative on CTV |
405 | Problem displaying a supported media file | Codec/container mismatch, wrong reported type, CTV/SSAI specs |
901 | General VPAID interactive failure | Wrong type, empty URL, unsupported runtime |
902 | SIMID interactive creative failed at runtime | SIMID 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
- VAST-2.0-wrapper-vastadtaguri
- VAST-2.0-wrapper-depth
- VAST-2.0-mediafile-url
- VAST-2.0-duration-format
- VAST-4.1-vpaid-in-interactive-context
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.
| Code | What the spec calls it |
|---|---|
100 | XML parsing error. |
101 | VAST schema validation error. |
102 | VAST version of response not supported. |
200 | Trafficking error. Media player received an Ad type that it was not expecting and/or cannot play. |
201 | Media player expecting different linearity. |
202 | Media player expecting different duration. |
203 | Media player expecting different size. |
204 | Ad category was required but not provided. |
205 | Inline Category violates Wrapper BlockedAdCategories (refer 3.19.2). |
206 | Ad Break shortened. Ad was not served. |
300 | General Wrapper error. |
301 | Timeout 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.) |
302 | Wrapper limit reached, as defined by the media player. Too many Wrapper responses have been received with no InLine response. |
303 | No VAST response after one or more Wrappers. |
304 | InLine response returned ad unit that failed to result in ad display within defined time limit. |
400 | General Linear error. Media player is unable to display the Linear Ad. |
401 | File not found. Unable to find Linear/MediaFile from URI. |
402 | Timeout of MediaFile URI. |
403 | Couldn’t find MediaFile that is supported by this media player, based on the attributes of the MediaFile element. |
405 | Problem 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. |
406 | Mezzanine was required but not provided. Ad not served. |
407 | Mezzanine 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. |
408 | Conditional ad rejected. (deprecated along with conditionalAd) |
409 | Interactive unit in the InteractiveCreativeFile node was not executed. |
410 | Verification unit in the Verification node was not executed. |
411 | Mezzanine was provided as required, but file did not meet required specification. Ad not served. |
500 | General NonLinearAds error. |
501 | Unable to display NonLinearAd because creative dimensions do not align with creative display area (i.e. creative dimension too large). |
502 | Unable to fetch NonLinearAds/NonLinear resource. |
503 | Couldn’t find NonLinear resource with supported type. |
600 | General CompanionAds error. |
601 | Unable to display Companion because creative dimensions do not fit within Companion display area (i.e., no available space). |
602 | Unable to display required Companion. |
603 | Unable to fetch CompanionAds/Companion resource. |
604 | Couldn’t find Companion resource with supported type. |
900 | Undefined Error. |
901 | General VPAID error. |
902 | General 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
- VAST error 200: Trafficking error
- VAST error 201: Expecting different linearity
- VAST error 202: Expecting different duration
- VAST error 203: Expecting different size
- VAST error 204: Ad category required but not provided
- VAST error 205: Inline category violates wrapper block list
- VAST error 206: Ad break shortened, ad not served
- VAST error 408: Conditional ad rejected (deprecated)
Wrapper errors
Linear and media errors
- VAST error 400: General linear error
- VAST error 401: Media file not found
- VAST error 402: Media file timeout
- VAST error 403: No supported media file
- VAST error 405: Problem displaying media file
- VAST error 406: Mezzanine required but missing
- VAST error 407: Mezzanine downloading
- VAST error 411: Mezzanine failed spec
Interactive and verification
NonLinear and companion
- VAST error 500: General NonLinearAds error
- VAST error 501: NonLinear dimensions do not fit
- VAST error 502: Cannot fetch NonLinear resource
- VAST error 503: No supported NonLinear resource
- VAST error 600: General CompanionAds error
- VAST error 601: Companion does not fit
- VAST error 602: Required companion not displayed
- VAST error 603: Cannot fetch companion resource
- VAST error 604: No supported companion resource