You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Per the deferred follow-up in #3051, this RFC opens the SSAI manifest-shape question. SSAI services (Yospace, AWS Elemental MediaTailor, Google DAI, Harmonic, Akamai, Comcast TVE) rewrite VAST and stitch ad segments into the content manifest before the player ever sees an ad break. This changes which trackers can fire, who fires them, and what the buyer agent can rely on — all of which may (or may not) need expression in the AdCP creative manifest.
Strawman position: most of SSAI is a publisher / sales-agent infrastructure concern, not a creative-manifest concern. The creative agent should keep producing the same vast + vast_tracker + url assets defined in #3051; the sales agent hands its VAST to the SSAI service, which owns firing-side decisions. If that holds, the only manifest-level changes are (a) capability/discovery hints and (b) a SIVA verification asset type.
This RFC tests that strawman. Pushback welcome — particularly from anyone running production SSAI integrations.
Background
CSAI (client-side ad insertion): player fetches VAST, parses <TrackingEvents>, fires trackers itself. The model in #2915 / #3051 assumes this.
SSAI (server-side ad insertion): an intermediate service fetches VAST, downloads ad media, transcodes to match the content manifest's profile, and stitches ad segments into the HLS/DASH manifest. The player sees one continuous stream; ad breaks are signaled out-of-band (HLS EXT-X-DATERANGE, DASH EMSG, or vendor SDK callbacks).
Tracker firing under SSAI varies by vendor:
Vendor
Impression / Quartiles
Clickthrough
Interactivity
Verification
Yospace
Client-side (TrackingClient SDK parses EXT-X-DATERANGE/EMSG, fires from player)
Client-side
Client-side
OMID via SIVA
AWS Elemental MediaTailor
Server-side (default) — Client-Side Reporting API for opt-in override
Client-side
Client-side
SIVA only
Google Ad Manager DAI
Server-side (default) — IMA DAI SDK for client overrides
Client-side (IMA DAI)
Client-side
SIVA / OM SDK DAI
Comcast TVE / Harmonic / Akamai
Mostly server-side
Client-side
Vendor-specific
SIVA
Common thread: the SSAI vendor owns the firing-side decision per tracker, not the buyer or the creative agent. The buyer provides tracker URLs; the vendor picks the path.
Strawman: What AdCP Probably Does NOT Need
The following do not appear to require schema changes, on the strawman view:
Per-tracker firing-side hint (server | client | either). The SSAI vendor overrides any hint based on its own deployment model; carrying it in AdCP would be informational at best and misleading at worst.
A separate ssai_tracker asset type. The same vast_tracker event semantics apply; SSAI just changes who fires the URL, not what URL to fire or when.
Manifest-shape signals for HLS/DASH stitching. That's between the SSAI service and the publisher's origin, not the buyer or creative agent.
What AdCP Probably DOES Need
1. Inventory-level SSAI capability declaration
A buyer agent needs to know whether inventory is SSAI-delivered before it commits, because:
Device-graph identifiers (IFA, RIDA) are passed through inconsistently.
Frequency capping and cross-publisher-cap mechanics differ when an SSAI service handles ad selection vs. proxying to a router.
Verification options narrow to SIVA (server-side OMID).
Open Q: is this a format capability, a product field, or part of TMP CTV surface guidance? Closed issue #1770 ("TMP CTV: SSAI integration and surface-specific gaps") suggests the latter — but inventory-level discovery probably needs a signal too.
2. SIVA (Server-Side OMID) verification asset type
OMID verification under SSAI uses the SIVA spec. Resources still ship with vendor, resource_url, verification_parameters, api_framework — same shape as the deferred omid_verification asset type from #3051's roadmap — but the verification flow differs. Two options:
Option A: single omid_verification asset type covers both CSAI and SSAI; the sales agent / SSAI service routes correctly based on inventory delivery mode.
Option B: separate siva_verification asset type with explicit fields for SIVA-specific resources (e.g., server-side measurement endpoints).
Lean: Option A. The asset content is the same; only the runtime is different.
3. Pod-level vs. ad-level trackers (open question)
Some SSAI vendors emit pod-level beacons (slot impression, pod start, pod complete) that are not per-ad. These don't fit the current per-creative tracker model. Three responses:
Punt: pod-level signals are publisher infrastructure, not buyer concerns. AdCP stays out.
Surface them in the response: report-pod-level events back to the buyer via reporting / measurement APIs without touching the creative manifest.
Carry pod-side trackers in the buy: add a pod-level tracker concept to media buy schema. (Big surface, probably overkill.)
Lean: punt or report, depending on what buyers actually ask for. Need input from buyer agent implementers.
Strawman test: is "most of SSAI is publisher infrastructure, AdCP barely changes" the right take, or am I underestimating what buyer agents need to express?
Inventory-level SSAI declaration: format capability, product field, or TMP CTV surface guidance — which is the right home?
SIVA: Option A (unified omid_verification) or Option B (separate siva_verification)?
Pod-level trackers: punt, report, or carry?
CC @coppertop18 (asked in #2915) — please weigh in if you have production SSAI experience.
Spec Files Potentially Affected
core/format.json or core/product.json — SSAI capability declaration
Summary
Per the deferred follow-up in #3051, this RFC opens the SSAI manifest-shape question. SSAI services (Yospace, AWS Elemental MediaTailor, Google DAI, Harmonic, Akamai, Comcast TVE) rewrite VAST and stitch ad segments into the content manifest before the player ever sees an ad break. This changes which trackers can fire, who fires them, and what the buyer agent can rely on — all of which may (or may not) need expression in the AdCP creative manifest.
Strawman position: most of SSAI is a publisher / sales-agent infrastructure concern, not a creative-manifest concern. The creative agent should keep producing the same
vast+vast_tracker+urlassets defined in #3051; the sales agent hands its VAST to the SSAI service, which owns firing-side decisions. If that holds, the only manifest-level changes are (a) capability/discovery hints and (b) a SIVA verification asset type.This RFC tests that strawman. Pushback welcome — particularly from anyone running production SSAI integrations.
Background
CSAI (client-side ad insertion): player fetches VAST, parses
<TrackingEvents>, fires trackers itself. The model in #2915 / #3051 assumes this.SSAI (server-side ad insertion): an intermediate service fetches VAST, downloads ad media, transcodes to match the content manifest's profile, and stitches ad segments into the HLS/DASH manifest. The player sees one continuous stream; ad breaks are signaled out-of-band (HLS
EXT-X-DATERANGE, DASHEMSG, or vendor SDK callbacks).Tracker firing under SSAI varies by vendor:
EXT-X-DATERANGE/EMSG, fires from player)Common thread: the SSAI vendor owns the firing-side decision per tracker, not the buyer or the creative agent. The buyer provides tracker URLs; the vendor picks the path.
Strawman: What AdCP Probably Does NOT Need
The following do not appear to require schema changes, on the strawman view:
server|client|either). The SSAI vendor overrides any hint based on its own deployment model; carrying it in AdCP would be informational at best and misleading at worst.ssai_trackerasset type. The samevast_trackerevent semantics apply; SSAI just changes who fires the URL, not what URL to fire or when.What AdCP Probably DOES Need
1. Inventory-level SSAI capability declaration
A buyer agent needs to know whether inventory is SSAI-delivered before it commits, because:
Open Q: is this a
formatcapability, aproductfield, or part of TMP CTV surface guidance? Closed issue #1770 ("TMP CTV: SSAI integration and surface-specific gaps") suggests the latter — but inventory-level discovery probably needs a signal too.2. SIVA (Server-Side OMID) verification asset type
OMID verification under SSAI uses the SIVA spec. Resources still ship with
vendor,resource_url,verification_parameters,api_framework— same shape as the deferredomid_verificationasset type from #3051's roadmap — but the verification flow differs. Two options:omid_verificationasset type covers both CSAI and SSAI; the sales agent / SSAI service routes correctly based on inventory delivery mode.siva_verificationasset type with explicit fields for SIVA-specific resources (e.g., server-side measurement endpoints).Lean: Option A. The asset content is the same; only the runtime is different.
3. Pod-level vs. ad-level trackers (open question)
Some SSAI vendors emit pod-level beacons (slot impression, pod start, pod complete) that are not per-ad. These don't fit the current per-creative tracker model. Three responses:
Lean: punt or report, depending on what buyers actually ask for. Need input from buyer agent implementers.
What's Not in Scope For This RFC
omid_verificationdecomposition — separate follow-up from feat(schema): add vast_tracker + daast_tracker asset types (#2915) #3051.Asks
omid_verification) or Option B (separatesiva_verification)?CC @coppertop18 (asked in #2915) — please weigh in if you have production SSAI experience.
Spec Files Potentially Affected
core/format.jsonorcore/product.json— SSAI capability declarationcore/asset.json—omid_verificationasset type (shared with feat(schema): add vast_tracker + daast_tracker asset types (#2915) #3051 follow-up)