Skip to main content
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 assets param (a name, a list, or { op, value }). scope: "all" ranks every asset; "owned" returns only yours.
  • sort by any requested metric, e.g. { "field": "visibility_score" }.
New to the v2 reports? See Filtering & concepts for the shared request shape, filter tree, grouping, and pagination.
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

X-API-Key
string
header
required

Body

application/json
category_id
string
required
start_date
string
required

YYYY-MM-DD, ET, inclusive

end_date
string
required

YYYY-MM-DD, ET, inclusive

group_by
enum<string>[]
Available options:
date,
model,
topic,
region,
prompt,
persona
metrics
enum<string>[] | null
Available options:
visibility_score,
share_of_voice,
average_position
interval
enum<string>
default:day
Available options:
day,
week,
month
scope
enum<string>
default:owned
Available options:
owned,
all
assets

A name (is), a list (in), or {op,value} with op is/in/not_in.

filter
FilterNode · object

A leaf (field/op/value) or an and/or/not group.

sort
SortSpec · object
limit
integer | null

Page size; default 10, max 50.

Required range: 0 < x <= 50
max_results
integer | null

Stream endpoint only: cap the number of streamed rows (default: all).

Required range: x > 0
cursor
string | null

Response

Successful Response

The response is of type Response Query Visibility V2 V2 Reports Visibility Post · object.