# How to create a Salesforce external client app

{% hint style="warning" %}
**Salesforce deprecation notice**

Salesforce deprecated connected apps as part of their Spring 2026 release. If you previously set up a connected app for this integration, you will need to create an external client app instead. The steps below reflect the current setup process.
{% endhint %}

To connect to Salesforce, you'll need to create [a Salesforce external client app](https://help.salesforce.com/s/articleView?id=xcloud.external_client_apps.htm\&type=5) and configure it to work with Vonage AI Studio. This can be done in your Salesforce production or sandbox org.

#### Create the external client app

1. Click the gear icon in the upper-right corner of your Salesforce screen and select **Setup**.
2. In the left navigation bar, under Platform Tools, expand **Apps** and click **App Manager**.
3. Click **New External Client App** in the upper-right corner.

<figure><img src="/files/8TZcDejNy9YzmZw280QV" alt=""><figcaption></figcaption></figure>

4. Under Basic Information, fill in the following fields:

<table data-header-hidden="false" data-header-sticky><thead><tr><th>Fied</th><th>Value</th></tr></thead><tbody><tr><td>Name</td><td>Enter a recognisable name, such as <code>Vonage AI Integration</code>.</td></tr><tr><td>API Name</td><td>Auto-populates based on the name you enter. Leave it as is.</td></tr><tr><td>Contact Email</td><td>Enter the email address of the person or team responsible for setting this up. This does not need to be the email of the Salesforce user who will use the integration.</td></tr><tr><td>Distribution State</td><td><p>Select <strong>Local</strong>.</p><p>This means the app is used only within this specific Salesforce org. The Packaged option is for apps published to the Salesforce AppExchange, which is not applicable here.</p></td></tr></tbody></table>

5. Under API (Enable OAuth Settings), check the **Enable OAuth** box.
6. In the Callback URL field, enter: `https://api-eu.vonage.com/oauth/redirect`.

{% hint style="warning" %}
**EU callback URL**

Use the EU callback URL regardless of your region. This is the URL currently synced with the Vonage API Dashboard integrations. Using a different URL will cause authentication to fail.
{% endhint %}

7. Under OAuth Scopes, add the following three scopes to **Selected OAuth Scopes**:
   * Manage user data via APIs (api).
   * Full access (full).
   * Perform requests at any time (refresh\_token, offline\_access).
8. Under Flow Enablement, leave all options unchecked.
9. Under Security, configure the checkboxes as follows:

| Setting                                    | Value                                                                     |
| ------------------------------------------ | ------------------------------------------------------------------------- |
| Require Secret for Web Server Flow         | :white\_check\_mark: Checked                                              |
| Require Secret for Refresh Token Flow      | :white\_check\_mark: Checked                                              |
| Require Proof Key for Code Exchange (PKCE) | ⬜ Unchecked. This must be disabled for the integration to work correctly. |

<figure><img src="/files/16fqnOtm0MOHk9wZvLDL" alt=""><figcaption></figcaption></figure>

10. Click **Create**. A confirmation message appears to confirm that the external client app was created successfully.

#### Configure OAuth policies

After creating the app, you need to update its OAuth policies.

1. On the External Client App page, click **Edit**.
2. Navigate to the Policies section and click **Edit**.
3. Set the following policies:

<table data-header-hidden="false" data-header-sticky><thead><tr><th>Section</th><th>Field</th><th>Value</th></tr></thead><tbody><tr><td>Plugin Policies</td><td>Permitted Users</td><td>All users can self-authorize.</td></tr><tr><td>App Authorization</td><td>Refresh Token Policy</td><td>Refresh token is valid until revoked</td></tr><tr><td>App Authorization</td><td>IP Relaxation</td><td>Relax IP restrictions</td></tr></tbody></table>

#### Retrieve your Consumer Key and Consumer Secret

Once your external client app is created and policies are saved, retrieve the credentials you'll need to complete the setup in the Vonage API Dashboard.

1. From the External Client App page, click **Settings**.
2. Under OAuth Settings, click **Consumer Key and Secret**.
3. Salesforce will send a verification code to your registered email address. Enter the code when prompted.
4. Copy the Consumer Key and Consumer Secret. You'll need both when setting up the Salesforce integration in the Vonage API Dashboard.

**Retrieve credentials from an existing app**

If you've already created an external client app and need to retrieve the credentials again:

1. Go to **Setup** and navigate to **App Manager**.
2. Find your external client app in the list and click **Settings** from its action dropdown.
3. Under OAuth Settings, click **Consumer Key and Secret**.
4. Complete the verification step if prompted. Your Consumer Key and Consumer Secret will then be displayed.

For further instructions on configuring external client apps, see:

* [Create and Configure an External Client App](https://trailhead.salesforce.com/content/learn/projects/build-integrations-with-external-client-apps/create-and-configure-an-external-client-app) on Salesforce Help.
* [Authorization Through External Client Apps and OAuth 2.0](https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/intro_oauth_and_connected_apps.htm) in the Salesforce REST API documentation.<br>


---

# Agent Instructions: Querying This Documentation

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

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://studio.docs.ai.vonage.com/whatsapp/nodes/integrations/legacy-salesforce-authentication-node/salesforce-authentication/how-to-create-a-salesforce-external-client-app.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
