curl --request PUT \
--url https://prod-api.raisedonors.com/api/Donor/{id} \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"firstName": "<string>",
"lastName": "<string>",
"title": "<string>",
"middleName": "<string>",
"suffix": "<string>",
"email": "jsmith@example.com",
"phone": "<string>",
"notes": "<string>",
"isOrganization": true,
"organizationName": "<string>",
"crmKey": "<string>",
"crmKeys": {}
}
'const options = {
method: 'PUT',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
firstName: '<string>',
lastName: '<string>',
title: '<string>',
middleName: '<string>',
suffix: '<string>',
email: 'jsmith@example.com',
phone: '<string>',
notes: '<string>',
isOrganization: true,
organizationName: '<string>',
crmKey: '<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 = {
"firstName": "<string>",
"lastName": "<string>",
"title": "<string>",
"middleName": "<string>",
"suffix": "<string>",
"email": "jsmith@example.com",
"phone": "<string>",
"notes": "<string>",
"isOrganization": True,
"organizationName": "<string>",
"crmKey": "<string>",
"crmKeys": {}
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.put(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 \"firstName\": \"<string>\",\n \"lastName\": \"<string>\",\n \"title\": \"<string>\",\n \"middleName\": \"<string>\",\n \"suffix\": \"<string>\",\n \"email\": \"jsmith@example.com\",\n \"phone\": \"<string>\",\n \"notes\": \"<string>\",\n \"isOrganization\": true,\n \"organizationName\": \"<string>\",\n \"crmKey\": \"<string>\",\n \"crmKeys\": {}\n}", false);
var response = await client.PutAsync(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 => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'firstName' => '<string>',
'lastName' => '<string>',
'title' => '<string>',
'middleName' => '<string>',
'suffix' => '<string>',
'email' => 'jsmith@example.com',
'phone' => '<string>',
'notes' => '<string>',
'isOrganization' => true,
'organizationName' => '<string>',
'crmKey' => '<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.put("https://prod-api.raisedonors.com/api/Donor/{id}")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"firstName\": \"<string>\",\n \"lastName\": \"<string>\",\n \"title\": \"<string>\",\n \"middleName\": \"<string>\",\n \"suffix\": \"<string>\",\n \"email\": \"jsmith@example.com\",\n \"phone\": \"<string>\",\n \"notes\": \"<string>\",\n \"isOrganization\": true,\n \"organizationName\": \"<string>\",\n \"crmKey\": \"<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::Put.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"firstName\": \"<string>\",\n \"lastName\": \"<string>\",\n \"title\": \"<string>\",\n \"middleName\": \"<string>\",\n \"suffix\": \"<string>\",\n \"email\": \"jsmith@example.com\",\n \"phone\": \"<string>\",\n \"notes\": \"<string>\",\n \"isOrganization\": true,\n \"organizationName\": \"<string>\",\n \"crmKey\": \"<string>\",\n \"crmKeys\": {}\n}"
response = http.request(request)
puts response.read_bodyconst url = 'https://prod-api.raisedonors.com/api/Donor/{id}';
const options = {
method: 'PUT',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
firstName: '<string>',
lastName: '<string>',
title: '<string>',
middleName: '<string>',
suffix: '<string>',
email: 'jsmith@example.com',
phone: '<string>',
notes: '<string>',
isOrganization: true,
organizationName: '<string>',
crmKey: '<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"
}Update a Donor
Updates a donor.
curl --request PUT \
--url https://prod-api.raisedonors.com/api/Donor/{id} \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"firstName": "<string>",
"lastName": "<string>",
"title": "<string>",
"middleName": "<string>",
"suffix": "<string>",
"email": "jsmith@example.com",
"phone": "<string>",
"notes": "<string>",
"isOrganization": true,
"organizationName": "<string>",
"crmKey": "<string>",
"crmKeys": {}
}
'const options = {
method: 'PUT',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
firstName: '<string>',
lastName: '<string>',
title: '<string>',
middleName: '<string>',
suffix: '<string>',
email: 'jsmith@example.com',
phone: '<string>',
notes: '<string>',
isOrganization: true,
organizationName: '<string>',
crmKey: '<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 = {
"firstName": "<string>",
"lastName": "<string>",
"title": "<string>",
"middleName": "<string>",
"suffix": "<string>",
"email": "jsmith@example.com",
"phone": "<string>",
"notes": "<string>",
"isOrganization": True,
"organizationName": "<string>",
"crmKey": "<string>",
"crmKeys": {}
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.put(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 \"firstName\": \"<string>\",\n \"lastName\": \"<string>\",\n \"title\": \"<string>\",\n \"middleName\": \"<string>\",\n \"suffix\": \"<string>\",\n \"email\": \"jsmith@example.com\",\n \"phone\": \"<string>\",\n \"notes\": \"<string>\",\n \"isOrganization\": true,\n \"organizationName\": \"<string>\",\n \"crmKey\": \"<string>\",\n \"crmKeys\": {}\n}", false);
var response = await client.PutAsync(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 => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'firstName' => '<string>',
'lastName' => '<string>',
'title' => '<string>',
'middleName' => '<string>',
'suffix' => '<string>',
'email' => 'jsmith@example.com',
'phone' => '<string>',
'notes' => '<string>',
'isOrganization' => true,
'organizationName' => '<string>',
'crmKey' => '<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.put("https://prod-api.raisedonors.com/api/Donor/{id}")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"firstName\": \"<string>\",\n \"lastName\": \"<string>\",\n \"title\": \"<string>\",\n \"middleName\": \"<string>\",\n \"suffix\": \"<string>\",\n \"email\": \"jsmith@example.com\",\n \"phone\": \"<string>\",\n \"notes\": \"<string>\",\n \"isOrganization\": true,\n \"organizationName\": \"<string>\",\n \"crmKey\": \"<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::Put.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"firstName\": \"<string>\",\n \"lastName\": \"<string>\",\n \"title\": \"<string>\",\n \"middleName\": \"<string>\",\n \"suffix\": \"<string>\",\n \"email\": \"jsmith@example.com\",\n \"phone\": \"<string>\",\n \"notes\": \"<string>\",\n \"isOrganization\": true,\n \"organizationName\": \"<string>\",\n \"crmKey\": \"<string>\",\n \"crmKeys\": {}\n}"
response = http.request(request)
puts response.read_bodyconst url = 'https://prod-api.raisedonors.com/api/Donor/{id}';
const options = {
method: 'PUT',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
firstName: '<string>',
lastName: '<string>',
title: '<string>',
middleName: '<string>',
suffix: '<string>',
email: 'jsmith@example.com',
phone: '<string>',
notes: '<string>',
isOrganization: true,
organizationName: '<string>',
crmKey: '<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"
}email, phone, notes, and the organization details when isOrganization is true — since the request replaces the stored values.Authorizations
JWT Authorization header using the Bearer scheme. Example: "Authorization: Bearer {token}"
Path Parameters
The ID of the donor to update.
Body
The complete donor information to update.
- Option 1
- Option 2
Represents a donor request.
The donor's first name.
1 - 75The donor's last name.
1 - 75The donor's title, such as Mr. or Dr.
75The donor's middle name.
75The donor's suffix, such as Jr. or III.
75The donor's email address.
150The donor's phone number.
50Any additional notes stored on the donor.
Whether the donor is an organization rather than an individual.
The name of the organization, when isOrganization is true.
150The key that links the donor to the matching record in your CRM.
The keys that link the donor to matching records in your CRM, by CRM.
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?