User Selected Perks
Overview
User Selected Perks (USP) allows users to select relevant offers at critical engagement points, such as checkout, registration, or event participation, before completing a key action. Instead of redirecting users off-site, USP captures their selections during the active session and defers offer delivery until after the desired action is completed.
This workflow increases conversion by maintaining user focus and building anticipation for post-action rewards. Publishers can deliver selected offers via email, SMS, or other channels, triggered by custom events.
USP integrates with existing MomentPerks implementations through the JavaScript SDK or MomentPerks API, supporting flexible delivery and seamless user experiences.
Key Benefits
- Empowers users to select offers most relevant to their interests.
- Drives engagement during critical conversion moments.
- Enables follow-up communication workflows based on actual user selections.
Prerequisites
Before using USP, ensure the following:
- USP must be enabled for your account. Contact your MomentScience account manager to activate it.
- You must have an existing MomentPerks integration using either the JavaScript SDK or the Moments API.
How It Works
- Display available offers: Users see a Multi Offer Unit (MOU) with available offers, each with a checkbox.
- User selects offers: Users choose one or more offers that interest them. Offers can be pre-selected by default, depending on your configuration.
- User completes a key action: When users finish a publisher-defined action, such as checkout, registration, or content engagement, your site triggers a confirmation event. This event is fully customizable to your workflow.
- Webhook is triggered: The MomentScience SDK detects the event and sends a webhook to your configured endpoint. The webhook contains data about the offers the user selected.
- Deliver personalized offers: Use the received data to send offers via email, SMS, or in-app messages, or to initiate other follow-up workflows.
Example Use Cases
Use Case | Description |
|---|---|
E-commerce checkout | Users select perks before completing checkout, then receive offers via email alongside order receipt after purchase |
Event engagement | Attendees select perks via interactive kiosks or OOH screens, receiving offers via SMS after completing specified event actions (e.g., booth visit, session attendance) |
Exit-intent retention | Users select offers before leaving your site and receive them after completing a specific action (e.g., account creation, email subscription) |
Account onboarding | New users select perks during signup and receive selected offers after completing profile setup or verification |
App engagement | Mobile users select perks in-app and receive them after completing key app actions (e.g., completing first order, reaching usage milestone) |
Integration Methods
USP can be layered on top of your existing MomentPerks integration, whether using the JavaScript SDK or the Moments API.
Option A: JavaScript SDK
- The JavaScript SDK provides the simplest integration path for USP functionality. Important considerations:
- USP currently supports Multi Offer Unit (MOU) only
- Single Offer Unit (SOU) is not supported
Option B: USP APIs
Use the USP REST API for advanced customization and control. This option is recommended for developers needing custom front-end or delivery logic.
Configuring USP at the Theme Level
USP is configured per theme, allowing you to enable or disable the feature for different implementations. You can have multiple themes with different USP configurations.
Setting Up the USP Webhook
To start receiving USP webhook payloads, follow these steps in the MomentScience Dashboard:
- In the MomentScience Dashboard, navigate to Settings > Configurations.
- Scroll to the Postbacks and Webhooks section.
- Click Manage to open the webhook configuration page.
- Switch to the Webhooks for User Selected Perks tab.
- Choose the HTTP method (POST or GET).
- Enter the webhook URL.
- Click Save to confirm.
To test the integration, click Test Endpoint. This sends a dummy payload to verify the endpointβs readiness.
ο»Ώ
ο»Ώ
ο»Ώ
ο»Ώ
Enabling USP in the dashboard
- Select the theme to configure.
- Open the Theme Settings tab.
- Enable the User Selected Perks toggle.
- Once enabled, a secondary toggle, Check All Offers for USP (default: false) appears:
- When enabled, all offers will be pre-selected by default.
- When disabled, no offers are pre-selected, and users must manually choose.
- Once you have made your changes, click on "Save" button to apply changes to the seelected theme
Configuring USP per Webhook
The User Selected Perks (USP) Webhook sends offer selection data and user metadata to the publisherβs endpoint after action completion. This enables you to store, analyze, or act on offer selections without interrupting the user experience.
{
"body": {
"campaigns": [
{
"campaign_id": 12345,
"advertiser_name": "Example Store",
"title": "20% Off Athletic Wear",
"short_headline": "Save on Sports Gear",
"short_description": "Get 20% off all athletic wear",
"offer_description": "Valid on all athletic wear including shoes, clothing, and accessories. Minimum purchase $50.",
"terms_and_conditions": "Offer expires 30 days from claim date. Cannot be combined with other offers.",
"click_url": "https://example.com/claim?token=abc123",
"cta_yes": "Claim Offer",
"cta_no": "No Thanks",
"mini_text": "Limited time offer",
"image": "https://cdn.example.com/campaign-image.jpg",
"is_loyaltyboost": false,
"tags": ["retail", "clothing"],
"creatives": [
{
"id": 456,
"url": "https://cdn.example.com/creative-456.jpg",
"type": "image",
"creative_type": "banner",
"aspect_ratio": 1.5,
"height": 300,
"width": 450,
"is_primary": true
}
]
}
],
"pub_user_id": "user_12345",
"selected": 1,
"session_id": "sess_abc123def456"
}
}USP Webhook Payload Structure
Field | Type | Description |
|---|---|---|
pub_user_id | String | Unique user ID provided by the publisher (non-PII). |
selected | Number | Indicates whether the user selected offers (1 = selected, 0 = none). |
session_id | String | Unique session identifier from the SDK. |
campaigns[] | Array | List of selected campaigns. Each object contains: |
campaigns[] fields
Field | Type | Description |
|---|---|---|
campaign_id | Number | Internal campaign ID. |
advertiser_name | String | Advertiser name. |
title / short_headline / short_description | String | Display metadata. |
offer_description | String | Full description of the offer. |
terms_and_conditions | String | Terms of the selected offer. |
click_url | String | Offer destination URL (may include tracking). |
cta_yes / cta_no | String | Call-to-action text for user selection. |
mini_text | String | Additional user-facing notes (e.g., disclaimers). |
image | String | Default image URL for the offer. |
pixel / adv_pixel_url | String | Optional tracking pixels. |
save_for_later_url | String | URL to return to the offer later. |
description | String | Alternate or extended description. |
is_loyaltyboost | Boolean | Indicates if the offer is part of LoyaltyBoost. |
loyaltyboost_requirements | Object | Requirements metadata for LoyaltyBoost (if any). |
offerwall_enabled | Boolean | Whether this campaign supports Offerwall. |
perkswallet_enabled | Boolean | Whether this campaign supports PerksWallet. |
tags | Array | Optional categorization tags. |
beacons
Field | Type | Description |
|---|---|---|
beacons.close | String | Tracking beacon for offer closure. |
beacons.no_thanks_click | String | Beacon triggered when user opts out. |
creatives[]
Field | Type | Description |
|---|---|---|
id | Number | Creative asset ID. |
url | String | URL to the asset. |
type / creative_type | String | Media type and creative classification. |
aspect_ratio | Number | Aspect ratio of the asset. |
height / width | Number | Dimensions in pixels. |
user_id | Number | ID of the user associated with upload |
is_primary | Boolean | Whether this is the primary asset. |
campaign (nested object)
Field | Type | Description |
|---|---|---|
is_product | Boolean | Indicates if the offer is a product-type campaign. |
offer_description | String | Description specific to the campaign wrapper. |
campaign_images[] | Array | List of additional or alternate campaign images. |
campaign_images[] follows same structure as creatives[].
useraction_cta / useraction_url
Field | Type | Description |
|---|---|---|
useraction_cta | string / null | Optional CTA label for external user actions. |
useraction_url | string / null | Optional URL for CTA. |