curl -X POST https://api.tryprofound.com/v2/reports/sentiment \
-H "X-API-Key: <your-api-key>" \
-H "Content-Type: application/json" \
-d '{
"category_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
"asset": "Profound",
"start_date": "2026-06-09",
"end_date": "2026-06-15"
}'
{
"info": {
"total_results": 1,
"count": 1,
"next_cursor": null,
"asset": "Profound",
"models": ["ChatGPT", "Google Gemini", "Perplexity", "Claude", "..."],
"metrics": ["positive_sentiment", "negative_sentiment"],
"start_date": "2026-06-09",
"end_date": "2026-06-15",
"filter": null
},
"data": [
{
"positive_sentiment": 79.1,
"negative_sentiment": 20.9
}
]
}
Reports v2
Sentiment
POST
/
v2
/
reports
/
sentiment
curl -X POST https://api.tryprofound.com/v2/reports/sentiment \
-H "X-API-Key: <your-api-key>" \
-H "Content-Type: application/json" \
-d '{
"category_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
"asset": "Profound",
"start_date": "2026-06-09",
"end_date": "2026-06-15"
}'
{
"info": {
"total_results": 1,
"count": 1,
"next_cursor": null,
"asset": "Profound",
"models": ["ChatGPT", "Google Gemini", "Perplexity", "Claude", "..."],
"metrics": ["positive_sentiment", "negative_sentiment"],
"start_date": "2026-06-09",
"end_date": "2026-06-15",
"filter": null
},
"data": [
{
"positive_sentiment": 79.1,
"negative_sentiment": 20.9
}
]
}
Per-brand sentiment as percentages from either AI responses or the pages those
responses cite.
asset is required because sentiment is calculated for one
brand at a time.
source: "response"(default): sentiment in AI responses. Metrics arepositive_sentiment,negative_sentiment, and opt-inoccurrence.source: "citation": one row per cited page, withpositive_sentiment,negative_sentiment, and model-balancedcitation_share. It defaults to sorting bycitation_share; explicitly setsort.fieldtopositive_sentimentto sort by page sentiment instead.- Comparison dates: add
comparison_start_dateandcomparison_end_date. Response rows include previous sentiment metrics. Citation rows include the page’s previouscitation_share.
group_by dimensions from topic,
region, model, prompt, persona, tag, theme, claim, run, and
competitor, plus date. Citation sentiment is page-only and rejects
group_by; use filters to narrow the page population.
Both sources accept prompt-layer filters such as model, topic, region,
persona, prompt, and tag, plus top-level theme / claim filters. Citation
sentiment additionally accepts these top-level filters:
citation_category:isorin. Values can be built-in categories (owned,competition,social,earned_media,earned_institutions,pr_wire,other) or a custom category value.page:contains_case_insensitivewith one non-empty value. This searches the normalized page URL.
include_cited_websites: true applies only to response sentiment grouped by
theme and/or claim.
Citation sentiment describes the cited page. A model filter changes which
models’ citations contribute to page eligibility and citation share; it does
not turn page sentiment into a model-specific sentiment 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/sentiment/stream supports both response and citation
sentiment 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. With source: "citation", each result is the same
page-level shape returned in data by the paginated endpoint.Response (text/event-stream)
event: summary
data: { ...the info block... }
event: result ← one per row, same shape as data[] above
data: {"theme": {"id": "a14e0c2d", "name": "Analytics"}, "rank": 1, "positive_sentiment": 95.4, "negative_sentiment": 4.6}
curl -X POST https://api.tryprofound.com/v2/reports/sentiment \
-H "X-API-Key: <your-api-key>" \
-H "Content-Type: application/json" \
-d '{
"category_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
"asset": "Profound",
"start_date": "2026-06-09",
"end_date": "2026-06-15"
}'
{
"info": {
"total_results": 1,
"count": 1,
"next_cursor": null,
"asset": "Profound",
"models": ["ChatGPT", "Google Gemini", "Perplexity", "Claude", "..."],
"metrics": ["positive_sentiment", "negative_sentiment"],
"start_date": "2026-06-09",
"end_date": "2026-06-15",
"filter": null
},
"data": [
{
"positive_sentiment": 79.1,
"negative_sentiment": 20.9
}
]
}
Citation-page example
This request returns owned pages containingtryprofound.com, ordered by their
current citation share. Combine citation-layer leaves with other filters under a
top-level and.
cURL
curl -X POST https://api.tryprofound.com/v2/reports/sentiment \
-H "X-API-Key: <your-api-key>" \
-H "Content-Type: application/json" \
-d '{
"category_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
"asset": "Profound",
"start_date": "2026-06-09",
"end_date": "2026-06-15",
"source": "citation",
"metrics": ["positive_sentiment", "negative_sentiment", "citation_share"],
"sort": {"field": "citation_share", "dir": "desc"},
"filter": {
"and": [
{"field": "citation_category", "op": "is", "value": "owned"},
{"field": "page", "op": "contains_case_insensitive", "value": "tryprofound.com"}
]
},
"limit": 10
}'
200
{
"info": {
"total_results": 1,
"count": 1,
"next_cursor": null,
"asset": "Profound",
"models": ["ChatGPT", "Google Gemini", "Perplexity", "..."],
"metrics": ["positive_sentiment", "negative_sentiment", "citation_share"],
"start_date": "2026-06-09",
"end_date": "2026-06-15",
"filter": {
"and": [
{"field": "citation_category", "op": "is", "value": "owned"},
{"field": "page", "op": "contains_case_insensitive", "value": "tryprofound.com"}
]
}
},
"data": [
{
"page": "tryprofound.com/",
"rank": 1,
"positive_sentiment": 100.0,
"negative_sentiment": 0.0,
"citation_share": 1.42
}
]
}
Authorizations
APIKeyHeaderBearerAuth
Body
application/json
The brand name to analyze (sentiment is extracted on name, not id).
YYYY-MM-DD, ET, inclusive
YYYY-MM-DD, ET, inclusive
YYYY-MM-DD, ET, inclusive (with end).
YYYY-MM-DD, ET, inclusive (with start).
Available options:
response, citation Available options:
date, model, topic, region, prompt, persona, tag, theme, claim, run, competitor Available options:
positive_sentiment, negative_sentiment, occurrence, citation_share Available options:
day, week, month A leaf (field/op/value) or an and/or/not group.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Return cited websites per row (only when grouping by theme/claim).
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?