curl --request GET \
--url https://api.geoptie.com/v1/brands/{id}/citations/domains \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.geoptie.com/v1/brands/{id}/citations/domains"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.geoptie.com/v1/brands/{id}/citations/domains', 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.geoptie.com/v1/brands/{id}/citations/domains",
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://api.geoptie.com/v1/brands/{id}/citations/domains"
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://api.geoptie.com/v1/brands/{id}/citations/domains")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.geoptie.com/v1/brands/{id}/citations/domains")
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": [
{
"domain": "<string>",
"root_domain": "<string>",
"citation_count": 123,
"avg_position": 123,
"citation_share": 123
}
],
"has_more": true,
"next_cursor": "<string>",
"total_count": 123,
"total_citations": 123,
"capped": true
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}Most-cited domains
The domains engines cite most when answering this brand’s prompts, aggregated over the window and ranked by citation count. Top-N rather than paginated: total_count is how many domains matched and capped is true when there are more than this response carries.
curl --request GET \
--url https://api.geoptie.com/v1/brands/{id}/citations/domains \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.geoptie.com/v1/brands/{id}/citations/domains"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.geoptie.com/v1/brands/{id}/citations/domains', 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.geoptie.com/v1/brands/{id}/citations/domains",
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://api.geoptie.com/v1/brands/{id}/citations/domains"
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://api.geoptie.com/v1/brands/{id}/citations/domains")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.geoptie.com/v1/brands/{id}/citations/domains")
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": [
{
"domain": "<string>",
"root_domain": "<string>",
"citation_count": 123,
"avg_position": 123,
"citation_share": 123
}
],
"has_more": true,
"next_cursor": "<string>",
"total_count": 123,
"total_citations": 123,
"capped": true
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}Authorizations
Your API key, e.g. Authorization: Bearer gp_live_....
Path Parameters
Brand id.
Query Parameters
Restrict to one engine. Omit for the all-engine rollup. Stable public engine identifier. Internal model names are never exposed.
chatgpt, claude, perplexity, gemini, google_ai_overviews, google_ai_mode, copilot Restrict to prompts in one topic.
Inclusive start date. Defaults to 30 days before to.
Exclusive end date. Defaults to tomorrow.
How many rows to return, ranked by citation count. Max 2000. There is no paging past this: check capped in the response.
x <= 2000Response
Success
Show child attributes
Show child attributes
Always false: this grain does not page.
Always null: this grain does not page.
How many rows matched in total, before the limit.
Total citations across ALL matching rows. The denominator behind citation_share.
True when total_count exceeds the rows returned, so this is the top N and not the complete set.