Skip to main content
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 positive/negative percentages (0–100). asset is required (sentiment is per-brand). Add comparison_start_date / comparison_end_date to get a previous block on each row for period-over-period deltas in a single call.
  • Metrics: positive_sentiment, negative_sentiment (sum to 100 per row), and occurrence (opt-in; needs theme/claim grouping or filtering).
  • group_by: up to two of topic, region, model, prompt, persona, tag, theme, claim, run, competitor (plus date).
  • Entity filters: theme / claim accept is/in, single value, name or id.
  • include_cited_websites: true adds cited_websites per row (with theme/claim grouping).
New to the v2 reports? See Filtering & concepts for the shared request shape, filter tree, grouping, and pagination.
POST /v2/reports/sentiment/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: {"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
    }
  ]
}

Authorizations

X-API-Key
string
header
required

Body

application/json
category_id
string
required
asset
string
required

The brand name to analyze (sentiment is extracted on name, not id).

start_date
string
required

YYYY-MM-DD, ET, inclusive

end_date
string
required

YYYY-MM-DD, ET, inclusive

comparison_start_date
string | null

YYYY-MM-DD, ET, inclusive (with end).

comparison_end_date
string | null

YYYY-MM-DD, ET, inclusive (with start).

group_by
enum<string>[]
Available options:
date,
model,
topic,
region,
prompt,
persona,
tag,
theme,
claim,
run,
competitor
metrics
enum<string>[] | null
Available options:
positive_sentiment,
negative_sentiment,
occurrence
interval
enum<string>
default:day
Available options:
day,
week,
month
filter
FilterNode · object

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

sort
SortSpec · object
include_cited_websites
boolean
default:false

Return cited websites per row (only when grouping by theme/claim).

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 Sentiment V2 V2 Reports Sentiment Post · object.