---
title: Salesforce Classic
description: Learn how to connect Anedot to Salesforce Classic with step-by-step instructions on package installation, custom field mapping, metadata setup, and resolving common integration issues.
---

[Skip to content](https://help.anedot.com/knowledge/salesforce#main-content)

[![anedot-logo](https://help.anedot.com/hubfs/anedot-logo.svg)](https://help.anedot.com/knowledge?hsLang=en)

Open main navigation

Close main navigation

- [Get Support ⤴](https://www.anedot.com/getsupport)

[Get Support ⤴](https://www.anedot.com/getsupport)

 Here to help 👋

- There are no suggestions because the search field is empty.

1. [Public Help Center](https://help.anedot.com/knowledge?hsLang=en)
2. [Integrations](https://help.anedot.com/knowledge/integrations?hsLang=en)
3. [CRM & Donor Management Systems](https://help.anedot.com/knowledge/integrations?hsLang=en#crm-donor-management-systems)

# Salesforce Classic

## A comprehensive guide for setting up, managing, and troubleshooting the Anedot integration with Salesforce Classic, including package installation, custom metadata, and field mapping.

**Salesforce** is a leading Customer Relationship Management (CRM) platform used by organizations to manage supporters, donations, processes, and communications.

Connecting Anedot to Salesforce requires a proper setup to ensure accurate and reliable data sync between the two systems. Because the process involves configuration and testing, we recommend completing the setup in **both Anedot and Salesforce sandbox environments** before going live.

> *To avoid impacting live data, all initial setup should be done in a sandbox environment.*

---

### **Table of Contents**

- [Get Started](https://help.anedot.com/knowledge/salesforce#get-started) 
    - [Install the Anedot Package](https://help.anedot.com/knowledge/salesforce#install-anedot-package)
    - [Configure the Anedot Package in Salesforce](https://help.anedot.com/knowledge/salesforce#configure-anedot-package) 
          - [Anedot Settings](https://help.anedot.com/knowledge/salesforce#anedot-settings)
    - [Connect Anedot to Salesforce](https://help.anedot.com/knowledge/salesforce#connect-anedot-to-sf)
- [Data Relays](https://help.anedot.com/knowledge/salesforce#data-relays)
- [Custom Templates](https://help.anedot.com/knowledge/salesforce#custom-templates)
- [Anedot Mapping and Custom Metadata](https://help.anedot.com/knowledge/salesforce#anedot-mapping-custom-metadata) 
    - [Create Custom Metadata in Salesforce](https://help.anedot.com/knowledge/salesforce#create-custom-metadata)
    - [Set Up Anedot Mapping](https://help.anedot.com/knowledge/salesforce#set-up-anedot-mapping)
- [Field Mapping](https://help.anedot.com/knowledge/salesforce#field-mapping)
- [Default Anedot Fields](https://help.anedot.com/knowledge/salesforce#default-anedot)
- [Payload Examples](https://help.anedot.com/knowledge/salesforce#payload)
- [Troubleshooting](https://help.anedot.com/knowledge/salesforce#troubleshooting)

---

### **Get Started**

To begin, [contact our Support team](https://www.anedot.com/getsupport). We’ll create a sandbox account for your organization in Anedot. After successful testing, we’ll enable the Salesforce integration on your live account.

*Before you begin, ensure your Salesforce user profile has the **Download AppExchange Packages** permission enabled.*

---

### **Install the Anedot Package**

Follow these steps to install the Anedot package in Salesforce:

1. Log in with your Salesforce credentials.
2. Add the following to the end of your URL:   
   `/packaging/installPackage.apexp?p0=04t8Y000000ktYT&isdtp=p1`  
   *Example URL:*   
   `https://anedot.lightning.force.com/packaging/installPackage.apexp?p0=04t8Y000000ktYT&isdtp=p1`
3. You'll be redirected to the **Package Installation Details** page.
4. Review the package components.
5. Choose **Install for All Users**.
6. Click **Install**.
7. Approve third-party access by checking  
   **Yes, grant access to these third-party websites**, then click **Continue**.
   
   > *Note: This grants access to Salesforce APEX API.*
8. Wait for the installation to complete (a few minutes).
9. You’ll receive an **email confirmation** from Salesforce when installation is complete.

---

### **Configure the Anedot Package in Salesforce**

1. Open the **App Launcher** in Salesforce.
2. Select **Anedot**.
3. Navigate to the **Anedot Settings** tab.
4. In the top-right, click **New** to create your Anedot Settings record.
5. Set your default values (e.g. **Opportunity Stage**).
6. Click **Create** when finished.
7. Copy the **Webhook URL** from the settings page—this will be used to complete the connection from Anedot.

---

#### Anedot Settings

***Note:** These defaults are based on a standard NPSP instance. If your organization has custom stages, statuses, or record types, you’ll need to adjust mappings accordingly.*

| **Setting** | **Options** | **Description** |
| --- | --- | --- |
| **Create GAU Allocation Records** | Checkbox (default: checked) | Automatically create General Accounting Unit records. |
| **Default Campaign Member Status** | Dropdown (default: Planned) | Sets default status for campaign members. |
| **Donation Amount Field** | Dropdown (default: Total Donation Amount) | Sets which value to use as donation amount. |
| **Integration Error Email** | Text field | Email address to receive integration error alerts. |
| **Opportunity Closed-Won Stage** | Dropdown (default: Closed Won) | Default stage for successful opportunities. |
| **Opportunity Open Stage** | Dropdown (default: Prospecting) | Default stage for open (future) opportunities. |
| **Update Contact Info from Anedot** | Checkbox (default: checked) | Updates existing contacts using matched email. |
| **Default Campaign** | Campaign search | Assigns all records to one campaign instead of Action Page campaigns. |
| **Default GAU** | GAU search | Assigns all donations to one fund. |
| **Opportunity Closed-Lost Stage** | Dropdown (default: Closed Lost) | Used for failed or canceled donations. |
| **Single Donation Record Type** | Dropdown (default: NPSP Default) | Sets record type for single donations. |
| **Webhook URL** | Auto-generated | Use this to connect Salesforce in Anedot. |
| **Source Object** | Dropdown (NPSP or Salesforce) | Defines which Salesforce platform to map to. |

 

---

### **Connect Anedot to Salesforce**

1. Log in to **Anedot**.
2. Open the fundraising account you wish to connect.
3. Navigate to **Settings \> Integrations \> Directory**.
4. Click **+ New Connection**.
5. Choose **Salesforce** from the list.
6. Enter your **Salesforce Sub-Domain** (e.g. `yourname` if your domain is `yourname.my.salesforce.com`).
7. *(Optional)* Add a **Custom Field Mapping** template.
   
   **Example Template:**
   
   ```
   {  "close_date": "",  "donation_method": "CREDIT CARD",  "action_page_id": "ANEDOT",  "stage": "RECEIVED",  "name": " ",  "prefix": "",  "status": "Donor"}
   ```
8. Click **Save**.
9. You’ll be redirected to Salesforce to log in and **authorize access**.

*Ensure the user connecting Anedot to Salesforce has **Read, Write, and Edit** access to the following objects:*

- *Contacts *
- *Opportunities *
- *Campaigns & Campaign Members *
- *GAU Allocations*
- *Accounts *

       10. Once permissions are confirmed, the connection is complete!

---

### **Data Relays**

Anedot automatically sends data from **Donation** and **Lead Pages** to Salesforce.

- **Action Pages** are synced as **Campaigns** in Salesforce.
- You can set a **default Campaign** for all submissions in **Anedot Settings**.
  
    - *Example:* If you receive donations from multiple vendors, you may want all submissions to be routed to a dedicated “Anedot” Campaign in Salesforce.  
      ![Data Relays - Default Campaign](https://help.anedot.com/hs-fs/hubfs/Salesforce/Data%20Relays%20-%20Default%20Campaign.png?width=600&height=178&name=Data%20Relays%20-%20Default%20Campaign.png)

---

#### **Reversed Transactions**

Reversed or refunded transactions are logged as **Anedot Donation Exceptions** in Salesforce.

- If a payload includes any of the following event labels, a record is created in the `Anedot_Donation_Exception__c` object:
  
    - `commitment_failed_to_process`
    - `donation_chargeback_reversed`
    - `donation_partially_refunded`
    - `donation_refunded`
    - `donation_voided`

Each exception record includes the event type, reversal amount, and a link to the related Salesforce **Opportunity**, if available.

1. **Viewing Exceptions in Salesforce** 
     1. Find all events in the **Anedot Donation Exceptions** tab within the Anedot app.
     2. The related Opportunity record will also display linked exceptions under the **"Related" \> Anedot Donation Exceptions** section.
        
            - Anedot does not automatically change the Opportunity stage for exceptions. For example, a voided donation will not be marked as `Closed–Lost` unless you set that up via custom mapping in Salesforce.

---

**Gift of Any Amount Products**

To relay **Gift of Any Amount** products, you'll need to create a **Custom Anedot Mapping** using product fields from the `submission_created` event.

---

### Custom Templates

**Custom Templates** allow you to relay custom data fields from Anedot to Salesforce. They can be used to:

- Rename Anedot fields so they match Salesforce field names
- Send organization-specific data directly to **Custom Metadata** fields in Salesforce

---

#### Creating a Custom Template

During **Step 7** of the [Connect Anedot to Salesforce](https://help.anedot.com/knowledge/salesforce#connect-anedot-to-sf) process, you have the option to define or override field names using a Custom Template.

- **Example Template:**
  
  ```
  {"close_date": "","donation_method": "CREDIT CARD","action_page_id": "ANEDOT","stage": "RECEIVED","prefix": ""}
  ```

---

#### Next Steps in Salesforce

1. For each field in your Custom Template, create a **Custom Metadata** record in Salesforce.
2. After the metadata records are created, configure a corresponding **Anedot Mapping** in Salesforce to connect each field to its appropriate Salesforce object field.

This setup ensures your custom field data is relayed and processed correctly within Salesforce.

Continue below to learn how to create and configure Custom Metadata and Anedot Mappings.

---

### **Anedot Mapping and Custom Metadata**

Use **Anedot Mapping** and **Custom Metadata** to configure how Anedot fields are relayed to Salesforce—especially fields not included in the default mappings. This enables you to:

- Map Anedot fields to custom Salesforce fields
- Extend your integration to support organization-specific data requirements

**Default Anedot Fields** are included automatically in Custom Metadata when the Anedot Package is installed.

***Note:** If you are only mapping **Default Anedot Fields**, you can skip this section and go straight to [Set Up Anedot Mapping](https://help.anedot.com/knowledge/salesforce#set-up-anedot-mapping). Custom Metadata is only required if you need to map additional fields not included by default.*

To customize mappings beyond the default setup, you’ll need to create an **Anedot Mapping** within the Anedot Salesforce application. This allows you to define how **Anedot relay fields** (based on **Event Type**) connect to **Salesforce fields** (based on **Object Type**).

If a field is present in the Anedot payload but not supported by default, custom mapping is required to ensure Salesforce can interpret and process the data correctly. This step is essential for users implementing **Custom Templates**. 

***Event Type:**  
 `donation_completed`, `commitment_created`, `submission_created`, `action_page_created`, and `action_page_updated`*

***Object Type:** Contact, Opportunity, Recurring Donation, Campaign Member*

---

###  **Create Custom Metadata in Salesforce**

1. Go to **Setup \> Custom Metadata Types** in Salesforce.
2. Click **Anedot Field**.  
   ![Metadata 2](https://help.anedot.com/hs-fs/hubfs/Salesforce/Metadata%202.png?width=600&height=422&name=Metadata%202.png)
3. Next, click **Manage Anedot Fields**.  
   ![Metadata 3](https://help.anedot.com/hs-fs/hubfs/Metadata%203.webp?width=600&height=421&name=Metadata%203.webp)
4. Select **New** to create a custom mapping.  
   ![Metadata 4](https://help.anedot.com/hs-fs/hubfs/Salesforce/Metadata%204.png?width=600&height=421&name=Metadata%204.png)
5. Fill in the following required fields:  
   ![Metadata 5](https://help.anedot.com/hs-fs/hubfs/Metadata%205.webp?width=600&height=422&name=Metadata%205.webp)
   
     - **Label**: Friendly name *(e.g., `custom_prefix_label`)*
     - **Field Name**: API-compliant name *(e.g., `custom_prefix`)*
     - **Data Type**: Type of field *(Text, Number, etc.)*
     - **Event Type**: Target event *(e.g., donation\_completed, commitment\_created, submission\_created, commitment\_updated, action\_page\_created, action\_page\_updated)*
     - **Path**:Dot-notation path to the value in the payload *(e.g., `payload.prefix`)*. *May be suggested after selecting Event Type, but confirm or adjust as needed.* 

---

### Set Up Anedot Mapping

After defining your custom fields:

1. Open the **Anedot Salesforce app**.
2. Navigate to **Anedot Mapping**.
3. Select the **Target Object** *(dropdown in upper right corner)*.  
   ![Anedot Mapping 2](https://help.anedot.com/hs-fs/hubfs/Salesforce/Anedot%20Mapping%202.png?width=600&height=303&name=Anedot%20Mapping%202.png)
4. Click **Create New Field Mapping**.  
   ![Anedot Mapping 4](https://help.anedot.com/hs-fs/hubfs/Salesforce/Anedot%20Mapping%204.png?width=600&height=588&name=Anedot%20Mapping%204.png)
5. Choose:
   
     - **Event Type**: *(e.g., `donation_completed`)*
     - **Attribute**: *(select from available custom metadata fields)*
     - **Salesforce Field**: where the value should be stored.
6. Click **Save**.

You’ve now mapped a custom Anedot field to your Salesforce environment using Custom Metadata.

---

### Field Mapping

The Anedot Fields match the Submission's Raw Data and the Salesforce Fields match the Request Body relay.

#### Submissions

| **Anedot Field** | **Salesforce Field** |
| --- | --- |
| submission\_created | event |
| (Submission) id | id |
| email | email |
| phone | phone |
| title | title |
| suffix | suffix |
| referrer | referrer |
| utmCodes {term} | utm\_term |
| paymentMethod {cardType} | card\_type |
| (Donation) id  | donations {id} |
| anedotFeeAmount *(net amount in Entries)* | fees {anedot\_fee {amount}} |
| vendorFeeAmount *(net amount in Entries)* | fees {vendor\_fees {amount}} |
| actionPagesFund {id} | fund {id} |
| actionPagesFund {name} | fund {name} |
| actionPagesFund {identifier} | fund {identifier} |
| netAmount *(x100)* | net\_amount |
| grossAmount *(x100)* | gross\_amount |
| feesPaidByDonor *(TRUE/FALSE)* | fees\_paid\_by\_donor |
| lastName | last\_name |
| created\_at | created\_at |
| firstName | first\_name |
| ipAddress | ip\_address |
| occupation | occupation |
| (Product) id | product\_id |
| updatedAt | updated\_at |
| utmCodes {medium} | utm\_medium |
| utmCodes {source} | utm\_source |
| account {id} | account\_uid |
| middleName | middle\_name |
| sourceCode | source\_code |
| utmCodes {content} | utm\_content |
| account {name} | account\_name |
| address {city} | address\_city |
| Internal SKU *(Product)* | product\_code |
| Product Name *(Product)* | product\_name |
| utmCodes {campaign} | utm\_campaign |
| employerName | employer\_name |
| Product Value ( *in dollars* - Product) | product\_value |
| (Action Page) id | action\_page\_id |
| address {line1} | address\_line\_1 |
| address {line2} | address\_line\_2 |
| address {region} | address\_region |
| address {country} | address\_country |
| paymentMethod {cardMonth} / paymentMethod {cardYear} | card\_expiration |
| donations {amount} *(x100)* | donation\_amount |
| actionPage {name} | action\_page\_name |
| paymentMethod {lastDigits} | card\_last\_digits |
| donorProfileId | donor\_profile\_id |
| "" | referrer\_to\_form |
| paymentRequests {responseTime} | created\_at\_iso8601 |
| currentlyEmployed *(TRUE/FALSE)* | currently\_employed |
| updatedAt | updated\_at\_iso8601 |
| address {postalCode} | address\_postal\_code |
| paymentMethod {type} | payment\_method\_type |
| customFieldResponses {multiple fields} | custom\_field\_responses |
| communicationsConsentEmail | communications\_consent\_email |
| communicationsConsentPhone | communications\_consent\_phone |

#### Donation/Commitment

| **Anedot Field** | **Salesforce Field** |
| --- | --- |
| donation\_created  *or* commitment created | event |
| created\_at | date |
| firstName lastName | name |
| email | email |
| phone | phone |
| title | title |
| hosted | origin |
| paymentMethod {type} | source |
| completed | status |
| suffix | suffix |
| (Donation) id | donations {id} |
| anedotFeeAmount *(net amount in Entries)* | fees {anedot\_fees {amount}} |
| vendorFeeAmount *(net amount in Entries)* | fees {vendor\_fees} |
| actionPagesFund {id} | fund {id} |
| actionPagesFund {name} | fund {name} |
| actionPagesFund {identifier} | fund {identifier} |
| paymentMethod {cardType} | card\_type |
| paymentMethod {lastDigits} | card\_last\_digits |
| paymentMethod {cardMonth}  / paymentMethod {cardYear} | credit\_card\_expiration |
| referrer | referrer |
| frequency | frequency |
| lastName | last\_name |
| recurring *(TRUE/FALSE)* | recurring |
| created\_at | created\_at |
| firstName | first\_name |
| ipAddress | ip\_address |
| netAmount *(x100)* | net\_amount |
| occupation | occupation |
| updatedAt | updated\_at |
| account {id} | account\_uid |
| middleName | middle\_name |
| sourceCode | source\_code |
| account {name} | account\_name |
| address {city} | address\_city |
| "" | check\_number |
| created\_at | date\_iso8601 |
| grossAmount *(x100)* | event\_amount |
| "" | organization |
| employerName | employer\_name |
| (Submission) id | submission\_id |
| (Action Page) id | action\_page\_id |
| address {line1} | address\_line\_1 |
| address {line2} | address\_line\_2 |
| address {region} | address\_region |
| (Commitment) id | commitment\_uid |
| address {country} | address\_country |
| actionPage {name} | action\_page\_name |
| 1 | commitment\_index |
| donorProfileId | donor\_profile\_id |
| "" | referrer\_to\_form |
| totalAmount *(x100)* | amount\_in\_dollars |
| donations paymentMethodId | payment\_method\_id |
| paymentRequests {responseTime} | created\_at\_iso8601 |
| currentlyEmployed *(TRUE/FALSE)* | currently\_employed |
| updatedAt | updated\_at\_iso8601 |
| address {postalCode} | address\_postal\_code |
| Payment Method | payment\_description |
| customFieldResponses {multiple fields} | custom\_field\_responses |
| recurring *(TRUE/FALSE)* | is\_recurring\_commitment |
| (Commitment) schedule\_until | commitment\_recurring\_until |
| communicationsConsentEmail | communications\_consent\_email |
| communicationsConsentPhone | communications\_consent\_phone |

#### Action Page Events

| **Anedot Field** | **Salesforce Field** |
| --- | --- |
| action\_page\_updated  or action\_page\_created | event |
| (Action Page) id | id |
| actionPage {name} | name |
| actionPagesFund {id name} "100" | funds {id name percentage} |

#### Custom Field Created

| **Anedot Field** | **Salesforce Field** |
| --- | --- |
| custom\_field\_created | event |
| (custom field) id | id |
| Field Label | label |
| Custom Field Type | input\_type |
| Internal Name | internal\_name |

---

### Default Anedot Fields

#### donation\_completed

| **Available Field** | **Field Type** |
| --- | --- |
| payload.account\_name | text |
| payload.account\_uid | text |
| payload.action\_page\_id | text |
| payload.action\_page\_name | text |
| payload.address\_city | text |
| payload.address\_country | text |
| payload.address\_line\_1 | text |
| payload.address\_line\_2 | text |
| payload.address\_postal\_code | text |
| payload.address\_region | text |
| payload.amount\_in\_dollars | number |
| payload.commitment\_uid | text |
| payload.communications\_consent\_email | boolean |
| payload.communications\_consent\_phone | boolean |
| payload.created\_at | datetime |
| payload.created\_at\_iso8601 | datetime |
| payload.currently\_employed | boolean |
| payload.donation.credit\_card\_expiration | text |
| payload.donation.card\_last\_digits | number |
| payload.donation.card\_type | text |
| payload.donor\_profile\_id | text |
| payload.email | email |
| payload.employer\_name | text |
| payload.event\_amount | number |
| payload.first\_name | text |
| payload.ip\_address | text |
| payload.is\_recurring\_commitment | boolean |
| payload.last\_name | text |
| payload.middle\_name | text |
| payload.net\_amount | number |
| payload.occupation | text |
| payload.origin | text |
| payload.payment\_method\_id | text |
| payload.phone | phone |
| payload.recurring | boolean |
| payload.referrer | text |
| payload.referrer\_to\_form | text |
| payload.source\_code | text |
| payload.submission\_id | text |
| payload.suffix | text |
| payload.title | text |
| payload.updated\_at | datetime |
| payload.updated\_at\_iso8601 | datetime |

#### commitment\_created

| **Available Field** | **Field Type** |
| --- | --- |
| payload.action\_page\_id | text |
| payload.action\_page\_name | text |
| payload.address\_city | text |
| payload.address\_country | text |
| payload.address\_line\_1 | text |
| payload.address\_line\_2 | text |
| payload.address\_postal\_code | text |
| payload.address\_region | text |
| payload.cancellation\_reason | text |
| payload.cancelled\_on | datetime |
| payload.cancelled\_on\_iso8601 | datetime |
| payload.communications\_consent\_email | boolean |
| payload.communications\_consent\_phone | boolean |
| payload.created\_at | datetime |
| payload.created\_at\_iso8601 | datetime |
| payload.currently\_employed | boolean |
| payload.donor\_profile\_id | text |
| payload.email | email |
| payload.employer\_name | text |
| payload.first\_name | text |
| payload.frequency | text |
| payload.id | text |
| payload.ip\_address | text |
| payload.last\_name | text |
| payload.middle\_name | text |
| payload.next\_capture\_on | datetime |
| payload.occupation | text |
| payload.payment\_method\_id | text |
| payload.payment\_status\_message | text |
| payload.phone | phone |
| payload.referrer | text |
| payload.referrer\_to\_form | text |
| payload.submission\_id | text |
| payload.suffix | text |
| payload.token | text |
| payload.total\_amount\_in\_dollars | text |
| payload.updated\_at | datetime |
| payload.whodunnit | text |

#### action\_page\_created and action\_page\_updated

| **Available Field** | **Field Type** |
| --- | --- |
| payload.id | text |
| payload.name | text |

 

---

### Payload Examples

#### Request Headers

```
{"User-Agent": "Anedot-Hookshot/00b1d64",  "X-Request-Id": "1c8927de-1e2f-1234-a8ea-babe5a588869",  "X-Integration-Id": "1125f2f7-7852-419d-9d3e-0c5895d65605",  "X-Integration-Event": "submission_created",  "X-Request-Signature": "123480d84c67a050316ec647416598259cea6f0934806a59bb0eb95bc288942f"  }
```

#### Submissions

```
{"event": "submission_created",  "payload": `{`  "id": "7c7d869c-436b-429b-ac68-69658f1d12eb",  "email": "[[email protected]](/cdn-cgi/l/email-protection)",  "phone": "2252501301",  "title": "",  "suffix": "",  "referrer": "https://qa2.secure.anedot.com/space-force/d3b0000e-4bde-4474-9a85-67627c323752",  "utm_term": "",  "card_type": "master",  "donations": [{"id": "d5ea20f9421b0fb55499c",  "fees": {  "anedot_fees": {"amount": "4.30"  },  "vendor_fees": [ ]  },  "fund": {"id": "75bb50a0-69f3-4f98-8f6b-ac67fc1b1764",  "name": "General Fund",  "identifier": "1001"  },  "product": { },  "net_amount": "95.70",  "gross_amount": "100.0",  "fees_paid_by_donor": "false"  }],  "last_name": "Dote",  "created_at": "2023-05-22 21:28:27 UTC",  "first_name": "Anna",  "ip_address": "65.158.47.175",  "occupation": "Occupation 1",  "product_id": "",  "updated_at": "2023-05-22 21:28:28 UTC",  "utm_medium": "",  "utm_source": "",  "account_uid": "a7229820277fe1a0aeaec",  "middle_name": "",  "source_code": "",  "utm_content": "",  "account_name": "City Food Pantry",  "address_city": "New Orleans",  "product_code": "",  "product_name": "",  "utm_campaign": "",  "employer_name": "Occupation 1",  "product_value": "",  "action_page_id": "469627e5-adac-4348-8191-080a060e2379",  "address_line_1": "123 Anedot Way",  "address_line_2": "4567",  "address_region": "LA",  "address_country": "US",  "card_expiration": "12/2022",  "donation_amount": "$100.00",  "action_page_name": "General Fund",  "card_last_digits": "5454",  "donor_profile_id": "",  "referrer_to_form": "",  "created_at_iso8601": "2023-05-22T21:28:27Z",  "currently_employed": "false",  "updated_at_iso8601": "2023-05-22T21:28:28Z",  "address_postal_code": "99999",  "payment_method_type": "credit_card",  "custom_field_responses": `{``}`,  "communications_consent_email": "false",  "communications_consent_phone": "false"  }}
```

#### Donations

```
{"event": "donation_completed",  "payload": `{`  "date": "2023-05-22 21:28:28 UTC",  "name": "Anna Dote",  "email": "[[email protected]](/cdn-cgi/l/email-protection)",  "phone": "2252501301",  "title": "",  "origin": "hosted",  "source": "credit_card",  "status": "completed",  "suffix": "",  "donation": {"id": "d5ea20f9421b0fb55499c",  "fees": {  "anedot_fees": {"amount": "4.30"  },  "vendor_fees": [ ]  },  "fund": {"id": "75bb50a0-69f3-4f98-8f6b-ac67fc1b1764",  "name": "General Fund",  "identifier": "1001"  },  "products": [ ],  "card_type": "master",  "card_last_digits": "5454",  "donation_project": "",  "credit_card_expiration": "12/2023"  },  "referrer": "https://qa2.secure.anedot.com/space-force/d3b0000e-4bde-4474-9a85-67627c323752",  "frequency": "once",  "last_name": "Dote",  "recurring": "false",  "created_at": "2023-05-22 21:28:28 UTC",  "first_name": "Anna",  "ip_address": "65.158.47.175",  "net_amount": "95.70",  "occupation": "Occupation 1",  "updated_at": "2023-05-22 21:28:28 UTC",  "account_uid": "a7229820277fe1a0aeaec",  "middle_name": "",  "source_code": "",  "account_name": "City Food Pantry",  "address_city": "New Orleans",  "check_number": "",  "date_iso8601": "2023-05-22T21:28:28Z",  "event_amount": "100.00",  "employer_name": "Occupation 1",  "submission_id": "7c7d869c-436b-429b-ac68-69658f1d12eb",  "action_page_id": "469627e5-adac-4348-8191-080a060e2379",  "address_line_1": "123 Anedot Way",  "address_line_2": "4567",  "address_region": "LA",  "commitment_uid": "",  "address_country": "US",  "action_page_name": "General Fund",  "commitment_index": "",  "donor_profile_id": "",  "referrer_to_form": "",  "amount_in_dollars": "100.0",  "payment_method_id": "a024148f-786f-44b6-8ec4-6769fdc72061",  "created_at_iso8601": "2023-05-22T21:28:28Z",  "currently_employed": "false",  "updated_at_iso8601": "2023-05-22T21:28:28Z",  "address_postal_code": "9999",  "payment_description": "MasterCard •••• 5454",  "custom_field_responses": { },  "is_recurring_commitment": "false",  "commitment_recurring_until": "",  "communications_consent_email": "false",  "communications_consent_phone": "false"  } }
```

#### Commitments

```
{"event": "commitment_created",  "payload": `{`  "id": "31fb5453-00e6-47e9-a05b-f12311180706",  "email": "[[email protected]](/cdn-cgi/l/email-protection)",  "phone": "2252501301",  "title": "",  "token": "puxBmva9joKvANBs2mKbuvQB",  "suffix": "",  "referrer": "https://qa2.secure.anedot.com/space-force/cf250f54-6514-473d-90b5-4746f0ffa578",  "frequency": "monthly",  "last_name": "Dote",  "whodunnit": "",  "created_at": "2023-05-03 18:16:59 UTC",  "first_name": "Anna",  "ip_address": "65.80.57.175",  "occupation": "",  "updated_at": "2023-05-03 18:16:59 UTC",  "middle_name": "",  "address_city": "New Orleans",  "cancelled_on": "",  "employer_name": "",  "submission_id": "d81e62b3-81ca-4811-8889-41050e0430a5",  "action_page_id": "fe8031a0-b359-4cf1-ae3d-f25d7cc3eb2c",  "address_line_1": "123 Anedot Way",  "address_line_2": "",  "address_region": "LA",  "address_country": "US",  "next_capture_on": "2023-06-03 18:16:59 UTC",  "action_page_name": "General Fund",  "donor_profile_id": "848f9bbf-c553-4a6e-bf0c-7ad25800bbf0",  "fund_allocations": [{"fund": {  "id": "75bb50a0-69f3-4f98-8f6b-ac67fc1b1764",  "name": "General Fund",  "identifier": "1001"  `}`,  "amount_in_dollars": "50.0"  }],  "referrer_to_form": "",  "payment_method_id": "56d2dfcc-d7b2-46c0-b161-af1ee331f3bd",  "changed_attributes": { },  "created_at_iso8601": "2023-05-03T18:16:59Z",  "currently_employed": "true",  "updated_at_iso8601": "2023-05-03T18:16:59Z",  "address_postal_code": "99999",  "cancellation_reason": "",  "cancelled_on_iso8601": "",  "payment_status_message": "",  "total_amount_in_dollars": "50.0",  "communications_consent_email": "false",  "communications_consent_phone": "false"  }}
```

#### Action Page Events

```
{"event": "action_page_updated",  "payload": {  "id": "469627e5-adac-1234-8191-080a060e2379",  "name": "General Fund",  "funds": [{ "id": "75bb50a0-69f3-4f98-8f6b-ac67fc1b1764",  "name": "General Fund",  "percentage": 100  }]  }}
```

#### Custom Field Created

```
{"event": "custom_field_created",  "payload": { "id": "fd9e7338-9b1b-45eb-8644-1fa8fd47d18a",  "label": "Would you like to subscribe to our newsletter?",  "input_type": "question",  "internal_name": "would_you_like_to_subscribe_to_our_newsletter_"  }  }
```

#### Failure

```
[{"message": "INVALID_HEADER_TYPE",  "errorCode": "INVALID_AUTH_HEADER"  }]
```

---

### Troubleshooting

If you're seeing **Auth Failure** errors in Anedot, such as the one below, you may need to review your **Salesforce Login History** to determine the cause:

```
{ "error": "Authentication failed, check username, password" }
```

#### How to Check Salesforce Login History

1. Log in to **Salesforce** and go to **Setup**.
2. In the **Quick Find** bar, search for and select **Users**.
3. Select **Users** from the results.
4. Switch to **Salesforce Classic** view (if not already there).
5. Under the selected user, open the **Login History** tab.

- - Look for: 
          - **"Username-Password Flow Disabled"**  
            → You'll need to enable **OAuth Username-Password Flows**.
          - **"Password Lockout"**  
            → Wait for the lockout period to end or reset the password.

#### If Data Is Not Relaying to Salesforce

If relays appear successful in Anedot but are not arriving in Salesforce, the issue may be related to your **Salesforce Storage Limits**.

#### How to Check Storage Usage

1. Go to **Setup** in Salesforce.
2. In the **Quick Find** bar, search for **Storage**.
3. Click **Storage Usage**.
4. Review your usage:
   
     - If storage exceeds **60%**, this may prevent relays from being accepted.
     - To resolve, delete older or unnecessary records to free up space.

- [Get Started](https://help.anedot.com/knowledge/get-started?hsLang=en#main-content)

    - [Anedot 101](https://help.anedot.com/knowledge/get-started?hsLang=en#anedot-101)
    - [Apply for an Account](https://help.anedot.com/knowledge/get-started?hsLang=en#apply-for-an-account)
    - [Security](https://help.anedot.com/knowledge/get-started?hsLang=en#security)
- [Action Pages](https://help.anedot.com/knowledge/action-pages?hsLang=en#main-content)

    - [Action Page Basics](https://help.anedot.com/knowledge/action-pages?hsLang=en#action-page-basics)
    - [Page Builder](https://help.anedot.com/knowledge/action-pages?hsLang=en#page-builder)
    - [Advanced Features](https://help.anedot.com/knowledge/action-pages?hsLang=en#advanced-features)
    - [State Specific Pages](https://help.anedot.com/knowledge/action-pages?hsLang=en#state-specific-pages)
- [Finance](https://help.anedot.com/knowledge/finance?hsLang=en#main-content)

    - [Management & Reporting](https://help.anedot.com/knowledge/finance?hsLang=en#management-reporting)
    - [Internal Processing](https://help.anedot.com/knowledge/finance?hsLang=en#internal-processing)
- [Integrations](https://help.anedot.com/knowledge/integrations?hsLang=en#main-content)

    - [CRM & Donor Management Systems](https://help.anedot.com/knowledge/integrations?hsLang=en#crm-donor-management-systems)
    - [Email Marketing & Communication Tools](https://help.anedot.com/knowledge/integrations?hsLang=en#email-marketing-communication-tools)
    - [Integration & Automation Tools](https://help.anedot.com/knowledge/integrations?hsLang=en#integration-automation-tools)
    - [Political Campaign Tools](https://help.anedot.com/knowledge/integrations?hsLang=en#political-campaign-tools)
    - [E-commerce, Financial, and Membership Tools](https://help.anedot.com/knowledge/integrations?hsLang=en#e-commerce-financial-and-membership-tools)
    - [Relay Data & Troubleshooting](https://help.anedot.com/knowledge/integrations?hsLang=en#relay-data-troubleshooting)
- [Settings](https://help.anedot.com/knowledge/settings?hsLang=en#main-content)

    - [Access](https://help.anedot.com/knowledge/settings?hsLang=en#access)
    - [Configuration](https://help.anedot.com/knowledge/settings?hsLang=en#configuration)
    - [Finance](https://help.anedot.com/knowledge/settings?hsLang=en#finance)
    - [Setup](https://help.anedot.com/knowledge/settings?hsLang=en#setup)
    - [Other Actions](https://help.anedot.com/knowledge/settings?hsLang=en#other-actions)
- [Donor Support](https://help.anedot.com/knowledge/donor-support?hsLang=en#main-content)

    - [Getting Started with Your Donor Account](https://help.anedot.com/knowledge/donor-support?hsLang=en#getting-started-with-your-donor-account)
    - [Manage Your Giving](https://help.anedot.com/knowledge/donor-support?hsLang=en#manage-your-giving)
    - [Donor FAQ](https://help.anedot.com/knowledge/donor-support?hsLang=en#donor-faq)

[![Chill listening crop-3](https://help.anedot.com/hubfs/623c96e00d0d93f7d3a66f2e_Anedot_Typemark_Blue.svg "Chill listening crop-3")](https://www.anedot.com/)

<https://facebook.com/anedot> <https://x.com/anedot> <https://instagram.com/anedot> <https://www.youtube.com/@Anedot> <https://open.spotify.com/show/7fK8maOMuj87AeAotVDZRF> [mailto:help@anedot.com](mailto:help@anedot.com)

Copyright © 2025, Anedot, Inc.