curl --request GET \
--url https://devtune.ai/api/v2/projects/{projectId}/traffic/visits-per-answer-fetch \
--header 'Authorization: Bearer <token>'import requests
url = "https://devtune.ai/api/v2/projects/{projectId}/traffic/visits-per-answer-fetch"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://devtune.ai/api/v2/projects/{projectId}/traffic/visits-per-answer-fetch', 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://devtune.ai/api/v2/projects/{projectId}/traffic/visits-per-answer-fetch",
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://devtune.ai/api/v2/projects/{projectId}/traffic/visits-per-answer-fetch"
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://devtune.ai/api/v2/projects/{projectId}/traffic/visits-per-answer-fetch")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://devtune.ai/api/v2/projects/{projectId}/traffic/visits-per-answer-fetch")
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": {
"items": [
{
"domain": "<string>",
"pagePath": "<string>",
"answerFetches": 1,
"aiReferralVisits": 1,
"visitsPerAnswerFetch": 1,
"coverage": "covered",
"referralSource": "<string>"
}
],
"summary": {
"aiReferralVisits": 1,
"answerFetches": 1,
"referralSource": "<string>",
"visitsPerAnswerFetch": 1
},
"summaryWithheldReason": "partial_coverage",
"excludedAnswerFetches": 1,
"pageLimit": 100,
"pageLimitReached": true,
"pagination": {
"hasMore": true,
"nextCursor": "<string>",
"pageSize": 50,
"totalCount": 50
},
"window": {
"dateFrom": "2023-12-25",
"dateTo": "2023-12-25"
},
"windowDays": 7
},
"meta": {
"timestamp": "2023-11-07T05:31:56Z",
"projectId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
}{
"error": "<string>",
"message": "<string>",
"status": 123,
"reason": "<string>",
"details": {}
}{
"error": "<string>",
"message": "<string>",
"status": 123,
"reason": "<string>",
"details": {}
}{
"error": "<string>",
"message": "<string>",
"status": 123,
"reason": "<string>",
"details": {}
}{
"error": "<string>",
"message": "<string>",
"status": 123,
"reason": "<string>",
"details": {}
}{
"error": "<string>",
"message": "<string>",
"status": 123,
"reason": "<string>",
"details": {}
}Get visits per answer fetch
Returns AI-referred visits per answer fetch for each page and for the whole project, over completed UTC days ending yesterday. An answer fetch is an AI system retrieving the page while building an answer; it is not a citation. A page is covered only when its visits come from GA4 or PostHog and that provider has synced the whole window; snippet-sourced pages and unsynced pages are no_referral_data, with visits and the ratio null, never 0. The project total is returned only when fewer than 100 pages had activity and all are covered; otherwise summary is null and summaryWithheldReason says why. Covered pages are ranked by visits per answer fetch, highest first, with pages that have no ratio after them; pages without complete referral data follow, by answer fetches. Up to 100 pages.
curl --request GET \
--url https://devtune.ai/api/v2/projects/{projectId}/traffic/visits-per-answer-fetch \
--header 'Authorization: Bearer <token>'import requests
url = "https://devtune.ai/api/v2/projects/{projectId}/traffic/visits-per-answer-fetch"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://devtune.ai/api/v2/projects/{projectId}/traffic/visits-per-answer-fetch', 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://devtune.ai/api/v2/projects/{projectId}/traffic/visits-per-answer-fetch",
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://devtune.ai/api/v2/projects/{projectId}/traffic/visits-per-answer-fetch"
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://devtune.ai/api/v2/projects/{projectId}/traffic/visits-per-answer-fetch")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://devtune.ai/api/v2/projects/{projectId}/traffic/visits-per-answer-fetch")
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": {
"items": [
{
"domain": "<string>",
"pagePath": "<string>",
"answerFetches": 1,
"aiReferralVisits": 1,
"visitsPerAnswerFetch": 1,
"coverage": "covered",
"referralSource": "<string>"
}
],
"summary": {
"aiReferralVisits": 1,
"answerFetches": 1,
"referralSource": "<string>",
"visitsPerAnswerFetch": 1
},
"summaryWithheldReason": "partial_coverage",
"excludedAnswerFetches": 1,
"pageLimit": 100,
"pageLimitReached": true,
"pagination": {
"hasMore": true,
"nextCursor": "<string>",
"pageSize": 50,
"totalCount": 50
},
"window": {
"dateFrom": "2023-12-25",
"dateTo": "2023-12-25"
},
"windowDays": 7
},
"meta": {
"timestamp": "2023-11-07T05:31:56Z",
"projectId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
}{
"error": "<string>",
"message": "<string>",
"status": 123,
"reason": "<string>",
"details": {}
}{
"error": "<string>",
"message": "<string>",
"status": 123,
"reason": "<string>",
"details": {}
}{
"error": "<string>",
"message": "<string>",
"status": 123,
"reason": "<string>",
"details": {}
}{
"error": "<string>",
"message": "<string>",
"status": 123,
"reason": "<string>",
"details": {}
}{
"error": "<string>",
"message": "<string>",
"status": 123,
"reason": "<string>",
"details": {}
}Authorizations
API key with dtk_live_ prefix. Obtain it from API Keys in the account sidebar. New keys start with all supported scopes selected for the chosen project, and you can narrow them to specific read/write scopes as needed.
Path Parameters
Query Parameters
Fixed window of completed UTC days ending yesterday. Supported values: 7, 30, 90. Defaults to 30.
7, 30, 90 Opaque cursor from the previous response; cursors expire after ~48 hours.
Results per page. Capped at 100.
1 <= x <= 100