---
title: "Check video creatives against a publisher's spec"
description: "Record a publisher's video spec on its site — resolution with bitrate, duration, frame rate, codecs, audio, loudness — so a video file that misses it is not served there, and see which linked creatives miss it and why."
type: "howto"
audience: [network-manager, admin]
keywords: [video spec, publisher spec, preset, mezzanine, minimum resolution, duration range, Netflix, Disney+, Amazon, Paramount, creative QC, CTV, OTT, mezzanine, ISCI, bitrate, frame rate, constant frame rate, VFR, codec, H.264, ProRes, loudness, LKFS, CALM Act, SB 576, Hulu, Peacock, NBCU, Roku, video requirements]
ui_path: "Account → Publishers → site → Video creative requirements"
---

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.

# Check video creatives against a publisher's spec

CTV publishers reject a spot that is a fraction of a megabit or a few frames off their spec. Record
each publisher's spec once on its site, and Epom checks every video file linked to that site's
placements against it: a file that misses it stays linked but is **not served** there, and every
place the creative is linked says why.

## Who this is for

Network managers and publishers who sell CTV or OTT inventory with a published video spec. The
card appears only for roles with the **Video Creative Requirements** permission — if it is
missing, ask your network admin to turn it on. Networks without CTV see nothing new.
Read-only access shows the spec without letting you change it.

## Prerequisites

- A site for the publisher, with its video placements.
- Video creatives uploaded to Epom (**Local Video** or **Advanced Local Video(s)**). External video
  URLs, third-party VAST tags and DSP bids have no file in Epom and are never checked.

## Steps

