List Actions
curl --request GET \
--url https://api.attention.tech/v2/actions \
--header 'Authorization: <api-key>'import requests
url = "https://api.attention.tech/v2/actions"
headers = {"Authorization": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<api-key>'}};
fetch('https://api.attention.tech/v2/actions', 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.attention.tech/v2/actions",
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: <api-key>"
],
]);
$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.attention.tech/v2/actions"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<api-key>")
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.attention.tech/v2/actions")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.attention.tech/v2/actions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": [
{
"uuid": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"entity_type": "account",
"entity_id": "0018c00002ExampleAAA",
"owner_user_uuid": "a1b2c3d4-e5f6-7a8b-9c0d-ef1234567890",
"action_type": "send_email",
"title": "Follow up on the renewal",
"signal_type": "no_reply",
"severity": "medium",
"display_group": "Re-engage",
"subject": "Re: renewal",
"draft_body": "Hi Jane,\n\nFollowing up on the renewal we discussed — do the proposed terms still work on your side?\n\nBest,\nAlex",
"proposed_recipients": [
"jane.doe@example.com"
],
"proposed_slots": [],
"status": "pending",
"external_url": "",
"why": {
"rationale": "No reply in 8 days and the opportunity's close date is this month.",
"key_quote": {
"text": "Let's circle back next week.",
"speaker": "Jane Doe",
"source_label": "Call on 2026-01-08",
"source_url": "https://example.com/conversations/abc123"
},
"evidence": [
{
"label": "No reply in 8 days",
"description": "Last outreach was 8 days ago with no response.",
"impact": "negative",
"source_label": "Email thread",
"source_url": "https://example.com/mail/thread/123"
}
]
},
"generated_at": "2026-01-15T09:00:00.000Z",
"updated_at": "2026-01-15T09:00:00.000Z",
"expires_at": "2026-01-22T09:00:00.000Z"
}
],
"next_cursor": "MjAyNi0wMS0xNVQwOTowMDowMFp8M2ZhODVmNjQtNTcxNy00NTYyLWIzZmMtMmM5NjNmNjZhZmE2"
}{
"id": "not_found_error",
"status": "404",
"code": "404",
"title": "Not Found Error",
"detail": "The requested resource was not found",
"source": {
"pointer": "/data/attributes/id"
}
}{
"id": "not_found_error",
"status": "404",
"code": "404",
"title": "Not Found Error",
"detail": "The requested resource was not found",
"source": {
"pointer": "/data/attributes/id"
}
}Proactive
List Actions
Lists Proactive actions (Next Best Actions), mirroring the action feed users see in the UI.
Scope
- An organization-level API key returns actions for every user in the organization.
- A user-scoped API key returns only that user’s actions; the
owner_uuidfilter is ignored for user-scoped keys.
Filtering
statusdefaults topending. Pass one or more ofpending,drafted,sent,dismissed,expiredto widen the set. Suppressed actions are never returned.owner_uuidnarrows the result to a single owner (organization-level keys only).
Pagination
- Cursor-based. Omit
cursorfor the first page; pass the response’snext_cursorunchanged for the next. Whennext_cursoris absent, iteration is complete. sizeis clamped to a server-side maximum of 200 (default 50).
GET
/
actions
List Actions
curl --request GET \
--url https://api.attention.tech/v2/actions \
--header 'Authorization: <api-key>'import requests
url = "https://api.attention.tech/v2/actions"
headers = {"Authorization": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<api-key>'}};
fetch('https://api.attention.tech/v2/actions', 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.attention.tech/v2/actions",
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: <api-key>"
],
]);
$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.attention.tech/v2/actions"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<api-key>")
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.attention.tech/v2/actions")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.attention.tech/v2/actions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": [
{
"uuid": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"entity_type": "account",
"entity_id": "0018c00002ExampleAAA",
"owner_user_uuid": "a1b2c3d4-e5f6-7a8b-9c0d-ef1234567890",
"action_type": "send_email",
"title": "Follow up on the renewal",
"signal_type": "no_reply",
"severity": "medium",
"display_group": "Re-engage",
"subject": "Re: renewal",
"draft_body": "Hi Jane,\n\nFollowing up on the renewal we discussed — do the proposed terms still work on your side?\n\nBest,\nAlex",
"proposed_recipients": [
"jane.doe@example.com"
],
"proposed_slots": [],
"status": "pending",
"external_url": "",
"why": {
"rationale": "No reply in 8 days and the opportunity's close date is this month.",
"key_quote": {
"text": "Let's circle back next week.",
"speaker": "Jane Doe",
"source_label": "Call on 2026-01-08",
"source_url": "https://example.com/conversations/abc123"
},
"evidence": [
{
"label": "No reply in 8 days",
"description": "Last outreach was 8 days ago with no response.",
"impact": "negative",
"source_label": "Email thread",
"source_url": "https://example.com/mail/thread/123"
}
]
},
"generated_at": "2026-01-15T09:00:00.000Z",
"updated_at": "2026-01-15T09:00:00.000Z",
"expires_at": "2026-01-22T09:00:00.000Z"
}
],
"next_cursor": "MjAyNi0wMS0xNVQwOTowMDowMFp8M2ZhODVmNjQtNTcxNy00NTYyLWIzZmMtMmM5NjNmNjZhZmE2"
}{
"id": "not_found_error",
"status": "404",
"code": "404",
"title": "Not Found Error",
"detail": "The requested resource was not found",
"source": {
"pointer": "/data/attributes/id"
}
}{
"id": "not_found_error",
"status": "404",
"code": "404",
"title": "Not Found Error",
"detail": "The requested resource was not found",
"source": {
"pointer": "/data/attributes/id"
}
}Authorizations
Query Parameters
Filter to a single owner user UUID. Only honored for organization-level API keys; ignored for user-scoped keys.
Lifecycle statuses to include. Defaults to pending only. Suppressed actions are never returned.
Available options:
pending, drafted, sent, dismissed, expired Opaque pagination cursor from a previous response's next_cursor. Omit for the first page.
Maximum number of actions to return per page (default 50, max 200)
Required range:
1 <= x <= 200Was this page helpful?