Notifications
Jest allows developers to schedule notification messages to re-engage players and drive retention. Using the Jest SDK, you can customize a notification's text, call to action (CTA), and image.
The Jest platform handles messaging infrastructure and delivery, subsidizing 100% of messaging costs and abstracting away operational complexity. This includes managing regulated messaging requirements such as consent collection, required disclosures, and robust opt-out mechanisms.
For guidance on designing effective notification strategies, copywriting, and scheduling patterns, see Notifications best practices.
Notification channels
There are two notification delivery channels on Jest: the platform Library tab and SMS / RCS text messages.
Library tab
When your game is Approved and set to Public, all scheduled notifications appear in the Jest platform Library tab.
SMS / RCS messages
Jest may also deliver notifications via SMS or RCS. Channel selection is based on availability and the user's messaging settings.



Notification mechanics
Jest games use the Jest SDK notification methods to schedule notifications. At the scheduled time, notifications are shown in the Library tab on Jest.com.
Once per day, Jest selects at most one scheduled notification per user across all games on the platform to deliver to the user's messaging inbox. The platform selects the notification most likely to convert, taking into account the priority provided by the SDK. Delivery time is determined per user based on the scheduled time defined by the game and observed engagement patterns, while respecting compliance requirements. Messages are delivered via SMS or RCS, depending on availability and user preferences.
Notifications API
Here is some example code to demonstrate scheduling notifications on the Jest gaming platform.
The Jest platform will only send notifications to registered users. You can check a user's status with Player.isRegistered and prompt players to log in via the SDK.
RichNotifications.ScheduleNotification
To schedule a notification, use this method with the Options class. The method throws for local shape validation errors, then returns a JestSDKTask for JavaScript bridge dispatch. Do not treat task completion as confirmation that the platform will eventually deliver the notification.
Notifications can only be scheduled up to 7 days ahead. scheduledInDays must be between 1 and 7 days (inclusive), and date must be within the next 7 days. Unity validates the required shape of the request, while the JavaScript SDK and server enforce platform policy limits.
Notifications can be scheduled in one of two ways:
- Exact scheduling using
date, which ensures the notification becomes eligible for delivery after the specified date and time. Note that delivery is not guaranteed at the exact scheduled moment, as messaging must comply with mandated quiet hours and other delivery constraints. - Fuzzy scheduling using
scheduledInDays, which schedules a notification 1 to 7 days from now and allows the platform to determine an appropriate delivery time for each user.
Exact scheduling is suited for fixed events or deadlines where timing matters. Fuzzy scheduling is intended for notifications that are relevant within a given day, allowing the platform to determine an appropriate delivery time for each user.
var notifications = JestSDK.Instance.RichNotifications;
// Schedule for specific date/time (exact scheduling)
await notifications.ScheduleNotification(new RichNotifications.Options
{
body = "Your energy is full!",
ctaText = "Play Now",
notificationPriority = RichNotifications.Severity.High,
identifier = "energy_full",
date = DateTime.Now.AddHours(4)
});
// Schedule using fuzzy timing (1-7 days from now)
await notifications.ScheduleNotification(new RichNotifications.Options
{
body = "We miss you! Come back for a special reward.",
ctaText = "Claim Reward",
notificationPriority = RichNotifications.Severity.Medium,
identifier = "comeback_day3",
scheduledInDays = 3
});
Options properties
| Property | Type | Required | Description |
|---|---|---|---|
body | string | Yes | The main text of the notification. Must be 1-2000 characters. |
ctaText | string | Yes | Call-to-action button text. Must be 1-50 characters. |
identifier | string | Yes | Unique identifier for rescheduling or unscheduling. |
date | DateTime | * | Exact date/time to schedule. Must be within 7 days. Mutually exclusive with scheduledInDays. |
scheduledInDays | int? | * | Days from now to schedule (1-7). Mutually exclusive with date. |
title | string | No | Optional title shown above the body. Must be at most 200 characters. |
notificationPriority | Severity | No | Priority level: Low, Medium, High, or Critical. Default is Low. |
assetReference | string | No | Reference to a pre-approved asset (image or video). Preferred over imageReference. |
imageReference | string | No | Deprecated. Use assetReference instead. Still honored as a fallback. |
entryPayloadData | Dictionary<string, object> | No | Custom data payload attached to the notification. |
* Either date or scheduledInDays must be provided, but not both.
Priority levels
public enum Severity
{
Low, // Low priority notification
Medium, // Medium priority notification
High, // High priority notification
Critical // Critical priority notification
}
Attaching assets
To attach an asset (image or video) to your notification, first upload and submit it for approval in the Manage images section of the Developer Console. Only approved assets can be referenced in notifications.
await notifications.ScheduleNotification(new RichNotifications.Options
{
body = "Your daily reward is ready!",
ctaText = "Collect",
notificationPriority = RichNotifications.Severity.Medium,
identifier = "daily_reward",
scheduledInDays = 1,
assetReference = "daily_reward_banner"
});
If an assetReference is invalid, unapproved, or archived, the notification will use your game's Hero image as a fallback and log an error in the Events page. If assetReference is not set, it will also fall back to the Hero image.
imageReference is deprecated in favor of assetReference. Existing code using imageReference continues to work — the SDK uses assetReference when both are set.
Attaching entry payload
You can attach custom data to notifications that will be passed to the game when the player opens the notification:
await notifications.ScheduleNotification(new RichNotifications.Options
{
body = "Your farm needs attention!",
ctaText = "Visit Farm",
notificationPriority = RichNotifications.Severity.High,
identifier = "farm_reminder",
scheduledInDays = 1,
entryPayloadData = new Dictionary<string, object>
{
{ "notification_type", "farm_reminder" },
{ "day", 1 }
}
});
RichNotifications.UnscheduleNotification
To unschedule an already scheduled notification, use this method with the notification's unique identifier. The method throws for local validation errors, then returns a JestSDKTask for JavaScript bridge dispatch.
var notifications = JestSDK.Instance.RichNotifications;
await notifications.UnscheduleNotification("energy_full");
If you schedule a notification with an existing identifier, the original notification will be unscheduled and replaced with the new one. You don't need to unschedule the original notification first.
Moderation and delivery constraints
Notifications are subject to platform review and moderation. Content that violates the Acceptable Use Policy may be blocked from delivery. For more details, see Review and moderation.