Read competitor evidence and analytics
curl --request GET \
--url https://app.chatobserver.com/api/v2/brands/{id}/analytics \
--header 'x-chatobserver-key: <api-key>'const options = {method: 'GET', headers: {'x-chatobserver-key': '<api-key>'}};
fetch('https://app.chatobserver.com/api/v2/brands/{id}/analytics', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://app.chatobserver.com/api/v2/brands/{id}/analytics"
headers = {"x-chatobserver-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text){
"data": {
"competitor": {
"id": 123,
"name": "<string>",
"label": "<string>",
"primaryDomain": "<string>",
"isOwnBrand": true,
"ownBrandConfirmedAt": "<string>",
"aliasCount": 123,
"aliases": [
{
"aliasType": "name",
"aliasText": "<string>",
"id": 123,
"competitorId": 123,
"normalizedAlias": "<string>",
"createdAt": "<string>"
}
],
"createdAt": "<string>",
"updatedAt": "<string>",
"archivedAt": "<string>"
},
"window": {
"days": 123,
"from": "<string>",
"to": "<string>"
},
"visibility": {
"totalMentions": 123,
"shareOfVoice": 123,
"averagePosition": 123,
"observedAnswerCount": 123,
"points": [
{
"day": "<string>",
"mentions": 123,
"shareOfVoice": 123
}
]
},
"sentiment": {
"overview": {
"window": {
"from": "<string>",
"to": "<string>",
"compareFrom": "<string>",
"compareTo": "<string>"
},
"generatedAt": "<string>",
"summary": {
"totalMentions": 123,
"distinctRuns": 123,
"positiveCount": 123,
"negativeCount": 123,
"neutralCount": 123,
"mixedCount": 123,
"positiveShare": 123,
"negativeShare": 123,
"netSentiment": 123,
"ownBrandNegativeMentions": 123,
"competitorPositiveMentions": 123
},
"comparison": {
"totalMentions": 123,
"distinctRuns": 123,
"positiveCount": 123,
"negativeCount": 123,
"neutralCount": 123,
"mixedCount": 123,
"positiveShare": 123,
"negativeShare": 123,
"netSentiment": 123,
"ownBrandNegativeMentions": 123,
"competitorPositiveMentions": 123
}
},
"series": [
{
"bucketDate": "<string>",
"totalMentions": 123,
"positiveCount": 123,
"negativeCount": 123,
"neutralCount": 123,
"mixedCount": 123,
"ownBrandNegativeMentions": 123,
"competitorPositiveMentions": 123
}
],
"evidence": [
{
"mentionId": 123,
"promptRunId": 123,
"promptId": 123,
"promptLabel": "<string>",
"platform": "chatgpt",
"regionCode": "<string>",
"occurredAt": "<string>",
"targetLabel": "<string>",
"targetKind": "workspace_brand",
"competitorId": 123,
"isOwnBrand": true,
"sentiment": "positive",
"aspect": "<string>",
"quote": "<string>",
"quoteStart": 123,
"quoteEnd": 123,
"excerpt": "<string>",
"excerptHighlightStart": 123,
"excerptHighlightEnd": 123,
"position": 123,
"confidence": "<string>"
}
]
},
"sources": [
{
"domain": "<string>",
"citationCount": 123,
"answerCount": 123,
"lastSeenAt": "<string>"
}
],
"groups": [
{
"id": 123,
"name": "<string>",
"answerCount": 123,
"promptCount": 123
}
],
"answers": [
{
"promptRunId": 123,
"promptId": 123,
"promptLabel": "<string>",
"platform": "<string>",
"regionCode": "<string>",
"rank": 123,
"occurredAt": "<string>"
}
],
"generatedAt": "<string>"
}
}Brands
Read competitor evidence and analytics
Workspace-scoped app capability through the customer API. MCP requires the matching prompts or competitors permission. Competitor writes require current admin permission. Personal review sessions additionally require user-authorized OAuth and are unavailable to workspace service keys. Identity decisions verify the discovered candidate revision and replay by UUID. Review applications report per-item outcomes; inspect conflicts before continuing.
GET
/
api
/
v2
/
brands
/
{id}
/
analytics
Read competitor evidence and analytics
curl --request GET \
--url https://app.chatobserver.com/api/v2/brands/{id}/analytics \
--header 'x-chatobserver-key: <api-key>'const options = {method: 'GET', headers: {'x-chatobserver-key': '<api-key>'}};
fetch('https://app.chatobserver.com/api/v2/brands/{id}/analytics', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://app.chatobserver.com/api/v2/brands/{id}/analytics"
headers = {"x-chatobserver-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text){
"data": {
"competitor": {
"id": 123,
"name": "<string>",
"label": "<string>",
"primaryDomain": "<string>",
"isOwnBrand": true,
"ownBrandConfirmedAt": "<string>",
"aliasCount": 123,
"aliases": [
{
"aliasType": "name",
"aliasText": "<string>",
"id": 123,
"competitorId": 123,
"normalizedAlias": "<string>",
"createdAt": "<string>"
}
],
"createdAt": "<string>",
"updatedAt": "<string>",
"archivedAt": "<string>"
},
"window": {
"days": 123,
"from": "<string>",
"to": "<string>"
},
"visibility": {
"totalMentions": 123,
"shareOfVoice": 123,
"averagePosition": 123,
"observedAnswerCount": 123,
"points": [
{
"day": "<string>",
"mentions": 123,
"shareOfVoice": 123
}
]
},
"sentiment": {
"overview": {
"window": {
"from": "<string>",
"to": "<string>",
"compareFrom": "<string>",
"compareTo": "<string>"
},
"generatedAt": "<string>",
"summary": {
"totalMentions": 123,
"distinctRuns": 123,
"positiveCount": 123,
"negativeCount": 123,
"neutralCount": 123,
"mixedCount": 123,
"positiveShare": 123,
"negativeShare": 123,
"netSentiment": 123,
"ownBrandNegativeMentions": 123,
"competitorPositiveMentions": 123
},
"comparison": {
"totalMentions": 123,
"distinctRuns": 123,
"positiveCount": 123,
"negativeCount": 123,
"neutralCount": 123,
"mixedCount": 123,
"positiveShare": 123,
"negativeShare": 123,
"netSentiment": 123,
"ownBrandNegativeMentions": 123,
"competitorPositiveMentions": 123
}
},
"series": [
{
"bucketDate": "<string>",
"totalMentions": 123,
"positiveCount": 123,
"negativeCount": 123,
"neutralCount": 123,
"mixedCount": 123,
"ownBrandNegativeMentions": 123,
"competitorPositiveMentions": 123
}
],
"evidence": [
{
"mentionId": 123,
"promptRunId": 123,
"promptId": 123,
"promptLabel": "<string>",
"platform": "chatgpt",
"regionCode": "<string>",
"occurredAt": "<string>",
"targetLabel": "<string>",
"targetKind": "workspace_brand",
"competitorId": 123,
"isOwnBrand": true,
"sentiment": "positive",
"aspect": "<string>",
"quote": "<string>",
"quoteStart": 123,
"quoteEnd": 123,
"excerpt": "<string>",
"excerptHighlightStart": 123,
"excerptHighlightEnd": 123,
"position": 123,
"confidence": "<string>"
}
]
},
"sources": [
{
"domain": "<string>",
"citationCount": 123,
"answerCount": 123,
"lastSeenAt": "<string>"
}
],
"groups": [
{
"id": 123,
"name": "<string>",
"answerCount": 123,
"promptCount": 123
}
],
"answers": [
{
"promptRunId": 123,
"promptId": 123,
"promptLabel": "<string>",
"platform": "<string>",
"regionCode": "<string>",
"rank": 123,
"occurredAt": "<string>"
}
],
"generatedAt": "<string>"
}
}Authorizations
WorkspaceKeyBearerKey
A workspace API key. Data endpoints require a service-account key with the specified scopes.
Path Parameters
Brand ID (brd_…).
Query Parameters
Required range:
7 <= x <= 180Response
Successful operation.
Show child attributes
Show child attributes