VASTlint

CTV Ad Portfolio

The CTV Ad Portfolio is the IAB Tech Lab standard that names and signals six connected TV ad formats which had been running in market for years as bespoke, per-publisher integrations. Signaling guidance was finalised on 22 July 2026. None of the formats are new. What the standard adds is a way for a buyer to ask for one, a seller to describe one, and both to agree on what was delivered without a bilateral integration document.

Every format here monetises a moment that used to be worth nothing: the viewer hitting pause, the idle home screen, the lower third during play. That is the commercial case. Streamers cannot keep raising ad load, and these placements add inventory without adding interruption.

Quick reference

FormatsPause, Screensaver, Overlay, Squeezeback, In-Scene, Menu
Carried byNonLinear VAST for five of six; Native API for Menu
Declare version4.2 or 4.3, not 4.4. IAB's own examples ship on 4.2
Identified byAdCOM plcmt echoed into <Extensions>

The six formats

FormatWhat the viewer seesplcmtGuide
PauseAn ad on the paused frame, full screen or beside the paused content.5Pause ads
ScreensaverAn ad on the idle or dormant screen after playback stops.6Screensaver ads
OverlayA banner or L-bar over playing content, usually lower third.7Nonlinear overlay
SqueezebackContent shrinks into a smaller frame; the ad occupies the vacated area.8Squeezeback ads
In-SceneAn ad placed inside the content frame, blended into the scene.9In-scene ads
Menu / tileA promoted tile in a browse or home surface.Native, not plcmtNative API

Five of the six are NonLinear VAST. Menu ads go through the OpenRTB Native object and only touch VAST inside video.vasttag, so everything below applies to the other five.

Why NonLinear, and what changed in it

<NonLinearAds> had barely moved since VAST 2.0, where it existed to carry a static overlay image. It could not carry video, could not declare a duration, and had no clean way to attach an interactive layer. All three are requirements for the portfolio formats, so the VAST 4.4 draft grew the content model:

Five changes came out of that: a <MediaFiles> container and a <Duration> on <NonLinear>, <Icons> on <NonLinearAds>, SIMID relocated into the MediaFiles container, and typed QR elements in <CreativeExtension>. Element by element, with the draft's open questions, that is the VAST 4.4 reference and the 4.3 to 4.4 migration. Keep declaring version="4.2" or "4.3" while you do: the new content model is accepted on both, and IAB's own portfolio examples ship on 4.2.

How a buyer opts in

The guidance states a design goal that explains the rest of the signaling scheme: no one should be able to accidentally purchase a pause ad. Buyers opt in, and plcmt is the field they opt in on.

<Extensions>
  <Extension type="plcmt" ext="adcom"><plcmt>5</plcmt></Extension>
</Extensions>

The DSP echoes the bid request's format context back into the creative, because a VAST response outlives the bid object. An SSAI stitcher or a measurement vendor downstream of the auction never sees the bid, and plcmt in the response is how it learns what it is handling. Three more signals travel the same way, describing screen position, sound behaviour and how much the creative moves. Their values and per-format sets are in the 4.4 reference; the per-format guides above give the combination each format uses.

The signal combination each format uses

The four signals are not independent. A format fixes which values are coherent, and a combination outside that set is the mismatch a publisher will see when it compares the delivered experience against what it sold. Read down a column to build a tag, read across a row to spot a contradiction.

FormatplcmtplaybackmethodposContent state
Pause58 or 97 or 8Stopped by the viewer
Screensaver610 or 117 or 8Idle, playback ended
Overlay71 or 25, 9, 10, 14, 15Playing, ad on top
Squeezeback81 or 211, 12, 13, 16, 17Playing, frame shrunk
In-Scene91 or 2Composited, not positionalPlaying, ad inside frame

Two patterns fall out of that. Only pause and screensaver own the audio, which is why they are the only formats with dedicated playback methods; the other three reuse 1 and 2 because the content keeps its sound. And only pause and screensaver own the whole screen, which is why their pos values are a two-way fullscreen or partial choice while overlay and squeezeback need five values each to describe geometry.

The VAST 2.0 path

The same five formats also have a VAST 2.0 encoding, for players that never implemented the 4.x NonLinear model. There the creative travels inside an <Extension type="ctv_ad_portfolio"> container rather than in the NonLinear structure, and the container binds to a creative by id.

This matters more than it sounds: a validator built for one path reports nothing on the other, because to a 4.x-shaped parser the 2.0 payload is an opaque vendor extension. VASTlint ships dedicated rules for it, including VAST-2.0-ctv-portfolio-creative-id-required and VAST-2.0-ctv-portfolio-no-renderable-asset.

What breaks in practice

FailureWhy it happensRule
Video NonLinear with no DurationDuration is optional in the schema because static creative may not have one. A video MediaFile always does, and without it the ad renders while measurement sees nothing.VAST-4.4-nonlinear-video-no-duration
Interactive-only creativeSIMID support on CTV devices is far from universal. A NonLinear with an interactive file and no renderable asset silently no-fills a large share of the install base.VAST-4.4-nonlinear-no-renderable-asset
QR position in pixelsIcon positions accept integers or percentages. QR positions accept percentages only. Markup adapted from an icon block is invalid.VAST-4.4-qrcode-position-percent
Signals that describe two formats at onceplcmt, pos and playbackmethod can each be valid and still disagree, for example a pause plcmt with squeezeback geometry.VAST-4.4-adcom-pos-format-mismatch
Non-integer AdCOM payloadThe signal elements carry enumeration values. A string, or a value outside the defined set, is malformed under any version.VAST-4.4-adcom-signal-not-integer

VASTlint ships 26 rules in a dedicated CTV Ad Portfolio category. Rules derived from the finalised signaling guidance carry normal weight, rules derived only from the draft schema stay at warning or info, and the only errors are constructs malformed under any version.

The bid request side

Everything above is the response. The request half lives in OpenRTB and AdCOM, where the new enumerations were added first and where a publisher declares which of these placements it has to sell. RTBlint covers that side in its CTV bid request reference.


Further reading