In This Article
Video advertising represents one of the most technically complex segments of digital advertising. Unlike static display ads, video ads require precise synchronization between the video player, the ad creative, tracking pixels, and interactive elements. The IAB Tech Lab's VAST (Video Ad Serving Template) specification has been the backbone of this ecosystem for over a decade, while the newer SIMID (Secure Interactive Media Interface Definition) addresses the growing need for secure, standardized player-ad communication.
VAST Version History
| Version | Year | Key Additions |
|---|---|---|
| VAST 2.0 | 2012 | Standardized XML ad response format. Linear and nonlinear ad types. Basic tracking events (impression, start, midpoint, complete). |
| VAST 3.0 | 2012 | Ad pods and ad breaks. VPAID 2.0 integration for interactive ads. Companion ads. Error handling and verification support. |
| VAST 4.0 | 2016 | Universal ad ID (Ad-ID). Ad verification via OpenRTB and OM SDK. Conditional ad requests. Improved ad category support. |
| VAST 4.1 | 2018 | Interactive creative files. Mezzanine file support. Icon viewability requirements. Enhanced error reporting. |
| VAST 4.2 | 2021 | Native support for SIMID. Updated media file delivery requirements. Enhanced CTV/streaming support. Improved closed caption and subtitle handling. |
VAST Tag Structure
A VAST tag is an XML document that describes one or more video ads. The top-level element is <VAST>, which contains one or more <Ad> elements. Each ad can be either inline (containing the full creative details) or a wrapper (pointing to another VAST tag for further resolution).
<VAST version="4.2">
<Ad id="ad-12345">
<InLine>
<AdSystem version="2.0">NexBids Ad Server</AdSystem>
<AdTitle>Summer Sale Campaign</AdTitle>
<Category authority="IAB">IAB-11</Category>
<Impression id="imp-1">
<![CDATA[https://tracker.example.com/impression?id=12345]]>
</Impression>
<Creatives>
<Creative id="creative-1" adId="ad-12345">
<UniversalAdId idRegistry="Ad-ID">
ABCD1234
</UniversalAdId>
<Linear>
<Duration>00:00:30</Duration>
<TrackingEvents>
<Tracking event="start">
<![CDATA[https://tracker.example.com/start?id=12345]]>
</Tracking>
<Tracking event="firstQuartile">
<![CDATA[https://tracker.example.com/q1?id=12345]]>
</Tracking>
<Tracking event="midpoint">
<![CDATA[https://tracker.example.com/mid?id=12345]]>
</Tracking>
<Tracking event="thirdQuartile">
<![CDATA[https://tracker.example.com/q3?id=12345]]>
</Tracking>
<Tracking event="complete">
<![CDATA[https://tracker.example.com/complete?id=12345]]>
</Tracking>
</TrackingEvents>
<MediaFiles>
<MediaFile delivery="progressive"
type="video/mp4"
width="1920" height="1080"
bitrate="5000">
<![CDATA[https://cdn.example.com/ad-1080p.mp4]]>
</MediaFile>
<MediaFile delivery="streaming"
type="application/x-mpegURL">
<![CDATA[https://cdn.example.com/ad-hls.m3u8]]>
</MediaFile>
</MediaFiles>
</Linear>
</Creative>
</Creatives>
</InLine>
</Ad>
</VAST>
Wrapper Tags and Ad Chains
VAST supports chained ad resolution through wrapper tags. A wrapper contains a <VASTAdTagURI> element that points to another VAST server, which in turn returns another wrapper or an inline response. This mechanism enables ad mediation and waterfall resolution:
- Wrapper 1 (SSP): Adds impression tracking, requests next tag
- Wrapper 2 (Ad Network): Adds verification, requests next tag
- Inline (Ad Server): Returns the actual creative and all tracking URLs
VAST 4.2 recommends limiting wrapper chains to three levels to prevent excessive latency. Each additional wrapper adds network round-trips that delay ad playback.
Tracking Events
VAST defines a comprehensive set of tracking events that fire at specific moments during ad playback. These events enable advertisers to measure viewability, engagement, and completion rates.
| Event | When It Fires | Common Use |
|---|---|---|
| impression | When the ad begins rendering (video) or becomes visible (display companion) | Impression counting, billing |
| start | First frame of video is played | Video start measurement |
| firstQuartile | 25% of video duration has played | Engagement measurement |
| midpoint | 50% of video duration has played | Engagement measurement |
| thirdQuartile | 75% of video duration has played | Engagement measurement |
| complete | Video plays to end | Completion rate |
| mute / unmute | User toggles audio | Engagement signals |
| pause / resume | User pauses or resumes playback | Interaction tracking |
| fullscreen | User enters fullscreen mode | Engagement signal |
| skip | User skips the ad (if allowed) | Skip rate measurement |
| creativeView | Non-linear companion ad is rendered | Companion impression |
Offset-Based Tracking
In addition to predefined events, VAST 4.x supports offset-based tracking, which fires at specific time offsets or percentage points in the video:
<Tracking event="progress" offset="00:00:05">
<![CDATA[https://tracker.example.com/5sec?id=12345]]>
</Tracking>
<Tracking event="progress" offset="50%">
<![CDATA[https://tracker.example.com/halfway?id=12345]]>
</Tracking>
SIMID: Secure Interactive Media Interface Definition
SIMID is the modern replacement for VPAID (Video Player-Ad Interface Definition). While VPAID enabled interactive video ads, it had significant security and performance problems: VPAID creatives ran with full access to the publisher's page, creating security vulnerabilities and allowing ads to interfere with the player or content.
SIMID vs. VPAID
| Aspect | VPAID | SIMID |
|---|---|---|
| Communication | Direct function calls (tight coupling) | Message-based postMessage API (loose coupling) |
| Security | Ad runs in same context as page | Ad runs in sandboxed iframe |
| Player control | Ad can take over the player | Ad requests player actions via messages |
| Creative format | JavaScript (SWF deprecated) | HTML5 with JavaScript |
| Timeout handling | No standard timeout mechanism | Built-in timeout and error recovery |
| Performance | Can degrade page performance | Sandboxed, limited impact |
| Standard | IAB (deprecated) | IAB Tech Lab (active, recommended) |
SIMID Protocol Flow
SIMID uses a bidirectional message-passing protocol between the player and the ad creative, both running in separate contexts:
- Player loads ad iframe: The player creates a sandboxed iframe and loads the SIMID creative.
- Creative initializes: The creative sends a
simid:initmessage to the player, declaring its capabilities and requirements. - Player acknowledges: The player responds with
simid:ack, confirming initialization. - Playback begins: The player sends
simid:playto start the ad. The creative renders its media file. - Interactive events: The creative sends messages like
simid:resize,simid:requestFullScreen, orsimid:navigateto request player actions. - Player events: The player sends messages like
simid:pause,simid:resume, orsimid:stopto control ad state. - Completion: When the ad finishes, the creative sends
simid:completeand the player transitions to content.
// SIMID message example: Ad requesting fullscreen
// From ad creative (iframe) to player (parent window)
const message = {
type: 'simid:requestFullScreen',
args: ,
messageId: 'msg-001'
};
window.parent.postMessage(
JSON.stringify(message),
'https://publisher.com'
);
// Player responds
window.addEventListener('message', (event) => {
const msg = JSON.parse(event.data);
if (msg.type === 'simid:requestFullScreen') {
// Handle fullscreen request
player.requestFullscreen();
event.source.postMessage(JSON.stringify({
type: 'simid:response',
messageId: msg.messageId,
success: true
}), event.origin);
}
});
Verification and OM SDK Integration
VAST 4.x supports integration with the Open Measurement SDK (OM SDK) for standardized viewability and verification tracking. The <AdVerifications> element in the VAST response declares which verification vendors should be loaded:
<AdVerifications>
<Verification vendor="moat.com">
<JavaScriptResource apiFramework="omid">
<![CDATA[https://moat.com/verify.js]]>
</JavaScriptResource>
<TrackingEvents>
<Tracking event="verificationNotExecuted">
<![CDATA[https://moat.com/notexec?id=12345]]>
</Tracking>
</TrackingEvents>
</Verification>
</AdVerifications>
When the player loads a VAST response with AdVerifications, it initializes the OM SDK and passes the verification scripts the context they need to measure viewability, brand safety, and other metrics without requiring proprietary vendor SDKs.
Implementation Best Practices
For Ad Servers
- Serve VAST 4.2 as the default version while maintaining backward compatibility with VAST 3.0 for legacy players.
- Always include a
<UniversalAdId>for creative identification across the supply chain. - Provide multiple
<MediaFile>options at different bitrates and resolutions to support adaptive streaming. - Include
<AdVerifications>for all campaigns to enable standardized viewability measurement. - Limit wrapper chains to three levels maximum to prevent latency issues.
For Video Players
- Implement VAST 4.2 parsing with full tracking event support.
- Support SIMID as the preferred interactive ad protocol, with VPAID as a fallback for legacy creatives.
- Initialize the OM SDK when AdVerifications are present in the VAST response.
- Implement proper timeout handling for both VAST tag fetching (recommended: 4 seconds) and ad loading (recommended: 2 seconds).
- Handle error scenarios gracefully by firing VAST error codes and falling back to content.
For Creative Developers
- Build interactive creatives using SIMID rather than VPAID.
- Provide media files in MP4 (H.264) and HLS formats for maximum compatibility.
- Keep video file sizes reasonable: target 2-5 MB for 30-second spots at 1080p.
- Test creatives against VAST validators and multiple player implementations.
- Include fallback non-linear creatives for environments that don't support interactive features.
The Future of Video Ad Standards
The IAB Tech Lab continues to evolve video ad standards in response to industry shifts toward CTV (Connected TV), streaming, and interactive formats. Key areas of development include enhanced server-side ad insertion (SSAI) support, standardized ad pod management for live streaming, and integration with privacy frameworks like TCF 2.2 for consent-aware ad serving in video environments.