curl -X POST https://api.tryprofound.com/v2/reports/citations \
-H "X-API-Key: <your-api-key>" \
-H "Content-Type: application/json" \
-d '{
"category_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
"start_date": "2026-06-09",
"end_date": "2026-06-15"
}'
curl -X POST https://api.tryprofound.com/v2/reports/citations \
-H "X-API-Key: <your-api-key>" \
-H "Content-Type: application/json" \
-d '{
"category_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
"start_date": "2026-06-09",
"end_date": "2026-06-15",
"filter": {
"field": "citation_tag",
"op": "in",
"value": ["Editorial", "Docs"]
}
}'
{
"info": {
"total_results": 11662,
"count": 10,
"next_cursor": "Z0FBQUFBQnFQcWdrbDRiSHpGaktVNm5N...",
"scope": "all",
"models": ["ChatGPT", "Google Gemini", "Perplexity", "Claude", "..."],
"metrics": ["count", "citation_share", "rank"],
"analysis_types": ["visibility"],
"start_date": "2026-06-09",
"end_date": "2026-06-15",
"filter": null
},
"data": [
{ "domain": "reddit.com", "rank": 1, "count": 13940, "citation_share": 0.040 },
{ "domain": "youtube.com", "rank": 2, "count": 16287, "citation_share": 0.037 },
{ "domain": "tryprofound.com", "rank": 3, "count": 10414, "citation_share": 0.029 }
// ...7 more rows in this page (count: 10, total_results: 11662); paginate with next_cursor
]
}
Citations
curl -X POST https://api.tryprofound.com/v2/reports/citations \
-H "X-API-Key: <your-api-key>" \
-H "Content-Type: application/json" \
-d '{
"category_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
"start_date": "2026-06-09",
"end_date": "2026-06-15"
}'
curl -X POST https://api.tryprofound.com/v2/reports/citations \
-H "X-API-Key: <your-api-key>" \
-H "Content-Type: application/json" \
-d '{
"category_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
"start_date": "2026-06-09",
"end_date": "2026-06-15",
"filter": {
"field": "citation_tag",
"op": "in",
"value": ["Editorial", "Docs"]
}
}'
{
"info": {
"total_results": 11662,
"count": 10,
"next_cursor": "Z0FBQUFBQnFQcWdrbDRiSHpGaktVNm5N...",
"scope": "all",
"models": ["ChatGPT", "Google Gemini", "Perplexity", "Claude", "..."],
"metrics": ["count", "citation_share", "rank"],
"analysis_types": ["visibility"],
"start_date": "2026-06-09",
"end_date": "2026-06-15",
"filter": null
},
"data": [
{ "domain": "reddit.com", "rank": 1, "count": 13940, "citation_share": 0.040 },
{ "domain": "youtube.com", "rank": 2, "count": 16287, "citation_share": 0.037 },
{ "domain": "tryprofound.com", "rank": 3, "count": 10414, "citation_share": 0.029 }
// ...7 more rows in this page (count: 10, total_results: 11662); paginate with next_cursor
]
}
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),citation_tag(your custom tags: list them with Get Citation Tags).
citation_category and citation_tag are both top-level and leaves
accepting is / in; values in one in are OR’d, so
{"field": "citation_tag", "op": "in", "value": ["Editorial", "Docs"]}
matches URLs carrying either tag.count and citation_share measure different things: citation_share is
averaged per AI model, so it won’t sort in lockstep with raw count.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.event: summary
data: { ...the info block... }
event: result ← one per row, same shape as data[] above
data: {"domain": "reddit.com", "rank": 1, "count": 13940, "citation_share": 0.040}
curl -X POST https://api.tryprofound.com/v2/reports/citations \
-H "X-API-Key: <your-api-key>" \
-H "Content-Type: application/json" \
-d '{
"category_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
"start_date": "2026-06-09",
"end_date": "2026-06-15"
}'
curl -X POST https://api.tryprofound.com/v2/reports/citations \
-H "X-API-Key: <your-api-key>" \
-H "Content-Type: application/json" \
-d '{
"category_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
"start_date": "2026-06-09",
"end_date": "2026-06-15",
"filter": {
"field": "citation_tag",
"op": "in",
"value": ["Editorial", "Docs"]
}
}'
{
"info": {
"total_results": 11662,
"count": 10,
"next_cursor": "Z0FBQUFBQnFQcWdrbDRiSHpGaktVNm5N...",
"scope": "all",
"models": ["ChatGPT", "Google Gemini", "Perplexity", "Claude", "..."],
"metrics": ["count", "citation_share", "rank"],
"analysis_types": ["visibility"],
"start_date": "2026-06-09",
"end_date": "2026-06-15",
"filter": null
},
"data": [
{ "domain": "reddit.com", "rank": 1, "count": 13940, "citation_share": 0.040 },
{ "domain": "youtube.com", "rank": 2, "count": 16287, "citation_share": 0.037 },
{ "domain": "tryprofound.com", "rank": 3, "count": 10414, "citation_share": 0.029 }
// ...7 more rows in this page (count: 10, total_results: 11662); paginate with next_cursor
]
}
Authorizations
Body
YYYY-MM-DD, ET, inclusive
YYYY-MM-DD, ET, inclusive
What each row represents: domain (default), page, or citation_category. Legacy: group_by: ["page"] (with entity omitted) is still accepted and is equivalent to entity: "page". citation_category uses the dashboard split view: a citation counts under both its page-level and domain-level category, so category shares can sum to more than 100%.
domain, page, citation_category page, date, model, topic, region, persona, prompt count, citation_share, rank, first_cited_at day, week, month all (every cited domain) or owned (only your owned domains). Applies to entity=domain.
all, owned citation_category filters on a cited URL's single category; citation_tag filters on the custom citation tags a URL carries (a URL can carry several). List the category's tags with GET /v1/org/categories/{category_id}/citation-tags.
Show child attributes
Show child attributes
Page size; default 10, max 50.
0 < x <= 50Stream endpoint only: cap the number of streamed rows (default: all).
x > 0Was this page helpful?