GET /api/Donor/search for free-text lookups, GET /api/Donor/list for paginated lists with simple filters, and POST /api/Donor/query for structured filtering. This workflow covers when to use each.
For the resource-level reference of the Donor record, see Donors.
When to use this workflow
Pattern 1: free-text search with GET /api/Donor/search
The simplest lookup. The endpoint accepts a single filter query parameter and matches across multiple donor fields:
Search for donors by a filter string. Can match on donor ID, first name, last name, organization name, phone number, email address, postal code, and state. Supports searching by first/last name combinations, name with state, name with postal code, phone number in (xxx) xxx-xxxx format, and email in angle brackets.
cURL
The endpoint is best for interactive lookups where the user can type a flexible search term. For deterministic exact-match queries, prefer the structured query in Pattern 3.
When search returns multiple matches
Common scenarios:
- A name search where multiple donors share the name.
- An email search where a donor has the email on multiple records (typically a data-quality issue worth flagging).
- A postal-code search that hits many donors in the same area.
JavaScript
Pattern 2: paginated list with GET /api/Donor/list
For ranked or sorted lists of donors. Parameters:
Documented sort fields
The Raise spec documents these sort options forGET /api/Donor/list:
Top donors by lifetime giving
cURL
Recently-active donors
cURL
Pattern 3: structured query with POST /api/Donor/query
For anything beyond free-text and basic sort. The body has the same shape as other /query endpoints (see Pagination and Filtering: Pagination on /query endpoints):
Common donor filter scenarios
Donors with no recent activity
cURL
modifieddatetimeutc is before mid-2024 — candidates for re-engagement campaigns. The operator: 11 placeholder represents “less than” (discover the actual integer via QueryOptions).
High-value donors
cURL
Donors by state (organization-wide segmentation)
cURL
Excluding archived and test-mode donors
For production reports, always filter out archived and test-mode donors:JavaScript
Reducing payload size
For bulk reads where you don’t need every field,selectedColumns reduces per-item payload:
cURL
GET /api/Query/options/{queryType}.
IncludeDetails for full donor records
The opposite case: when you do need full records with addresses and contact methods, set includeDetails: true:
POST /api/Donor/query:
When includeDetails=true, the response includes all related entities (DonorAddresses, DonorContactMethods) similar to the GET by ID endpoint. This may impact performance for large result sets.
Use includeDetails: true sparingly for bulk reads. For exporting one record at a time, GET /api/Donor/{donorId} is the cleaner path.
Reading donor-related sub-resources
Several donor sub-resources have dedicated paginated endpoints — use these instead of filtered queries when the workflow is donor-scoped:
These are typically cheaper than equivalent filtered queries on
/api/Gift/query because the filter is applied at the source rather than evaluated across the full gift table.
Iteration patterns
Standard skip/take loop
JavaScript
Incremental sync
For partner integrations that periodically pull updated donors since the last run:JavaScript
ID-cursor iteration for very large sets
For donor counts in the hundreds of thousands, the skip-based loop becomes inefficient. Use ID-cursor iteration:JavaScript
Combining lookups for richer reports
For reports that need both donor and gift detail (a donor-level summary with their recent giving), combine the donor query with per-donor follow-up calls:JavaScript
Promise.all.
Where to go next
Query Gifts by Filters
The Gift-side version of these patterns — useful for reports that combine both.
Donors
The Donor resource reference — fields, sub-resources, and special operations.
Create or Find a Donor
The workflow that combines search, query, and the implicit creation path.
Pagination and Filtering
The reference-level documentation of all three query patterns.