Read group visibility, sources and evidence
curl --request GET \
--url https://app.chatobserver.com/api/v2/groups/{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/groups/{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/groups/{id}/analytics"
headers = {"x-chatobserver-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text){
"data": {
"group": {
"id": 123,
"revision": 123,
"name": "<string>",
"description": "<string>",
"colorHex": "<string>",
"pathLabel": "<string>",
"groupType": "funnel_stage",
"directPromptCount": 123,
"totalPromptCount": 123,
"descendants": [
{
"id": 123,
"name": "<string>",
"pathLabel": "<string>",
"promptCount": 123
}
]
},
"window": {
"days": 123,
"from": "<string>",
"to": "<string>"
},
"visibility": {
"answerCount": 123,
"presenceCount": 123,
"presenceRate": 123,
"firstPlaceRate": 123,
"averagePosition": 123,
"points": [
{
"date": "<string>",
"presenceRate": 123,
"firstPlaceRate": 123
}
]
},
"sentiment": {
"positive": 123,
"neutral": 123,
"negative": 123,
"total": 123,
"score": 123
},
"prompts": [
{
"id": 123,
"label": "<string>",
"directMembership": true,
"answerCount": 123,
"visibility": 123
}
],
"sources": [
{
"domain": "<string>",
"citationCount": 123,
"answerCount": 123
}
],
"competitors": [
{
"id": 123,
"label": "<string>",
"primaryDomain": "<string>",
"mentionCount": 123,
"answerCount": 123,
"averagePosition": 123
}
],
"rules": [
{
"id": 123,
"version": 123,
"name": "<string>",
"groupId": 123,
"groupName": "<string>",
"groupType": "funnel_stage",
"conditionType": "contains_any",
"conditionPayload": {
"keywords": [
"<string>"
],
"pattern": "<string>",
"caseSensitive": true,
"negate": true,
"platforms": [
"chatgpt"
],
"regions": [
"<string>"
]
},
"applyOn": [
"prompt_create"
],
"conditionSummary": "<string>",
"status": "draft",
"priority": 123,
"lastPreviewCount": 123,
"lastAppliedVersion": 123,
"lastAppliedAt": "<string>",
"backfill": {
"id": "<string>",
"status": "queued",
"scannedCount": 123,
"matchedCount": 123,
"errorCode": "<string>"
},
"updatedAt": "<string>"
}
],
"answers": [
{
"runId": 123,
"promptId": 123,
"promptLabel": "<string>",
"occurredAt": "<string>"
}
],
"generatedAt": "<string>",
"pagination": {
"pageSize": 123,
"total": 123,
"section": "sources",
"page": 1,
"sort": "default",
"direction": "asc"
}
}
}Prompts
Read group visibility, sources and evidence
Read analytics for the authenticated workspace. Requires group feature access and groups:read for MCP. Use section and page to traverse a group detail table. Supported comparison windows: 7, 30 and 90 days.
GET
/
api
/
v2
/
groups
/
{id}
/
analytics
Read group visibility, sources and evidence
curl --request GET \
--url https://app.chatobserver.com/api/v2/groups/{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/groups/{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/groups/{id}/analytics"
headers = {"x-chatobserver-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text){
"data": {
"group": {
"id": 123,
"revision": 123,
"name": "<string>",
"description": "<string>",
"colorHex": "<string>",
"pathLabel": "<string>",
"groupType": "funnel_stage",
"directPromptCount": 123,
"totalPromptCount": 123,
"descendants": [
{
"id": 123,
"name": "<string>",
"pathLabel": "<string>",
"promptCount": 123
}
]
},
"window": {
"days": 123,
"from": "<string>",
"to": "<string>"
},
"visibility": {
"answerCount": 123,
"presenceCount": 123,
"presenceRate": 123,
"firstPlaceRate": 123,
"averagePosition": 123,
"points": [
{
"date": "<string>",
"presenceRate": 123,
"firstPlaceRate": 123
}
]
},
"sentiment": {
"positive": 123,
"neutral": 123,
"negative": 123,
"total": 123,
"score": 123
},
"prompts": [
{
"id": 123,
"label": "<string>",
"directMembership": true,
"answerCount": 123,
"visibility": 123
}
],
"sources": [
{
"domain": "<string>",
"citationCount": 123,
"answerCount": 123
}
],
"competitors": [
{
"id": 123,
"label": "<string>",
"primaryDomain": "<string>",
"mentionCount": 123,
"answerCount": 123,
"averagePosition": 123
}
],
"rules": [
{
"id": 123,
"version": 123,
"name": "<string>",
"groupId": 123,
"groupName": "<string>",
"groupType": "funnel_stage",
"conditionType": "contains_any",
"conditionPayload": {
"keywords": [
"<string>"
],
"pattern": "<string>",
"caseSensitive": true,
"negate": true,
"platforms": [
"chatgpt"
],
"regions": [
"<string>"
]
},
"applyOn": [
"prompt_create"
],
"conditionSummary": "<string>",
"status": "draft",
"priority": 123,
"lastPreviewCount": 123,
"lastAppliedVersion": 123,
"lastAppliedAt": "<string>",
"backfill": {
"id": "<string>",
"status": "queued",
"scannedCount": 123,
"matchedCount": 123,
"errorCode": "<string>"
},
"updatedAt": "<string>"
}
],
"answers": [
{
"runId": 123,
"promptId": 123,
"promptLabel": "<string>",
"occurredAt": "<string>"
}
],
"generatedAt": "<string>",
"pagination": {
"pageSize": 123,
"total": 123,
"section": "sources",
"page": 1,
"sort": "default",
"direction": "asc"
}
}
}Authorizations
WorkspaceKeyBearerKey
A workspace API key. Data endpoints require a service-account key with the specified scopes.
Path Parameters
Required range:
x >= 1Query Parameters
Available options:
sources, competitors, evidence Required range:
1 <= x <= 100000Available options:
default, name, citations, answers, mentions, position, date Available options:
asc, desc Response
Group analytics.
Show child attributes
Show child attributes