curl --request GET \
--url https://app.surfacd.com/api/v1/projects/{project}/reputation/narratives \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.surfacd.com/api/v1/projects/{project}/reputation/narratives"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.surfacd.com/api/v1/projects/{project}/reputation/narratives', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.surfacd.com/api/v1/projects/{project}/reputation/narratives",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://app.surfacd.com/api/v1/projects/{project}/reputation/narratives"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://app.surfacd.com/api/v1/projects/{project}/reputation/narratives")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.surfacd.com/api/v1/projects/{project}/reputation/narratives")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": [
{
"uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"label": "<string>",
"description": "<string>",
"sentiment": "positive",
"response_share": 123,
"first_seen_at": "2023-11-07T05:31:56Z",
"last_seen_at": "2023-11-07T05:31:56Z",
"sparkline": [
{
"date": "2023-11-07T05:31:56Z",
"count": 123,
"positive_count": 123,
"negative_count": 123,
"neutral_count": 123
}
],
"theme": {
"uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"label": "<string>"
},
"services": [
{
"name": "<string>",
"display_name": "<string>"
}
],
"previous_response_share": 123,
"momentum": "emerging"
}
],
"meta": {
"current_page": 123,
"last_page": 123,
"per_page": 123,
"total": 123,
"from": 123,
"links": [
{
"url": "<string>",
"label": "<string>",
"active": true
}
],
"path": "<string>",
"to": 123
},
"links": {
"first": "<string>",
"last": "<string>",
"prev": "<string>",
"next": "<string>"
}
}{
"message": "<string>"
}{
"message": "<string>",
"errors": {}
}List Narratives
Paginated list of reputation narratives (recurring storylines) for the project across the date range.
curl --request GET \
--url https://app.surfacd.com/api/v1/projects/{project}/reputation/narratives \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.surfacd.com/api/v1/projects/{project}/reputation/narratives"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.surfacd.com/api/v1/projects/{project}/reputation/narratives', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.surfacd.com/api/v1/projects/{project}/reputation/narratives",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://app.surfacd.com/api/v1/projects/{project}/reputation/narratives"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://app.surfacd.com/api/v1/projects/{project}/reputation/narratives")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.surfacd.com/api/v1/projects/{project}/reputation/narratives")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": [
{
"uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"label": "<string>",
"description": "<string>",
"sentiment": "positive",
"response_share": 123,
"first_seen_at": "2023-11-07T05:31:56Z",
"last_seen_at": "2023-11-07T05:31:56Z",
"sparkline": [
{
"date": "2023-11-07T05:31:56Z",
"count": 123,
"positive_count": 123,
"negative_count": 123,
"neutral_count": 123
}
],
"theme": {
"uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"label": "<string>"
},
"services": [
{
"name": "<string>",
"display_name": "<string>"
}
],
"previous_response_share": 123,
"momentum": "emerging"
}
],
"meta": {
"current_page": 123,
"last_page": 123,
"per_page": 123,
"total": 123,
"from": 123,
"links": [
{
"url": "<string>",
"label": "<string>",
"active": true
}
],
"path": "<string>",
"to": 123
},
"links": {
"first": "<string>",
"last": "<string>",
"prev": "<string>",
"next": "<string>"
}
}{
"message": "<string>"
}{
"message": "<string>",
"errors": {}
}Authorizations
Team API key created in Team Settings. Use it with URLs for the same team.
Path Parameters
Project UUID.
Query Parameters
Must be on or after start_date.
Tag UUID or name filters. Repeat as tags[]=<uuid-or-name>. Discover tags with GET /api/v1/projects/{project}/tags.
AI platform provider filters such as chatgpt or perplexity. Repeat as services[]=<provider>. Discover providers with GET /api/v1/platforms.
Country code filters such as US or GB. Repeat as countries[]=<code>. Discover codes with GET /api/v1/countries.
Topic UUID or name filters. Use no_topic for prompts without a topic. Repeat as topics[]=<uuid-or-name>. Discover topics with GET /api/v1/projects/{project}/topics.
Prompt UUID filter.
Brand UUID to scope the reputation data to. Must belong to the project. Defaults to the project's primary brand; when the project has no primary brand an explicit brand is required. Discover brand UUIDs with GET /api/v1/projects/{project}/brands.
Sentiment filters. Repeat as sentiments[]=<sentiment>.
The sentiment valence of a mention or narrative.
positive, negative, neutral Momentum filters: one or more bands (emerging, surging, steady, cooling, dormant) or named groups — rising (surging or emerging), fading (cooling or dormant), active (anything not fading). Repeat as trajectory[]=<band>; a single trajectory=<band> is also accepted.
emerging, surging, steady, cooling, dormant, rising, fading, active Sort order. Defaults to mentions. movement sorts by the change in response share versus the previous period.
mentions, recent, sentiment, first_seen, movement Theme UUID filters. Repeat as theme_ids[]=<uuid>.
Free-text search over narrative labels and descriptions.
64Results per page, 1-100. Defaults to 10.
1 <= x <= 100Page number. Defaults to 1.
x >= 1