curl -X POST https://api.tryprofound.com/v2/reports/visibility \
-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"
}'
{
"info": {
"total_results": 1,
"count": 1,
"next_cursor": null,
"scope": "owned",
"models": ["ChatGPT", "Google Gemini", "Perplexity", "Claude", "..."],
"start_date": "2026-06-09",
"end_date": "2026-06-15",
"asset_filter": null,
"filter": null
},
"data": [
{
"asset": { "name": "Profound", "owned": true },
"rank": 1,
"visibility_score": 0.48,
"share_of_voice": 0.077,
"average_position": 2.5
}
]
}
Reports v2
Visibility
POST
/
v2
/
reports
/
visibility
curl -X POST https://api.tryprofound.com/v2/reports/visibility \
-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"
}'
{
"info": {
"total_results": 1,
"count": 1,
"next_cursor": null,
"scope": "owned",
"models": ["ChatGPT", "Google Gemini", "Perplexity", "Claude", "..."],
"start_date": "2026-06-09",
"end_date": "2026-06-15",
"asset_filter": null,
"filter": null
},
"data": [
{
"asset": { "name": "Profound", "owned": true },
"rank": 1,
"visibility_score": 0.48,
"share_of_voice": 0.077,
"average_position": 2.5
}
]
}
How often your asset appears in AI answers, plus share of voice and average
position. Select the asset(s) with
assets, break results down with
group_by, and read each metric as a named field on the row.
- Metrics:
visibility_score(share of answers the asset appeared in),share_of_voice(share of all mentions),average_position(average rank when mentioned; lower is better). group_by:date,model,topic,region,prompt,persona.- Select assets with the
assetsparam (a name, a list, or{ op, value }).scope: "all"ranks every asset;"owned"returns only yours. sortby any requested metric, for example{ "field": "visibility_score" }.
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/visibility/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)
event: summary
data: { ...the info block... }
event: result ← one per row, same shape as data[] above
data: {"asset": {"name": "Profound", "owned": true}, "rank": 1, "visibility_score": 0.48}
curl -X POST https://api.tryprofound.com/v2/reports/visibility \
-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"
}'
{
"info": {
"total_results": 1,
"count": 1,
"next_cursor": null,
"scope": "owned",
"models": ["ChatGPT", "Google Gemini", "Perplexity", "Claude", "..."],
"start_date": "2026-06-09",
"end_date": "2026-06-15",
"asset_filter": null,
"filter": null
},
"data": [
{
"asset": { "name": "Profound", "owned": true },
"rank": 1,
"visibility_score": 0.48,
"share_of_voice": 0.077,
"average_position": 2.5
}
]
}
Authorizations
APIKeyHeaderBearerAuth
Body
application/json
YYYY-MM-DD, ET, inclusive
YYYY-MM-DD, ET, inclusive
Available options:
date, model, topic, region, prompt, persona Available options:
visibility_score, share_of_voice, average_position Available options:
day, week, month Available options:
owned, all A name (is), a list (in), or {op,value} with op is/in/not_in.
A leaf (field/op/value) or an and/or/not group.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Page size; default 10, max 50.
Required range:
0 < x <= 50Stream endpoint only: cap the number of streamed rows (default: all).
Required range:
x > 0Was this page helpful?