Get Citations by URL
curl --request GET \
--url https://api.slatehq.ai/ai-analytics-service/api/public/v1/analytics/citations/urls \
--header 'Authorization: <authorization>'import requests
url = "https://api.slatehq.ai/ai-analytics-service/api/public/v1/analytics/citations/urls"
headers = {"Authorization": "<authorization>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<authorization>'}};
fetch('https://api.slatehq.ai/ai-analytics-service/api/public/v1/analytics/citations/urls', 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://api.slatehq.ai/ai-analytics-service/api/public/v1/analytics/citations/urls",
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: <authorization>"
],
]);
$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://api.slatehq.ai/ai-analytics-service/api/public/v1/analytics/citations/urls"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<authorization>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.slatehq.ai/ai-analytics-service/api/public/v1/analytics/citations/urls")
.header("Authorization", "<authorization>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.slatehq.ai/ai-analytics-service/api/public/v1/analytics/citations/urls")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<authorization>'
response = http.request(request)
puts response.read_body{
"content": [
{
"urlHash": "<string>",
"url": "<string>",
"title": "<string>",
"domain": "<string>",
"citations": 123,
"citationsDelta": 123,
"runsCount": 123,
"avgRank": 123,
"category": "<string>",
"platforms": [
"<string>"
]
}
],
"page": 123,
"size": 123,
"totalElements": 123,
"totalPages": 123,
"first": true,
"last": true,
"empty": true
}Analytics
Get Citations by URL
Retrieve individual cited URLs with citation counts, rank, and category.
GET
/
ai-analytics-service
/
api
/
public
/
v1
/
analytics
/
citations
/
urls
Get Citations by URL
curl --request GET \
--url https://api.slatehq.ai/ai-analytics-service/api/public/v1/analytics/citations/urls \
--header 'Authorization: <authorization>'import requests
url = "https://api.slatehq.ai/ai-analytics-service/api/public/v1/analytics/citations/urls"
headers = {"Authorization": "<authorization>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<authorization>'}};
fetch('https://api.slatehq.ai/ai-analytics-service/api/public/v1/analytics/citations/urls', 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://api.slatehq.ai/ai-analytics-service/api/public/v1/analytics/citations/urls",
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: <authorization>"
],
]);
$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://api.slatehq.ai/ai-analytics-service/api/public/v1/analytics/citations/urls"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<authorization>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.slatehq.ai/ai-analytics-service/api/public/v1/analytics/citations/urls")
.header("Authorization", "<authorization>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.slatehq.ai/ai-analytics-service/api/public/v1/analytics/citations/urls")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<authorization>'
response = http.request(request)
puts response.read_body{
"content": [
{
"urlHash": "<string>",
"url": "<string>",
"title": "<string>",
"domain": "<string>",
"citations": 123,
"citationsDelta": 123,
"runsCount": 123,
"avgRank": 123,
"category": "<string>",
"platforms": [
"<string>"
]
}
],
"page": 123,
"size": 123,
"totalElements": 123,
"totalPages": 123,
"first": true,
"last": true,
"empty": true
}Returns citation data at the individual URL level. Each entry includes the URL, title, domain, citation count, average rank, and category. Results are paginated.
Parameters
string
required
Bearer token. Format:
Bearer slat_<your-token>.integer
Number of days for the analysis window. Range: 1–365. Default:
30.string
Start of date range. RFC 3339 timestamp (e.g.,
2026-02-01T00:00:00Z). Send together with to.string
End of date range. RFC 3339 timestamp. Send together with
from. Data through the end of this date (UTC) is included. The range can’t exceed 366 days.number
Brand ID. If omitted, uses the brand of the workspace’s most recently updated prompt.
number
Filter by topic ID.
string[]
Filter by one or more platforms.
string
Filter by citation category. Values include
OWNED, MENTIONED, COMPETITOR, SOCIAL, NOT_MENTIONED, and OTHER.string
Search by URL, domain, or page title. Case-insensitive partial match.
string
Filter by ISO country code.
integer
Number of results per page. Default:
20. Maximum: 100.integer
Number of results to skip. Default:
0.number
Filter by a single prompt ID.
number[]
Filter by multiple prompt IDs. Maximum 500 values.
Response
Returns200 OK with a paginated list of cited URLs, most-cited URLs first.
object[]
required
Array of citation URL objects.
Show citation URL object
Show citation URL object
string
required
Unique hash for the URL, as a decimal string.
string
required
Full URL of the cited page.
string
Page title.
string
required
Domain of the URL.
integer
required
Number of query runs that cited the URL. Same value as
runsCount.integer
required
Change from previous period.
integer
required
Number of query runs that cited the URL.
number
Average citation rank, rounded to a whole number.
null if no rank was recorded.string
required
Category of the URL’s most recent citation.
string[]
required
Platforms that cited the URL.
integer
required
Current page number (0-indexed), calculated as
offset divided by limit.integer
required
Page size. Equals
limit.integer
required
Total number of URLs matching the filters.
integer
required
Total number of pages.
boolean
required
Whether this is the first page.
boolean
required
Whether this is the last page.
boolean
required
Whether
content is empty.Example
curl -s "https://api.slatehq.ai/ai-analytics-service/api/public/v1/analytics/citations/urls?dateRange=30&topicId=42&category=OWNED&limit=10" \
-H "Authorization: Bearer slat_YOUR_TOKEN"
import requests
response = requests.get(
"https://api.slatehq.ai/ai-analytics-service/api/public/v1/analytics/citations/urls",
headers={
"Authorization": "Bearer slat_YOUR_TOKEN",
},
params={
"dateRange": 30,
"topicId": 42,
"category": "OWNED",
"limit": 10,
},
)
result = response.json()
for u in result["content"]:
print(f"{u['url']}: {u['citations']} citations (rank {u['avgRank']})")
const params = new URLSearchParams({
dateRange: "30",
topicId: "42",
category: "OWNED",
limit: "10",
});
const response = await fetch(
`https://api.slatehq.ai/ai-analytics-service/api/public/v1/analytics/citations/urls?${params}`,
{
headers: {
"Authorization": "Bearer slat_YOUR_TOKEN",
},
}
);
const result = await response.json();
console.log(result.content.length, "URLs,", result.totalElements, "total");
Response
{
"content": [
{
"urlHash": "10483927561230458812",
"url": "https://example.com/pm-tools-comparison",
"title": "Best Project Management Tools 2026",
"domain": "example.com",
"citations": 25,
"citationsDelta": 3,
"runsCount": 25,
"avgRank": 2,
"category": "OWNED",
"platforms": ["CHATGPT", "PERPLEXITY", "GEMINI"]
}
],
"page": 0,
"size": 10,
"totalElements": 120,
"totalPages": 12,
"first": true,
"last": false,
"empty": false
}
Status codes
| Status | Description |
|---|---|
200 | Citation URLs returned. |
400 | A filter is invalid, such as more than 500 promptIds, an unsupported platform, dateRange outside 1–365, or an invalid from/to range. |
401 | Missing or invalid Bearer token. See Authentication. |
500 | Internal server error. |
503 | The analytics store is temporarily unavailable (analytics store unavailable). |
What’s next
- Get Citations by Domain — View citations grouped by domain.
- Get Citations Summary — View citation totals and categories.
Was this page helpful?