# How to issue a wallet pass on signup

Issue an Apple or Google Wallet pass when a loyalty member joins, then deliver the install link by email. This guide builds that journey with the [Issue Wallet Pass](/product/customer-journey/journey-elements/channels/issue-wallet-pass/) element.

<Aside type="note" title="Prerequisites">

* Connect the [iOS platform](/developer/first-steps/connect-messaging-services/ios-configuration/) and complete [Apple Wallet pass setup](/developer/first-steps/connect-messaging-services/ios-configuration/ios-wallet-pass-configuration/), and/or configure [Google Wallet for Android](/developer/first-steps/connect-messaging-services/android-configuration/android-google-wallet-configuration/), for the platforms you support.

</Aside>

## Create a Wallet Pass Campaign

The [Issue Wallet Pass](/product/customer-journey/journey-elements/channels/issue-wallet-pass/) element can only issue passes from an existing campaign, so create one first. A campaign's **Platform** is permanent, so if you support both Apple Wallet and Google Wallet, repeat this section once per platform.

1. Go to **Campaigns → Wallet Passes → Campaigns** and click **Create campaign**.
2. Choose **Apple Wallet** or **Google Wallet** as the **Platform**, enter a **Name** for your own reference, for example `Coffee discount` (this labels the campaign in Pushwoosh, it doesn't appear on the pass), and pick a pass style, for example **Store Card** (Apple) or **Loyalty card** (Google).

<img src="/wallet-pass-campaigns-2.webp" alt="New campaign creation form showing Name and Description fields, and a Pass Style picker"/>

3. Under **Basic Information**, set **Pass Name** to what shows on the pass itself, for example `Coffee Shop`.

<img src="/apple-wallet-passes-pass-builder-2.webp" alt="Basic information section with Pass Name, Description, and Logo Text fields"/>

4. Add a field to carry the offer. On Apple Wallet, under **Pass Fields**, this means clicking **Add Field** under **Primary Fields** and setting its **Key (ID)** to `offer` and its **Label** to `OFFER`. Google Wallet's pass types use their own named fields instead of free-form ones. See [Apple Wallet pass fields](/product/messaging-channels/wallet-passes/apple-wallet/pass-builder/#fill-in-pass-fields) or [Google Wallet fields](/product/messaging-channels/wallet-passes/google-wallet/pass-builder/#fill-in-pass-fields) for the exact field names your pass style offers.

<img src="/wallet-pass-campaigns-add-field.webp" alt="Primary Fields section with an Add Field card showing Key (ID) offer, Label OFFER, and Value 10% OFF"/>

5. In **Shared and personal fields**, that field now appears under its Label. Mark it **Personal**. Later, **Issue Wallet Pass** lists it by that Label (`OFFER` on Apple) and fills it with each member's own `offer_code`.

<img src="/wallet-pass-campaigns-3.webp" alt="Shared and personal fields configuration section with Personal toggles next to each field"/>

6. Preview and create the campaign.

Full field-by-field walkthrough: [Create Wallet Pass Campaigns](/product/messaging-channels/wallet-passes/wallet-pass-campaigns/).

## Create the signup event

1. Go to **Audience → Events**, click **Create event**, and choose **Custom Event** (not **Default Event**).

<img src="/events-custom-events-1.webp" alt="Create Event dropdown menu showing Custom Event option"/>

2. Name it `CoffeeClubJoined` and add an attribute for the welcome offer, for example `offer_code`.

<img src="/events-custom-events-3.webp" alt="Event Name field and an attribute row with Name and Type fields highlighted"/>

3. Ask development to send that event when a member joins, including `offer_code`. [Learn more about creating events](/product/audience-data-and-segmentation/events/#implementation)

## Build the journey

Go to **Campaigns → Customer Journey Builder**, click **Create campaign**, and build everything below on one canvas.

### Set the entry

1. Add a [Trigger-based entry](/product/customer-journey/journey-elements/entry-elements/trigger-based-entry/) element to the canvas.
2. Select `CoffeeClubJoined` as the **Event**, so every new member enters as soon as they join.

<img src="/how-to-issue-a-wallet-pass-on-signup-1.webp" alt="Trigger-based entry settings with Event set to CoffeeClubJoined"/>

### Issue the wallet pass

1. Add an [Issue Wallet Pass](/product/customer-journey/journey-elements/channels/issue-wallet-pass/) element after the entry.
2. Name it `Loyalty card`.
3. In **Apple Wallet campaign**, select the campaign you created for Apple. In **Google Wallet campaign**, select the campaign you created for Google, if you support Android. Each dropdown only lists campaigns for its own platform.
4. Under **Personal fields on the pass**, the list shows the personal field(s) from the campaign(s) you selected. Set **OFFER** (or the field you added on Google Wallet, if you support it) to the trigger entry event and choose `offer_code` as the **Attribute**, so each member's pass carries their own welcome offer.

<img src="/how-to-issue-a-wallet-pass-on-signup-2.webp" alt="Issue Wallet Pass named Loyalty card, Apple Wallet campaign set to Coffee discount and Google Wallet campaign empty, with OFFER mapped to offer_code"/>

### Deliver the pass by email

1. Add a [Send Email](/product/customer-journey/journey-elements/channels/email/) element right after **Issue Wallet Pass**.
2. In the message body, insert the install link with vertical bars, for example `{apple_install_link|regular|}` (or `{google_save_link|regular|}`). Do not use a plain `{apple_install_link}`.
3. Turn on **Personalise message with event attributes**.
4. Check **Overwrite placeholder**, set **Source event** to your **Issue Wallet Pass** **Step Name** (`Loyalty card`), and set **Dynamic attribute** to match the placeholder. Full click path: [Deliver the pass to the user](/product/customer-journey/journey-elements/channels/issue-wallet-pass/#deliver-the-pass-to-the-user).

<img src="/journey-elements-issue-wallet-pass-11.webp" alt="Personalise message with event attributes table mapping apple_install_link to the Loyalty card step"/>

<Aside type="note">
The element issues a pass only for the platform(s) you configured, not based on the member's device. Match the install link in the email to the campaign you selected (`apple_install_link` for Apple, `google_save_link` for Google). To deliver by push and branch by platform instead, see [How to issue a wallet pass on geozone entry](/tutorials/product-guides/wallet-passes/how-to-issue-a-wallet-pass-on-geozone-entry/#branch-by-platform-and-send-the-push).
</Aside>

<img src="/how-to-issue-a-wallet-pass-on-signup-3.webp" alt="Send Email settings with Step Name field and an Email Preset selected in the Content section"/>

When `CoffeeClubJoined` fires, the member enters the journey, **Issue Wallet Pass** issues their pass with that event's `offer_code`, and **Send Email** sends the welcome message with the link to add it.

<img src="/how-to-issue-a-wallet-pass-on-signup-4.webp" alt="Assembled coffee shop loyalty journey with Trigger entry, Loyalty card, and Send Email connected in sequence"/>

### Launch and check

1. Launch the journey when the canvas is ready.
2. After a test signup event, check entries and drop-offs on **Issue Wallet Pass** and the stats on **Send Email**.