Sources (Hostnames)
curl --request GET \
--url https://app.surfacd.com/api/v1/projects/{project}/sources-data/hostnames \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.surfacd.com/api/v1/projects/{project}/sources-data/hostnames"
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/hostnames', 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/hostnames",
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/hostnames"
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/hostnames")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.surfacd.com/api/v1/projects/{project}/sources-data/hostnames")
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": [
{
"hostname": "<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,
"domain": "<string>"
}
],
"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": {}
}Reporting
Sources (Hostnames)
Paginated list of hostnames (e.g. blog.example.com) cited by AI responses for the project across the date range.
GET
/
api
/
v1
/
projects
/
{project}
/
sources-data
/
hostnames
Sources (Hostnames)
curl --request GET \
--url https://app.surfacd.com/api/v1/projects/{project}/sources-data/hostnames \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.surfacd.com/api/v1/projects/{project}/sources-data/hostnames"
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/hostnames', 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/hostnames",
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/hostnames"
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/hostnames")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.surfacd.com/api/v1/projects/{project}/sources-data/hostnames")
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": [
{
"hostname": "<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,
"domain": "<string>"
}
],
"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.
Available options:
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.
Required range:
1 <= x <= 100Required range:
x >= 1Maximum string length:
255