# Setup

This setup prepares the shared pieces used by the Salesforce Marketing Cloud integration. It covers signing keys for authenticated links and the installed package used by the Journey Builder custom activities.

<details>

<summary><strong>Real-world examples</strong></summary>

* A CRM team wants personalized pass links in Email Studio.
* A marketing team wants Journey Builder to trigger pass updates after a purchase or a tier change.
* A CRM team wants Journey Builder to send wallet notifications without changing pass data.
* An implementation partner wants a staging setup before production rollout.

</details>

## Prerequisites

Access is required on both sides.

* **The Wallet Crew**: access to the admin console.
* **Salesforce Marketing Cloud**: access to **Setup**, **Key Management**, **Content Builder**, and **Installed Packages**.
* The target tenant identifier is known.
* A test contact exists in Salesforce Marketing Cloud.

## Configure the signing key for authenticated pass links

The Wallet Crew pass link is signed as a JWT. Salesforce Marketing Cloud needs a symmetric key to sign this token in AMPscript.

{% stepper %}
{% step %}

### Copy the shared secret from The Wallet Crew

Open the tenant security secrets in The Wallet Crew admin console.

Copy the first secret. This value is used as the pre-shared key in Salesforce Marketing Cloud.
{% endstep %}

{% step %}

### Create a symmetric key in Salesforce Marketing Cloud

Open **Setup** → **Administration** → **Key Management**.

Create a new **symmetric key** and paste the The Wallet Crew secret into **Pre-Shared Key**.

<div data-with-frame="true"><figure><img src="/files/XLnbodNrrEhnAsVEjRZJ" alt="Salesforce Marketing Cloud Key Management screen used to create a symmetric key for The Wallet Crew"><figcaption><p>Create a symmetric key and store the The Wallet Crew secret as the pre-shared key.</p></figcaption></figure></div>
{% endstep %}

{% step %}

### Save the external key value

Keep the external key value available.

The AMPscript example uses this value as `@keyId` when calling `GetJWTByKeyName`.
{% endstep %}
{% endstepper %}

## Create the installed package for Journey Builder

This package is only required when Journey Builder needs to trigger pass updates or wallet notifications.

{% stepper %}
{% step %}

### Create the package

Open **Setup** → **Apps** → **Installed Packages**.

Create a package named **The Wallet Crew**.

<div data-with-frame="true"><figure><img src="/files/2Oj1Edjo19R0OJ7k2aT4" alt="Salesforce Marketing Cloud Installed Packages screen showing creation of a The Wallet Crew package"><figcaption><p>Create a dedicated installed package for The Wallet Crew Journey Builder activity.</p></figcaption></figure></div>
{% endstep %}

{% step %}

### Copy the JWT Signin Key

Open the package and copy the **JWT Signin Key**.

<div data-with-frame="true"><figure><img src="/files/jc48CcHc5trcLGJpztm3" alt="Salesforce Marketing Cloud package screen showing the JWT Signin Key"><figcaption><p>The JWT Signin Key is required by The Wallet Crew custom activity configuration.</p></figcaption></figure></div>
{% endstep %}

{% step %}

### Ask The Wallet Crew support to enable the Salesforce Marketing Cloud connector

The Salesforce Marketing Cloud connector must be enabled first on the tenant.

Ask The Wallet Crew support to enable the connector before continuing.
{% endstep %}

{% step %}

### Paste the sign-in key in The Wallet Crew back office

Open **Data & Integrations** → **Connectors** → **SFMC** in The Wallet Crew back office.

Paste the **JWT Signin Key** copied from the Salesforce Marketing Cloud package into **Sign-in Key**, then save.
{% endstep %}

{% step %}

### Register the Journey Builder activities

From the same package, add a **Journey Builder Activity** component for each activity.

Use these values for **Push update**:

* **Category**: `Messages`
* **Endpoint URL**: `https://app.neostore.cloud/api/<tenantId>/webhooks/listeners/sfmc/actions/pushupdate`

Use these values for **Notify**:

* **Category**: `Messages`
* **Endpoint URL**: `https://app.neostore.cloud/api/<tenantId>/webhooks/listeners/sfmc/actions/notify`

`<tenantId>` is the The Wallet Crew tenant identifier.

<div data-with-frame="true"><figure><img src="/files/nIiTu2xUi2g9AROlispC" alt="Salesforce Marketing Cloud Journey Builder Activity component form for The Wallet Crew push update endpoint"><figcaption><p>Register the The Wallet Crew Journey Builder activity with the tenant-specific push update endpoint.</p></figcaption></figure></div>
{% endstep %}
{% endstepper %}

## Validate the setup

Validation should start before any campaign build.

* Confirm the symmetric key exists in **Key Management**.
* Confirm the external key value is available for AMPscript.
* Confirm the installed package contains the Journey Builder activity component required by the target use case.
* Confirm the **Sign-in Key** is saved in **Data & Integrations** → **Connectors** → **SFMC**.
* Confirm each endpoint URL contains the correct tenant identifier.
* Confirm a test contact is available for preview and journey testing.

## FAQ

<details>

<summary><strong>Is the installed package required for Email Studio pass links?</strong></summary>

No. The installed package is only required for the Journey Builder custom activities.

Email Studio pass links only need the symmetric signing key.

</details>

<details>

<summary><strong>Which environment should be configured first?</strong></summary>

Staging should be configured first.

This makes it easier to validate token signing, contact resolution, and Journey Builder execution before production rollout.

</details>

<details>

<summary><strong>What is the most common setup error?</strong></summary>

The most common issue is a mismatch between the The Wallet Crew secret and the Salesforce Marketing Cloud symmetric key.

For Journey Builder, the next common issue is a wrong tenant identifier in the endpoint URL.

Another common issue is registering the wrong activity endpoint for the intended use case.

</details>


---

# 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://docs.thewalletcrew.io/connect/marketing-automation/salesforce-marketing-cloud/setup.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.
