Reporting paths
A content_retrieved event can reach OpenAttribution from three directions. Each path has different trade-offs, and they're
designed to work together.
Which integration is right for you?
Your infrastructure reports
Your infrastructure detects AI bot requests and reports them directly. No cooperation from the agent required. Whether you run a news site, a product catalogue, or a brand portal - you control the data at source.
AI Agent ──GET──> Your CDN / CMS / Origin Server
│
├── Detect AI user agent
├── Read OA-Telemetry-ID header (if present)
└── POST content_retrieved event to OA telemetry endpointThe telemetry spec calls this source_role: "origin" or source_role: "edge" depending on whether the event is reported from the origin server or an edge network (CDN).
When the requesting agent includes an OA-Telemetry-ID header, that ID correlates your event with the agent's own event - two independent observations
of the same retrieval. When the agent doesn't include the header, you still get the event.
It's just one-sided.
Integrations
Content marketplace reporting
Content marketplaces and licensed content repositories act as intermediaries. When an agent retrieves content through a marketplace, the marketplace can report the retrieval event on behalf of the content owner.
AI Agent ──GET──> Content Marketplace (Microsoft, Amazon, etc.)
│
├── Serves licensed content to agent
└── POST content_retrieved event (source_role: "index")The telemetry spec calls this source_role: "index". The marketplace has visibility into which content was served and can report events with
full metadata - content URL, licensing terms, and the telemetry ID for correlation.
Integration guides for content marketplace operators coming soon. If you operate a content marketplace or licensed content repository, get in touch.
Agent-side reporting
The AI agent itself reports what content it retrieved. This is the most complete path - the agent has full visibility into what it fetched, how it used the content, and what the user did with the response.
AI Agent (Google, OpenAI, Perplexity, etc.)
│
├── Retrieves content from web / index / RAG
├── POST content_retrieved event (source_role: "agent")
├── Cites content in response
├── POST content_cited event
└── User clicks through
└── POST content_engaged eventAgent-side reporting covers the full event lifecycle - retrieval, citation, engagement, and
outcome. When combined with server-side reporting on the same retrieval, the OA-Telemetry-ID header correlates both observations into a single, corroborated event.
Register your agent to get an API key, then see the Telemetry SDK documentation and the full specification.
Cross-observer correlation
The three paths aren't alternatives - they're designed to overlap. When multiple observers
report the same retrieval, the events are correlated using the OA-Telemetry-ID header.
Agent includes header: OA-Telemetry-ID: 550e8400-e29b-41d4-a716-446655440000
Your server reports: { "type": "content_retrieved", "oa_telemetry_id": "550e8400-..." }
Agent reports: { "type": "content_retrieved", "oa_telemetry_id": "550e8400-..." }
Same oa_telemetry_id + same content_url = one retrieval, two independent witnesses.Server-side reporting works without the header - you still see the retrieval. But with the header, you get corroboration. Two observations are stronger than one.