Overview
Assistants are the hardest surface to monetize badly, and the best one to monetize well.
There is no page to read and no browsing history to fall back on. There is only the conversation — which, as it happens, is the richest statement of intent a user ever produces. Adzen matches against a conversation turn, so the ad reflects what the assistant and the user are actually working on.
We understand the turn
A conversation moves. What the user wanted three messages ago is not what they want now, and a system that cannot follow that will place the wrong ad confidently.
| The user says | What Adzen reads |
|---|---|
| “How do I fix a running toilet?” | DIY repair intent — parts, tools. Early, self-service. |
| “…okay that didn’t work, the valve is cracked” | Escalated. Now a parts-replacement or professional-service moment. |
| “honestly can someone just come do this” | Intent has flipped to hiring. Home services, immediate. |
| “my landlord is refusing to fix it and I think it’s illegal” | Now a dispute, not a purchase. No ad. |
Same thread, four different commercial situations, one of which should not be monetized at all. Matching per turn is what makes that distinction possible.
The same engine, a different entry point. AI surfaces use
POST /v1/ai/process rather than the UGC endpoint. It takes a message,
optionally the prompt that produced it, and a conversation_id that groups
turns and is carried onto impression beacons. See the
AI API reference.
Ways to integrate
React & Next.js SDK — @adzenai/ai — for assistants
built on plain React or Next.js. Fetch a placement for a message, render one ad,
and the SDK handles impression tracking.
CopilotKit — if you are building on CopilotKit, this is the fastest path — start with the quick start.
Direct API — every SDK wraps POST /v1/ai/process, and you can call it
yourself. See the AI API reference.
Tag — on request.
Comparing options across surfaces? See Choose your integration.