Get a post's agent reach
curl --request GET \
--url https://api.usenotra.com/v1/posts/{postId}/agent-reach \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.usenotra.com/v1/posts/{postId}/agent-reach"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.usenotra.com/v1/posts/{postId}/agent-reach', 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.usenotra.com/v1/posts/{postId}/agent-reach",
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.usenotra.com/v1/posts/{postId}/agent-reach"
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.usenotra.com/v1/posts/{postId}/agent-reach")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.usenotra.com/v1/posts/{postId}/agent-reach")
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{
"organization": {
"id": "<string>",
"slug": "<string>",
"name": "<string>",
"logo": "<string>"
},
"agentReach": {
"postId": "<string>",
"siteId": "<string>",
"path": "/blog/launch",
"url": "https://example.com/blog/launch",
"configured": true,
"totals": {
"crawled": 123,
"cited": 123,
"referred": 123,
"total": 123
},
"sources": [
{
"source": "<string>",
"visitorType": "crawler",
"agent": "<string>",
"category": "<string>",
"confidence": "<string>",
"visits": 123,
"markdownVisits": 123,
"paths": 123,
"lastSeenAt": "<string>",
"previousVisits": 123,
"previousMarkdownVisits": 123,
"previousPaths": 123
}
],
"points": [
{
"day": "<string>",
"visitorType": "crawler",
"source": "<string>",
"visits": 123
}
]
}
}{
"error": "<string>",
"code": "<string>",
"recovery": "<string>"
}{
"error": "<string>",
"code": "<string>",
"recovery": "<string>"
}{
"error": "<string>",
"code": "<string>",
"recovery": "<string>"
}{
"error": "<string>",
"code": "<string>",
"recovery": "<string>"
}{
"error": "<string>",
"code": "<string>",
"recovery": "<string>"
}{
"error": "<string>",
"code": "<string>",
"recovery": "<string>"
}{
"error": "<string>",
"code": "<string>",
"recovery": "<string>"
}{
"error": "<string>",
"code": "<string>",
"recovery": "<string>"
}Get a post's agent reach
Returns AI crawler, citation and referral visits to the post’s live page on its Notra Site, including its Markdown copy. Defaults to the last 30 days. agentReach is null when the post isn’t live on a Site.
GET
/
v1
/
posts
/
{postId}
/
agent-reach
Get a post's agent reach
curl --request GET \
--url https://api.usenotra.com/v1/posts/{postId}/agent-reach \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.usenotra.com/v1/posts/{postId}/agent-reach"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.usenotra.com/v1/posts/{postId}/agent-reach', 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.usenotra.com/v1/posts/{postId}/agent-reach",
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.usenotra.com/v1/posts/{postId}/agent-reach"
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.usenotra.com/v1/posts/{postId}/agent-reach")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.usenotra.com/v1/posts/{postId}/agent-reach")
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{
"organization": {
"id": "<string>",
"slug": "<string>",
"name": "<string>",
"logo": "<string>"
},
"agentReach": {
"postId": "<string>",
"siteId": "<string>",
"path": "/blog/launch",
"url": "https://example.com/blog/launch",
"configured": true,
"totals": {
"crawled": 123,
"cited": 123,
"referred": 123,
"total": 123
},
"sources": [
{
"source": "<string>",
"visitorType": "crawler",
"agent": "<string>",
"category": "<string>",
"confidence": "<string>",
"visits": 123,
"markdownVisits": 123,
"paths": 123,
"lastSeenAt": "<string>",
"previousVisits": 123,
"previousMarkdownVisits": 123,
"previousPaths": 123
}
],
"points": [
{
"day": "<string>",
"visitorType": "crawler",
"source": "<string>",
"visits": 123
}
]
}
}{
"error": "<string>",
"code": "<string>",
"recovery": "<string>"
}{
"error": "<string>",
"code": "<string>",
"recovery": "<string>"
}{
"error": "<string>",
"code": "<string>",
"recovery": "<string>"
}{
"error": "<string>",
"code": "<string>",
"recovery": "<string>"
}{
"error": "<string>",
"code": "<string>",
"recovery": "<string>"
}{
"error": "<string>",
"code": "<string>",
"recovery": "<string>"
}{
"error": "<string>",
"code": "<string>",
"recovery": "<string>"
}{
"error": "<string>",
"code": "<string>",
"recovery": "<string>"
}Authorizations
Send your API key in the Authorization header as Bearer API_KEY. Account API keys work in every workspace you belong to: send X-Notra-Organization-Id with the workspace id or slug to choose one. Workspace endpoints require it when you belong to more than one workspace; GET /v1/me/workspaces works without it. Organization keys only accept their own workspace there.
Path Parameters
Minimum string length:
1Pattern:
^[A-Za-z0-9_-]{1,100}$Example:
"post_123"
Query Parameters
Rolling window size in days. Ignored when from/to are set.
Required range:
1 <= x <= 365Pattern:
^\d{4}-\d{2}-\d{2}$Example:
"2026-01-31"
Pattern:
^\d{4}-\d{2}-\d{2}$Example:
"2026-01-31"
Was this page helpful?