vastlint

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 versions2.0, 3.0, 4.0 (4.1+ partial)
VPAIDCompletely blocked. No fallback.
Wrapper chain limit4 hops; 5-second total timeout
Required media formatMP4, H.264 + AAC. H.265 optional on 4K devices.
Companion adsIgnored (not rendered)
HTTPSRequired 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> in HH:MM:SS format matching actual video length
  • <Impression> element present with HTTPS URL
  • version attribute on the root <VAST> element
  • <Error> tracking URL with [ERRORCODE] macro
  • Use OMID <Verification> for measurement instead of VPAID

References

Validate your tag against all 118 IAB rules →