curl --request GET \
--url https://app.surfacd.com/api/v1/projects/{project}/sources-data/domains \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.surfacd.com/api/v1/projects/{project}/sources-data/domains"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.surfacd.com/api/v1/projects/{project}/sources-data/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://app.surfacd.com/api/v1/projects/{project}/sources-data/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://app.surfacd.com/api/v1/projects/{project}/sources-data/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://app.surfacd.com/api/v1/projects/{project}/sources-data/domains")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.surfacd.com/api/v1/projects/{project}/sources-data/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>",
"citations_count": 123,
"avg_rank": 123,
"rank": 123,
"total_responses": 123,
"response_count": 123,
"response_percentage": 123,
"brand_coverage": {
"mine_present": true,
"mine_sentiment": "positive",
"competitor_count": 123,
"analysed_pages": 123,
"mine_pages": 123,
"is_gap": true,
"mentioned_brands": [
{
"uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"domain": "<string>"
}
]
},
"category": "ugc",
"category_label": "<string>",
"previous_rank": 123,
"previous_citations_count": 123
}
],
"meta": {
"current_page": 123,
"last_page": 123,
"per_page": 123,
"total": 123,
"from": 123,
"links": [
{
"url": "<string>",
"label": "<string>",
"active": true
}
],
"path": "<string>",
"to": 123
},
"links": {
"first": "<string>",
"last": "<string>",
"prev": "<string>",
"next": "<string>"
}
}{
"message": "<string>",
"errors": {}
}Sources (Domains)
Paginated list of domains cited by AI responses for the project across the date range. Each row includes citation count, rank, optional category, and comparison fields versus the previous period.
curl --request GET \
--url https://app.surfacd.com/api/v1/projects/{project}/sources-data/domains \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.surfacd.com/api/v1/projects/{project}/sources-data/domains"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.surfacd.com/api/v1/projects/{project}/sources-data/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://app.surfacd.com/api/v1/projects/{project}/sources-data/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://app.surfacd.com/api/v1/projects/{project}/sources-data/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://app.surfacd.com/api/v1/projects/{project}/sources-data/domains")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.surfacd.com/api/v1/projects/{project}/sources-data/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>",
"citations_count": 123,
"avg_rank": 123,
"rank": 123,
"total_responses": 123,
"response_count": 123,
"response_percentage": 123,
"brand_coverage": {
"mine_present": true,
"mine_sentiment": "positive",
"competitor_count": 123,
"analysed_pages": 123,
"mine_pages": 123,
"is_gap": true,
"mentioned_brands": [
{
"uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"domain": "<string>"
}
]
},
"category": "ugc",
"category_label": "<string>",
"previous_rank": 123,
"previous_citations_count": 123
}
],
"meta": {
"current_page": 123,
"last_page": 123,
"per_page": 123,
"total": 123,
"from": 123,
"links": [
{
"url": "<string>",
"label": "<string>",
"active": true
}
],
"path": "<string>",
"to": 123
},
"links": {
"first": "<string>",
"last": "<string>",
"prev": "<string>",
"next": "<string>"
}
}{
"message": "<string>",
"errors": {}
}Authorizations
Team API key created in Team Settings. Use it with URLs for the same team.
Path Parameters
Project UUID.
Query Parameters
Tag UUID or name filters. Discover tags with GET /api/v1/projects/{project}/tags.
AI platform provider filters such as chatgpt or perplexity. Discover providers with GET /api/v1/platforms.
Country code filters such as US or GB. Discover codes with GET /api/v1/countries.
Domain category enum filters. Discover values with GET /api/v1/domain-categories.
ugc, editorial, corporate, reference, academic, analyst, institutional, other Prompt UUID filter.
Topic UUID or name filters. Use no_topic for prompts without a topic. Discover topics with GET /api/v1/projects/{project}/topics.
1 <= x <= 100x >= 1255