Reports v2
Query Citations
POST
Which domains and pages AI answers cite, ranked most-cited first. Group by
page for URL-level rows; use scope: "owned" to see only domains you own.
- Metrics:
count(raw citations),citation_share(per-model average share),rank,first_cited_at(pages only). group_by:page,date,model,topic,region,persona,prompt.- No
sort: rows are always ranked most-cited first. - Citation-layer filters:
domain(subdomain-aware),page,analysis_type(visibility·sentiment·factcheck·all),citation_category(owned·competition·social·earned_media·earned_institutions·pr_wire·other·custom).
count and citation_share measure different things: citation_share is
averaged per AI model, so it won’t sort in lockstep with raw count.New to the v2 reports? See Filtering & concepts for the shared request shape, filter tree, grouping, and pagination.
Streaming (SSE) variant (same body, /stream)
Streaming (SSE) variant (same body, /stream)
POST /v2/reports/citations/stream takes the same request body and
returns Server-Sent Events:
one summary event (the info block), then one result event per row.
limit/cursor are ignored; it returns everything by default. Pass
max_results to cap.Response (text/event-stream)
Authorizations
Body
application/json
YYYY-MM-DD, ET, inclusive
YYYY-MM-DD, ET, inclusive
Available options:
page, date, model, topic, region, persona, prompt Available options:
count, citation_share, rank, first_cited_at Available options:
day, week, month all (every cited domain) or owned (only your owned domains, for easy client-side totals).
Available options:
all, owned A leaf (field/op/value) or an and/or/not group.
Page size; default 10, max 50.
Required range:
0 < x <= 50Stream endpoint only: cap the number of streamed rows (default: all).
Required range:
x > 0Response
Successful Response
The response is of type Response Query Citations V2 V2 Reports Citations Post · object.