curl --request GET \
--url https://app.surfacd.com/api/v1/projects/{project}/sources-data/urls \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.surfacd.com/api/v1/projects/{project}/sources-data/urls"
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/urls', 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/urls",
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/urls"
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/urls")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.surfacd.com/api/v1/projects/{project}/sources-data/urls")
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": [
{
"url": "<string>",
"title": "<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>"
}
]
},
"page_type": "homepage",
"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": {}
}Sources (URLs)
Paginated list of individual URLs cited by AI responses for the project. Supply either domain or hostname to scope to citations under that source; if both are sent, hostname wins.
curl --request GET \
--url https://app.surfacd.com/api/v1/projects/{project}/sources-data/urls \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.surfacd.com/api/v1/projects/{project}/sources-data/urls"
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/urls', 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/urls",
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/urls"
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/urls")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.surfacd.com/api/v1/projects/{project}/sources-data/urls")
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": [
{
"url": "<string>",
"title": "<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>"
}
]
},
"page_type": "homepage",
"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.
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.
Scope results to URLs under this domain. Ignored when hostname is also provided.
Scope results to URLs under this hostname. Takes precedence over domain.
1 <= x <= 100x >= 1255