Email Calendar
Promote or exclude an owned email candidate
Requires email/calendar availability and the email intelligence v2 workspace rollout. Review and body operations are private to the current mailbox owner and current preview generation under the active privacy policy. Promote requires donor_id, interactions_manage and access to that donor form. Current policy and account state are checked before promotion. Exclude records the owner decision. Neither action changes mailbox ownership or body sharing.
PATCH
/
email-calendar
/
review
/
{ingress_id}
Promote or exclude an owned email candidate
curl --request PATCH \
--url https://api.gratona.com/v1/email-calendar/review/{ingress_id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"donor_id": 123
}
'import requests
url = "https://api.gratona.com/v1/email-calendar/review/{ingress_id}"
payload = { "donor_id": 123 }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({donor_id: 123})
};
fetch('https://api.gratona.com/v1/email-calendar/review/{ingress_id}', 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/email-calendar/review/{ingress_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'donor_id' => 123
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.gratona.com/v1/email-calendar/review/{ingress_id}"
payload := strings.NewReader("{\n \"donor_id\": 123\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.gratona.com/v1/email-calendar/review/{ingress_id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"donor_id\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gratona.com/v1/email-calendar/review/{ingress_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"donor_id\": 123\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": 123,
"account_id": 123,
"provider": "<string>",
"mail_source": "<string>",
"direction": "<string>",
"subject": "<string>",
"from": "<string>",
"occurred_at": "2023-11-07T05:31:56Z",
"has_attachments": true,
"status": "<string>",
"to": [
"<string>"
],
"cc": [
"<string>"
],
"classification": {
"class": "<string>",
"disposition": "<string>",
"reasons": [
"<string>"
],
"matched_donor_ids": [
123
],
"matched_donors": [
{
"id": 123,
"name": "<string>",
"email": "<string>"
}
]
},
"body": {
"status": "<string>",
"purge_after": "2023-11-07T05:31:56Z"
}
}
}{
"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"
}{
"message": "Something went wrong. Please try again.",
"status": "error",
"error": "invalid_request",
"code": "DONOR_NOT_FOUND"
}{
"errors": {},
"status": "error",
"message": "The given data was invalid."
}Authorizations
bearerAuthapiKeyAuth
Passport bearer token authentication for legacy admin sessions.
Path Parameters
Ingress id.
Body
application/json
Request fields accepted by this operation. Omitted optional properties retain the behavior described above.
Response
Promote or exclude an owned email candidate response.
Show child attributes
Show child attributes
⌘I
Promote or exclude an owned email candidate
curl --request PATCH \
--url https://api.gratona.com/v1/email-calendar/review/{ingress_id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"donor_id": 123
}
'import requests
url = "https://api.gratona.com/v1/email-calendar/review/{ingress_id}"
payload = { "donor_id": 123 }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({donor_id: 123})
};
fetch('https://api.gratona.com/v1/email-calendar/review/{ingress_id}', 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/email-calendar/review/{ingress_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'donor_id' => 123
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.gratona.com/v1/email-calendar/review/{ingress_id}"
payload := strings.NewReader("{\n \"donor_id\": 123\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.gratona.com/v1/email-calendar/review/{ingress_id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"donor_id\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gratona.com/v1/email-calendar/review/{ingress_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"donor_id\": 123\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": 123,
"account_id": 123,
"provider": "<string>",
"mail_source": "<string>",
"direction": "<string>",
"subject": "<string>",
"from": "<string>",
"occurred_at": "2023-11-07T05:31:56Z",
"has_attachments": true,
"status": "<string>",
"to": [
"<string>"
],
"cc": [
"<string>"
],
"classification": {
"class": "<string>",
"disposition": "<string>",
"reasons": [
"<string>"
],
"matched_donor_ids": [
123
],
"matched_donors": [
{
"id": 123,
"name": "<string>",
"email": "<string>"
}
]
},
"body": {
"status": "<string>",
"purge_after": "2023-11-07T05:31:56Z"
}
}
}{
"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"
}{
"message": "Something went wrong. Please try again.",
"status": "error",
"error": "invalid_request",
"code": "DONOR_NOT_FOUND"
}{
"errors": {},
"status": "error",
"message": "The given data was invalid."
}