DonorDock Public API
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 ID
ContactAccountNumber — DonorDock account number
ContactMemberId — your member ID
ContactIntegrationId — your external system's ID
ContactEmail — contact's email
Gift Enums
Status: Received (default), Pledged, Cancelled, Pending, Processing
TransactionType: Donation, Membership, EventTicket, Grant
Both filters accept comma-delimited multiple values on GET /api/v1/Gifts.
Best Practices
- Set
IntegrationId and Source on records you create — they identify your integration's records and are the search keys (integrationId params) 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 the CustomFields array (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.
1---2name: donordock-api3description: DonorDock Public API integration reference for building nonprofit CRM and donor management integrations. Use when writing code that interacts with the DonorDock API (public-api.donordock.com), including syncing or importing Contacts, Gifts, Activities, Campaigns, Appeals, Funds, Badges, Marketing Lists, Event Attendance, Gift Batches, or sending template emails. Triggers on DonorDock, donordock.com, or DonorDock donor/gift/contact sync tasks.4---56# DonorDock Public API78Reference 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).910**For every endpoint's parameters and every object's fields, see [references/endpoints.md](references/endpoints.md) (endpoint catalog) and [references/schemas.md](references/schemas.md) (object schemas).**1112## Base URL1314```15https://public-api.donordock.com/api/v116```1718## Authentication1920HTTP Basic over HTTPS: `APIKey:APISecret` Base64-encoded, sent in the `Authorization` header. Keys are generated in the DonorDock UI (Settings → Integrations → API key).2122```bash23curl -u "$DD_API_KEY:$DD_API_SECRET" "https://public-api.donordock.com/api/v1/Contacts?take=10"24```2526## Pagination and Common Query Parameters2728List endpoints share a common shape:2930| Parameter | Meaning |31|-----------|---------|32| `skip` / `take` | Offset pagination. `take` max is **1000** |33| `fromDate` / `toDate` | Filter by `CreatedOn` (UTC) |34| `fromDateModified` / `toDateModified` | Filter by `ModifiedOn` (UTC) |35| `sortBy` | `CreatedOn` or `ModifiedOn` |36| `sortDir` | `ASC` or `DESC` |3738List responses are wrapped in a page envelope:3940```json41{ "TotalRecords": 1234, "CurrentRecords": 100, "Data": [ ... ] }42```4344Page until `skip + CurrentRecords >= TotalRecords`.4546## API Categories4748| Category | Endpoints | Notes |49|----------|-----------|-------|50| Contacts | list, get, create, update, search | Donor records; search by email, phone, accountNumber, memberId, integrationId |51| Gifts | list, get, create, search | Filter by `status` and `transactionType`; no update endpoint |52| Activities | list, get, create, update, search | Notes, tasks, asks; can add to Action Board |53| Campaigns | list, get, create, update, search | |54| Appeals | list, get, create | |55| Funds | list, get, create | |56| Badges | list, add, remove | Badge ↔ contact assignments |57| MarketingLists | list members, add member | No remove endpoint |58| Events | list attendance, create attendance | |59| GiftBatches | list closed batches, get by ID | Read-only; filtered/sorted by `ClosedDate` |60| Emails | send template email | Deducts marketing email credits |61| MetaData | user list, email template list, custom field definitions | |6263## Key Endpoints6465```66GET /api/v1/Contacts # List contacts (paged)67GET /api/v1/Contacts/{contactId} # Get contact68POST /api/v1/Contacts # Create contact69PUT /api/v1/Contacts/{contactId} # Update contact70GET /api/v1/Contacts/ContactSearch # Search (email, phone, accountNumber, ...)7172GET /api/v1/Gifts # List gifts (status/transactionType filters)73POST /api/v1/Gifts # Create gift74GET /api/v1/Gifts/GiftSearch # Search (paymentId, integrationId, contact keys, ...)7576GET /api/v1/Activities # List activities77POST /api/v1/Activities # Create activity78POST /api/v1/Emails/SendTemplateEmail # Send template email to a contact79```8081## Linking Records to Contacts8283Objects 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:8485- `ContactId` — DonorDock internal ID86- `ContactAccountNumber` — DonorDock account number87- `ContactMemberId` — your member ID88- `ContactIntegrationId` — your external system's ID89- `ContactEmail` — contact's email9091## Gift Enums9293- `Status`: `Received` (default), `Pledged`, `Cancelled`, `Pending`, `Processing`94- `TransactionType`: `Donation`, `Membership`, `EventTicket`, `Grant`9596Both filters accept comma-delimited multiple values on `GET /api/v1/Gifts`.9798## Best Practices991001. **Set `IntegrationId` and `Source`** on records you create — they identify your integration's records and are the search keys (`integrationId` params) on the search endpoints. Search before create to avoid duplicates; there is no server-side upsert.1012. **Incremental sync**: poll with `fromDateModified` + `sortBy=ModifiedOn` (no webhooks exist in the public API).1023. **Custom fields**: fetch definitions first via `GET /api/v1/MetaData/GetCustomFieldDefinitions?entityType=...`, then write values through the `CustomFields` array (`FieldId`, `Value`).1034. **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.1045. **SendTemplateEmail consumes marketing email credits** — confirm before bulk sends.105106## Disclaimer107108This 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.