Sentiment Answers
The AI answers behind one sentiment theme — channel, prompt, date, the quoted answer text and the source URLs it cites. Paginated.
curl --request GET \
--url 'https://api.aiclicks.io/api/v1/sentiment/answers?domain_id=8f1d3c0a-2f9b-4c11-9b80-7a82e1f0c3f3&theme_id=5c1e2a90-7b3d-4f61-9a2e-1d4c8b7e6f01&model=ChatGPT&page=1&size=10' \
--header 'Authorization: Bearer ak_live_xxx'
import httpx, os
resp = httpx.get(
"https://api.aiclicks.io/api/v1/sentiment/answers",
params={
"domain_id": "8f1d3c0a-2f9b-4c11-9b80-7a82e1f0c3f3",
"theme_id": "5c1e2a90-7b3d-4f61-9a2e-1d4c8b7e6f01",
"model": "ChatGPT",
},
headers={"Authorization": f"Bearer {os.environ['AICLICKS_API_KEY']}"},
)
resp.raise_for_status()
for answer in resp.json()["data"]["items"]:
print(answer["date"][:10], answer["channel"], "—", answer["prompt"])
print(" cites:", ", ".join(sorted(set(answer["sources"]))))
const url = new URL("https://api.aiclicks.io/api/v1/sentiment/answers");
url.searchParams.set("domain_id", "8f1d3c0a-2f9b-4c11-9b80-7a82e1f0c3f3");
url.searchParams.set("theme_id", "5c1e2a90-7b3d-4f61-9a2e-1d4c8b7e6f01");
const resp = await fetch(url, {
headers: { Authorization: `Bearer ${process.env.AICLICKS_API_KEY}` },
});
const { data } = await resp.json();
console.log(data.pagination.total_count, "answers raise this theme");
{
"data": {
"theme_id": "5c1e2a90-7b3d-4f61-9a2e-1d4c8b7e6f01",
"items": [
{
"channel": "ChatGPT",
"prompt": "Acme Analytics reviews",
"date": "2026-10-26T00:18:10.448Z",
"quote": "Acme Analytics looks like a solid tool for small teams. The main drawback reviewers mention is the price of the higher plans and the short free trial...",
"sources": [
"https://acme-analytics.com/pricing",
"https://www.g2.com/products/acme-analytics/reviews"
]
}
],
"pagination": {
"current_page": 1,
"per_page": 10,
"total_count": 7,
"total_pages": 1,
"has_next": false,
"has_prev": false,
"last_page": true
}
},
"generated_at": "2026-11-09T10:00:11.218Z",
"domain_id": "8f1d3c0a-2f9b-4c11-9b80-7a82e1f0c3f3",
"model": "ChatGPT"
}
{
"detail": "Invalid or revoked API key"
}
{
"detail": "Sentiment data requires a Pro, Business, or Enterprise plan. Upgrade at https://app.aiclicks.io/brand-settings?tab=billing."
}
{
"detail": "Domain not found"
}
{
"detail": "Too many requests. Please try again later."
}
This endpoint returns the AI answers that raised one sentiment theme. The newest answer comes first. Each answer has the AI channel, the prompt, the date, the full answer text (quote) and the cited source URLs.
Use this endpoint to show why a theme exists. For example, read how ChatGPT describes the brand in the theme "Pricing and Trial Limitations".
Get the theme_id from GET /api/v1/sentiment/themes. Each theme there has an answers_count. This value is the total_count on this endpoint.
The domain_id and theme_id query parameters are required. To find the domains that your key can access, use GET /api/v1/domains. Sentiment data requires a Pro, Business or Enterprise plan. If the team has a different plan, the endpoint returns 403.
Authorizations
Your API key formatted as Bearer ak_live_<your-key>. Create one in the dashboard under Settings → Developers.
Optional UUID for log correlation. If omitted, we generate one and echo it back in the response.
Query parameters
UUID of the domain. Find domains via GET /api/v1/domains.
UUID of one sentiment theme — the id from GET /api/v1/sentiment/themes.
Restrict to one AI channel by generic name — ChatGPT, Perplexity, Gemini, AI Overviews, Claude, … Defaults to all.
1-indexed page number. Defaults to 1.
Answers per page, 1–50. Defaults to 10. Answer text is long. Use small pages.
If true, the server ignores the cached result and calculates a new result. The new result replaces the cached result. Defaults to false.
Response
The answers behind the theme.
Echo of the requested theme.
One row per AI answer that raised the theme, newest first.
current_page, per_page, total_count, total_pages, has_next, has_prev, last_page.
Echo of the requested domain.
Echo of the requested model filter.
ISO-8601 timestamp of when the server produced (or cached) this response.
Response headers
| Header | Description |
|---|---|
X-Cache | HIT, MISS, or REFRESH (when fresh=true). Whether the response came from cache. |
X-Request-Id | Unique request id. Echoes incoming if you set one. |
X-RateLimit-Limit | Max requests per minute for this key. |
X-RateLimit-Remaining | Requests remaining in current minute. |
X-RateLimit-Reset | Unix epoch seconds when the window resets. |
Caching
The server keeps the result in cache for 1 hour for each (domain_id, theme_id, model, page, size). To get a new result, send fresh=true.
Errors
Missing, malformed, or revoked API key.
The team does not have a Pro, Business or Enterprise plan. Or the team's developer_access flag is off. Or the domain is not in the scope of your API key.
The domain_id is not valid or does not exist. Or your user is not a member of the domain's team.
The domain_id or theme_id is missing. Or page or size is out of range.
You sent too many requests. The Retry-After header tells you how long to wait.
Empty result
If the theme has no answers, or the theme_id is unknown, the endpoint returns 200. The items list is empty and total_count is 0.