The one rule
Impression pixels fire client-side, from the user’s browser or app, as an image request. Never from your backend. Never via fetch. Impressions fired from server infrastructure are classified as general invalid traffic (GIVT) by verification vendors (IAS, DoubleVerify, MOAT) because they originate from datacenter IP space. GIVT impressions are discarded and unbilled. Impressions fired viafetch() fail silently on CORS in many contexts, so the event never arrives. The correct client-side implementation:
Event classes
Impression. Fired client-side when the ad enters the viewport. SDKs handle viewability timing automatically. This is the billable event for CPM demand. Billing notice (burl). A server-side notification that Adgentek fires after delivery is confirmed. Publishers never call the demand source’s burl directly. A burl does not substitute for an impression pixel and does not qualify a surface for CPM demand. Engagement. Interaction events emitted by a supported interactive format. The event names and availability depend on the format’s documented measurement contract. Click. All clicks route through the Adgentek redirect layer, where click-quality filtering runs. This is what makes CPC demand safe on every surface, including headless ones. Never link directly to advertiser destinations; always use the click URL from the ad payload. Conversion. Reported advertiser-side through the Adgentek Conversions API. Conversions are what make CPA demand work on headless surfaces: the billable event is verified independently of the ad render.What this means per integration path
If any of this is unclear for your architecture, write to hello@adgentek.ai before you build. Getting the impression path wrong is the single most common integration error, and it directly costs you revenue.

