curl --request PATCH \
--url https://prod-api.raisedonors.com/api/Donor/{id} \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"title": "<string>",
"firstName": "<string>",
"middleName": "<string>",
"lastName": "<string>",
"suffix": "<string>",
"email": "jsmith@example.com",
"phone": "<string>",
"notes": "<string>",
"isOrganization": true,
"organizationName": "<string>",
"crmKeys": {}
}
'const options = {
method: 'PATCH',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
title: '<string>',
firstName: '<string>',
middleName: '<string>',
lastName: '<string>',
suffix: '<string>',
email: 'jsmith@example.com',
phone: '<string>',
notes: '<string>',
isOrganization: true,
organizationName: '<string>',
crmKeys: {}
})
};
fetch('https://prod-api.raisedonors.com/api/Donor/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://prod-api.raisedonors.com/api/Donor/{id}"
payload = {
"title": "<string>",
"firstName": "<string>",
"middleName": "<string>",
"lastName": "<string>",
"suffix": "<string>",
"email": "jsmith@example.com",
"phone": "<string>",
"notes": "<string>",
"isOrganization": True,
"organizationName": "<string>",
"crmKeys": {}
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)using RestSharp;
var options = new RestClientOptions("https://prod-api.raisedonors.com/api/Donor/{id}");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("Authorization", "<api-key>");
request.AddJsonBody("{\n \"title\": \"<string>\",\n \"firstName\": \"<string>\",\n \"middleName\": \"<string>\",\n \"lastName\": \"<string>\",\n \"suffix\": \"<string>\",\n \"email\": \"jsmith@example.com\",\n \"phone\": \"<string>\",\n \"notes\": \"<string>\",\n \"isOrganization\": true,\n \"organizationName\": \"<string>\",\n \"crmKeys\": {}\n}", false);
var response = await client.PatchAsync(request);
Console.WriteLine("{0}", response.Content);
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://prod-api.raisedonors.com/api/Donor/{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([
'title' => '<string>',
'firstName' => '<string>',
'middleName' => '<string>',
'lastName' => '<string>',
'suffix' => '<string>',
'email' => 'jsmith@example.com',
'phone' => '<string>',
'notes' => '<string>',
'isOrganization' => true,
'organizationName' => '<string>',
'crmKeys' => [
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}HttpResponse<String> response = Unirest.patch("https://prod-api.raisedonors.com/api/Donor/{id}")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"<string>\",\n \"firstName\": \"<string>\",\n \"middleName\": \"<string>\",\n \"lastName\": \"<string>\",\n \"suffix\": \"<string>\",\n \"email\": \"jsmith@example.com\",\n \"phone\": \"<string>\",\n \"notes\": \"<string>\",\n \"isOrganization\": true,\n \"organizationName\": \"<string>\",\n \"crmKeys\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://prod-api.raisedonors.com/api/Donor/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"title\": \"<string>\",\n \"firstName\": \"<string>\",\n \"middleName\": \"<string>\",\n \"lastName\": \"<string>\",\n \"suffix\": \"<string>\",\n \"email\": \"jsmith@example.com\",\n \"phone\": \"<string>\",\n \"notes\": \"<string>\",\n \"isOrganization\": true,\n \"organizationName\": \"<string>\",\n \"crmKeys\": {}\n}"
response = http.request(request)
puts response.read_bodyconst url = 'https://prod-api.raisedonors.com/api/Donor/{id}';
const options = {
method: 'PATCH',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
title: '<string>',
firstName: '<string>',
middleName: '<string>',
lastName: '<string>',
suffix: '<string>',
email: 'jsmith@example.com',
phone: '<string>',
notes: '<string>',
isOrganization: true,
organizationName: '<string>',
crmKeys: {}
})
};
fetch(url, options)
.then(res => res.json())
.then(json => console.log(json))
.catch(err => console.error(err));{
"id": 200234,
"name": "Marcus Castellano",
"title": "Mr.",
"firstName": "Marcus",
"middleName": "David",
"lastName": "Castellano",
"suffix": null,
"email": "marcus.castellano@example.org",
"phone": "(555) 012-3401",
"createdDate": "2018-09-15T14:22:31Z",
"modifiedDate": "2025-10-12T09:15:42Z",
"notes": "Board member. Prefers email for receipts and annual reports.",
"isOrganization": false,
"organizationName": null,
"crmKeyUrls": {
"VirtuousCRM": {
"crmKey": "100234",
"url": "https://app.virtuoussoftware.com/Generosity/Contact/Detail/100234"
}
},
"crmKey": "100234",
"crmSecondKey": null,
"isTestMode": false,
"isArchived": false,
"isGDPRDeleted": false,
"primaryAddress": {
"id": 400101,
"donorId": 200234,
"isPrimary": true,
"address1": "219 Oak Hill Drive",
"address2": null,
"city": "Springfield",
"state": "OR",
"postal": "97478",
"countryString": "United States",
"addressTypeDisplay": "Home"
},
"donorAddresses": [
{
"id": 400101,
"donorId": 200234,
"isPrimary": true,
"address1": "219 Oak Hill Drive",
"address2": null,
"city": "Springfield",
"state": "OR",
"postal": "97478",
"countryString": "United States",
"addressTypeDisplay": "Home"
}
],
"donorEmailAddresses": [
{
"id": 300101,
"donorId": 200234,
"typeDisplay": "Home Email",
"value": "marcus.castellano@example.org",
"secondaryValue": null,
"isPrimary": true,
"isOptedIn": true,
"isValid": true,
"isEmail": true,
"isPhone": false,
"isBounced": false,
"countryCode": null
}
],
"donorPhoneNumbers": [
{
"id": 300102,
"donorId": 200234,
"typeDisplay": "Mobile Phone",
"value": "(555) 012-3401",
"secondaryValue": null,
"isPrimary": true,
"isOptedIn": true,
"isValid": true,
"isEmail": false,
"isPhone": true,
"isBounced": false,
"countryCode": "1"
},
{
"id": 300103,
"donorId": 200234,
"typeDisplay": "Home Phone",
"value": "(555) 012-3400",
"secondaryValue": null,
"isPrimary": false,
"isOptedIn": true,
"isValid": true,
"isEmail": false,
"isPhone": true,
"isBounced": false,
"countryCode": "1"
}
]
}{
"type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
"title": "One or more validation errors occurred.",
"status": 400,
"errors": {
"email": [
"A valid email address is required."
],
"lastName": [
"The lastName field is required."
]
},
"instance": "/api/Donor/200234"
}{
"type": "https://tools.ietf.org/html/rfc7235#section-3.1",
"title": "Unauthorized",
"status": 401,
"detail": "The Authorization header is missing, malformed, or carries a token that is expired or revoked.",
"instance": "/api/Donor/{id}"
}{
"type": "https://tools.ietf.org/html/rfc7231#section-6.5.4",
"title": "Not Found",
"status": 404,
"detail": "Donor 200234 was not found.",
"instance": "/api/Donor/200234"
}Partially Update a Donor
Updates only the donor fields you send.
curl --request PATCH \
--url https://prod-api.raisedonors.com/api/Donor/{id} \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"title": "<string>",
"firstName": "<string>",
"middleName": "<string>",
"lastName": "<string>",
"suffix": "<string>",
"email": "jsmith@example.com",
"phone": "<string>",
"notes": "<string>",
"isOrganization": true,
"organizationName": "<string>",
"crmKeys": {}
}
'const options = {
method: 'PATCH',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
title: '<string>',
firstName: '<string>',
middleName: '<string>',
lastName: '<string>',
suffix: '<string>',
email: 'jsmith@example.com',
phone: '<string>',
notes: '<string>',
isOrganization: true,
organizationName: '<string>',
crmKeys: {}
})
};
fetch('https://prod-api.raisedonors.com/api/Donor/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://prod-api.raisedonors.com/api/Donor/{id}"
payload = {
"title": "<string>",
"firstName": "<string>",
"middleName": "<string>",
"lastName": "<string>",
"suffix": "<string>",
"email": "jsmith@example.com",
"phone": "<string>",
"notes": "<string>",
"isOrganization": True,
"organizationName": "<string>",
"crmKeys": {}
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)using RestSharp;
var options = new RestClientOptions("https://prod-api.raisedonors.com/api/Donor/{id}");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("Authorization", "<api-key>");
request.AddJsonBody("{\n \"title\": \"<string>\",\n \"firstName\": \"<string>\",\n \"middleName\": \"<string>\",\n \"lastName\": \"<string>\",\n \"suffix\": \"<string>\",\n \"email\": \"jsmith@example.com\",\n \"phone\": \"<string>\",\n \"notes\": \"<string>\",\n \"isOrganization\": true,\n \"organizationName\": \"<string>\",\n \"crmKeys\": {}\n}", false);
var response = await client.PatchAsync(request);
Console.WriteLine("{0}", response.Content);
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://prod-api.raisedonors.com/api/Donor/{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([
'title' => '<string>',
'firstName' => '<string>',
'middleName' => '<string>',
'lastName' => '<string>',
'suffix' => '<string>',
'email' => 'jsmith@example.com',
'phone' => '<string>',
'notes' => '<string>',
'isOrganization' => true,
'organizationName' => '<string>',
'crmKeys' => [
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}HttpResponse<String> response = Unirest.patch("https://prod-api.raisedonors.com/api/Donor/{id}")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"<string>\",\n \"firstName\": \"<string>\",\n \"middleName\": \"<string>\",\n \"lastName\": \"<string>\",\n \"suffix\": \"<string>\",\n \"email\": \"jsmith@example.com\",\n \"phone\": \"<string>\",\n \"notes\": \"<string>\",\n \"isOrganization\": true,\n \"organizationName\": \"<string>\",\n \"crmKeys\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://prod-api.raisedonors.com/api/Donor/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"title\": \"<string>\",\n \"firstName\": \"<string>\",\n \"middleName\": \"<string>\",\n \"lastName\": \"<string>\",\n \"suffix\": \"<string>\",\n \"email\": \"jsmith@example.com\",\n \"phone\": \"<string>\",\n \"notes\": \"<string>\",\n \"isOrganization\": true,\n \"organizationName\": \"<string>\",\n \"crmKeys\": {}\n}"
response = http.request(request)
puts response.read_bodyconst url = 'https://prod-api.raisedonors.com/api/Donor/{id}';
const options = {
method: 'PATCH',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
title: '<string>',
firstName: '<string>',
middleName: '<string>',
lastName: '<string>',
suffix: '<string>',
email: 'jsmith@example.com',
phone: '<string>',
notes: '<string>',
isOrganization: true,
organizationName: '<string>',
crmKeys: {}
})
};
fetch(url, options)
.then(res => res.json())
.then(json => console.log(json))
.catch(err => console.error(err));{
"id": 200234,
"name": "Marcus Castellano",
"title": "Mr.",
"firstName": "Marcus",
"middleName": "David",
"lastName": "Castellano",
"suffix": null,
"email": "marcus.castellano@example.org",
"phone": "(555) 012-3401",
"createdDate": "2018-09-15T14:22:31Z",
"modifiedDate": "2025-10-12T09:15:42Z",
"notes": "Board member. Prefers email for receipts and annual reports.",
"isOrganization": false,
"organizationName": null,
"crmKeyUrls": {
"VirtuousCRM": {
"crmKey": "100234",
"url": "https://app.virtuoussoftware.com/Generosity/Contact/Detail/100234"
}
},
"crmKey": "100234",
"crmSecondKey": null,
"isTestMode": false,
"isArchived": false,
"isGDPRDeleted": false,
"primaryAddress": {
"id": 400101,
"donorId": 200234,
"isPrimary": true,
"address1": "219 Oak Hill Drive",
"address2": null,
"city": "Springfield",
"state": "OR",
"postal": "97478",
"countryString": "United States",
"addressTypeDisplay": "Home"
},
"donorAddresses": [
{
"id": 400101,
"donorId": 200234,
"isPrimary": true,
"address1": "219 Oak Hill Drive",
"address2": null,
"city": "Springfield",
"state": "OR",
"postal": "97478",
"countryString": "United States",
"addressTypeDisplay": "Home"
}
],
"donorEmailAddresses": [
{
"id": 300101,
"donorId": 200234,
"typeDisplay": "Home Email",
"value": "marcus.castellano@example.org",
"secondaryValue": null,
"isPrimary": true,
"isOptedIn": true,
"isValid": true,
"isEmail": true,
"isPhone": false,
"isBounced": false,
"countryCode": null
}
],
"donorPhoneNumbers": [
{
"id": 300102,
"donorId": 200234,
"typeDisplay": "Mobile Phone",
"value": "(555) 012-3401",
"secondaryValue": null,
"isPrimary": true,
"isOptedIn": true,
"isValid": true,
"isEmail": false,
"isPhone": true,
"isBounced": false,
"countryCode": "1"
},
{
"id": 300103,
"donorId": 200234,
"typeDisplay": "Home Phone",
"value": "(555) 012-3400",
"secondaryValue": null,
"isPrimary": false,
"isOptedIn": true,
"isValid": true,
"isEmail": false,
"isPhone": true,
"isBounced": false,
"countryCode": "1"
}
]
}{
"type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
"title": "One or more validation errors occurred.",
"status": 400,
"errors": {
"email": [
"A valid email address is required."
],
"lastName": [
"The lastName field is required."
]
},
"instance": "/api/Donor/200234"
}{
"type": "https://tools.ietf.org/html/rfc7235#section-3.1",
"title": "Unauthorized",
"status": 401,
"detail": "The Authorization header is missing, malformed, or carries a token that is expired or revoked.",
"instance": "/api/Donor/{id}"
}{
"type": "https://tools.ietf.org/html/rfc7231#section-6.5.4",
"title": "Not Found",
"status": 404,
"detail": "Donor 200234 was not found.",
"instance": "/api/Donor/200234"
}lastName or notes — and the rest stay as they are. This is the endpoint to use when you do not have the whole donor record on hand. Returns the updated donor.Authorizations
JWT Authorization header using the Bearer scheme. Example: "Authorization: Bearer {token}"
Path Parameters
The ID of the donor to update.
Body
The partial donor information to update. Only non-null fields will be updated.
Represents a partial donor update request. Only fields that are set (non-null) will be updated.
The title. If set, updates the donor's title.
75The first name. If set, updates the donor's first name.
75The middle name. If set, updates the donor's middle name.
75The last name. If set, updates the donor's last name.
75The suffix. If set, updates the donor's suffix.
75The email address. If set, updates the donor's email.
150The phone. If set, updates the donor's phone number.
50Any additional notes. If set, updates the donor's notes.
Whether this is an organization. If set, updates the isOrganization flag.
The organization name. If set, updates the donor's organization name.
150The collection of CRM keys. If set, updates the donor's CRM keys.
Show child attributes
Show child attributes
Response
OK
Represents a donor model.
The unique identifier of the donor.
The display name of the donor.
The title of the donor, such as Mr. or Dr.
The first name of the donor.
The middle name of the donor.
The last name of the donor.
The suffix of the donor, such as Jr. or III.
The primary email address of the donor.
The primary phone number of the donor.
The date the donor was created.
The date the donor was last modified.
Any additional notes stored on the donor.
Whether the donor is an organization rather than an individual.
The name of the organization, when the donor is an organization.
The CRM URLs by integration type.
Show child attributes
Show child attributes
The key that links the donor to the matching record in your CRM.
The secondary key that links the donor to the matching record in your CRM.
Whether the donor was created in test mode.
Whether the donor has been archived.
Whether the donor is GDPR deleted.
The donor's primary address.
Show child attributes
Show child attributes
The addresses on the donor record. Returned when includeDetails is true.
Show child attributes
Show child attributes
The email addresses on the donor record. Returned when includeDetails is true.
Show child attributes
Show child attributes
The phone numbers on the donor record. Returned when includeDetails is true.
Show child attributes
Show child attributes
Was this page helpful?