Read a donor unified interaction timeline
Requires current donor visibility. Email/calendar and manual sections are enabled independently by their flags; imported CRM relationship activities remain available. Legacy and connected-source email rows retain metadata under their current body policy. Legacy local_body/snippet can be null and can_view_body false when current mailbox, program or owner access does not permit reading the body. Authorized message-center legacy rows can resolve the original message body even after it was scrubbed from the activity log. Returns up to ten upcoming calendar events plus recent events, at most 25 combined. Email filters do not filter the separate manual/CRM pagination.
curl --request GET \
--url https://api.gratona.com/v1/donors/{donor_id}/interactions \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.gratona.com/v1/donors/{donor_id}/interactions"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.gratona.com/v1/donors/{donor_id}/interactions', 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.gratona.com/v1/donors/{donor_id}/interactions",
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.gratona.com/v1/donors/{donor_id}/interactions"
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.gratona.com/v1/donors/{donor_id}/interactions")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gratona.com/v1/donors/{donor_id}/interactions")
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": [
{
"local_body": "<string>",
"delivery_state": "<string>",
"legacy_action": "<string>",
"kind": "<string>",
"type": "<string>",
"client_id": 123,
"donor_id": 123,
"email_calendar_account_id": 123,
"account_email": "<string>",
"account_provider": "<string>",
"owner_user_id": 123,
"owner_name": "<string>",
"source": "<string>",
"subject": "<string>",
"from_address": "<string>",
"email_direction": "<string>",
"body_visibility": "<string>",
"match_status": "<string>",
"matched_by": "<string>",
"matched_email": "<string>",
"classification_class": "<string>",
"metadata_visibility": "<string>",
"occurred_at": "2023-11-07T05:31:56Z",
"created_at": "2023-11-07T05:31:56Z",
"snippet": "<string>",
"provider_message_id": "<string>",
"provider_thread_id": "<string>",
"attachment_count": 123,
"subtype": "<string>",
"can_view_body": true,
"can_view_metadata": true,
"can_correct_relationship": true,
"source_deleted": true,
"provider_deleted_at": "2023-11-07T05:31:56Z",
"body_plain": "<string>",
"body_html": "<string>",
"body_fetch_status": "<string>",
"id": 123,
"to_addresses": [
"<string>"
],
"cc_addresses": [
"<string>"
],
"classification_reasons": [
"<string>"
]
}
],
"manual_interactions": [
{
"id": 123,
"kind": "<string>",
"type": "<string>",
"client_id": 123,
"donor_id": 123,
"owner_user_id": 123,
"owner_name": "<string>",
"source": "<string>",
"subject": "<string>",
"body_visibility": "<string>",
"shared_group_id": 123,
"occurred_at": "2023-11-07T05:31:56Z",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"direction": "<string>",
"outcome": "<string>",
"duration_minutes": 123,
"follow_up_at": "2023-11-07T05:31:56Z",
"counts_as_touch": true,
"external_reference": "<string>",
"snippet": "<string>",
"attachment_count": 123,
"can_view_body": true,
"body_plain": "<string>",
"ai_summary": {},
"import": {},
"attachments": [
{
"id": 123,
"filename": "<string>",
"original_filename": "<string>",
"mime_type": "<string>",
"file_size": 123,
"file_path": "<string>",
"download_url": "<string>",
"storage_url": "<string>",
"created_at": "2023-11-07T05:31:56Z"
}
],
"related_event": {
"id": 123,
"name": "<string>",
"status": "<string>",
"starts_at": "2023-11-07T05:31:56Z"
},
"related_tasks": [
{
"id": 123,
"title": "<string>",
"status": "<string>",
"due_date": "2023-12-25",
"version": 123
}
],
"version": "2023-11-07T05:31:56Z"
}
],
"relationship_activities": [
{
"id": 123,
"kind": "<string>",
"type": "<string>",
"client_id": 123,
"donor_id": 123,
"owner_user_id": 123,
"owner_name": "<string>",
"source": "<string>",
"subject": "<string>",
"body_visibility": "<string>",
"shared_group_id": 123,
"occurred_at": "2023-11-07T05:31:56Z",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"direction": "<string>",
"outcome": "<string>",
"duration_minutes": 123,
"follow_up_at": "2023-11-07T05:31:56Z",
"counts_as_touch": true,
"external_reference": "<string>",
"snippet": "<string>",
"attachment_count": 123,
"can_view_body": true,
"body_plain": "<string>",
"ai_summary": {},
"import": {},
"attachments": [
{
"id": 123,
"filename": "<string>",
"original_filename": "<string>",
"mime_type": "<string>",
"file_size": 123,
"file_path": "<string>",
"download_url": "<string>",
"storage_url": "<string>",
"created_at": "2023-11-07T05:31:56Z"
}
],
"related_event": {
"id": 123,
"name": "<string>",
"status": "<string>",
"starts_at": "2023-11-07T05:31:56Z"
},
"related_tasks": [
{
"id": 123,
"title": "<string>",
"status": "<string>",
"due_date": "2023-12-25",
"version": 123
}
],
"version": "2023-11-07T05:31:56Z"
}
],
"manual_pagination": {
"current_page": 123,
"last_page": 123,
"per_page": 123,
"total": 123
},
"calendar_events": [
{
"id": 123,
"email_calendar_account_id": 123,
"provider": "<string>",
"provider_event_id": "<string>",
"title": "<string>",
"description_plain": "<string>",
"location": "<string>",
"organizer_email": "<string>",
"organizer_name": "<string>",
"meeting_url": "<string>",
"start_at": "2023-11-07T05:31:56Z",
"end_at": "2023-11-07T05:31:56Z",
"timezone": "<string>",
"status": "<string>",
"visibility": "<string>",
"can_update": true,
"attendees": [
{}
],
"provider_metadata": {}
}
],
"rollup": {
"last_interaction_at": "2023-11-07T05:31:56Z",
"last_email_at": "2023-11-07T05:31:56Z",
"last_meeting_at": "2023-11-07T05:31:56Z",
"next_meeting_at": "2023-11-07T05:31:56Z",
"relationship_owner_user_id": 123,
"unanswered_inbound_count": 123
},
"pagination": {
"current_page": 123,
"last_page": 123,
"per_page": 123,
"total": 123
},
"filters": {
"accounts": [
{
"id": 123,
"total": 123
}
],
"owners": [
{
"id": 123,
"label": "<string>",
"total": 123
}
],
"attachment_count": 123
}
}{
"message": "Unauthorized",
"status": "error"
}{
"message": "Something went wrong. Please try again.",
"status": "error",
"error": "invalid_request",
"code": "DONOR_NOT_FOUND"
}{
"message": "Not Found",
"status": "error"
}Authorizations
Passport bearer token authentication for legacy admin sessions.
Path Parameters
Donor id.
Query Parameters
Page.
x >= 1Per page.
1 <= x <= 50Manual page.
x >= 1Manual per page.
1 <= x <= 50Search.
Direction.
all, sent, outbound, received, inbound all, google, microsoft, bcc, system or a source substring.
Visibility.
all, shared, private, team, metadata Owner user id.
Account id.
Attachments.
all, with, without Subtype.
Response
Read a donor unified interaction timeline response.
Show child attributes
Show child attributes
- Option 1
- Option 2
Show child attributes
Show child attributes
- Option 1
- Option 2
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
curl --request GET \
--url https://api.gratona.com/v1/donors/{donor_id}/interactions \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.gratona.com/v1/donors/{donor_id}/interactions"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.gratona.com/v1/donors/{donor_id}/interactions', 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.gratona.com/v1/donors/{donor_id}/interactions",
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.gratona.com/v1/donors/{donor_id}/interactions"
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.gratona.com/v1/donors/{donor_id}/interactions")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gratona.com/v1/donors/{donor_id}/interactions")
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": [
{
"local_body": "<string>",
"delivery_state": "<string>",
"legacy_action": "<string>",
"kind": "<string>",
"type": "<string>",
"client_id": 123,
"donor_id": 123,
"email_calendar_account_id": 123,
"account_email": "<string>",
"account_provider": "<string>",
"owner_user_id": 123,
"owner_name": "<string>",
"source": "<string>",
"subject": "<string>",
"from_address": "<string>",
"email_direction": "<string>",
"body_visibility": "<string>",
"match_status": "<string>",
"matched_by": "<string>",
"matched_email": "<string>",
"classification_class": "<string>",
"metadata_visibility": "<string>",
"occurred_at": "2023-11-07T05:31:56Z",
"created_at": "2023-11-07T05:31:56Z",
"snippet": "<string>",
"provider_message_id": "<string>",
"provider_thread_id": "<string>",
"attachment_count": 123,
"subtype": "<string>",
"can_view_body": true,
"can_view_metadata": true,
"can_correct_relationship": true,
"source_deleted": true,
"provider_deleted_at": "2023-11-07T05:31:56Z",
"body_plain": "<string>",
"body_html": "<string>",
"body_fetch_status": "<string>",
"id": 123,
"to_addresses": [
"<string>"
],
"cc_addresses": [
"<string>"
],
"classification_reasons": [
"<string>"
]
}
],
"manual_interactions": [
{
"id": 123,
"kind": "<string>",
"type": "<string>",
"client_id": 123,
"donor_id": 123,
"owner_user_id": 123,
"owner_name": "<string>",
"source": "<string>",
"subject": "<string>",
"body_visibility": "<string>",
"shared_group_id": 123,
"occurred_at": "2023-11-07T05:31:56Z",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"direction": "<string>",
"outcome": "<string>",
"duration_minutes": 123,
"follow_up_at": "2023-11-07T05:31:56Z",
"counts_as_touch": true,
"external_reference": "<string>",
"snippet": "<string>",
"attachment_count": 123,
"can_view_body": true,
"body_plain": "<string>",
"ai_summary": {},
"import": {},
"attachments": [
{
"id": 123,
"filename": "<string>",
"original_filename": "<string>",
"mime_type": "<string>",
"file_size": 123,
"file_path": "<string>",
"download_url": "<string>",
"storage_url": "<string>",
"created_at": "2023-11-07T05:31:56Z"
}
],
"related_event": {
"id": 123,
"name": "<string>",
"status": "<string>",
"starts_at": "2023-11-07T05:31:56Z"
},
"related_tasks": [
{
"id": 123,
"title": "<string>",
"status": "<string>",
"due_date": "2023-12-25",
"version": 123
}
],
"version": "2023-11-07T05:31:56Z"
}
],
"relationship_activities": [
{
"id": 123,
"kind": "<string>",
"type": "<string>",
"client_id": 123,
"donor_id": 123,
"owner_user_id": 123,
"owner_name": "<string>",
"source": "<string>",
"subject": "<string>",
"body_visibility": "<string>",
"shared_group_id": 123,
"occurred_at": "2023-11-07T05:31:56Z",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"direction": "<string>",
"outcome": "<string>",
"duration_minutes": 123,
"follow_up_at": "2023-11-07T05:31:56Z",
"counts_as_touch": true,
"external_reference": "<string>",
"snippet": "<string>",
"attachment_count": 123,
"can_view_body": true,
"body_plain": "<string>",
"ai_summary": {},
"import": {},
"attachments": [
{
"id": 123,
"filename": "<string>",
"original_filename": "<string>",
"mime_type": "<string>",
"file_size": 123,
"file_path": "<string>",
"download_url": "<string>",
"storage_url": "<string>",
"created_at": "2023-11-07T05:31:56Z"
}
],
"related_event": {
"id": 123,
"name": "<string>",
"status": "<string>",
"starts_at": "2023-11-07T05:31:56Z"
},
"related_tasks": [
{
"id": 123,
"title": "<string>",
"status": "<string>",
"due_date": "2023-12-25",
"version": 123
}
],
"version": "2023-11-07T05:31:56Z"
}
],
"manual_pagination": {
"current_page": 123,
"last_page": 123,
"per_page": 123,
"total": 123
},
"calendar_events": [
{
"id": 123,
"email_calendar_account_id": 123,
"provider": "<string>",
"provider_event_id": "<string>",
"title": "<string>",
"description_plain": "<string>",
"location": "<string>",
"organizer_email": "<string>",
"organizer_name": "<string>",
"meeting_url": "<string>",
"start_at": "2023-11-07T05:31:56Z",
"end_at": "2023-11-07T05:31:56Z",
"timezone": "<string>",
"status": "<string>",
"visibility": "<string>",
"can_update": true,
"attendees": [
{}
],
"provider_metadata": {}
}
],
"rollup": {
"last_interaction_at": "2023-11-07T05:31:56Z",
"last_email_at": "2023-11-07T05:31:56Z",
"last_meeting_at": "2023-11-07T05:31:56Z",
"next_meeting_at": "2023-11-07T05:31:56Z",
"relationship_owner_user_id": 123,
"unanswered_inbound_count": 123
},
"pagination": {
"current_page": 123,
"last_page": 123,
"per_page": 123,
"total": 123
},
"filters": {
"accounts": [
{
"id": 123,
"total": 123
}
],
"owners": [
{
"id": 123,
"label": "<string>",
"total": 123
}
],
"attachment_count": 123
}
}{
"message": "Unauthorized",
"status": "error"
}{
"message": "Something went wrong. Please try again.",
"status": "error",
"error": "invalid_request",
"code": "DONOR_NOT_FOUND"
}{
"message": "Not Found",
"status": "error"
}