> For the complete documentation index, see [llms.txt](https://docs.anedot.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.anedot.com/integrations/crm-donor-management/virtuous.md).

# Virtuous

Virtuous is a nonprofit-focused CRM designed to help organizations manage donor relationships, communications, and giving data.

**Virtuous** is a nonprofit-focused CRM designed to help organizations manage donor relationships, communications, and giving data. Anedot’s integration allows you to sync donor data from Action Pages directly into your Virtuous account.

## Connecting Anedot to Virtuous

To integrate your Anedot fundraising account with Virtuous:

1. Navigate to **Settings → Integrations → Directory** in your Anedot account.
2. Click the blue **+ New Connection** button in the upper right corner.
3. Select **Virtuous** from the integration directory.
4. Choose the **Action Pages** you’d like to sync.
   * The default is All Pages.
   * To exclude specific pages, enter their Action Page IDs as a comma-separated list.
5. \_(Optional)\_Scope the integration to only include **Team**-specific data.
6. Enter your **Virtuous API Key**.
7. *(Optional)* To only sync **donation pages**, check the **"Relay donation pages only"** box.
8. Click **Save** to finalize setup.

*You can update Action Pages, Team filters, or credentials anytime.*

## Data Relays

* **Relay Types**: By default, Anedot relays both **financial** and **non-financial** page data. To limit relays to donations only, enable the “Relay donation pages only” option.
* **Supported Fields**:
  * Name
  * Phone
  * Email
  * Address
* **Contact Matching**:
  * Every submission triggers a **"find or create contact"** action in Virtuous, based on the email address.
    * If a contact exists, no new contact is created.
    * If no match is found, a new contact is added.
* **Donations**:
  * Donation submissions trigger an additional **"gift\_designation"** relay.
  * **Void**, **full refunds** *(not partial)*, and **ACH returned** events are relayed once daily.
* **Relay Scheduling**:
  * **Gift records** are imported into Virtuous **once daily at midnight**.
  * You can also use Virtuous’s **Import Tool** to manually import gift batches.
* **Retrying Relays**:
  * Use **Push Unsent** to resend failed or unsent donations with a specified date range.

## Using Segment Names with Virtuous

To properly relay segmented data to Virtuous, follow these steps:

1. Go to **Action Pages → Pages**.
2. Hover over the desired Action Page, open the **⋮** menu on the page row, then select **Edit**.
3. In the **Form** tab, add a **Custom** **Hidden Field** named `segment_name`.
4. Then, go to **Settings → Sharing → Page Specific Values** and assign a value to `segment_name`.
5. Click **Publish** to save your changes.

> *If the segment appears as `"null"` in Virtuous, it's likely due to a setup error in the hidden field or value configuration.*

## Field Mapping

### Contact Individual Info

| Anedot Field Name  | Field Name in Virtuous |
| ------------------ | ---------------------- |
| firstName lastName | name                   |
| Household          | contact\_type          |
| Anedot             | reference\_source      |
| title              | prefix                 |
| suffix             | suffix                 |
| first\_name        | firstName              |
| last\_name         | lastName               |
| middle\_name       | middleName             |

### Contact Method

| Anedot Field Name             | Field Name in Virtuous |
| ----------------------------- | ---------------------- |
| Home Email                    | type                   |
| email                         | value                  |
| communication\_consent\_email | isOptedIn              |
| "Home Phone"                  | type                   |
| phone                         | value                  |
| communication\_consent\_phone | isOptedIn              |

### Contact Address

| Anedot Field Name | Field Name in Virtuous |
| ----------------- | ---------------------- |
| line\_1           | address1               |
| line\_2           | address2               |
| city              | city                   |
| region            | stateCode              |
| postal\_code      | postal                 |
| country           | countryCode            |

### Action Pages Fund/Project

| Anedot Field Name   | Field Name in Virtuous |
| ------------------- | ---------------------- |
| name                | name                   |
| public\_description | description            |
| Ongoing             | financialNeedType      |
| OngoingNeed         | financialNeedType      |
| annual              | financialNeedFrequency |
| identifier          | revenueAccountingCode  |
| Unspecified         | location               |
| Not Allocated       | inventoryStatus        |
| Default             | type                   |
| TRUE                | isActive               |
| FALSE               | enableSync             |

### Gift

| Anedot Field Name | Field Name in Virtuous |
| ----------------- | ---------------------- |
| "Donation"        | transactionSource      |
| submissionId      | transactionId          |
| created\_at       | giftDate               |
| payment\_type     | giftType               |
| total\_amount     | amount                 |
| frequency         | frequency              |
| card\_type        | creditCardType         |
| segment\_name     | segment                |

## Payload Data

### **Contact**

### Request Body

```json
{"name":"Annie Dot","contact_type":"Household","reference_source":"Anedot","contact_addresses":[{"city":"New Orleans","state":"LA","postal":"70112","country":"US","address1":"1340 Poydras St","address2":null}],"contact_individuals":[{"prefix":null,"suffix":null,"last_name":"Dot","first_name":"Annie","middle_name":null,"contact_methods":[{"type":"Home Email","value":"admin@anedot.com","is_opted_in":false},{"type":"Home Phone","value":"12252501301","is_opted_in":false}]}]}
```

### Response Body

```json
{"id":2566,"name":"Annie Dot","tags":[],"address":{"id":2026,"city":"New Orleans","label":"Primary Address","state":"LA","endDay":31,"postal":"70112","country":"United States","address1":"1340 Poydras St","address2":null,"endMonth":12,"startDay":1,"isPrimary":true,"startMonth":1,"canBePrimary":false,"createdByUser":"Paul Dietzel","modifiedByUser":"Paul Dietzel","createDateTimeUtc":"2023-05-25T18:27:06.0288969Z","modifiedDateTimeUtc":"2023-05-25T18:27:06.7788543Z"},"website":null,"isPrivate":false,"contactType":"Household","description":null,"giftAskType":null,"customFields":[],"informalName":"Ann","lastGiftDate":"Unavailable","createdByUser":"Paul Dietzel","giftAskAmount":"$0","maritalStatus":null,"originSegment":null,"anniversaryDay":null,"contactTagsUrl":"/api/ContactTag/ByContact/2566","lastGiftAmount":"$0","modifiedByUser":"Paul Dietzel","anniversaryYear":null,"contactGiftsUrl":"/api/Gift/ByContact/2566","contactNotesUrl":"/api/ContactNote/ByContact/2566","originSegmentId":null,"anniversaryMonth":null,"lifeToDateGiving":"$0","primaryAvatarUrl":null,"yearToDateGiving":"$0","contactReferences":[],"createDateTimeUtc":"2023-05-25T18:27:05.9976457Z","customCollections":[],"formalContactName":"Annie Dot","contactIndividuals":[{"id":3723,"gender":null,"prefix":null,"suffix":null,"passion":null,"prefix2":null,"birthDay":null,"lastName":"Dot","nickname":null,"avatarUrl":null,"birthDate":"","birthYear":null,"contactId":2566,"firstName":"Ann","isPrimary":true,"birthMonth":null,"isDeceased":false,"middleName":null,"isSecondary":false,"canBePrimary":false,"customFields":[],"deceasedDate":"","createdByUser":"Paul Dietzel","approximateAge":null,"canBeSecondary":false,"contactMethods":[{"id":4715,"type":"Home Email","value":"admin@anedot.com","isOptedIn":false,"isPrimary":true,"canBePrimary":false,"createdByUser":"Paul Dietzel","modifiedByUser":"Paul Dietzel","preMarriageName":null,"createDateTimeUtc":"2023-05-25T18:27:05.9976457Z","modifiedDateTimeUtc":"2023-05-25T18:27:06.7944799Z"},{"id":4716,"type":"Home Phone","value":"12252501301","isOptedIn":false,"isPrimary":true,"canBePrimary":false,"createdByUser":"Paul Dietzel","modifiedByUser":"Paul Dietzel","createDateTimeUtc":"2023-05-25T18:27:06.0288969Z","modifiedDateTimeUtc":"2023-05-25T18:27:06.7944799Z"}],"modifiedByUser":"Paul Dietzel","createDateTimeUtc":"2023-05-25T18:27:05.9976457Z","customCollections":[],"modifiedDateTimeUtc":"2023-05-25T18:27:06.7944799Z"}],"organizationGroups":[],"mergedIntoContactId":null,"modifiedDateTimeUtc":"2023-05-25T18:27:06.7788543Z","alternateContactName":"Annie","contactPlannedGiftsUrl":"/api/PlannedGift/ByContact/2566","preferredAddresseeName":"Annie Dot","contactRelationshipsUrl":"/api/Relationship/ByContact/2566","preferredSalutationName":"Annie","contactImportantNotesUrl":"/api/ContactNote/Important/ByContact/2566","contactRecurringGiftsUrl":"/api/RecurringGift/ByContact/2566","contactPassthroughGiftsUrl":"/api/Gift/Passthrough/ByContact/2566"}
```

### **Gifts**

### Request Body

```json
{"amount":50.0,"contact":{"id":1739,"name":"Annie Dot","email":"admin@anedot.com","phone":"2252503501","title":null,"suffix":null,"address":{"city":"New Orleans","state":"LA","postal":"70113","country":"US","address1":"1340 Poydras Street","address2":null},"last_name":"Dot","first_name":"Annie","middle_name":null},"segment":null,"frequency":null,"gift_date":"2024-02-12T18:10:27.980Z","gift_type":"Credit","designations":[{"code":"1001","name":"General Fund","amountDesignated":50.0}],"transaction_id":"8482b070-fca8-462f-a519-f03e4b410b2f","credit_card_type":"Master","transaction_source":"Donation","recurring_gift_transaction_id":null}
```

### Response Body

```
{}
```

### **Donation Reversal&#x20;*****(Void, Refund, ACH Return)***

### Request Body

```json
{"notes":"","giftDate":"2023-12-22T00:00:00","reversedGiftId":21728}
```

### Response Body (Success)

```json
{"id":21734,"batch":null,"grant":null,"notes":"","amount":-55,"giftUrl":"/api/Gift/21734","grantId":null,"segment":null,"tribute":null,"giftDate":"2023-12-22T00:00:00","giftType":"ReversingTransaction","grantUrl":null,"contactId":2063,"giftAskId":null,"isPrivate":false,"segmentId":null,"tributeId":null,"contactUrl":"/api/Contact/2063","segmentUrl":null,"contactName":"Annie","mediaOutlet":null,"receiptDate":null,"segmentCode":null,"tributeType":null,"currencyCode":"USD","customFields":[],"exchangeRate":1,"giftPremiums":[],"createdByUser":"Paul Dietzel","mediaOutletId":null,"transactionId":null,"modifiedByUser":"Paul Dietzel","pledgePayments":[],"reversedGiftId":21728,"amountFormatted":"-$55.00","isTaxDeductible":true,"baseCurrencyCode":"USD","giftDesignations":[{"id":12689,"display":"General Fund: -$55.00","project":"General Fund","projectId":394,"projectUrl":"/api/Project/394","projectCode":"1001","projectType":"Default","projectLocation":"Unspecified","amountDesignated":-55,"externalAccountingCode":null}],"createDateTimeUtc":"2023-12-29T20:51:51.5903749Z","giftDateFormatted":"12/22/2023","giftTypeFormatted":"Reversing Transaction","transactionSource":null,"cashAccountingCode":null,"isAcknowledgedGift":false,"acknowledgementDate":null,"contactIndividualId":3116,"contactMembershipId":null,"modifiedDateTimeUtc":"2023-12-29T20:51:51.741603Z","acknowledgementNotes":null,"contactPassthroughId":null,"recurringGiftPayments":[],"acknowledgeeIndividualId":null}
```

### Response Body (Failure)

```json
{"message":"The request is invalid.","modelState":{"":["Gift Transaction already exists."]}}
```

### Response Body (Error)

```json
{"message":"The request is invalid.","modelState":{"":["Gift Transaction already exists."]}}
```

### Response Status (Success)

```
200
```

### Response Status (Failure)

```
400
```

### Response Status (Error)

```
null
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.anedot.com/integrations/crm-donor-management/virtuous.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