1. Open the site and switch on **Video creative requirements** — on the card or in the
   **Features** list beside it. The card stays closed while the switch is off, and nothing is
   checked.
   ![Video creative requirements card with resolution, duration, frame rate, codec, audio and loudness rows](https://epom.com/docs-images/ad-server/video-creative-requirements/requirements-card.webp)
2. If the publisher is one of the major streaming services, click **Use a publisher spec** and pick it
   — the form fills in with that publisher's published spec (see the list below), which you then
   check against the spec the publisher sent you. Otherwise click **Add requirement** and pick each
   criterion the publisher's spec names; add only those. A new row starts from the most common CTV
   value, which you then adjust.
3. Click **Save**. The ad servers apply the spec within seconds.

   Switching the card off stops the check but keeps the spec, so switching it back on applies the
   same requirements again.
4. Check what is linked. On each of the site's video placements, **Linked banners** warns how many
   linked creatives miss the spec and marks each of them **Not served**; hover the mark for the
   reasons. A creative not yet linked is marked too, and ticking one shows a warning above **Save**,
   so you know before linking it that it will not be served.
   ![Creatives tree of a video placement with an off-spec creative marked](https://epom.com/docs-images/ad-server/video-creative-requirements/requirements-tree.webp)
5. On the creative, **Linked placements** does the same from the other side: it warns on how many
   linked placements the file is not served and marks each of them. **Video info** lists what was read from the file — resolution, duration, video
   bitrate, frame rate and whether it is constant, video codec, container, audio codec, audio
   bitrate, channels and sample rate, loudness and file size — and, for each linked site whose
   requirements are switched on, whether it is served there.
   ![Video info of a creative with its file facts and a failing site verdict](https://epom.com/docs-images/ad-server/video-creative-requirements/requirements-facts.webp)

While the switch is on, the video placement's VAST configuration shows the site's spec in one line under **Publisher video
requirements**, with a link back to the site.

## Options and fields

Video stream:

| Requirement | What you set | Passes when |
|---|---|---|
| Resolution | **Exact sizes**: one or more width × height, each with an optional bitrate range in Mbps. **At least**: a minimum width × height, for specs that say "1920x1080 minimum" | Exact sizes: the file's size is in the list, and a range on that size then replaces Video bitrate. At least: the file is at least that wide and that high |
| Duration | **Fixed lengths** in seconds with a tolerance (0.5 s by default), or a **Range** from–to | The file is within the tolerance of one of the lengths, or inside the range |
| Video bitrate | Minimum and/or maximum in Mbps, and **Not for ProRes files** | The video stream's bitrate is in range. With **Not for ProRes files**, a ProRes file is not checked against this range or a resolution's range |
| Frame rate | Accepted rates (23.976, 24, 25, 29.97, 30, 50, 59.94, 60) and **Constant frame rate only** (on by default) | The rate is one of them and does not vary through the file |
| Container | MP4, MOV, WEBM | The file is one of them |
| Video codec | H.264, HEVC (H.265), ProRes, VP9, AV1, MPEG-2 | The video stream uses one of them |

Audio and file:

| Requirement | What you set | Passes when |
|---|---|---|
| Audio codec | AAC, PCM, AC-3, E-AC-3, MP3, Opus | The audio stream uses one of them |
| Audio bitrate | At least … kbps | The audio stream's bitrate is at least that |
| Audio channels | Mono, Stereo, 5.1 | The audio has exactly that many channels |
| File size | At most … MB | The file is no larger |
| Loudness | Target and tolerance in LKFS (−24 ± 2 by default) | Integrated loudness (ITU-R BS.1770) is within the tolerance |

A file with no audio fails every audio requirement that is set.

**Not for ProRes files.** ProRes is the near-lossless master (the mezzanine) publishers transcode
from; it runs at 150–220 Mbps. Specs that accept both give their bitrate range for the compressed
H.264 file only, so a ProRes file would fail a 10–40 Mbps range it was never meant for. Leave this on
whenever the publisher's spec accepts ProRes.

### Publisher specs

**Use a publisher spec** fills the form from a major streaming publisher's published video ad spec:
Hulu, Disney+, Disney programmatic, ABC / Freeform, Peacock / NBCUniversal (standard and programmatic),
Amazon Prime Video, Amazon Fire TV Channels, Roku, Paramount+, HBO Max / discovery+ (international),
FOX, Netflix (ProRes and H.264) and Samsung Ads. Each was taken from the publisher's own spec page;
the note above the form says which spec and as of when. Picking one over requirements already on the
card asks **Replace the requirements?** first. A requirement the publisher does not state is
left out, never guessed. Publishers revise their specs, and the spec a publisher sends you wins —
check the filled form against it before you click **Save**.

Once saved, the card names the spec it was filled from — **Based on a publisher spec: Hulu · …, as of
…** — and marks it **Edited** if you have changed it since; the video placement's **Publisher video
requirements** line names it too. Removing every requirement removes the reference with them.

## How it works

- **The facts come from the file.** Every uploaded video is read on upload: resolution, duration,
  video bitrate, frame rate and whether it is constant, codecs, container, audio bitrate, channels
  and sample rate, file size, and integrated loudness.
- **Advanced Local Video(s)** are judged by their best file — the highest bitrate, then the widest —
  which is the one Epom gives SSAI stitchers to transcode from (the mezzanine).
- **Linking is never refused.** A creative that misses the spec can be linked; it is simply not
  served on that site's placements, and the next eligible creative wins the impression instead.
- **The check runs in the ad server's memory**, so a spec costs no request time.

## Corner cases and gotchas

> **Corner case: files uploaded before this check was introduced.** They were read only for size,
> bitrate, duration and type. Until Epom re-reads them in the background (gradually, for sites
> whose check is switched on) — a frame rate, codec, audio or loudness requirement counts as *not yet
> checked* for them and does not stop them.
> **Why:** a creative is not blocked for a fact nobody has read yet.
> **Workaround:** re-upload the file to have it read at once.

- Older **Advanced Local Video(s)** files are not re-read; re-upload them for frame rate, codecs,
  audio and loudness to be checked.
- Frame rates are matched to the standard values, so a spec's "23.98" matches a 23.976 file, but
  29.97 and 30 are different rates.
- Switched on with no requirement added, the card checks nothing; the site's creatives are served
  as before.

## Over the API

- `GET` / `POST /rest-api/sites/{siteId}/video-requirements.do` — read or replace the spec as JSON
  (`{}` clears it); invalid values come back per field in `errors`. The answer carries `enabled`.
- `POST /rest-api/sites/{siteId}/video-requirements/enable.do` and `…/disable.do` — switch the check
  on or off; the spec is kept either way.
- `GET /rest-api/video-requirements/presets.do` — the publisher specs, each with its source page and
  date; `POST /rest-api/sites/{siteId}/video-requirements/apply-preset.do?presetId=hulu` sets one on a
  site. An AI assistant asked to "make it like Hulu's" finds both through `api_search`.
- `GET /rest-api/banner/{bannerId}/video-compliance.do` — the file's facts and its verdict for each
  linked site that has a spec.
- `GET /rest-api/placements/{placementId}/video-compliance.do` — the placement's linked video
  creatives with their verdicts, and `notServed`, how many of them are not served there.
- An AI assistant connected over MCP reaches both through `api_read` / `api_write`;
  `whoami` reports `may.videoRequirements`.

See the [Sites](https://epom.com/ad-server/docs/api/sites.md) and [Banners](https://epom.com/ad-server/docs/api/banners.md)
API reference.

## Per-role notes

- **Video Creative Requirements read-only:** the card shows **Read-only** in place of the switch;
  the spec and the verdicts are visible, but **Add requirement** and **Save** are not.
- **Masked inventory or advertisers:** the verdict is still shown, but a site or creative the role
  may not see is named by its id only (`SITE_12`, `BANNER_34`) and is not a link — as in the link
  grids.
- **Without the permission:** no card, no column, no marks, no warning — creatives are still not served where
  they miss a spec someone else set.

## Related

- [Create and edit a site](https://epom.com/ad-server/docs/guides/inventory/sites.md)
- [Video placements](https://epom.com/ad-server/docs/guides/inventory/placement-video.md)
- [Video creatives](https://epom.com/ad-server/docs/guides/advertising/banner-video.md)