# Salesforce

## Implementation Summary [Permalink for this section](/content/docs/integrations/saas-integrations/developer-reference/example-configs/salesforce#implementation-summary/index.html)

Fides uses the following Salesforce endpoints to retrieve and delete Personally Identifiable Information (PII) when processing a Privacy Request. Right to Access and Right to Delete (Right to Forget) support for each endpoint is noted below.

For more information, see the [Salesforce sObject API reference (opens in a new tab)](https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/resources_sobject_basic_info_post.htm).

| Endpoint | Right to Access | Right to Delete |
| --- | --- | --- |
| [Query (opens in a new tab)](https://developer.salesforce.com/docs/atlas.en-us.238.0.api_rest.meta/api_rest/resources_query.htm) | Yes | No |
| [Contact (opens in a new tab)](https://developer.salesforce.com/docs/atlas.en-us.238.0.object_reference.meta/object_reference/sforce_api_objects_contact.htm) | Yes | Yes |
| [Case (opens in a new tab)](https://developer.salesforce.com/docs/atlas.en-us.238.0.object_reference.meta/object_reference/sforce_api_objects_case.htm) | Yes | Yes |
| [Lead (opens in a new tab)](https://developer.salesforce.com/docs/atlas.en-us.238.0.object_reference.meta/object_reference/sforce_api_objects_lead.htm) | Yes | Yes |
| [Account (opens in a new tab)](https://developer.salesforce.com/docs/atlas.en-us.238.0.object_reference.meta/object_reference/sforce_api_objects_account.htm) | Yes | Yes |
| [CampaignMember (opens in a new tab)](https://developer.salesforce.com/docs/atlas.en-us.238.0.object_reference.meta/object_reference/sforce_api_objects_campaignmember.htm) | Yes | Yes |

## Connection Settings [Permalink for this section](/content/docs/integrations/saas-integrations/developer-reference/example-configs/salesforce#connection-settings/index.html)

Connection instructions may be found in the [configuration guide](/content/docs/integrations/saas-integrations/developer-reference/saas-config/index.html).

**Deletion requests** are fulfilled by masking PII via `UPDATE` or by deleting personal data via `DELETE` endpoints.

## Example Salesforce Configuration [Permalink for this section](/content/docs/integrations/saas-integrations/developer-reference/example-configs/salesforce#example-salesforce-configuration/index.html)

```yaml
saas_config:
  fides_key: salesforce_connector_example
  name: Salesforce SaaS Config
  type: salesforce
  description: A sample schema representing the Salesforce connector for Fidesops
  version: 0.0.1

connector_params:
    - name: domain
    - name: username
    - name: password
    - name: client_id
    - name: client_secret
    - name: access_token

client_config:
    protocol: https
    host: <domain>
    authentication:
      strategy: bearer
      configuration:
        token: <access_token>

test_request:
    method: GET
    path: /services/data/v54.0/sobjects

endpoints:
    - name: contact_list
      requests:
        read:
          method: GET
          path: /services/data/v54.0/query
          query_params:
            - name: q
              value: SELECT Id FROM Contact WHERE Email='<email>'
          param_values:
            - name: email
              identity: email
          data_path: records
    - name: contacts
      requests:
        read:
          method: GET
          path: /services/data/v54.0/sobjects/Contact/<contact_id>
          param_values:
            - name: contact_id
              references:
                - dataset: salesforce_connector_example
                  field: contact_list.Id
                  direction: from
        update:
          method: PATCH
          path: /services/data/v54.0/sobjects/Contact/<contact_id>
          body: |
            {
              <masked_object_fields>
            }
          param_values:
            - name: contact_id
              references:
                - dataset: salesforce_connector_example
                  field: contacts.Id
                  direction: from
    - name: case_list
      requests:
        read:
          method: GET
          path: /services/data/v54.0/query
          query_params:
            - name: q
              value: SELECT Id FROM Case WHERE ContactId='<contact_id>'
          param_values:
            - name: contact_id
              references:
                - dataset: salesforce_connector_example
                  field: contact_list.Id
                  direction: from
          data_path: records
    - name: cases
      requests:
        read:
          method: GET
          path: /services/data/v54.0/sobjects/Case/<case_id>
          param_values:
            - name: case_id
              references:
                - dataset: salesforce_connector_example
                  field: case_list.Id
                  direction: from
        update:
          method: PATCH
          path: /services/data/v54.0/sobjects/Case/<case_id>
          body: |
            {
              <masked_object_fields>
            }
          param_values:
            - name: case_id
              references:
                - dataset: salesforce_connector_example
                  field: cases.Id
                  direction: from
    - name: lead_list
      requests:
        read:
          method: GET
          path: /services/data/v54.0/query
          query_params:
            - name: q
              value: SELECT Id FROM Lead WHERE Email='<email>'
          param_values:
            - name: email
              identity: email
          data_path: records
    - name: leads
      requests:
        read:
          method: GET
          path: /services/data/v54.0/sobjects/Lead/<lead_id>
          param_values:
            - name: lead_id
              references:
                - dataset: salesforce_connector_example
                  field: lead_list.Id
                  direction: from
        update:
          method: PATCH
          path: /services/data/v54.0/sobjects/Lead/<lead_id>
          body: |
            {
              <masked_object_fields>
            }
          param_values:
            - name: lead_id
              references:
                - dataset: salesforce_connector_example
                  field: leads.Id
                  direction: from
    - name: accounts
      requests:
        read:
          method: GET
          path: /services/data/v54.0/sobjects/Account/<account_id>
          param_values:
            - name: account_id
              references:
                - dataset: salesforce_connector_example
                  field: contacts.AccountId
        update:
          method: PATCH
          path: /services/data/v54.0/sobjects/Account/<account_id>
          body: |
            {
              <masked_object_fields>
            }
          param_values:
            - name: account_id
              references:
                - dataset: salesforce_connector_example
                  field: accounts.Id
                  direction: from
    - name: campaign_member_list
      requests:
        read:
          method: GET
          path: /services/data/v54.0/query
          query_params:
            - name: q
              value: SELECT Id FROM CampaignMember WHERE Email='<email>'
          param_values:
            - name: email
              identity: email
          data_path: records
    - name: campaign_members
      requests:
        read:
          method: GET
          path: /services/data/v54.0/sobjects/CampaignMember/<campaign_member_id>
          param_values:
            - name: campaign_member_id
              references:
                - dataset: salesforce_connector_example
                  field: campaign_member_list.Id
                  direction: from
        update:
          method: PATCH
          path: /services/data/v54.0/sobjects/CampaignMember/<campaign_member_id>
          body: |
            {
              <masked_object_fields>
            }
          param_values:
            - name: campaign_member_id
              references:
                - dataset: salesforce_connector_example
                  field: campaign_members.Id
                  direction: from
```
