curl --request GET \
--url https://atollhq.com/api/orgs/{id}/agents/{agentId}/heartbeat-policy \
--header 'Authorization: Bearer <token>'import requests
url = "https://atollhq.com/api/orgs/{id}/agents/{agentId}/heartbeat-policy"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://atollhq.com/api/orgs/{id}/agents/{agentId}/heartbeat-policy', 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://atollhq.com/api/orgs/{id}/agents/{agentId}/heartbeat-policy",
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://atollhq.com/api/orgs/{id}/agents/{agentId}/heartbeat-policy"
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://atollhq.com/api/orgs/{id}/agents/{agentId}/heartbeat-policy")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://atollhq.com/api/orgs/{id}/agents/{agentId}/heartbeat-policy")
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{
"agent": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"display_name": "<string>",
"avatar_url": "<string>"
},
"status": "default",
"is_default": true,
"saved_policy": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"org_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"agent_member_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"created_by_member_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"updated_by_member_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"sections": "<unknown>",
"signal_categories": "<unknown>",
"project_ids": "<unknown>",
"initiative_ids": "<unknown>",
"columns": "<unknown>"
},
"effective_policy": {
"sections": {
"goals": true,
"standalone_kpis": true,
"standalone_initiatives": true,
"assigned_issues": true,
"project_context": true,
"signals": true,
"attention": true
},
"signal_categories": {
"task": true,
"initiative": true,
"kpi": true,
"project": true
},
"project_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"initiative_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"columns": [
{
"project_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"column_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
]
},
"selectable": {
"projects": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>"
}
],
"initiatives": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"project_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
]
}
],
"columns": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"project_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"key": "<string>",
"label": "<string>",
"position": 123
}
]
},
"stale_selections": {
"project_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"initiative_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"columns": "<unknown>"
}
}{
"error": "Unauthorized",
"code": "unauthorized"
}{
"error": "Unauthorized",
"code": "unauthorized"
}Read an agent heartbeat policy
Returns the saved policy, a sanitized editable effective policy, selectable accessible scope, and stale selections for an agent the authenticated human can manage. Saved stale IDs remain fail-closed until the sanitized policy is saved.
curl --request GET \
--url https://atollhq.com/api/orgs/{id}/agents/{agentId}/heartbeat-policy \
--header 'Authorization: Bearer <token>'import requests
url = "https://atollhq.com/api/orgs/{id}/agents/{agentId}/heartbeat-policy"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://atollhq.com/api/orgs/{id}/agents/{agentId}/heartbeat-policy', 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://atollhq.com/api/orgs/{id}/agents/{agentId}/heartbeat-policy",
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://atollhq.com/api/orgs/{id}/agents/{agentId}/heartbeat-policy"
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://atollhq.com/api/orgs/{id}/agents/{agentId}/heartbeat-policy")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://atollhq.com/api/orgs/{id}/agents/{agentId}/heartbeat-policy")
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{
"agent": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"display_name": "<string>",
"avatar_url": "<string>"
},
"status": "default",
"is_default": true,
"saved_policy": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"org_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"agent_member_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"created_by_member_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"updated_by_member_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"sections": "<unknown>",
"signal_categories": "<unknown>",
"project_ids": "<unknown>",
"initiative_ids": "<unknown>",
"columns": "<unknown>"
},
"effective_policy": {
"sections": {
"goals": true,
"standalone_kpis": true,
"standalone_initiatives": true,
"assigned_issues": true,
"project_context": true,
"signals": true,
"attention": true
},
"signal_categories": {
"task": true,
"initiative": true,
"kpi": true,
"project": true
},
"project_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"initiative_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"columns": [
{
"project_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"column_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
]
},
"selectable": {
"projects": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>"
}
],
"initiatives": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"project_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
]
}
],
"columns": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"project_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"key": "<string>",
"label": "<string>",
"position": 123
}
]
},
"stale_selections": {
"project_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"initiative_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"columns": "<unknown>"
}
}{
"error": "Unauthorized",
"code": "unauthorized"
}{
"error": "Unauthorized",
"code": "unauthorized"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Response
Heartbeat policy management response
Show child attributes
Show child attributes
default, customized Persisted policy. Stale focus IDs remain here so saved previews and real heartbeats fail closed until the sanitized editable policy is saved.
Show child attributes
Show child attributes
Sanitized editable form with stale selections removed.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Focus IDs retained by the saved runtime policy but removed from the editable effective policy.
Show child attributes
Show child attributes

