# Distribution

Distribution is how buyers add Secutix tickets to Apple Wallet and Google Wallet. You can share a hosted download link, or embed an **Add to Wallet** button. Place the CTA where buyers already are.

Common touchpoints:

* Confirmation email (hosted link)
* Secutix ticket shop order confirmation page (embedded button)
* Your website (embedded button)
* SMS link (useful few hours before the show)

Most deployments combine multiple channels: **Hosted download page** in transactional emails for reliability and **embedded “Add to Wallet” button (SDK)** for instant saves in the ticket shop or owned pages.

## Hosted download page (send via email)

This is the simplest path for buyers. It works well when Secutix already sends a confirmation email after purchase.

{% hint style="info" %}
This page does not require authentication. Buyers can open the email a few minutes before the show and add tickets to their wallet. They do not need to remember their ticket shop login and password.
{% endhint %}

The Wallet Crew exposes an order page optimized for mobile. On iOS, it shows the Apple Wallet button. On Android, it shows the Google Wallet button. On desktop, it falls back to a QR code.

The page lists every ticket in the order. Buyers can add tickets from the same link, without re-opening the email.

<div align="center"><figure><img src="https://3566051324-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWLc8AHXW4tdrAXUBfrYF%2Fuploads%2F7l989f9t9VW3zeDD8aO5%2Fimage.png?alt=media&#x26;token=f9b898f0-71dd-406a-a303-045c6612807c" alt="Hosted download page on iOS showing the ticket list and Apple Wallet button." width="250"><figcaption><p>Hosted download page on iOS.</p></figcaption></figure> <figure><img src="https://3566051324-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWLc8AHXW4tdrAXUBfrYF%2Fuploads%2F1Ic55PA8E09neBoD1WhO%2Fimage.png?alt=media&#x26;token=64aca2e4-094b-402c-8ad2-59fec4592f82" alt="Hosted download page on Android showing the ticket list and Google Wallet button." width="245"><figcaption><p>Hosted download page on Android.</p></figcaption></figure></div>

<div data-with-frame="true"><figure><img src="https://3566051324-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWLc8AHXW4tdrAXUBfrYF%2Fuploads%2FZxPmV2VNMuiiOHdnuDCP%2Fimage.png?alt=media&#x26;token=6f5d7f13-fa74-4ab6-b267-5cab1064a0c9" alt="Hosted download page on desktop showing the ticket list and QR code fallback." width="563"><figcaption><p>Hosted download page on desktop.</p></figcaption></figure></div>

### URL template

Use this URL in Secutix confirmation emails. Replace `<customdomain>` and `<tenantId>` with your values.

```
https://<customdomain>/<tenantId>/tickets?ids.secutix.orderToken=$document.order.secretToken
```

### Layout requirement

The hosted page uses a layout named `tickets`. Create it in your Wallet Crew layouts.

{% code title="Layout configuration (example)" %}

```yaml
type: passList
internationalization:
  resources:
    - /locales/tickets/
headerImage: /public/header.png
```

{% endcode %}

{% hint style="info" %}
Contact The Wallet Crew support if you need help configuring this layout.
{% endhint %}

## “Add to Wallet” in the ticket shop

Use this when you want the CTA directly in the ticket shop UI. This is the best flow for mobile buyers who want to save the ticket right away.

This integration is typically implemented by Secutix. Confirm it is included in your Secutix scope if you do not see it.

<figure><img src="https://3566051324-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWLc8AHXW4tdrAXUBfrYF%2Fuploads%2F3ZMjc8BTqrg952oiaUSQ%2Fimage.png?alt=media&#x26;token=c3e8017b-ac46-448d-843f-0c8d89884191" alt="Add to Wallet button embedded in the Secutix ticket shop order confirmation page."><figcaption><p>“Add to Wallet” button in the ticket shop.</p></figcaption></figure>

## Add the “Add to Wallet” button on your website

Use this when you control the page. Typical examples are an account page, a “My tickets” page, or a post-purchase landing page.

The Wallet Crew SDK (`cinto`) renders the button and detects the device. It shows **Apple Wallet** on iOS and **Google Wallet** on Android. On desktop, it falls back to a QR code.

It follows Apple and Google button guidelines. It stays compatible through SDK updates. It supports localization based on the user language. It also protects distribution integrity.

### Prerequisites

Before integrating the SDK, confirm three things. Your Wallet Crew tenant has the right **Event Ticket** template(s). Wallet Crew is connected to Secutix through the Secutix connector. You can modify the page where you want to render the button.

{% hint style="info" %}
The Wallet Crew Secutix integration uses Secutix `movementId` to uniquely identify a ticket pass.
{% endhint %}

### Script initialization

Copy the ready-to-use snippet from the Secutix integration settings in the admin console. Load it once per page, ideally in the page footer.

