Fundraising
Acknowledge a fundraising gift
Records acknowledgement evidence for one readable organization gift and closes matching acknowledgement Work. Do Not Acknowledge gifts are rejected. The operation records work already performed and does not send a receipt. Requires permission: one of donations.
POST
/
admin
/
donation
/
{donation_id}
/
acknowledge
Acknowledge a fundraising gift
curl --request POST \
--url https://api.gratona.com/v1/admin/donation/{donation_id}/acknowledge \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"source": "Source",
"note": "Discuss the next update with the program team."
}
'import requests
url = "https://api.gratona.com/v1/admin/donation/{donation_id}/acknowledge"
payload = {
"source": "Source",
"note": "Discuss the next update with the program team."
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({source: 'Source', note: 'Discuss the next update with the program team.'})
};
fetch('https://api.gratona.com/v1/admin/donation/{donation_id}/acknowledge', 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/admin/donation/{donation_id}/acknowledge",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'source' => 'Source',
'note' => 'Discuss the next update with the program team.'
]),
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/admin/donation/{donation_id}/acknowledge"
payload := strings.NewReader("{\n \"source\": \"Source\",\n \"note\": \"Discuss the next update with the program team.\"\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.gratona.com/v1/admin/donation/{donation_id}/acknowledge")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"source\": \"Source\",\n \"note\": \"Discuss the next update with the program team.\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gratona.com/v1/admin/donation/{donation_id}/acknowledge")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"source\": \"Source\",\n \"note\": \"Discuss the next update with the program team.\"\n}"
response = http.request(request)
puts response.read_body{
"status": "success",
"data": {
"updated_count": 2,
"items": [
{
"id": 42,
"donor_id": 42,
"acknowledged_at": "2026-10-20T12:00:00Z",
"acknowledged_by_user_id": 42,
"acknowledgement_source": "Example"
}
]
}
}{
"message": "Unauthorized",
"status": "error"
}{
"message": "Not Found",
"status": "error"
}{
"errors": {},
"status": "error",
"message": "The given data was invalid."
}Authorizations
bearerAuthapiKeyAuth
Passport bearer token authentication for legacy admin sessions.
Path Parameters
Donation id in the current organization.
Body
application/json
Validated request fields for this operation.
⌘I
Acknowledge a fundraising gift
curl --request POST \
--url https://api.gratona.com/v1/admin/donation/{donation_id}/acknowledge \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"source": "Source",
"note": "Discuss the next update with the program team."
}
'import requests
url = "https://api.gratona.com/v1/admin/donation/{donation_id}/acknowledge"
payload = {
"source": "Source",
"note": "Discuss the next update with the program team."
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({source: 'Source', note: 'Discuss the next update with the program team.'})
};
fetch('https://api.gratona.com/v1/admin/donation/{donation_id}/acknowledge', 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/admin/donation/{donation_id}/acknowledge",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'source' => 'Source',
'note' => 'Discuss the next update with the program team.'
]),
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/admin/donation/{donation_id}/acknowledge"
payload := strings.NewReader("{\n \"source\": \"Source\",\n \"note\": \"Discuss the next update with the program team.\"\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.gratona.com/v1/admin/donation/{donation_id}/acknowledge")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"source\": \"Source\",\n \"note\": \"Discuss the next update with the program team.\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gratona.com/v1/admin/donation/{donation_id}/acknowledge")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"source\": \"Source\",\n \"note\": \"Discuss the next update with the program team.\"\n}"
response = http.request(request)
puts response.read_body{
"status": "success",
"data": {
"updated_count": 2,
"items": [
{
"id": 42,
"donor_id": 42,
"acknowledged_at": "2026-10-20T12:00:00Z",
"acknowledged_by_user_id": 42,
"acknowledgement_source": "Example"
}
]
}
}{
"message": "Unauthorized",
"status": "error"
}{
"message": "Not Found",
"status": "error"
}{
"errors": {},
"status": "error",
"message": "The given data was invalid."
}