Skip to content

spec(creative): add IAB CTV experience profiles for AdCP 3.2 #6428

Description

@bokelley

Problem

AdCP 3.2 needs to describe CTV home/menu and high-impact screen experiences without creating channel-named creative canonicals that duplicate the buyer asset contracts already represented by IAB Native and VAST.

The IAB Tech Lab CTV Ad Portfolio defines six experiences:

  • Menu (including home-screen inventory)
  • Pause
  • Screensaver
  • Overlay
  • Squeezeback
  • In-Scene

The final IAB signaling guidance maps Menu to IAB Native and the other five to NonLinear VAST. AdCP should preserve that mapping. CTV is a placement/rendering profile, not six new format_kind values.

Proposed 3.2 model

Add a shared ctv_ad_experience vocabulary with:

menu | pause | screensaver | overlay | squeezeback | in_scene
  • native_in_feed accepts only ctv_ad_experience: "menu". The wire name remains stable for 3.x even though Menu is not literally an in-feed placement; a broader Native canonical name can be considered for 4.0.
  • video_vast accepts pause, screensaver, overlay, squeezeback, and in_scene, constrained to a NonLinear VAST creative contract.
  • One format option declares at most one CTV experience. A seller offering several experiences publishes sibling format options so buyers can route, validate, price, and preview each one independently.
  • Do not add ctv_* canonical kinds. Linear CTV video remains ordinary video_vast/video_hosted; channel applicability stays on the product declaration.

Schema work

  • Add the shared experience enum and document its IAB mapping.
  • Extend video_vast with an explicit creative-type constraint (linear | nonlinear | either) that replaces the ambiguity of linear_required over time.
  • Add VAST 4.3 and 4.4 to vast_version; document the IAB portfolio's VAST/SIMID requirements.
  • Constrain the five video-backed CTV experiences to nonlinear and reject menu on video_vast.
  • Allow menu on native_in_feed, with slots_override examples for tile and banner variants, and reject the other five experiences there.
  • Document IAB OpenRTB placement/signaling and creative-attribute mappings, including motion level, remote interaction, QR extensions, and safe-area/aspect constraints where applicable.
  • Keep experience-specific requirements in profiles/overrides instead of copying the base Native or VAST slot contract into six schemas.

Workflow and measurement

  • get_products exposes one routable format option per offered CTV experience.
  • validate_input verifies the experience/canonical pairing, VAST creative type and version, Native slots, and experience-specific dimensions/safe areas.
  • preview_creative fixtures demonstrate remote navigation, motion behavior, QR presentation, and fallback rendering without implying that preview execution is buyer-supplied code.
  • Define one rendered impression per experience opportunity; remote selection and QR activation are engagement/click events, not additional impressions.
  • Add positive and negative compliance vectors for all six experiences.

Acceptance criteria

  • All six IAB experiences are expressible in 3.2 using only native_in_feed and video_vast.
  • Invalid pairings (for example Menu + VAST or Pause + Native) fail schema/semantic validation.
  • NonLinear VAST constraints, VAST 4.3/4.4, SIMID, QR, motion, and OpenRTB signaling are documented and covered by vectors.
  • Menu/home-screen Native includes tile and banner worked examples.
  • Product discovery, manifest validation, preview, and measurement semantics are covered end to end.
  • No new CTV-specific canonical format_kind is introduced.

References

Related: #5972

Metadata

Metadata

Assignees

No one assigned

    Labels

    claude-triagedIssue has been triaged by the Claude Code triage routine. Remove to re-triage.creativeneeds-wg-reviewBlocked on a working-group decision — surface in WG meeting agendasrfcProtocol change — auto-adds to roadmap boardschemaJSON Schema source-of-truth: definitions, codegen artifacts, validation, hygienespec / protocol

    Type

    No type

    Projects

    Status
    No status

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions