curl --request GET \
--url https://data.otterly.ai/v1/reports/brand/{reportId}/citations \
--header 'Authorization: Bearer <token>'import requests
url = "https://data.otterly.ai/v1/reports/brand/{reportId}/citations"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://data.otterly.ai/v1/reports/brand/{reportId}/citations', 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://data.otterly.ai/v1/reports/brand/{reportId}/citations",
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://data.otterly.ai/v1/reports/brand/{reportId}/citations"
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://data.otterly.ai/v1/reports/brand/{reportId}/citations")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://data.otterly.ai/v1/reports/brand/{reportId}/citations")
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{
"items": [
{
"url": "https://www.adidas.com/us/running",
"domain": "adidas.com",
"title": "Adidas Running Shoes & Apparel",
"citations": 7469,
"prompts": [],
"isMyBrandDomain": true,
"competitors": [
{
"brand": "Nike"
},
{
"brand": "Asics"
},
{
"brand": "New Balance"
}
],
"brandMentioned": 1,
"domainCategory": "Brand"
}
],
"paging": {
"limit": 25,
"offset": 0,
"hasMore": true
}
}{
"message": "Validation failed",
"target": "query",
"errors": [
{
"path": "country",
"message": "Required",
"code": "invalid_type"
}
]
}{
"message": "Report not found"
}{
"message": "Report not found"
}{
"message": "Report not found"
}List citations for a brand report
curl --request GET \
--url https://data.otterly.ai/v1/reports/brand/{reportId}/citations \
--header 'Authorization: Bearer <token>'import requests
url = "https://data.otterly.ai/v1/reports/brand/{reportId}/citations"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://data.otterly.ai/v1/reports/brand/{reportId}/citations', 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://data.otterly.ai/v1/reports/brand/{reportId}/citations",
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://data.otterly.ai/v1/reports/brand/{reportId}/citations"
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://data.otterly.ai/v1/reports/brand/{reportId}/citations")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://data.otterly.ai/v1/reports/brand/{reportId}/citations")
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{
"items": [
{
"url": "https://www.adidas.com/us/running",
"domain": "adidas.com",
"title": "Adidas Running Shoes & Apparel",
"citations": 7469,
"prompts": [],
"isMyBrandDomain": true,
"competitors": [
{
"brand": "Nike"
},
{
"brand": "Asics"
},
{
"brand": "New Balance"
}
],
"brandMentioned": 1,
"domainCategory": "Brand"
}
],
"paging": {
"limit": 25,
"offset": 0,
"hasMore": true
}
}{
"message": "Validation failed",
"target": "query",
"errors": [
{
"path": "country",
"message": "Required",
"code": "invalid_type"
}
]
}{
"message": "Report not found"
}{
"message": "Report not found"
}{
"message": "Report not found"
}Authorizations
Provide your API key as a Bearer token: Authorization: Bearer YOUR_API_KEY.
Path Parameters
Brand report identifier.
1"01HX7K2YV9D3M8N0G6Q5R4S3T2"
Query Parameters
Start date for the citations window (inclusive).
1"2025-01-01"
End date for the citations window (inclusive).
1"2025-01-31"
Country code to filter citations by. Lowercase ISO 3166-1 alpha-2; use uk for the United Kingdom.
1"us"
Optional. AI engine(s) to filter by. Repeat the param or pass a single value.
chatgpt, google, perplexity, copilot, google_ai_mode, gemini, claude "chatgpt"
Optional. Filter citations by tag id.
Optional. Filter citations to specific domains.
Optional. Free-text search.
Optional. Zero-based offset for pagination; must be a multiple of limit. Defaults to 0.
Optional. Maximum number of items to return, up to 1000. Defaults to 25. For more rows, page with offset.
Optional. Field to sort by.
Optional. Sort direction.
asc, desc Optional. Filter citations where the brand is mentioned.
Optional. Filter by one or more competitor brand names.
Optional. Domain category/categories to filter by. Repeat the param or pass a single value.
Social Media, Community/Forum, Brand, Encyclopedia, News/Media, Blogs/Personal Sites, Government/NGO, Education, Video, Competitor, Others, Unclassified "News/Media"