---
title: "Video in waterfalls, pods and SSAI"
description: "What a server-side ad insertion stitcher such as MediaTailor receives in Epom's VAST — stable creative id, mezzanine, best file first, standard event names, advertiser and price — and how several video networks share one slot through pods, waterfalls and wrapper flags."
type: "reference"
audience: [network-manager]
keywords: [SSAI, server-side ad insertion, MediaTailor, Google DAI, stitcher, mezzanine, creative id, UniversalAdId, VAST pricing, VAST advertiser, VAST category, playerExpand, event names, ad pod, waterfall, wrapper flags, Follow additional wrappers, Allow multiple ads, Fallback on no ads]
ui_path: "Account → Advertisers → campaign → video banner"
---

Fetch the complete documentation index at: https://epom.com/ad-server/docs/llms.txt. Use this file to discover all available pages before exploring further. Append .md to any documentation page URL to get its markdown version.

# Video in waterfalls, pods and SSAI

A companion to [Video banners](https://epom.com/ad-server/docs/guides/advertising/banner-video.md): what Epom writes into a video response for a
server-side stitcher, and how a slot that is shared by several networks behaves. The supply-side
settings — pods, pricing in the VAST answer, telling Epom which stitcher calls the tag — are on
[Video placements](https://epom.com/ad-server/docs/guides/inventory/placement-video.md).

## What a server-side ad insertion stitcher receives

On CTV a stitcher (AWS MediaTailor, Google DAI, …) transcodes the video once, caches the result and
splices it into the stream. Every Local Video, External Video and Advanced Local Video(s) response
is built for that:

- **A stable creative id.** `<Creative id="4512-a1b2c3d4">` is the banner id plus a short hash of
  the video file. Stitchers cache their transcode under it and never expire it, so it stays the
  same while the file does — the ad plays straight from the cache — and changes the moment you
  upload a different file, so the old version never plays in its place. The first request after a
  new file is still skipped while the stitcher transcodes; that happens once per file.
- **A mezzanine file** — the source a stitcher transcodes from. Videos are served as uploaded, so
  it is the same file the `<MediaFile>` points at: `<Mezzanine>` in `<MediaFiles>` on VAST 4.x
  (with its delivery, type and size from 4.1), and a `Mezzanine` extension on 2.0 (in the ad's
  `<Extensions>`) and 3.0 (in `<CreativeExtensions>`), as the IAB VAST CTV Addendum 2024 defines.
  Upload the best-quality file you have: the mezzanine is only as good as the upload, and the
  network's **maximum video file size** (Preferences) caps it.
- **Best file first.** With several media files (Advanced Local Video(s)) the highest-bitrate one
  comes first, and the response duration is taken from it. On a site with a
  [publisher video spec](https://epom.com/ad-server/docs/guides/advertising/banner-video-reference.md#publisher-video-requirements) the files the
  spec refuses are left out, so the best file that site accepts comes first.
- **Only standard event names.** MediaTailor rejects a whole response over one event name the VAST
  specification does not define. Epom translates the player-size events per version and leaves
  out what a version lacks:

| Event | 2.0 | 3.0 | 4.0 | 4.1 – 4.3 |
|---|---|---|---|---|
| Fullscreen / Exit fullscreen | `fullscreen` / — | `fullscreen` / `exitFullscreen` | `playerExpand` / `playerCollapse` | `playerExpand` / `playerCollapse` |
| Expand / Collapse (linear video) | `expand` / `collapse` | `expand` / `collapse` | — | — |
| Ad loaded | — | — | — | `loaded` |

  The event settings, their conversion actions and the reports are unchanged — only the name
  written into the response differs. `skip` and `progress` are sent on 2.0 as well: 2.0 is what a
  tag without a version gets, and progress points often drive conversions.

- **Who the ad is for, and what it pays.** A stitcher that resells the slot over its own auction
  needs to know whose ad it is and what it costs. From VAST 3.0 the response names the
  `<Advertiser>` — the advertiser's own **Advertiser domain** for a direct campaign, the winning
  bid's `adomain` for programmatic demand — and VAST 4.x adds the winning bid's IAB categories as
  `<Category>`. The price is sent only where the placement turns on **Send the publisher's price in
  VAST** (off by default — see
  [Video placements](https://epom.com/ad-server/docs/guides/inventory/placement-video.md#pricing-in-the-vast-answer)): then a
  `<Pricing model="cpm" currency="USD">` carries the **publisher's** net CPM for this placement, what
  the publisher earns, never the advertiser's gross or a DSP's bid. A wrapper carries the price from
  4.0 only, and nothing else. A `<Pricing>` the demand put in its own markup is removed on every
  version whatever the setting, so the stitcher never sees what the buyer paid; with no net price —
  a creative paid by the click or the action — the response has no `<Pricing>`.

The ISCI / Ad-ID code travels in the same response — as `UniversalAdId` on 4.x and as the
Creative's `AdID` plus a `UniversalAdId` extension on 2.0 and 3.0; see
[ISCI / Ad-ID code](https://epom.com/ad-server/docs/guides/advertising/banner-video-reference.md#isci--ad-id-code).

## Several networks in one slot: waterfalls, pods and wrapper flags

A video request returns **one** banner unless the placement's **Return (ads in pod)** (or
`maxAds` on the tag) is above 1 — then the response is a numbered **ad pod**, and players such
as JW Player and Google IMA play every ad in it. For a waterfall across several VAST tags keep
the pod at 1 and either give the player one Epom placement per network in order, or let Epom
pick one wrapper per request by priority. The **VAST 4.0 Wrapper properties** (*Follow
additional wrappers*, *Allow multiple ads*, *Fallback on no ads*) are written into the
`<Wrapper>` only when the tag is requested as VAST 4.0 or later, and only steer how the player
treats that one partner's answer. Full recipe, macros for the partner's tag URL and how to read
fill per network: [Run a pre-roll waterfall across several video networks](https://epom.com/ad-server/docs/use-cases/vast-waterfall-several-networks.md).

## Related

- [Video banners](https://epom.com/ad-server/docs/guides/advertising/banner-video.md) — the guide
- [Video banner reference](https://epom.com/ad-server/docs/guides/advertising/banner-video-reference.md) — fields, saved-banner sections, ISCI, API
- [Video placements](https://epom.com/ad-server/docs/guides/inventory/placement-video.md) — pods, pricing in the VAST answer, SSAI stitcher settings
- [Run a pre-roll waterfall across several video networks](https://epom.com/ad-server/docs/use-cases/vast-waterfall-several-networks.md)
- [Diagnose video ad playback failures (VAST errors)](https://epom.com/ad-server/docs/troubleshooting/vast-errors-and-playback.md)
- [Video, VAST and VPAID explained](https://epom.com/ad-server/docs/concepts/video-vast-vpaid-explained.md)