Donors
Link reciprocal donor contacts
Creates the forward and reverse donor-contact links using their independent relationship labels. Both donors must be active in this organization, and payload primary must match the route donor. Donors in the same nonempty household cannot be external related contacts. Identical existing links are retained.
POST
/
admin
/
donors
/
{donor_id}
/
relationships
Link reciprocal donor contacts
curl --request POST \
--url https://api.gratona.com/v1/admin/donors/{donor_id}/relationships \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"donor_id": 42,
"primary": 42,
"relationship": "Spouse",
"primary_relationship": "Spouse"
}
'import requests
url = "https://api.gratona.com/v1/admin/donors/{donor_id}/relationships"
payload = {
"donor_id": 42,
"primary": 42,
"relationship": "Spouse",
"primary_relationship": "Spouse"
}
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({
donor_id: 42,
primary: 42,
relationship: 'Spouse',
primary_relationship: 'Spouse'
})
};
fetch('https://api.gratona.com/v1/admin/donors/{donor_id}/relationships', 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/donors/{donor_id}/relationships",
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([
'donor_id' => 42,
'primary' => 42,
'relationship' => 'Spouse',
'primary_relationship' => 'Spouse'
]),
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/donors/{donor_id}/relationships"
payload := strings.NewReader("{\n \"donor_id\": 42,\n \"primary\": 42,\n \"relationship\": \"Spouse\",\n \"primary_relationship\": \"Spouse\"\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/donors/{donor_id}/relationships")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"donor_id\": 42,\n \"primary\": 42,\n \"relationship\": \"Spouse\",\n \"primary_relationship\": \"Spouse\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gratona.com/v1/admin/donors/{donor_id}/relationships")
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 \"donor_id\": 42,\n \"primary\": 42,\n \"relationship\": \"Spouse\",\n \"primary_relationship\": \"Spouse\"\n}"
response = http.request(request)
puts response.read_body{
"status": true
}{
"message": "Something went wrong. Please try again.",
"status": "error",
"error": "invalid_request",
"code": "DONOR_NOT_FOUND"
}{
"message": "Something went wrong. Please try again.",
"status": "error",
"error": "invalid_request",
"code": "DONOR_NOT_FOUND"
}{
"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
Record ID in the authenticated organization.
Example:
42
Body
application/json
Related active donor ID.
Example:
42
Must equal the donor_id path parameter.
Example:
42
Forward relationship label.
Maximum string length:
255Example:
"Spouse"
Reciprocal relationship label.
Maximum string length:
255Example:
"Spouse"
Response
Link reciprocal donor contacts completed.
Mutation completed.
Example:
true
⌘I
Link reciprocal donor contacts
curl --request POST \
--url https://api.gratona.com/v1/admin/donors/{donor_id}/relationships \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"donor_id": 42,
"primary": 42,
"relationship": "Spouse",
"primary_relationship": "Spouse"
}
'import requests
url = "https://api.gratona.com/v1/admin/donors/{donor_id}/relationships"
payload = {
"donor_id": 42,
"primary": 42,
"relationship": "Spouse",
"primary_relationship": "Spouse"
}
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({
donor_id: 42,
primary: 42,
relationship: 'Spouse',
primary_relationship: 'Spouse'
})
};
fetch('https://api.gratona.com/v1/admin/donors/{donor_id}/relationships', 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/donors/{donor_id}/relationships",
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([
'donor_id' => 42,
'primary' => 42,
'relationship' => 'Spouse',
'primary_relationship' => 'Spouse'
]),
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/donors/{donor_id}/relationships"
payload := strings.NewReader("{\n \"donor_id\": 42,\n \"primary\": 42,\n \"relationship\": \"Spouse\",\n \"primary_relationship\": \"Spouse\"\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/donors/{donor_id}/relationships")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"donor_id\": 42,\n \"primary\": 42,\n \"relationship\": \"Spouse\",\n \"primary_relationship\": \"Spouse\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gratona.com/v1/admin/donors/{donor_id}/relationships")
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 \"donor_id\": 42,\n \"primary\": 42,\n \"relationship\": \"Spouse\",\n \"primary_relationship\": \"Spouse\"\n}"
response = http.request(request)
puts response.read_body{
"status": true
}{
"message": "Something went wrong. Please try again.",
"status": "error",
"error": "invalid_request",
"code": "DONOR_NOT_FOUND"
}{
"message": "Something went wrong. Please try again.",
"status": "error",
"error": "invalid_request",
"code": "DONOR_NOT_FOUND"
}{
"message": "Not Found",
"status": "error"
}{
"errors": {},
"status": "error",
"message": "The given data was invalid."
}