One tracked competitor in detail
curl --request GET \
--url https://api.geoptie.com/v1/brands/{id}/competitors/{competitorId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.geoptie.com/v1/brands/{id}/competitors/{competitorId}"
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}/competitors/{competitorId}', 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}/competitors/{competitorId}",
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}/competitors/{competitorId}"
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}/competitors/{competitorId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.geoptie.com/v1/brands/{id}/competitors/{competitorId}")
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": {
"from": "2023-12-25",
"to": "2023-12-25",
"previous_from": "2023-12-25",
"previous_to": "2023-12-25",
"engine": "<string>",
"competitor": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"brand_name": "<string>",
"aliases": [
"<string>"
],
"domains": [
"<string>"
],
"history_from": "2023-12-25",
"tracked_since": "2023-11-07T05:31:56Z",
"totals": {
"responses_answered": 123,
"responses_with_brand": 123,
"mention_count": 123,
"citation_count": 123,
"detection_rate": 123,
"visibility_score": 123,
"avg_position": 123,
"avg_sentiment": 123,
"top3_visibility": 123,
"win_rate": 123,
"share_of_voice": 123
},
"previous": {
"responses_answered": 123,
"responses_with_brand": 123,
"mention_count": 123,
"citation_count": 123,
"detection_rate": 123,
"visibility_score": 123,
"avg_position": 123,
"avg_sentiment": 123,
"top3_visibility": 123,
"win_rate": 123,
"share_of_voice": 123
}
},
"brand": {
"brand_name": "<string>",
"totals": {
"responses_answered": 123,
"responses_with_brand": 123,
"mention_count": 123,
"citation_count": 123,
"detection_rate": 123,
"visibility_score": 123,
"avg_position": 123,
"avg_sentiment": 123,
"top3_visibility": 123,
"win_rate": 123,
"share_of_voice": 123
},
"previous": {
"responses_answered": 123,
"responses_with_brand": 123,
"mention_count": 123,
"citation_count": 123,
"detection_rate": 123,
"visibility_score": 123,
"avg_position": 123,
"avg_sentiment": 123,
"top3_visibility": 123,
"win_rate": 123,
"share_of_voice": 123
}
},
"breakdown": "engine",
"rows": [
{
"engine": "<string>",
"topic_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"topic_name": "<string>",
"prompt_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"prompt_text": "<string>",
"competitor": {
"responses_answered": 123,
"responses_with_brand": 123,
"mention_count": 123,
"citation_count": 123,
"detection_rate": 123,
"visibility_score": 123,
"avg_position": 123,
"avg_sentiment": 123,
"top3_visibility": 123,
"win_rate": 123,
"share_of_voice": 123
},
"brand": {
"responses_answered": 123,
"responses_with_brand": 123,
"mention_count": 123,
"citation_count": 123,
"detection_rate": 123,
"visibility_score": 123,
"avg_position": 123,
"avg_sentiment": 123,
"top3_visibility": 123,
"win_rate": 123,
"share_of_voice": 123
}
}
]
}
}{
"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>"
}
}Competitors
One tracked competitor in detail
A tracked competitor against your brand: totals for the window and for the window of the same length before it, plus one breakdown by engine, topic or prompt. The same numbers as the competitor view in the dashboard.
GET
/
v1
/
brands
/
{id}
/
competitors
/
{competitorId}
One tracked competitor in detail
curl --request GET \
--url https://api.geoptie.com/v1/brands/{id}/competitors/{competitorId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.geoptie.com/v1/brands/{id}/competitors/{competitorId}"
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}/competitors/{competitorId}', 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}/competitors/{competitorId}",
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}/competitors/{competitorId}"
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}/competitors/{competitorId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.geoptie.com/v1/brands/{id}/competitors/{competitorId}")
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": {
"from": "2023-12-25",
"to": "2023-12-25",
"previous_from": "2023-12-25",
"previous_to": "2023-12-25",
"engine": "<string>",
"competitor": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"brand_name": "<string>",
"aliases": [
"<string>"
],
"domains": [
"<string>"
],
"history_from": "2023-12-25",
"tracked_since": "2023-11-07T05:31:56Z",
"totals": {
"responses_answered": 123,
"responses_with_brand": 123,
"mention_count": 123,
"citation_count": 123,
"detection_rate": 123,
"visibility_score": 123,
"avg_position": 123,
"avg_sentiment": 123,
"top3_visibility": 123,
"win_rate": 123,
"share_of_voice": 123
},
"previous": {
"responses_answered": 123,
"responses_with_brand": 123,
"mention_count": 123,
"citation_count": 123,
"detection_rate": 123,
"visibility_score": 123,
"avg_position": 123,
"avg_sentiment": 123,
"top3_visibility": 123,
"win_rate": 123,
"share_of_voice": 123
}
},
"brand": {
"brand_name": "<string>",
"totals": {
"responses_answered": 123,
"responses_with_brand": 123,
"mention_count": 123,
"citation_count": 123,
"detection_rate": 123,
"visibility_score": 123,
"avg_position": 123,
"avg_sentiment": 123,
"top3_visibility": 123,
"win_rate": 123,
"share_of_voice": 123
},
"previous": {
"responses_answered": 123,
"responses_with_brand": 123,
"mention_count": 123,
"citation_count": 123,
"detection_rate": 123,
"visibility_score": 123,
"avg_position": 123,
"avg_sentiment": 123,
"top3_visibility": 123,
"win_rate": 123,
"share_of_voice": 123
}
},
"breakdown": "engine",
"rows": [
{
"engine": "<string>",
"topic_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"topic_name": "<string>",
"prompt_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"prompt_text": "<string>",
"competitor": {
"responses_answered": 123,
"responses_with_brand": 123,
"mention_count": 123,
"citation_count": 123,
"detection_rate": 123,
"visibility_score": 123,
"avg_position": 123,
"avg_sentiment": 123,
"top3_visibility": 123,
"win_rate": 123,
"share_of_voice": 123
},
"brand": {
"responses_answered": 123,
"responses_with_brand": 123,
"mention_count": 123,
"citation_count": 123,
"detection_rate": 123,
"visibility_score": 123,
"avg_position": 123,
"avg_sentiment": 123,
"top3_visibility": 123,
"win_rate": 123,
"share_of_voice": 123
}
}
]
}
}{
"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.
Tracked competitor id.
Query Parameters
Restrict to one engine. Omit for the all-engine rollup. Stable public engine identifier. Internal model names are never exposed.
Available options:
chatgpt, claude, perplexity, gemini, google_ai_overviews, google_ai_mode, copilot Inclusive start date. Defaults to 30 days before to.
Exclusive end date. Defaults to tomorrow.
Which dimension to break the window down by.
Available options:
engine, topic, prompt Response
Success
Show child attributes
Show child attributes