OpenAI injects structured ad objects into ChatGPT’s SSE stream and closes the attribution loop via a merchant-side tracking SDK called OAIQ.
Key Takeaways
Ad units arrive as single_advertiser_ad_unit delta events in the /backend-api/f/conversation SSE stream, separate from model output.
Four Fernet-encrypted tokens per ad: ads_spam_integrity_payload (server-side anti-fraud), oppref (30-day attribution cookie), olref (impression logging), and ad_data_token (SSE payload reconciled at click time).
Targeting is contextual per conversation: same account, six topics, six different brands including Grubhub, GetYourGuide, Canva, and Aritzia.
target.open_externally: false keeps post-click navigation inside ChatGPT’s in-app webview, giving OpenAI a second signal layer on top of the OAIQ pixel.
The OAIQ SDK (bzrcdn.openai.com/sdk/oaiq.min.js v0.1.3) reads ?oppref= from the merchant landing page, writes it to __oppref with a 720-hour TTL, and POSTs events to bzr.openai.com/v1/sdk/events.
Hacker News Comment Review
Commenters immediately flagged that separate SSE events make ad blocking straightforward today, but expect the easy window to close once ads are folded into the main model response stream.
Tone across comments is uniformly negative: words like “gross” and “enshitification” dominate, with no commenter defending the move or offering a neutral technical read.
One commenter floated a friction-monetization scenario (watch an ad to unlock a longer context window), which reflects broader anxiety about where the incentive structure goes next.
Notable Comments
@WD-42: notes that distinct SSE events make blocking trivial now, but “once the ads are injected directly into the main response is when things get interesting.”
@gxs: “it feels like we’ve been in the golden age and the window is coming to a close.”