Citation Rank Analysis
curl --request GET \
--url https://server.promptwatch.com/api/v2/citations/rank-analysis \
--header 'X-API-Key: <api-key>'import requests
url = "https://server.promptwatch.com/api/v2/citations/rank-analysis"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://server.promptwatch.com/api/v2/citations/rank-analysis', 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://server.promptwatch.com/api/v2/citations/rank-analysis",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$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://server.promptwatch.com/api/v2/citations/rank-analysis"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://server.promptwatch.com/api/v2/citations/rank-analysis")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://server.promptwatch.com/api/v2/citations/rank-analysis")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"timeSeries": [
{
"date": "2026-03-14T00:00:00.000Z",
"totalCitations": 20,
"averageRank": 2.4,
"bestRank": 1,
"worstRank": 5,
"citationsWithRank": 18
},
{
"date": "2026-03-15T00:00:00.000Z",
"totalCitations": 22,
"averageRank": 2.1,
"bestRank": 1,
"worstRank": 6,
"citationsWithRank": 20
}
],
"overallAverageRank": 2.25,
"lastRank": 2.1
}Citations
Citation Rank Analysis
Get citation rank analysis for your domain over time
GET
/
citations
/
rank-analysis
Citation Rank Analysis
curl --request GET \
--url https://server.promptwatch.com/api/v2/citations/rank-analysis \
--header 'X-API-Key: <api-key>'import requests
url = "https://server.promptwatch.com/api/v2/citations/rank-analysis"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://server.promptwatch.com/api/v2/citations/rank-analysis', 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://server.promptwatch.com/api/v2/citations/rank-analysis",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$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://server.promptwatch.com/api/v2/citations/rank-analysis"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://server.promptwatch.com/api/v2/citations/rank-analysis")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://server.promptwatch.com/api/v2/citations/rank-analysis")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"timeSeries": [
{
"date": "2026-03-14T00:00:00.000Z",
"totalCitations": 20,
"averageRank": 2.4,
"bestRank": 1,
"worstRank": 5,
"citationsWithRank": 18
},
{
"date": "2026-03-15T00:00:00.000Z",
"totalCitations": 22,
"averageRank": 2.1,
"bestRank": 1,
"worstRank": 6,
"citationsWithRank": 20
}
],
"overallAverageRank": 2.25,
"lastRank": 2.1
}Authorizations
API key for authentication. Get yours from the Promptwatch dashboard under Settings > API Keys.
Query Parameters
Start date for citation data (YYYY-MM-DD). Max range 90 days.
End date for citation data (YYYY-MM-DD). Max range 90 days.
Filter by LLM models. Repeat for multiple
Filter by specific prompt ID
Filter by specific LLM monitor ID
Filter by prompt type. Repeat for multiple
Available options:
ORGANIC, BRAND_SPECIFIC, COMPETITOR_COMPARISON Time range grouping
Available options:
DAILY, WEEKLY, MONTHLY Time granularity for grouping data
Available options:
daily, weekly, monthly Maximum number of domains to include (for domain over time endpoint)
Required range:
1 <= x <= 50Filter by domains. Repeat for multiple
If true, always include the project's own brand domain (even with 0 citations)