Reference for integrating with the DonorDock Public API (v1) — a REST API over the DonorDock nonprofit CRM. Covers contacts (donors), gifts, activities, campaigns, appeals, funds, badges, marketing lists, event attendance, closed gift batches, template emails, and metadata (users, email templates, custom field definitions).
For every endpoint's parameters and every object's fields, see references/endpoints.md (endpoint catalog) and references/schemas.md (object schemas).
Base URL
https://public-api.donordock.com/api/v1
Authentication
HTTP Basic over HTTPS: APIKey:APISecret Base64-encoded, sent in the Authorization header. Keys are generated in the DonorDock UI (Settings → Integrations → API key).
curl -u "$DD_API_KEY:$DD_API_SECRET" "https://public-api.donordock.com/api/v1/Contacts?take=10"
Pagination and Common Query Parameters
List endpoints share a common shape:
| Parameter | Meaning |
|---|---|
skip / take |
Offset pagination. take max is 1000 |
fromDate / toDate |
Filter by CreatedOn (UTC) |
fromDateModified / toDateModified |
Filter by ModifiedOn (UTC) |
sortBy |
CreatedOn or ModifiedOn |
sortDir |
ASC or DESC |
List responses are wrapped in a page envelope:
{ "TotalRecords": 1234, "CurrentRecords": 100, "Data": [ ... ] }
Page until skip + CurrentRecords >= TotalRecords.
API Categories
| Category | Endpoints | Notes |
|---|---|---|
| Contacts | list, get, create, update, search | Donor records; search by email, phone, accountNumber, memberId, integrationId |
| Gifts | list, get, create, search | Filter by status and transactionType; no update endpoint |
| Activities | list, get, create, update, search | Notes, tasks, asks; can add to Action Board |
| Campaigns | list, get, create, update, search | |
| Appeals | list, get, create | |
| Funds | list, get, create | |
| Badges | list, add, remove | Badge ↔ contact assignments |
| MarketingLists | list members, add member | No remove endpoint |
| Events | list attendance, create attendance | |
| GiftBatches | list closed batches, get by ID | Read-only; filtered/sorted by ClosedDate |
| Emails | send template email | Deducts marketing email credits |
| MetaData | user list, email template list, custom field definitions |
Key Endpoints
GET /api/v1/Contacts # List contacts (paged)
GET /api/v1/Contacts/{contactId} # Get contact
POST /api/v1/Contacts # Create contact
PUT /api/v1/Contacts/{contactId} # Update contact
GET /api/v1/Contacts/ContactSearch # Search (email, phone, accountNumber, ...)
GET /api/v1/Gifts # List gifts (status/transactionType filters)
POST /api/v1/Gifts # Create gift
GET /api/v1/Gifts/GiftSearch # Search (paymentId, integrationId, contact keys, ...)
GET /api/v1/Activities # List activities
POST /api/v1/Activities # Create activity
POST /api/v1/Emails/SendTemplateEmail # Send template email to a contact
Linking Records to Contacts
Objects that belong to a contact (gifts, activities, badges, marketing list members, event attendance, template emails) accept several alternative contact identifiers on create — provide one of:
ContactId— DonorDock internal IDContactAccountNumber— DonorDock account numberContactMemberId— your member IDContactIntegrationId— your external system's IDContactEmail— contact's email
Gift Enums
Status:Received(default),Pledged,Cancelled,Pending,ProcessingTransactionType:Donation,Membership,EventTicket,Grant
Both filters accept comma-delimited multiple values on GET /api/v1/Gifts.
Best Practices
- Set
IntegrationIdandSourceon records you create — they identify your integration's records and are the search keys (integrationIdparams) on the search endpoints. Search before create to avoid duplicates; there is no server-side upsert. - Incremental sync: poll with
fromDateModified+sortBy=ModifiedOn(no webhooks exist in the public API). - Custom fields: fetch definitions first via
GET /api/v1/MetaData/GetCustomFieldDefinitions?entityType=..., then write values through theCustomFieldsarray (FieldId,Value). - Gifts have no update endpoint — create them with correct amounts/attribution the first time. Contact name/address fields on a gift are denormalized contact data, not gift data.
- SendTemplateEmail consumes marketing email credits — confirm before bulk sends.
Disclaimer
This skill is not affiliated with, endorsed by, or sponsored by DonorDock. It references the publicly available Swagger specification (https://public-api.donordock.com/swagger/docs/v1) for educational and integration purposes. The information may be outdated or incomplete. Always refer to the official DonorDock documentation for current API specifications.