Read a donor tax-summary contribution projection
Returns one active organization donor statement in organization timezone and resolved jurisdiction period. Omitted year selects the most recent available year, not necessarily the current year. Includes settled positive deductible contributions; fully refunded/nonsettled/zero/non-deductible gifts are excluded, while ambiguous partial refunds/currency/status require review. QCD IRA-owner gifts are retained as non-deductible reconciliation rows. Optional other-owner soft-credit recognition remains separate and never increases deductible totals. Totals remain grouped by currency; no conversion, PDF, email or mutation is performed. Requires permission: one of donors_view, donors_manage, donor-all.
curl --request GET \
--url https://api.gratona.com/v1/admin/tax-summaries/donors/{donor_id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.gratona.com/v1/admin/tax-summaries/donors/{donor_id}"
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/admin/tax-summaries/donors/{donor_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/admin/tax-summaries/donors/{donor_id}",
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/admin/tax-summaries/donors/{donor_id}"
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/admin/tax-summaries/donors/{donor_id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gratona.com/v1/admin/tax-summaries/donors/{donor_id}")
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{
"success": true,
"data": {
"contract_version": "v1",
"statement_status": "ready",
"includes_soft_credits": true,
"soft_credits": [
{
"soft_credit_id": 42,
"donation_id": 42,
"donor_id": 42,
"date": "2026-10-20",
"designation": "Education",
"giver_name": "Jane Donor",
"type": "Soft credit",
"giving_source": "direct",
"giving_source_label": "Direct",
"currency": "$",
"currency_code": "USD",
"amount": "25.00",
"amount_minor": 2500
}
],
"soft_credit_currency_groups": [
{
"currency_code": "USD",
"currency_symbol": "$",
"total_minor": 2500,
"total": "25.00",
"count": 1
}
],
"scope": {
"type": "donor",
"id": 42,
"donor_ids": [
42
]
},
"tax_year": 2026,
"organization_timezone": "Africa/Kampala",
"period": {
"from_utc": "2026-10-20T12:00:00Z",
"until_utc": "2026-10-20T12:00:00Z"
},
"jurisdiction": {
"country_code": "US",
"country_name": "United States",
"supports_qcd": true,
"tax_period_basis": "calendar_year",
"fiscal_year_start_month": 7,
"period_label": "1 January2026 –31 December2026",
"is_configured": true,
"statement_title": "Tax Summary",
"registration_label": "EIN",
"registration_number": "",
"receipt_acknowledgement": "Example",
"page_preset": "us_letter_portrait"
},
"as_of": "2026-10-20T12:00:00Z",
"available_years": [
2026
],
"contributions": [
{
"id": 42,
"donation_id": 42,
"donor_id": 42,
"ira_owner_donor_id": 42,
"date": "2026-10-20",
"type": "Donation",
"designation": "Education",
"designation_name": "Education",
"program_id": 42,
"program_name": "Education program",
"method": "Check",
"method_id": 42,
"currency": "$",
"currency_code": "USD",
"amount": "25.00",
"amount_minor": 2500,
"giving_source": "direct",
"giving_source_label": "Direct",
"is_in_kind": true,
"is_tax_deductible": true,
"in_kind_category": "Example",
"in_kind_category_label": "Example",
"notes": "Example"
}
],
"excluded_contributions": [
{
"id": 42,
"donation_id": 42,
"donor_id": 42,
"ira_owner_donor_id": 42,
"date": "2026-10-20",
"type": "Donation",
"designation": "Education",
"designation_name": "Education",
"program_id": 42,
"program_name": "Education program",
"method": "Check",
"method_id": 42,
"currency": "$",
"currency_code": "USD",
"amount": "25.00",
"amount_minor": 2500,
"giving_source": "direct",
"giving_source_label": "Direct",
"reason": "excluded_non_deductible",
"blocking": true
}
],
"currency_groups": [
{
"currency_code": "USD",
"currency_symbol": "$",
"cash_total": "25.00",
"in_kind_total": "25.00",
"tax_deductible_total": "25.00",
"cash_total_minor": 2500,
"in_kind_total_minor": 2500,
"tax_deductible_total_minor": 2500,
"contribution_count": 1
}
],
"warnings": [
{
"code": "review_required_partial_refund",
"count": 1,
"blocking": true,
"message": "One or more contributions need review."
}
],
"exclusion_counts": {},
"audit_summary": {
"candidate_count": 1,
"included_count": 1,
"excluded_count": 1,
"review_required_count": 1,
"counts_by_reason": {}
},
"fingerprint": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
}
}{
"message": "Unauthorized",
"status": "error"
}{
"message": "Not Found",
"status": "error"
}{
"errors": {},
"status": "error",
"message": "The given data was invalid."
}Authorizations
Passport bearer token authentication for legacy admin sessions.
Path Parameters
Donor id in the current organization.
Query Parameters
Statement period year,1900 through the current year plus one. Omit to select latest available year.
1900 <= x <= 2027Include separate recognition on other-owner gifts; default false.
curl --request GET \
--url https://api.gratona.com/v1/admin/tax-summaries/donors/{donor_id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.gratona.com/v1/admin/tax-summaries/donors/{donor_id}"
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/admin/tax-summaries/donors/{donor_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/admin/tax-summaries/donors/{donor_id}",
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/admin/tax-summaries/donors/{donor_id}"
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/admin/tax-summaries/donors/{donor_id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gratona.com/v1/admin/tax-summaries/donors/{donor_id}")
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{
"success": true,
"data": {
"contract_version": "v1",
"statement_status": "ready",
"includes_soft_credits": true,
"soft_credits": [
{
"soft_credit_id": 42,
"donation_id": 42,
"donor_id": 42,
"date": "2026-10-20",
"designation": "Education",
"giver_name": "Jane Donor",
"type": "Soft credit",
"giving_source": "direct",
"giving_source_label": "Direct",
"currency": "$",
"currency_code": "USD",
"amount": "25.00",
"amount_minor": 2500
}
],
"soft_credit_currency_groups": [
{
"currency_code": "USD",
"currency_symbol": "$",
"total_minor": 2500,
"total": "25.00",
"count": 1
}
],
"scope": {
"type": "donor",
"id": 42,
"donor_ids": [
42
]
},
"tax_year": 2026,
"organization_timezone": "Africa/Kampala",
"period": {
"from_utc": "2026-10-20T12:00:00Z",
"until_utc": "2026-10-20T12:00:00Z"
},
"jurisdiction": {
"country_code": "US",
"country_name": "United States",
"supports_qcd": true,
"tax_period_basis": "calendar_year",
"fiscal_year_start_month": 7,
"period_label": "1 January2026 –31 December2026",
"is_configured": true,
"statement_title": "Tax Summary",
"registration_label": "EIN",
"registration_number": "",
"receipt_acknowledgement": "Example",
"page_preset": "us_letter_portrait"
},
"as_of": "2026-10-20T12:00:00Z",
"available_years": [
2026
],
"contributions": [
{
"id": 42,
"donation_id": 42,
"donor_id": 42,
"ira_owner_donor_id": 42,
"date": "2026-10-20",
"type": "Donation",
"designation": "Education",
"designation_name": "Education",
"program_id": 42,
"program_name": "Education program",
"method": "Check",
"method_id": 42,
"currency": "$",
"currency_code": "USD",
"amount": "25.00",
"amount_minor": 2500,
"giving_source": "direct",
"giving_source_label": "Direct",
"is_in_kind": true,
"is_tax_deductible": true,
"in_kind_category": "Example",
"in_kind_category_label": "Example",
"notes": "Example"
}
],
"excluded_contributions": [
{
"id": 42,
"donation_id": 42,
"donor_id": 42,
"ira_owner_donor_id": 42,
"date": "2026-10-20",
"type": "Donation",
"designation": "Education",
"designation_name": "Education",
"program_id": 42,
"program_name": "Education program",
"method": "Check",
"method_id": 42,
"currency": "$",
"currency_code": "USD",
"amount": "25.00",
"amount_minor": 2500,
"giving_source": "direct",
"giving_source_label": "Direct",
"reason": "excluded_non_deductible",
"blocking": true
}
],
"currency_groups": [
{
"currency_code": "USD",
"currency_symbol": "$",
"cash_total": "25.00",
"in_kind_total": "25.00",
"tax_deductible_total": "25.00",
"cash_total_minor": 2500,
"in_kind_total_minor": 2500,
"tax_deductible_total_minor": 2500,
"contribution_count": 1
}
],
"warnings": [
{
"code": "review_required_partial_refund",
"count": 1,
"blocking": true,
"message": "One or more contributions need review."
}
],
"exclusion_counts": {},
"audit_summary": {
"candidate_count": 1,
"included_count": 1,
"excluded_count": 1,
"review_required_count": 1,
"counts_by_reason": {}
},
"fingerprint": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
}
}{
"message": "Unauthorized",
"status": "error"
}{
"message": "Not Found",
"status": "error"
}{
"errors": {},
"status": "error",
"message": "The given data was invalid."
}