curl --request GET \
--url https://atollhq.com/api/orgs/{id}/heartbeat \
--header 'Authorization: Bearer <token>'import requests
url = "https://atollhq.com/api/orgs/{id}/heartbeat"
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}/heartbeat', 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}/heartbeat",
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}/heartbeat"
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}/heartbeat")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://atollhq.com/api/orgs/{id}/heartbeat")
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": {},
"timestamp": "2023-11-07T05:31:56Z",
"mode": "compact",
"attention_items": [
{
"id": "notification-uuid",
"event_type": "comment.added",
"severity": "action_required",
"title": "New reply requires attention",
"resource_type": "issue",
"ack_endpoint": "/api/orgs/org-uuid/notifications/notification-uuid/ack"
}
],
"attention_summary": {
"mentions": 1,
"assignments": 1,
"blockers": 1,
"total_unread": 1
},
"execution_attention": {
"resolved_unread": [
{
"attention_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "open",
"attention_version": 2,
"kind": "approval",
"title": "<string>",
"issue_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"issue_identifier": "<string>",
"project_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"execution_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"execution_state": "needs_human",
"execution_state_version": 2,
"detail_endpoint": "<string>",
"execution_state_version_at_request": 2,
"request_summary": "<string>",
"target_type": "member",
"requested_at": "2023-11-07T05:31:56Z"
}
],
"open": [
{
"attention_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "open",
"attention_version": 2,
"kind": "approval",
"title": "<string>",
"issue_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"issue_identifier": "<string>",
"project_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"execution_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"execution_state": "needs_human",
"execution_state_version": 2,
"detail_endpoint": "<string>",
"execution_state_version_at_request": 2,
"request_summary": "<string>",
"target_type": "member",
"requested_at": "2023-11-07T05:31:56Z"
}
]
},
"execution_attention_summary": {
"resolved_unread": 1,
"open": 1,
"total": 1
},
"signals": [
{
"key": "<string>",
"revision": "<string>",
"severity": "info",
"kind": "signal",
"action_reason": "<string>",
"root_entity": {
"id": "<string>",
"type": "<string>",
"title": "<string>"
},
"affected_issue_count": 1,
"affected_project_count": 1,
"direct_downstream_count": 1,
"downstream_count": 1,
"ready_if_released_count": 1,
"oldest_at": "2023-11-07T05:31:56Z",
"newest_at": "2023-11-07T05:31:56Z",
"escalation_level": 1,
"evidence": [
"<string>"
],
"readiness": "ready",
"suggested_read": {
"transport": "rest",
"method": "GET",
"path": "<string>",
"command": "<string>",
"tool": "<string>",
"arguments": {}
}
}
],
"recommended_action": {},
"counts": {
"actionable_groups": 1,
"critical": 1,
"warning": 1,
"info": 1,
"direct_blocked": 1,
"downstream_blocked": 1,
"ready_if_released": 1,
"unknown_readiness": 1,
"restricted": 1,
"suppressed_expected_waits": 1
},
"delta": {
"since": "<string>",
"new_count": 1,
"changed_count": 1,
"escalated_count": 1,
"ready_count": 1,
"suppressed_unchanged": 1,
"suppressed_expected_waits": 1,
"reset_required": true
},
"page": {
"max_bytes": 8704,
"max_items": 13,
"returned_count": 1,
"returned_bytes": 1,
"has_more": true,
"next_cursor": "<string>",
"ack_cursor": "<string>",
"returned_attention_count": 1,
"returned_execution_attention_count": 1,
"returned_signal_count": 1
}
}{
"error": "Unauthorized",
"code": "unauthorized"
}{
"error": "Unauthorized",
"code": "unauthorized"
}{
"error": "Unauthorized",
"code": "unauthorized"
}{
"error": "Unauthorized",
"code": "unauthorized"
}{
"error": "Unauthorized",
"code": "unauthorized"
}{
"error": "Heartbeat response cannot fit requested byte budget",
"code": "heartbeat_budget_too_small",
"max_bytes": 1024,
"recovery": "Retry with a larger max_bytes value or omit max_bytes to use the default budget."
}{
"error": "Unauthorized",
"code": "unauthorized"
}Heartbeat summary for the authenticated agent
Returns compact project-access-filtered heartbeat delivery by default for REST and private CLI/MCP callers. Compact pages are bounded to 25 groups and 16,384 UTF-8 bytes, use opaque cursors, and return an acknowledgement cursor only on the terminal page. Compact attention items are bounded projections; a max_bytes budget that cannot fit the mandatory actionable record and envelope returns 413 heartbeat_budget_too_small without advancing a cursor or terminal receipt. Use view=full for the legacy full response. The public plugin MCP keeps legacy full mode.
curl --request GET \
--url https://atollhq.com/api/orgs/{id}/heartbeat \
--header 'Authorization: Bearer <token>'import requests
url = "https://atollhq.com/api/orgs/{id}/heartbeat"
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}/heartbeat', 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}/heartbeat",
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}/heartbeat"
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}/heartbeat")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://atollhq.com/api/orgs/{id}/heartbeat")
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": {},
"timestamp": "2023-11-07T05:31:56Z",
"mode": "compact",
"attention_items": [
{
"id": "notification-uuid",
"event_type": "comment.added",
"severity": "action_required",
"title": "New reply requires attention",
"resource_type": "issue",
"ack_endpoint": "/api/orgs/org-uuid/notifications/notification-uuid/ack"
}
],
"attention_summary": {
"mentions": 1,
"assignments": 1,
"blockers": 1,
"total_unread": 1
},
"execution_attention": {
"resolved_unread": [
{
"attention_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "open",
"attention_version": 2,
"kind": "approval",
"title": "<string>",
"issue_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"issue_identifier": "<string>",
"project_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"execution_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"execution_state": "needs_human",
"execution_state_version": 2,
"detail_endpoint": "<string>",
"execution_state_version_at_request": 2,
"request_summary": "<string>",
"target_type": "member",
"requested_at": "2023-11-07T05:31:56Z"
}
],
"open": [
{
"attention_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "open",
"attention_version": 2,
"kind": "approval",
"title": "<string>",
"issue_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"issue_identifier": "<string>",
"project_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"execution_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"execution_state": "needs_human",
"execution_state_version": 2,
"detail_endpoint": "<string>",
"execution_state_version_at_request": 2,
"request_summary": "<string>",
"target_type": "member",
"requested_at": "2023-11-07T05:31:56Z"
}
]
},
"execution_attention_summary": {
"resolved_unread": 1,
"open": 1,
"total": 1
},
"signals": [
{
"key": "<string>",
"revision": "<string>",
"severity": "info",
"kind": "signal",
"action_reason": "<string>",
"root_entity": {
"id": "<string>",
"type": "<string>",
"title": "<string>"
},
"affected_issue_count": 1,
"affected_project_count": 1,
"direct_downstream_count": 1,
"downstream_count": 1,
"ready_if_released_count": 1,
"oldest_at": "2023-11-07T05:31:56Z",
"newest_at": "2023-11-07T05:31:56Z",
"escalation_level": 1,
"evidence": [
"<string>"
],
"readiness": "ready",
"suggested_read": {
"transport": "rest",
"method": "GET",
"path": "<string>",
"command": "<string>",
"tool": "<string>",
"arguments": {}
}
}
],
"recommended_action": {},
"counts": {
"actionable_groups": 1,
"critical": 1,
"warning": 1,
"info": 1,
"direct_blocked": 1,
"downstream_blocked": 1,
"ready_if_released": 1,
"unknown_readiness": 1,
"restricted": 1,
"suppressed_expected_waits": 1
},
"delta": {
"since": "<string>",
"new_count": 1,
"changed_count": 1,
"escalated_count": 1,
"ready_count": 1,
"suppressed_unchanged": 1,
"suppressed_expected_waits": 1,
"reset_required": true
},
"page": {
"max_bytes": 8704,
"max_items": 13,
"returned_count": 1,
"returned_bytes": 1,
"has_more": true,
"next_cursor": "<string>",
"ack_cursor": "<string>",
"returned_attention_count": 1,
"returned_execution_attention_count": 1,
"returned_signal_count": 1
}
}{
"error": "Unauthorized",
"code": "unauthorized"
}{
"error": "Unauthorized",
"code": "unauthorized"
}{
"error": "Unauthorized",
"code": "unauthorized"
}{
"error": "Unauthorized",
"code": "unauthorized"
}{
"error": "Unauthorized",
"code": "unauthorized"
}{
"error": "Heartbeat response cannot fit requested byte budget",
"code": "heartbeat_budget_too_small",
"max_bytes": 1024,
"recovery": "Retry with a larger max_bytes value or omit max_bytes to use the default budget."
}{
"error": "Unauthorized",
"code": "unauthorized"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
id identifier
Query Parameters
compact, full Acknowledged compact cursor used to calculate a delta.
Opaque compact page cursor.
1 <= x <= 251024 <= x <= 16384Response
Successful response
- Option 1
- Option 2
"compact"Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes

