curl --request GET \
--url https://api.surfais.com/v1/orgs/{orgId}/brands/summary \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.surfais.com/v1/orgs/{orgId}/brands/summary"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.surfais.com/v1/orgs/{orgId}/brands/summary', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"data": [
{
"brand_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"domain": "<string>",
"external_ref": "<string>",
"latest": {
"date": "2023-12-25",
"score": 123,
"score_version": "<string>",
"panel_version": "<string>"
},
"previous": {
"date": "2023-12-25",
"score": 123,
"score_version": "<string>",
"panel_version": "<string>"
},
"delta": 123,
"delta_reason": "score_version_mismatch",
"avg_sentiment": 123,
"sov": 123,
"last_scan_at": "2023-11-07T05:31:56Z",
"last_scan_run_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"changed_at": "2023-11-07T05:31:56Z"
}
],
"pagination": {
"next_cursor": "<string>",
"has_more": true
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
},
"request_id": "<string>"
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
},
"request_id": "<string>"
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
},
"request_id": "<string>"
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
},
"request_id": "<string>"
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
},
"request_id": "<string>"
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
},
"request_id": "<string>"
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
},
"request_id": "<string>"
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
},
"request_id": "<string>"
}List brand summaries
One-call rollup of every own brand.
Latest and previous AIS Score with delta, mean sentiment and share of voice on the latest date, and scan freshness — one row per own (non-archived) brand. No organisation composite is invented; aggregate client-side. sov = the brand’s mentions ÷ (its own + its competitors’) on its latest scored date, with BOTH HALVES COUNTED ON THIS BRAND’S OWN completed, non-preview runs that date rather than off any score row: those carry no record of which own brand it was scored for and hold whichever (own brand, candidate) pairing scored them last, which reaches the brand’s own numerator too, since a competitor link is a link between BRANDS. Each point reports BOTH generations it was produced under — score_version (the scoring formula) and panel_version (the model set that measured it) — and delta is WITHHELD, with the case in delta_reason, whenever the two points do not agree on both.
curl --request GET \
--url https://api.surfais.com/v1/orgs/{orgId}/brands/summary \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.surfais.com/v1/orgs/{orgId}/brands/summary"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.surfais.com/v1/orgs/{orgId}/brands/summary', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"data": [
{
"brand_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"domain": "<string>",
"external_ref": "<string>",
"latest": {
"date": "2023-12-25",
"score": 123,
"score_version": "<string>",
"panel_version": "<string>"
},
"previous": {
"date": "2023-12-25",
"score": 123,
"score_version": "<string>",
"panel_version": "<string>"
},
"delta": 123,
"delta_reason": "score_version_mismatch",
"avg_sentiment": 123,
"sov": 123,
"last_scan_at": "2023-11-07T05:31:56Z",
"last_scan_run_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"changed_at": "2023-11-07T05:31:56Z"
}
],
"pagination": {
"next_cursor": "<string>",
"has_more": true
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
},
"request_id": "<string>"
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
},
"request_id": "<string>"
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
},
"request_id": "<string>"
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
},
"request_id": "<string>"
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
},
"request_id": "<string>"
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
},
"request_id": "<string>"
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
},
"request_id": "<string>"
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
},
"request_id": "<string>"
}Authorizations
A Surfais API key — an organisation key or a partner key. Issued by Surfais; shown once. Rotate by creating a new key, then revoking the old one.
Path Parameters
Organisation id. Org keys: the key's own org. Partner keys: any org with an active link. Anything else is 404.
^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$Query Parameters
Page size (1–200). Default 50.
1 <= x <= 200Opaque cursor from a previous page's pagination.next_cursor. It pins the walk — its sort anchor, the resolved date window and the FILTERS the first page ran under — so continue with the cursor alone: omitted filters are restored from it. Naming a different value for one of them is 400 invalid_cursor (details.reason = "filter_changed", details.parameter the one that differs); start again from the first page to change a filter.
2048