> ## Documentation Index
> Fetch the complete documentation index at: https://docs.virtuous.org/llms.txt
> Use this file to discover all available pages before exploring further.

# CRM+ Changelog

> Use this changelog to stay informed about changes that may impact CRM+ integrations, data syncs, partner apps, and custom workflows.

<Update label="July 2026">
  ## Improved: Realistic response examples across the API reference

  We refreshed the success response examples on several high-value CRM+ endpoints so they show realistic, connected data instead of generic `<string>` placeholders. Examples now use a consistent fictional world (the Riverside Hope Foundation and its donors), so the same person and gift appear coherently across endpoints.

  Updated endpoints include:

  * **Contacts** — `GET /api/Contact/{contactId}`, `POST /api/Contact`, `POST /api/Contact/Search`, `POST /api/Contact/Query`
  * **Gifts** — `GET /api/Gift/{giftId}`, `POST /api/Gift`, `POST /api/Gift/Query`
  * **Recurring Gifts** — `GET /api/RecurringGift/{recurringGiftId}`, `POST /api/RecurringGift`
  * **Pledges** — `GET /api/v2/Pledge/{pledgeId}`, `POST /api/v2/Pledge`
  * **Projects** — `GET /api/Project/{projectId}`
  * **Grants** — `GET /api/Grant/{grantId}`, `POST /api/Grant`, `POST /api/Grant/Query`
  * **Events** — `GET /api/Event`, `POST /api/Event`, `GET /api/Event/{eventId}`, `POST /api/Event/Query`, `GET /api/Event/{eventId}/Attendees`
  * **Tributes** — `GET /api/Tribute/Search`, `POST /api/Tribute`, `PUT /api/Tribute/{tributeId}`
  * **Notes** — `GET /api/ContactNote/{noteId}`, `POST /api/ContactNote`, `GET /api/ContactNote/ByContact/{contactId}`, `POST /api/ContactNote/Query`
  * **Planned Gifts** — `GET /api/PlannedGift/{plannedGiftId}`, `POST /api/PlannedGift`, `POST /api/PlannedGift/Query`
  * **Premiums** — `GET /api/Premium/{premiumId}`, `POST /api/Premium`, `POST /api/Premium/Search`
  * **Communications** — `GET /api/Communication/{communicationId}`, `POST /api/Communication`
  * **Segments** — `GET /api/Segment/{segmentId}`, `POST /api/Segment`
  * **Project Notes & Roles** — `GET /api/ProjectNote/{noteId}`, `POST /api/ProjectNote`, `GET /api/ProjectRole/{projectRoleId}`, `POST /api/ProjectRole`
  * **Reminders** — `GET /api/Reminder/Active`, `POST /api/Reminder`, `GET /api/Reminder/ByContact/{contactId}`

  We then extended the same realistic examples across the rest of the high-traffic surface: the update (`PUT`) responses for the resources above, their `ByContact`/list/query variants, the individual, address, contact-method, tag, organization-group, planned-gift, premium, segment, and reminder endpoints, webhooks, and the composite `Query/FullContact`, `Query/FullGift`, and `{id}/Gifts` responses. The majority of CRM+ read, create, update, and list endpoints now return realistic sample data.

  These are documentation-only changes — no schemas, fields, or behavior changed.

  ## Improved: Endpoint-specific error documentation

  Error responses across the CRM+ API reference now explain what each status code means for the endpoint you're looking at, instead of showing a bare `BadRequest` or `NotFound` label.

  * A new **Errors** section in the API overview covers the shared error envelope (`message` plus `modelState`) and what 400, 401, 403, 404, 429, and 5xx mean across the API.
  * Every authenticated endpoint now documents `401`, `403`, and `429`, including the rate limit headers to use for backoff.
  * `400` descriptions call out the likely cause for that endpoint — model validation with `modelState` on write endpoints, condition/operator/paging problems on query endpoints, and malformed path values elsewhere.
  * `404` descriptions name the identifier that didn't resolve, and were added to single-record `GET`, `PUT`, and `DELETE` endpoints that were missing them. List endpoints were left alone, since they generally return an empty result set instead.
  * The transaction (import) endpoints now note that a success response only means the payload was queued — matching failures surface in the import review screen, not in the API response.

  These are documentation-only changes — no schemas, fields, or behavior changed.

  ## Improved: Consistent endpoint names and cleaned-up wording

  Endpoint names across the CRM+ API reference now follow a consistent **verb + concise object** pattern, matching the Volunteer API reference.

  * Sidebar and page titles use `List`, `Get`, `Create`, `Update`, `Delete`, `Query`, and `Search` plus the resource — for example, "List Contact Method Types" instead of "Gets the types of contact methods", and "Search Contacts" instead of "Find all Contacts that match, fully or partially, the given search parameters".
  * `POST /api/Contact/Transaction` and `POST /api/Contact/Batch` are now "Create a Contact Transaction" and "Create a Contact Import", with descriptions covering the change and duplicate checking the old names described.
  * Typos and awkward wording were fixed, including "it's value" → "its value", "Contact Indvidual" → "Contact Individual", and "Communictation Query Options" → "Communication Query Options".
  * Leftover internal code references such as `{M:Virtuous.WebApi.Controllers.ProjectController.QueryOptions}` now name the endpoint they point to.

  URLs, paths, fields, and operations are unchanged — this only affects the names and descriptions shown in the docs.

  ## Improved: Parameter and field descriptions

  Parameters and the fields partners work with most now carry descriptions in the CRM+ API reference, so the playground and generated code samples explain what to send instead of just showing a type.

  * **Paging and sorting** — `skip`, `take`, `sortBy`, and `descending` are described consistently everywhere they appear, including endpoints where they previously read `int`, `Optional boolean`, or nothing at all. Endpoints that cap `take` at 1000 still say so.
  * **Path parameters** — every templated identifier is described, including the ones that previously showed only `(Required)`. `GET /api/ContactIndividual/{contactIndividualId}/EmailList` now declares its `contactIndividualId` path parameter, which it was missing.
  * **Query filters** — the `groups`/`conditions` filter structure used by the `Query` endpoints now explains how groups combine, what `parameter` and `operator` accept, and when to use `value`, `secondaryValue`, or `values`. The matching `QueryOptions` responses describe the options they return.
  * **List responses** — `list` and `total` are described on every paged response, including how to use `total` with `skip` and `take`.
  * **Request and response fields** — the common ones are documented across resources: identifiers, `customFields` and `customCollections`, `transactionSource`/`transactionId` and `referenceSource`/`referenceId` and their role in preventing duplicate imports, `isPrivate`, audit fields such as `createDateTimeUtc` and `modifiedByUser`, and the `*Formatted` display variants.

  These are documentation-only changes — no schemas, fields, or behavior changed.

  ## Improved: Endpoint descriptions

  Every endpoint in the CRM+ API reference now has a description explaining what it does, not just a name — 228 endpoints that previously showed nothing at all, plus a handful whose copy was a placeholder or a leftover from another endpoint.

  * **What each endpoint does** — descriptions say what a call returns or changes, name the fields you most often need to send, and point to the related endpoint when there is a better one for the job (`Create a Contact` to `Create a Contact Transaction`, `Delete a Gift` to `Create a Reversing Transaction`, `Search Contacts` to `Query Contacts`).
  * **Queries** — every `Query` endpoint points to its `QueryOptions` endpoint and repeats the 1,000 record `take` cap, and every `QueryOptions` endpoint explains that its response is what you use to build a query.
  * **Placeholder copy removed** — the five volunteer endpoints whose description read only "Available starting 3/29/2022" now describe what they do, `List Non-Cash Gift Types` and `List Contact Note Custom Fields` no longer describe the wrong object, and the endpoints whose description was just "HMAC Auth only." now explain what they return as well.

  These are documentation-only changes — no schemas, fields, or behavior changed.
</Update>

<Update label="May 2026">
  ## New: CRM+ API Documentation Changelog

  We’ve launched the CRM+ API Documentation Changelog to make it easier to track updates to the CRM+ developer experience.

  This changelog will include updates such as:

  * New and updated CRM+ API endpoints
  * Request and response schema changes
  * New fields, objects, filters, and parameters
  * Authentication, permissions, and access updates
  * Deprecation notices and breaking changes
  * Improvements to examples, guides, recipes, and API reference documentation
</Update>
