Get a brand's analytics
Visibility, share of voice, the per-model breakdown and the citation totals for one window, in one request.
The long lists — cited domains and URLs, sub-queries, per-prompt results — are endpoints of their own. Everything else is always included.
BearerAuthAuthorizationBearer <token>An organization key (signal_…) created under Organization Settings → API Keys.
brandId*stringBrand identifier.
start*stringInclusive lower bound of the window, an ISO 8601 timestamp such as 2026-01-01T00:00:00Z. Aligned down to the quarter hour, the grain analytics are aggregated at; where a response repeats the window, it repeats the aligned one. A bare YYYY-MM-DD is rejected: that is /prompts/{promptId}/snapshot's spelling and means a local calendar day there.
date-timeend*stringExclusive upper bound of the window, an ISO 8601 timestamp, also aligned down to the quarter hour. The window is half-open: a run at exactly end is outside it. start and end inside one quarter-hour bucket leave an empty window and are rejected.
date-timemodel?stringRestrict to one model, e.g. chatgpt. See GET /models.
Get a brand's analytics
application/json- response
Every non-paginated figure for a brand over one window. There is no parameter for selecting a subset: the computations behind this cover the same prompts and run concurrently, so a subset would save a caller a fraction of one request and cost everyone a parameter to reason about.
brandId*stringbrandName*stringrange*The window the response was computed over, echoed back as the half-open instants it resolved to.
visibility*How often the brand is mentioned at all.
shareOfVoice*The brand against its tracked competitors.
models*array<>Per-model visibility and run counts. Only models that produced a run in the window appear.
sentiment*Experimental — the shape may still change.
The brand's sentiment over the window, with the counts for each day so a client can chart or smooth them.
position*Experimental — the shape may still change.
The brand's position among the tracked companies the answers name, 1 being named first, averaged over the window and per day.
totals*curl -X GET 'https://app.signal.metricshive.com/api/v1/brands/string/analytics?start=2019-08-24T14%3A15%3A22Z&end=2019-08-24T14%3A15%3A22Z'{
"brandId": "string",
"brandName": "string",
"range": {
"start": "2019-08-24T14:15:22Z",
"end": "2019-08-24T14:15:22Z"
},
"visibility": {
"current": 0,
"series": [
{
"date": "2019-08-24",
"visibility": 0
}
]
},
"shareOfVoice": {
"brand": 0,
"entries": [
{
"name": "string",
"isBrand": true,
"mentions": 0,
"prompts": 0,
"share": 0,
"sentiment": {
"positive": 0,
"neutral": 0,
"negative": 0,
"mixed": 0,
"score": 0
},
"position": {
"average": 1
}
}
],
"series": [
{
"date": "2019-08-24",
"share": 0
}
]
},
"models": [
{
"model": "string",
"label": "string",
"runs": 0,
"brandMentions": 0,
"visibility": 0,
"citations": 0,
"sentiment": {
"positive": 0,
"neutral": 0,
"negative": 0,
"mixed": 0,
"score": 0
},
"position": {
"average": 1
}
}
],
"sentiment": {
"positive": 0,
"neutral": 0,
"negative": 0,
"mixed": 0,
"score": 0,
"series": [
{
"date": "2019-08-24",
"positive": 0,
"neutral": 0,
"negative": 0,
"mixed": 0
}
]
},
"position": {
"average": 1,
"series": [
{
"date": "2019-08-24",
"average": 1
}
]
},
"totals": {
"runs": 0,
"prompts": 0,
"citations": 0,
"uniqueDomains": 0,
"uniqueUrls": 0
}
}