Touchpoints & Curated Lists
Fetch and display reward widgets, product collections, and promotional content in your Unity game
Touchpoints & Curated Lists
Beyond the built-in store, you can render reward widgets and product collections directly in your game UI using touchpoints and curated lists.
Touchpoints
Touchpoints are visual widget configurations that control how rewards and promotions appear in your game. Use the TouchpointManager to fetch touchpoint data and render custom widgets.
Fetching touchpoints
// Fetch by name (recommended for most use cases)
TouchpointResponse store = await TouchpointManager.GetTouchpointByName("flash-sale-card", "coin-uuid-abcd");
// Fetch by ID
TouchpointResponse offer = await TouchpointManager.GetTouchpointById(
"6f9a5737-0247-4a71-89eb-b5d02212f179",
"coin-uuid-abcd"
);
// List all active touchpoints
TouchpointListResponse list = await TouchpointManager.ListTouchpoints("coin-uuid-abcd");Processing touchpoint data
if (store?.nodes?.Length > 0)
{
TouchpointNode node = store.nodes[0];
Debug.Log($"Layout: {node.layoutHint}");
string bgImage = node.background?.images?[0];
string titleText = node.title?[0]?.text;
string titleColor = node.title?[0]?.color;
string ctaAction = node.cta?.action;
string ctaText = node.cta?.text;
bool timerEnabled = node.GetStyleHint<bool>("timerEnabled", false);
if (node.HasReward)
{
HydratedReward reward = node.GetReward();
string brandName = reward?.brandName;
}
}For the full touchpoint data model, example responses, and all available node fields, see the Touchpoints API Reference.
Curated lists
Curated lists are pre-configured collections of products or rewards set up by PlaySuper. Fetch them by name and display them in your game's UI.
Fetching a curated list
// Products
var products = await PlaySuperUnitySDK.Instance.GetCuratedList(
CuratedListType.Products,
"homepage_featured",
"your-coin-id"
);
// Rewards
var rewards = await PlaySuperUnitySDK.Instance.GetCuratedList(
CuratedListType.Rewards,
"daily_deals",
"your-coin-id"
);| Parameter | Type | Required | Description |
|---|---|---|---|
type | CuratedListType | Yes | CuratedListType.Products or .Rewards |
listName | string | Yes | Name of the curated list (provided by PlaySuper) |
coinId | string | Yes | Your game's coin ID |
version | string | No | API version for rewards (e.g., "2.0.0") |
Working with products
public async void LoadFeaturedProducts()
{
try
{
var response = await PlaySuperUnitySDK.Instance.GetCuratedList(
CuratedListType.Products,
"homepage_featured",
"your-coin-id"
);
foreach (var product in response.products)
{
Debug.Log($"Product: {product.name}");
Debug.Log($"Brand: {product.brandName}");
Debug.Log($"Image: {product.imageUrl}");
var sku = product.skus[0];
if (sku.playSuperPrice != null)
{
Debug.Log($"Price: {sku.playSuperPrice.discountedListingPrice}");
}
}
}
catch (Exception ex)
{
Debug.LogError($"Failed to load products: {ex.Message}");
}
}Key product fields:
| Field | Description |
|---|---|
name | Product display name |
brandName | Brand name |
imageUrl | Primary product image |
images | Additional product images |
description | HTML description |
plainTextDescription | Plain text description |
skus | Available variants with pricing |
optionTypes | Product options (size, color, etc.) |
ctaUrl | Deep link to view/purchase in store |
SKU pricing (sku.playSuperPrice):
| Field | Description |
|---|---|
listingPrice | Original price |
discountedListingPrice | Final price after discount |
discountPercent | Discount percentage |
Working with rewards
public async void LoadRewards()
{
try
{
var response = await PlaySuperUnitySDK.Instance.GetCuratedList(
CuratedListType.Rewards,
"gift_cards",
"your-coin-id"
);
foreach (var reward in response.rewards)
{
Debug.Log($"Title: {reward.metadata.campaignTitle}");
Debug.Log($"Brand: {reward.brandName}");
Debug.Log($"Image: {reward.metadata.campaignCoverImage}");
if (reward.price.Count > 0)
{
Debug.Log($"Price: {reward.price[0].amount} coins");
}
Debug.Log($"Available: {reward.inventory.availableQuantity}");
}
}
catch (Exception ex)
{
Debug.LogError($"Failed to load rewards: {ex.Message}");
}
}Key reward fields:
| Field | Description |
|---|---|
brandName | Brand name |
metadata.campaignTitle | Reward title |
metadata.campaignSubTitle | Reward subtitle |
metadata.campaignCoverImage | Cover image URL |
metadata.brandLogoImage | Brand logo URL |
metadata.termsAndConditions | Terms and conditions |
metadata.howToRedeem | Redemption instructions |
price[0].amount | Price in coins |
inventory.availableQuantity | Stock remaining |
ctaUrl | Deep link to store page |
Deep-linking to a product or reward
Both products and rewards include a ctaUrl that opens the store directly to that item:
PlaySuperUnitySDK.Instance.OpenStore(product.ctaUrl);
PlaySuperUnitySDK.Instance.OpenStore(reward.ctaUrl);
// With UTM tracking
PlaySuperUnitySDK.Instance.OpenStore(product.ctaUrl, "featured_banner");Contact your PlaySuper integration team to get curated list names and configure custom lists for your game.
Next, see the Complete Example for a full integration script, offline support, user properties, and troubleshooting.