VAST XML for Amazon Fire TV
Amazon Fire TV is the second-largest CTV platform in the US. Fire TV devices run FireOS (a fork of Android), and ad playback is typically handled by apps built with the Fire App Builder SDK, ExoPlayer, or the IMA SDK for Android. All three share the same VAST requirements. This guide covers what your tag needs to deliver successfully on Fire TV and related Amazon streaming devices.
Quick reference
| VAST versions | 2.0, 3.0, 4.0 (4.1+ partial) |
| VPAID | Completely blocked. No fallback. |
| Wrapper chain limit | 4 hops; 5-second total timeout |
| Required media format | MP4, H.264 + AAC. H.265 optional on 4K devices. |
| Companion ads | Ignored (not rendered) |
| HTTPS | Required for all URLs (FireOS 5+) |
VPAID is blocked
FireOS does not provide a JavaScript execution environment for VPAID at the ad layer. Any <MediaFile> with apiFramework="VPAID" is silently dropped. If the VAST tag contains only a VPAID creative with no native fallback, the entire ad opportunity is lost — no error is reported to the publisher.
Always include at least one non-VPAID <MediaFile> as a fallback. For viewability measurement, use OMID via <AdVerifications> instead of VPAID.
<!-- ❌ VPAID-only tag — will fail silently on Fire TV -->
<MediaFile apiFramework="VPAID" type="application/javascript">
<![CDATA[https://cdn.example.com/vpaid.js]]>
</MediaFile>
<!-- ✅ Native MP4 with OMID for measurement -->
<MediaFile type="video/mp4" width="1920" height="1080"
bitrate="5000" delivery="progressive">
<![CDATA[https://cdn.example.com/ad.mp4]]>
</MediaFile>
<AdVerifications>
<Verification vendor="moat.com-omid">
<JavaScriptResource apiFramework="omid" browserOptional="true">
<![CDATA[https://z.moatads.com/...]]>
</JavaScriptResource>
</Verification>
</AdVerifications>→ vastlint rule: VAST-4.1-vpaid-in-interactive-context
HTTPS requirement
Amazon enforces HTTPS across all FireOS 5+ devices at the OS networking layer. This covers:
- The VAST tag URL itself
- All
<VASTAdTagURI>wrapper URLs - All
<MediaFile>URLs - All
<Impression>tracking pixels - All
<Tracking>event URLs - All
<ClickThrough>and<ClickTracking>URLs
A single HTTP URL in any of these locations can cause the entire ad to fail. Fire TV does not surface HTTP blocking as an explicit error — the asset simply doesn't load.
Media file requirements
Fire TV requires MP4 with H.264 video and AAC audio. This applies across the full Fire TV device family: Fire TV Stick, Fire TV Cube, and Fire TV Edition smart TVs.
Fire TV 4K (2018+) and Fire TV Cube also support H.265/HEVC, which significantly reduces file size at equivalent quality. Include H.265 as a secondary <MediaFile> with H.264 as the primary to cover older devices:
<MediaFiles>
<!-- Primary: H.264 — works on all Fire TV devices -->
<MediaFile type="video/mp4" width="1920" height="1080"
bitrate="5000" delivery="progressive">
<![CDATA[https://cdn.example.com/ad-1080p-h264.mp4]]>
</MediaFile>
<!-- Optional: H.265 — smaller file, Fire TV 4K only -->
<MediaFile type="video/mp4" width="1920" height="1080"
bitrate="2500" delivery="progressive">
<![CDATA[https://cdn.example.com/ad-1080p-h265.mp4]]>
</MediaFile>
<!-- 720p fallback -->
<MediaFile type="video/mp4" width="1280" height="720"
bitrate="2000" delivery="progressive">
<![CDATA[https://cdn.example.com/ad-720p-h264.mp4]]>
</MediaFile>
</MediaFiles>Wrapper chains and timeout
Fire TV allows up to 4 wrapper hops with a 5-second total resolution timeout. This is slightly more generous than Roku's 3-second limit, but still tight for multi-hop programmatic chains with high server-side latency. Keep chains to 3 hops or fewer in practice.
Wrapper ads must include a <VASTAdTagURI>. A wrapper without one terminates the chain immediately and counts as a no-fill.
→ vastlint rule: VAST-2.0-wrapper-vastadtaguri
Duration and timing
<Duration> must follow the HH:MM:SS or HH:MM:SS.mmm format. Fire TV rejects bare integers and ISO 8601 durations. The declared duration should match the actual length of the media file; a mismatch can cause the progress bar and skip button timing to be incorrect.
<!-- ❌ Invalid -->
<Duration>30</Duration>
<!-- ✅ Valid -->
<Duration>00:00:30</Duration>→ vastlint rule: VAST-2.0-duration-format
Companion ads
Fire TV does not render companion ads. <CompanionAds> blocks are parsed but ignored. Do not build campaign reporting around companion engagement on Fire TV inventory.
Skippable ads
Fire TV supports skippable ads when the remote's D-pad is used to interact. Setskipoffset on <Linear> as a time offset or percentage. Skip behaviour is implemented by the player app, not FireOS itself, so behaviour may vary slightly across Fire TV app frameworks.
Error tracking
Always include an <Error> URL with the [ERRORCODE] macro. Fire TV ad frameworks report IAB VAST error codes back when available, which is essential for diagnosing silent failures in programmatic delivery.
<Error>
<![CDATA[https://track.example.com/error?code=[ERRORCODE]&adid=[AD_ID]]]>
</Error>Pre-flight checklist for Amazon Fire TV
- No VPAID creatives — MP4 H.264 only (H.265 optional for 4K)
- All URLs use HTTPS — every single one
- Wrapper chain depth ≤ 3 hops
- At least one MP4 H.264
<MediaFile>at 720p or 1080p <Duration>inHH:MM:SSformat matching actual video length<Impression>element present with HTTPS URLversionattribute on the root<VAST>element<Error>tracking URL with[ERRORCODE]macro- Use OMID
<Verification>for measurement instead of VPAID
References
- Amazon Fire TV — Developer overview
- Amazon Fire TV — Media players (ExoPlayer, Android MediaPlayer)
- IMA SDK for Android — Getting started (primary ad SDK for Fire TV)
- IMA SDK for Android — Compatibility (VAST version and feature support)
- ExoPlayer IMA extension — Integrating ads with ExoPlayer
- Amazon Publisher Services (APS) — Amazon's own ad tech for Fire TV