<figure><img src="https://3566051324-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWLc8AHXW4tdrAXUBfrYF%2Fuploads%2FlADcXWBVmIuoZgWOesfE%2Fimage.png?alt=media&#x26;token=10bc5045-2da4-4333-8072-f19880afd306" alt="SDK snippet shown in the Secutix integration settings page."><figcaption><p>SDK snippet available in the Secutix integration settings.</p></figcaption></figure>

```html
<script type="text/javascript">
(function (n, e, o) {
    var s=n.createElement("script");
    s.src="https://sdk.neostore.cloud/scripts/"+e+"/cinto@1";
    s.async=1;
    s.onload=function(){neostore.cinto.initialize(e,o);n.body.appendChild(s);};
})(document, "{tenantId}", { });
</script>
```

Replace `{tenantId}` with your Wallet Crew tenant ID.

### Button examples

All options below render the same button. They only differ in how the button identifies the ticket.

<details>

<summary>Using <code>movementId</code>, <code>fileId</code>, <code>contactId</code>, and <code>ticketId</code></summary>

```html
<div data-neostore-addToWalletButton
     data-neostore-externalIdentifiers-secutix.movementId-value="<movementId>"
     data-neostore-externalIdentifiers-secutix.movementId-secret="<fileId>|<contactId>|<ticketId>">
</div>
```

</details>

<details>

<summary>Using HMAC calculation</summary>

```html
<div data-neostore-addToWalletButton
     data-neostore-externalIdentifiers-secutix.movementId-value="<movementId>"
     data-neostore-externalIdentifiers-secutix.movementId-hmac="<hmac_sha256(secret, movementId)>">
</div>
```

</details>

<details>

<summary>Using <code>passId</code> only (resolved server-side)</summary>

```html
<div data-neostore-addToWalletButton
     data-neostore-passId="<passId>">
</div>
```

</details>

### Notes

Keep HMAC computation server-side. Never expose your signing secret in the browser.

If you need `passId`, retrieve it server-side by querying existing passes using the Secutix `movementId` (this does **not** create a pass):

```bash
curl 'https://app.neostore.cloud/api/{tenantId}/passes?pageIndex=0&pageSize=21&filter%5B0%5D.field=identifiers.secutix.movementId&filter%5B0%5D.operator=equals&filter%5B0%5D.value={movementId}' \
  -H 'accept: application/json, text/plain, */*' \
  -H 'X-API-KEY: xxxx'
```

Pick the `id` from the response payload. That value is the `passId` to feed to the SDK. API reference: [GET /api/{tenantId}/passes](https://docs.thewalletcrew.io/develop/api-reference/pass-management/pass#get-api-tenantid-passes).

Need the full website integration guide? See [On your website](https://docs.thewalletcrew.io/enroll/on-your-website).

## FAQ

<details>

<summary><strong>Why does the hosted download page link not work (ticket not found / token invalid), and how do we fix it?</strong></summary>

This means the hosted page cannot resolve the order from the token. The token in the URL is missing or wrong.

Use the exact URL template from this page. Ensure the token variable is populated. Ensure your email tool does not truncate the URL. If the order was replaced, send the buyer a fresh link.

</details>

<details>

<summary><strong>Why does the “Add to Wallet” button show the wrong platform (or only a QR code)?</strong></summary>

The button selects Apple vs Google vs desktop from the user agent. Embedded browsers can make this detection wrong. “Request desktop site” also breaks detection.

Have the buyer open the page in the system browser. Use Safari on iOS. Use Chrome on Android. On desktop, the QR code is the expected fallback.

If it still don't work a "need help" button is available and button for Google and Apple wallet will be displayed.

</details>

<details>

<summary><strong>A buyer has multiple tickets in one order. Can they add all tickets at once?</strong></summary>

Yes. One hosted link can show every ticket in the order.

Buyers add tickets from the list. They do not need one link per ticket.

</details>

<details>

<summary><strong>What happens when a ticket is exchanged, reprinted, or cancelled after it was added to the wallet?</strong></summary>

Reprints and simple edits typically update the existing wallet pass automatically.

Exchanges or replacements usually generate a new ticket. The old pass is then deactivated. The buyer must add the new pass. Re-opening the hosted link is usually enough.

Cancellations deactivate the pass so it can’t be scanned.

For the full behavior matrix, see [Updates, lifecycle, and installation status](https://docs.thewalletcrew.io/connect/ticketing/secutix/updates-lifecycle-and-installation-status).

</details>

## More information

If you still need to configure the pass content, go to [Wallet pass template & field mapping](https://docs.thewalletcrew.io/connect/ticketing/secutix/wallet-pass-template-and-field-mapping).

If you want to validate exchanges, cancellations, and refresh behavior, go to [Updates, lifecycle, and installation status](https://docs.thewalletcrew.io/connect/ticketing/secutix/updates-lifecycle-and-installation-status).
