Skip to content

Tracker firing path (client / server / mixed) — is this a buyer concern AdCP needs to model, and where? #3832

Description

@bokelley

Summary

A buyer agent may want to mandate client-side or server-side tracker firing on a campaign — e.g., a brand-safety-sensitive CTV buy where the brand standard requires client-side measurement. AdCP today doesn't have a discoverable way to declare this property or filter products on it.

This issue holds two distinct questions and asks WG to weigh in on both:

  1. Is this a real, recurring buyer requirement?
  2. If yes, where does the declaration live?

Origin

Surfaced in #3759 by @coppertop18, who proposed an execution_context enum on the verification asset spanning capabilities, products, and creative manifest. The measurement taxonomy argues verification is outcome-based — buyer commits vendor + threshold + standard via performance_standard, seller is accountable for delivering, path is plumbing — so per-asset execution_context doesn't earn its protocol surface. But @coppertop18 also surfaced a discovery-filter use case the outcome-based contract doesn't cover:

"Do I wanna mandate client-side measurement only, or server-side measurement only? 'Cause that just means I'm not gonna buy certain properties, most likely."@coppertop18

That use case is the question this issue asks.

Q1: Is it a real business requirement?

Cases where it would matter:

  • Brand mandate. Some brand standards require client-side measurement (regulated verticals, certain ad formats, legal/compliance overlays). Buyer needs to filter products before commit.
  • Buyer's own attribution pixels. Server-side firing means the buyer's pixel sees the SSAI service's IP/UA, not the user's device — buyers doing first-party identity ops lose that signal.
  • Audit transparency. Knowing the delivered path-mix helps buyers learn — paired with the delivery-time partition follow-up.

Cases where it doesn't:

  • Outcome-based verification (most cases). The buyer commits to "70% MRC viewability by DV"; the seller is accountable regardless of path. Vendor confidence varies by path — that's the vendor's job to disclose and the buyer's contract with the vendor to govern.

The discovery-filter case is the strongest. WG sense-check welcome: how often does a real brand standard require client-side-only? Recurring v3.x concern or rare enough to defer?

Q2: If yes, where does it go?

Option A — Product-level delivery property

"delivery": { "tracker_firing": "client" | "server" | "mixed" }

One dimension, channel-neutral, discoverable at get_products, clean filter primitive.

Pros: simple, channel-neutral. Cons: coarse — a single product may have heterogeneous firing per event (VAST impression server-side, click client-side).

Option B — Per-tracker on the creative manifest (extends #3051)

{ "event": "impression", "url": "...", "fires": "server" }

Pros: granular truth, lives where trackers live, natural extension of #3051. Cons: doesn't solve discovery — buyers can't filter at get_products without resolving every manifest.

Option C — Both: product summary + per-tracker truth

Product-level delivery.tracker_firing summary (computed by seller) + per-tracker detail in #3051's tracker schema. Buyers filter on the summary; audit and breakdown use the per-tracker truth.

Pros: matches existing capability-summary → contract → manifest-detail pattern. Cons: two surfaces to keep in sync.

Option D — Capability-level (get_adcp_capabilities)

Cons: too coarse — same seller usually has products with materially different paths.

Strawman

If Q1 = yes, Option C matches existing AdCP patterns best. But the prior question is whether the discovery-filter use case is recurring enough to justify the surface.

Out of scope

Related

Metadata

Metadata

Assignees

No one assigned

    Labels

    claude-triagedIssue has been triaged by the Claude Code triage routine. Remove to re-triage.enhancementNew feature or requestneeds-wg-reviewBlocked on a working-group decision — surface in WG meeting agendasschemaJSON Schema source-of-truth: definitions, codegen artifacts, validation, hygiene

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions