The Recharge Bundle Selection Updated event triggers a Listrak Custom Event when a customer updates the items in their product bundle. In the journey, you can message a customer to confirm their bundle information, billing details, and more.
This guide will outline the personalization options to customize the journey and messages triggered by the Recharge integration.
Personalizing the Journey with Custom Event Properties
The Custom Event called Recharge Bundle Selection Updated [[Your Store Name]] is automatically created as part of the integration process. Recharge passes the following payload to Listrak customized with the specific product information for what is included in the bundle.
{
"eventCategory": "bundle",
"eventType": "BundleSelectionUpdated",
"eventTimestamp": "2026-04-30T12:15:00.0000000+00:00",
"customer": {
"email": "customer@example.com",
"firstName": "Jane",
"lastName": "Smith",
"externalCustomerId": "24662915678374",
"billingCity": "Philadelphia",
"billingProvince": "Pennsylvania"
},
"subscription": {
"id": "784594001",
"status": "active",
"createdAt": "2026-03-01T10:00:00+00:00",
"updatedAt": "2026-04-30T12:15:00+00:00",
"cancelledAt": null,
"cancellationReason": null,
"orderIntervalUnit": "month",
"orderIntervalFrequency": 1,
"nextChargeScheduledAt": "2026-05-30",
"isPrepaid": false
},
"bundle": {
"selectionId": "318100",
"bundleVariantId": "14435",
"purchaseItemId": "784594001",
"externalProductId": "15268877402278",
"externalVariantId": "56305470505126",
"isFallback": false,
"itemsCount": 2,
"items": [
{
"id": "140031",
"collectionId": "000000000001",
"collectionSource": "shopify",
"price": "18.74",
"quantity": 2,
"product": {
"productId": "15268877402278",
"variantId": "56305470505126",
"title": "Classic Cotton T-Shirt",
"price": "18.74",
"sku": "T100",
"imageUrl": "https://cdn.example.com/tshirt.jpg",
"linkUrl": "https://store.example.com/products/classic-cotton-t-shirt",
"productHandle": "classic-cotton-t-shirt"
}
},
{
"id": "140033",
"collectionId": "000000000003",
"collectionSource": "shopify",
"price": "9.99",
"quantity": 1,
"product": {
"productId": "15268877402300",
"variantId": "56305470505300",
"title": "Classic Cotton Joggers",
"price": "9.99",
"sku": "J100",
"imageUrl": "https://cdn.example.com/joggers.jpg",
"linkUrl": "https://store.example.com/products/classic-cotton-joggers",
"productHandle": "classic-cotton-joggers"
}
}
]
}
}The JSON is saved to a Custom Event field and used to personalize the message. The table below outlines all fields created in Custom Event. Fields other than the JSON can be used as criteria in a Custom Event Decision Split, allowing customers to receive different messages or different logic based on the values of these fields.
Property Name | Data Type |
CustomJson | String |
product_title | String |
customer_billing_city | String |
customer_billing_province | String |
Personalizing the Message with Recharge Data
You can customize any message(s) in the journey based on the data passed in the JSON. The table below outlines the fields you can include in a message to display the data about a customer's bundle. The field values will match what is included in the payload mentioned in the previous section.
Object | Fields Used |
|
|
|
|
|
|
|
|
You have the option to create a fully coded HTML email from scratch or to edit the template that includes the basic design elements listed below.
If you code a message yourself, you can add any or all of fields from the table above. To display the personalized data, you will use the format {{object.fieldname}}. For example, to display the customer's first name uses the following tag. {{customer.firstName}}.
💡 You must use the ForAll Handlebars function to iterate through all of the items in a customer's bundle.
{{ForAll bundle.items}}
{{product.title}}, {{product.sku}}, {{product.imageUrl}}, {{quantity}}, {{price}}
{{/ForAll}}
Example Template
You can also use the example template as a starting point.
[[HB BlockType="Custom" Source="Custom.customJson"]]
<div class="email-wrapper">
<div class="email-container">
<div class="email-header"><div class="brand">Your<span>Store</span></div></div>
<div class="email-hero">
<h1>Your bundle selection has been updated 🔄</h1>
<p>{{customer.firstName}}, your bundle has been updated and will reflect in your next order.</p>
</div>
<div class="email-body">
<p class="greeting">Hi <strong>{{customer.firstName}} {{customer.lastName}}</strong>,<br/><br/>Your bundle selection has been updated. The revised item list below will be included in your next subscription order.</p>
<p class="section-label">Your Bundle Items</p>
<table style="width:100%;border-collapse:collapse;margin:0 0 28px;">
<thead>
<tr>
<th style="padding:10px 14px;font-size:11px;font-weight:700;text-transform:uppercase;color:#64748b;border-bottom:2px solid #e2e8f0;text-align:left;"></th>
<th style="padding:10px 14px;font-size:11px;font-weight:700;text-transform:uppercase;color:#64748b;border-bottom:2px solid #e2e8f0;text-align:left;">Item</th>
<th style="padding:10px 14px;font-size:11px;font-weight:700;text-transform:uppercase;color:#64748b;border-bottom:2px solid #e2e8f0;text-align:left;">SKU</th>
<th style="padding:10px 14px;font-size:11px;font-weight:700;text-transform:uppercase;color:#64748b;border-bottom:2px solid #e2e8f0;text-align:left;">Qty</th>
<th style="padding:10px 14px;font-size:11px;font-weight:700;text-transform:uppercase;color:#64748b;border-bottom:2px solid #e2e8f0;text-align:left;">Price</th>
</tr>
</thead>
<tbody>
{{ForAll bundle.items}}
<tr>
<td style="padding:12px 14px;border-bottom:1px solid #f1f5f9;"><img src="{{product.imageUrl}}" style="width:48px;height:48px;object-fit:cover;border-radius:6px;" /></td>
<td style="padding:12px 14px;border-bottom:1px solid #f1f5f9;">{{product.title}}</td>
<td style="padding:12px 14px;border-bottom:1px solid #f1f5f9;">{{product.sku}}</td>
<td style="padding:12px 14px;border-bottom:1px solid #f1f5f9;">{{quantity}}</td>
<td style="padding:12px 14px;border-bottom:1px solid #f1f5f9;">${{price}}</td>
</tr>
{{/ForAll}}
</tbody>
</table>
<table class="detail-table">
<tr><td class="label">Subscription Status</td><td class="value"><span class="badge">{{subscription.status}}</span></td></tr>
<tr><td class="label">Billing Frequency</td><td class="value">Every {{subscription.orderIntervalFrequency}} {{subscription.orderIntervalUnit}}(s)</td></tr>
<tr><td class="label">Next Charge Date</td><td class="value">{{subscription.nextChargeScheduledAt}}</td></tr>
<tr><td class="label">Bundle Items</td><td class="value">{{bundle.itemsCount}}</td></tr>
<tr><td class="label">Bundle Selection ID</td><td class="value">{{bundle.selectionId}}</td></tr>
<tr><td class="label">Subscription ID</td><td class="value">{{subscription.id}}</td></tr>
</table>
<div class="cta-wrap"><a href="#" class="cta-btn">Manage My Bundle</a></div>
</div>
<div class="email-footer">
<p class="footer-brand">YourStore</p>
<p>This email was sent to {{customer.email}}</p>
<p>{{customer.billingCity}}, {{customer.billingProvince}}</p>
</div>
</div>
</div>
[[/HB]]