Discriminator identifying this as a renderer-fired pixel tracker asset. See /schemas/creative/asset-types for the registry.
Which event this tracker fires on. Event enum mirrors IAB OpenRTB Native 1.2 event-tracker registry (event types 1, 2, 3, 4, 500); the events themselves are generic web-pixel measurement events that apply to any renderer:
impression (IAB type 1) — fires when the ad is served. Covers both imptrackers[] and jstracker from the IAB shape, distinguished by method.viewable_mrc_50 (IAB type 2) — IAB MRC viewable, 50% pixels for ≥1 second.viewable_mrc_100 (IAB type 3) — IAB MRC viewable, 100% pixels for ≥1 second.viewable_video_50 (IAB type 4) — video-specific viewable, 50% pixels for ≥2 seconds with audio on. On video_hosted; ignored on image/html5.audible_video_complete (IAB type 500) — video reached 100% completion with audio on. Distinct from viewable_video_50 (50% pixels + 2s threshold) — this is the full-completion audible-view event. Meaningful on non-VAST video formats (Meta Reels, YouTube Shorts, TikTok Spark) where audible-complete is a measured event but VAST <TrackingEvents> isn't the wire format; VAST formats use vast_tracker with vast_event: complete plus a separate audible tracker instead.click — fires when the user clicks the creative (link.clicktrackers[]).custom — adopter-defined event for anything not in the standardized enum. MUST also set custom_event_name. Reserved for IAB Native event types 555+ (exchange-specific) and any vendor-defined event not yet promoted to a first-class enum value.Optionalmethod?: "img" | "js"How the tracker URL is invoked at serve time:
img — fired as an image pixel (HTTP GET with <img>-like semantics; no JS execution)js — fired as a script include (renderer evaluates the URL's response as JavaScript)Matches IAB OpenRTB Native 1.2 method enum (1=img, 2=js). js MUST only be used by sellers whose renderer supports JavaScript trackers; sellers without JS-tracker support MUST reject method: js declarations at sync_creatives time with CREATIVE_REJECTED carrying the reason.
Tracker URL fired when event occurs. May carry AdCP universal macros (e.g., {MEDIA_BUY_ID}, {CREATIVE_ID}, {CACHEBUSTER}); the seller's renderer URL-encodes substituted values at serve time. See docs/creative/universal-macros.mdx.
Optionalcustom_event_name?: stringREQUIRED when event is custom; otherwise MUST be absent. Adopter-defined event name. Sellers without registered handling for a given custom_event_name MUST silently no-op (do not fire) rather than reject — custom events are forward-compatible probes.
Optionalprovenance?: Provenance
A single renderer-fired HTTP tracker URL — image pixel or JavaScript include — bound to a measurement event (impression, viewability, click, custom). Generic web-pixel tracker primitive applicable to any web-rendered canonical format (image, html5, image_carousel, responsive_creative, sponsored_placement, native_*, plus the non-VAST/DAAST events of video_hosted and audio_hosted). The buyer's measurement vendor declares the tracker URL; the seller's renderer fires it at serve time without buyer-side involvement.
The discriminated-union shape and event/method enums are formalized in IAB OpenRTB Native 1.2 (
imptrackers[]/jstracker/eventtrackers[]/link.clicktrackers[]); the same shape applies cleanly to image banners, html5, carousels, and any other format whose renderer fires HTTP pixels for measurement. The namepixel_trackermirrors the industry's existing 'tracker pixel' terminology (already used inurl_type: "tracker_pixel") and applies equally tomethod: imgandmethod: js(a JS include is still a measurement-pixel hop in vendor parlance).Scope boundary (normative).
pixel_trackercovers RENDERER-FIRED trackers — measurement events that the ad's serving template invokes when the user sees, views, or clicks the creative. Conversion pixels that fire on the advertiser's site after the click (Meta Pixel, GA4 server-side, custom postbacks) MUST be modeled viasync_event_sources/event_log— they are campaign-scoped, not creative-asset-scoped. Seedocs/creative/canonical-formats.mdx#what-format_kind-is-not-for.Format-specific tracker primitives. Formats whose wire shape embeds tracker URLs in a format-specific structure use dedicated asset types instead:
video_vast→vast_tracker(VAST<TrackingEvents>: start, quartiles, complete, pause, mute)audio_daast→daast_tracker(DAAST<TrackingEvents>parity)display_tag→ opaque (third-party server fires its own trackers)All other web-rendered canonicals use
pixel_tracker.Maps to IAB OpenRTB Native 1.2 / Dynamic Native Ads API tracker objects:
imptrackers[]→ onepixel_trackerper entry withevent: impression,method: imgjstracker→ onepixel_trackerwithevent: impression,method: jseventtrackers[]→ onepixel_trackerper entry,eventmapped from the IAB event enumlink.clicktrackers[]→ onepixel_trackerper entry withevent: click,method: img(click destinations live onlanding_page_urlslot)Bidirectional v1↔v2 mapping (normative for SDK auto-negotiation). A 3.1 buyer SDK talking to a 3.0.x seller MUST downgrade
pixel_trackerto the v1{asset_type: url, url_type: tracker_pixel}shape. The URL still emits on the wire; what's lost depends on the original event/method. A 3.1 SDK reading a v1 manifest MUST upgrade{asset_type: url, url_type: tracker_pixel}topixel_trackerby inferring event/method from the v1asset_id. Both directions are lossy-with-advisory; SDKs MUST emit the appropriate error code so consumers can see what was inferred or dropped.v2 → v1 downgrade table:
{event: impression, method: img, url}{url_type: tracker_pixel, asset_id: impression_tracker, url}{event: viewable_mrc_50, method: img, url}{url_type: tracker_pixel, asset_id: viewability_tracker, url}PIXEL_TRACKER_LOSSY_DOWNGRADE{event: viewable_mrc_100, method: img, url}PIXEL_TRACKER_LOSSY_DOWNGRADE{event: viewable_video_50, method: img, url}PIXEL_TRACKER_LOSSY_DOWNGRADE{event: audible_video_complete, method: img, url}PIXEL_TRACKER_LOSSY_DOWNGRADE{event: click, method: img, url}{url_type: tracker_pixel, asset_id: click_tracker, url}{event: custom, custom_event_name: X, ...}{url_type: tracker_pixel, asset_id: impression_tracker, url}(defaults to impression timing)PIXEL_TRACKER_LOSSY_DOWNGRADE{method: js, any event, url}url_type: tracker_pixelPIXEL_TRACKER_LOSSY_DOWNGRADEv1 → v2 upgrade table (inferred — SDK has no explicit event/method):
impression_tracker{event: impression, method: img}viewability_tracker{event: viewable_mrc_50, method: img}click_tracker{event: click, method: img}<other asset_id>{event: custom, custom_event_name: <original asset_id>, method: img}All v1→v2 upgrades surface
PIXEL_TRACKER_UPGRADE_INFERREDso consumers can see that event/method were inferred rather than explicitly declared.