VAST examples / Companions
A <Companion> with an invalid renderingMode
VAST 4.20 errors2 warningsVAST-4.1-companion-renderingmode-value
The scenario
A CTV advertiser wanted its companion to appear as an interactive end-card after the video finished, rather than concurrently beside it. VAST 4.1 added renderingMode on <Companion> to express exactly that placement intent.
The broken tag
<?xml version="1.0" encoding="UTF-8"?>
<!-- WARNING: VAST-4.1-companion-renderingmode-value — Companion renderingMode not in allowed enum -->
<VAST version="4.2">
<Ad id="ad-001">
<InLine>
<AdSystem>Test</AdSystem>
<AdTitle>Test Ad</AdTitle>
<AdServingId>test-serving-id-001</AdServingId>
<Impression><![CDATA[https://track.example.com/impression]]></Impression>
<Creatives>
<Creative>
<UniversalAdId idRegistry="ad-id.org">TEST-001</UniversalAdId>
<CompanionAds>
<Companion width="300" height="250" renderingMode="overlay">
<StaticResource creativeType="image/png">
<![CDATA[https://cdn.example.com/companion.png]]>
</StaticResource>
</Companion>
</CompanionAds>
</Creative>
</Creatives>
</InLine>
</Ad>
</VAST>What the validator reports
Running this tag through vastlint produces the following. The primary failure for this example:
VAST-4.1-companion-renderingmode-valueIAB VAST 4.1 §2.3.8line 14Companion renderingMode attribute value is not in allowed set (default, end-card, concurrent)
The same tag also surfaces these secondary findings — real tags rarely fail in isolation:
VAST-2.0-version-mismatchIAB VAST 2.0 §2.1VAST version attribute does not match structural signals in the document
Why it breaks
The <Companion> sets renderingMode to a value outside the allowed tokens (default, end-card, or concurrent). renderingMode tells the player how and when to display the companion; an unrecognized value leaves the player without a valid placement instruction. Strict players reject the value, and lenient ones fall back to default placement, ignoring the intended end-card behavior.
What it costs
The companion renders in the wrong mode or not at all: the intended end-card experience collapses to a default placement or is dropped, so the advertiser loses the post-roll interactive moment it designed the unit around. On CTV, where end-cards are a primary engagement surface, that defeats the purpose of the companion buy.
The fix
Set renderingMode to one of default, end-card, or concurrent to match the intended placement. Confirm the target players support the chosen mode.
<!-- allowed: default | end-card | concurrent -->
<Companion width="1280" height="720" renderingMode="end-card">
<StaticResource creativeType="image/png">
<![CDATA[https://cdn.example.com/endcard.png]]></StaticResource>
</Companion>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
- A <Companion> banner with no width or height — VAST-2.0-companion-dimensions
- A companion <ClickTracking> with no id — VAST-4.0-companion-clicktracking-id
- An InLine ad with no <Impression> element — VAST-2.0-inline-impression
- An InLine ad missing the <AdSystem> element — VAST-2.0-inline-adsystem