This file collects the notification payload formats and behavior reconstructed from notification overlay bundle analysis.
The focus is practical:
- which fields the overlay expects
- which template families exist
- what
viewDatacan contain - what action types and placeholder types are supported
- what replacement/suppression logic exists
- which parts are safer for local payload-generated notifications
The bundle contains both:
- informative toasts
- interactive/rich toasts
- indicator-style notifications
- special templates such as game preparation, trophy, friend request, share play
For local JSON payloads sent through the notification pipeline, the main entry points and validators are visible in the bundle.
Typical notification model shape:
{
"rawData": {
"viewTemplateType": "...",
"useCaseId": "...",
"channelType": "...",
"toastOverwriteType": "No",
"isImmediate": true,
"priority": 100,
"bundleName": "...",
"viewData": { ... },
"platformViews": { ... },
"platformParameters": { ... }
},
"createdDateTime": "2026-03-09T12:00:00.000Z",
"updatedDateTime": "2026-03-09T12:00:00.000Z",
"expirationDateTime": "2026-03-09T13:00:00.000Z",
"localNotificationId": "123456789",
"notificationId": "399498519847690",
"offConsoleToastType": "Always",
"state": "New",
"userId": 254,
"isAnonymous": false,
"userIdBackup": 0,
"fromUser": { ... },
"associatedTitle": { ... },
"uploadData": { ... }
}For local "send" events, the overlay parses the JSON and injects
createdDateTime before forwarding the payload internally.
The bundle validates these fields on rawData as required:
viewTemplateTypeuseCaseIdchannelTypeviewData
If one is missing, the overlay records a client error.
The bundle shows several distinct failure paths for incoming/local payloads.
For local "send" events, the payload is parsed with JSON.parse(...).
Behavior:
- malformed JSON raises an exception
- the exception is converted to a client error event
- the notification is dropped
If one of the required members is missing from rawData:
- the overlay emits a client error event naming the missing fields
- the payload may still continue through the pipeline, but it is already in an invalid state and later rendering/routing can fail
Practical rule:
- treat the four required
rawDatafields as hard requirements, not warnings
If viewTemplateType cannot be resolved to a registered template:
- the overlay logs a warning
- a client error event is emitted
- the toast cannot render normally
In the generic action renderer:
- if
actionis missing, nothing is rendered - if
action.actionTypeis unsupported, nothing is rendered
Practical rule:
- unsupported action types fail softly by producing no visible button
If conversion/filtering produces an empty payload:
- the overlay emits a client error
- dispatch is aborted
These are the most useful bundle-backed rules if the goal is not just to mimic sample JSON, but to produce payloads that the overlay will consistently accept and render.
If the overlay cannot map viewTemplateType to a registered template, it logs
an unknown-template warning and cannot render the payload normally.
Practical rule:
- use only template names exported by the bundle
- do not invent new
viewTemplateTypevalues
The bundle explicitly rejects empty localNotificationId values when local
notification cache/update paths use them.
Practical rule:
- omit
localNotificationIdentirely, or - provide a non-empty string
The overlay uses createdDateTime for ordering and compares it as a string
after trimming the trailing Z.
Practical rule:
- use canonical UTC timestamps such as
2026-03-10T12:34:56.000Z - keep them lexicographically sortable
Replacement does not happen globally. The bundle checks:
- same
userId - exact
idmatch, if present - overwrite policy allows replacement
- same
bundleName, or sameuseCaseIdonly whenbundleNameis absent
platformParameters.toastOverwriteType can override the main
toastOverwriteType.
The id check is part of the normalized internal notification model. It is the
strongest replacement key, but ordinary local JSON examples do not typically
set it directly.
Practical rule:
- if you want controlled replacement, keep
userIdstable - prefer a stable
bundleName - use
toastOverwriteTypeintentionally:Nofor standalone itemsInQueue/Alwaysonly when replacement semantics are desired
The bundle applies platformViews.previewDisabled to interactive toasts.
Sample coverage in the bundle explicitly shows that informative toasts do not
use this alternate view.
Practical rule:
- only rely on
platformViews.previewDisabledforInteractiveToast* - do not expect
ToastTemplateA/Bto switch to that preview variant
platformViews.virtualReality3D and platformViews.virtualReality3D2 are not
generic fallback fields; they are selected only in specific VR/display modes.
Practical rule:
- include them only if you actually target VR-specific behavior
- do not rely on them for normal flat-mode notification rendering
For title-oriented expansion/prefetch and placeholder processing, the bundle explicitly recognizes:
UserTitleConceptByTitleTitleByTitle
For some title-preload flows, only the title-like subset is harvested:
TitleConceptByTitleTitleByTitle
Practical rule:
- do not invent custom
objectTypevalues unless you have evidence that the target renderer accepts them - for generic local toasts, stick to the known built-ins above
The generic action renderer maps only recognized actionType values to button
components. In the bundle, the generic mapping clearly supports:
DeepLinkActionCardLink
PlayerControl exists, but appears in specialized scenario handlers rather than
the generic action factory path.
Practical rule:
- for custom generic interactive toasts, use
DeepLinkorActionCardLink - use
PlayerControlonly when following a known specialized template path
GameCTA exists as a specialized UI primitive and is not a generic substitute
for arbitrary buttons. The bundle logic indicates it is tied to game-related
contexts and template families.
Practical rule:
- use
GameCTAonly in templates that already use it in the bundle - for generic custom payloads, prefer ordinary
actions
The overlay emits a client error when notifications arrive with unexpected
userId values such as invalid/system-user sentinels.
Practical rule:
- use a normal logged-in user where possible
- avoid invalid/system sentinel IDs unless the source path clearly expects them
rawData: objectcreatedDateTime: string, ISO8601 UTCupdatedDateTime: string, ISO8601 UTCexpirationDateTime: string, ISO8601 UTClocalNotificationId: stringnotificationId: stringoffConsoleToastType: stringstate: stringuserId: numberisAnonymous: booleanuserIdBackup: numbersoundEffect: stringisSummaryProhibited: booleanfromUser: objectassociatedTitle: objectuploadData: objectiduMode: number
Observed timestamp examples:
createdDateTime is used for sorting:
updatedDateTime is requested from popup DB accessors:
localNotificationId, when used, must be non-empty:
The bundle exposes these user constants:
InvalidUserId = -1SystemUserId = 255EveryoneUserId = 254
There is also runtime state for:
loginUserslaunchedUser
Behavioral notes:
- normal popup visibility checks allow a toast when:
userId === EveryoneUserId, oruserIdis present inloginUsers
- when there are no
loginUsers, someEveryoneUserIdnotifications are suppressed if they depend on user/title metadata or local-notification sync paths - ordinary notification validation treats
InvalidUserIdandSystemUserIdas unexpected for normal local toast payloads
Practical rule:
- for ordinary local notifications, use a real logged-in user
- use
EveryoneUserId (254)only if broad fan-out behavior is intentional - avoid
InvalidUserId (-1)andSystemUserId (255)for normal toast payloads - avoid metadata-heavy
EveryoneUserIdpayloads when no user is logged in
isAnonymous is not just cosmetic. The bundle rewrites anonymous payloads so
they behave as broadcast-style notifications:
userIdis rewritten toEveryoneUserId- original
userIdis preserved asuserIdBackup
Anonymous payloads are then fanned out across loginUsers in popup/summary
dispatch paths.
Practical rule:
- use
isAnonymousonly when you intentionally want broader multi-user fan-out - do not set
userIdBackupmanually unless you are reproducing an existing internal path
These fields participate in remote/off-console propagation and cached notification synchronization.
localNotificationId- local identifier used before remote upload/sync
- if present, must be non-empty
notificationId- server/remote-side notification identifier
- used in off-console post requests and remote completion flow
offConsoleToastType- observed values:
Always(default when omitted in one suppression path)OnDemand
- no other values are clearly evidenced by the bundle scans used here
OnDemandchanges suppression behavior:- if
notificationIdexists, payload is queued for off-console post - if
notificationIddoes not exist yet butlocalNotificationIddoes, payload is held until local/remote sync completes
- if
- observed values:
Practical rule:
- for plain local toasts, these fields are usually unnecessary
- use them only if you intentionally interact with notification DB sync or off-console delivery behavior
state is present in notification records/models but is not part of the small
required rawData contract for local send.
Practical rule:
- local payload generators usually do not need to set
state - if present, treat it as notification record metadata rather than renderer configuration
associatedTitle is a top-level context object used heavily by game-centered
templates and placeholder hydration.
Observed/common shapes:
{
"npTitleId": "PPSA00000_00"
}It is used by:
- title placeholders
- game CTA renderers
- game preparation / game-to-player / tournament-style payloads
- title metadata hydration paths
Practical rule:
- if a toast is game-centric, prefer providing
associatedTitle - the most important observed member is
npTitleId
fromUser is a top-level user context object used by social templates and
placeholder expansion.
Observed/common shapes:
{
"accountId": "3184494961250237665"
}It is used by:
%fromUser%placeholder flows- profile/avatar hydration
- friend/session/social notification renderers
Practical rule:
- if a toast is about another player, provide
fromUser accountIdis the most consistently observed field
uploadData is not renderer UI data. It is extra structured metadata attached
to some internally generated notifications, especially around game/download
preparation flows.
Observed shape family:
{
"serviceId": "downloadManager",
"eventType": "gameReadyToPlay",
"parameters": {
"associatedTitle": "...",
"contentType": "...",
"titleId": "...",
"entitlementId": "..."
}
}Practical rule:
- custom local toasts usually do not need
uploadData - only add it if you are intentionally mirroring an internal service-generated notification format
iduMode exists in the bundle and affects some display/expandability logic.
One observed rule is that a toast is not expandable when iduMode === 1.
Practical rule:
- omit
iduModeunless you are reproducing a known IDU-specific path
soundEffect is an optional top-level/model field used by the popup renderer.
Behavior:
- if
soundEffectis present and not"none", the renderer plays that sound ID - if
soundEffect === "none", no sound is played - if the field is absent, the bundle chooses a default based on context:
- error-like channels get an error sound
- interactive toasts get an interactive “something to do” sound
- otherwise an informative “something to read” sound is used
Practical rule:
- omit
soundEffectfor default platform behavior - use
"none"if you explicitly want a silent toast
isSummaryProhibited is a top-level/model flag used by summary aggregation
paths. Summary-mode code explicitly filters out notifications with this flag.
Practical rule:
- set
isSummaryProhibited: truewhen a notification should remain standalone and not be aggregated into summary toasts - omit it for normal summary-eligible notifications
The bundle now gives enough information to build most practical local toasts reliably, but some fields are still only partially mapped:
- many
channelTypevalues are observed, but not all of their routing/display semantics are fully documented - specialized
viewData.parameterscontracts vary by template and are not always validated in one central place offConsoleToastTypeis only partially visible through suppression/posting paths; the documented behavior is accurate for observedOnDemandand default-style handling, but not a full enum reference- several scenario templates rely on async
preFetch/ hydrated runtime models, so a JSON example alone does not always capture the full runtime contract - no explicit hard payload-size limit or max string-length contract has been identified in the JS bundle alone
- not every
useCaseIdfound in samples/builders has a fully explained behavioral contract
viewTemplateType: stringchannelType: stringuseCaseId: stringbundleName: stringtoastOverwriteType: stringisImmediate: booleanpriority: numberviewData: objectplatformViews: objectplatformParameters: object
For local/raw notification payloads, the bundle samples and builders commonly use numeric priorities such as:
012
Elsewhere in the broader notification stack there are also symbolic priorities
like Low, Normal, High, and Legal, but those belong to other internal
models and dispatcher layers rather than the simple local rawData examples.
Practical rule:
- for local JSON payloads, prefer the observed numeric values
- if you are copying a concrete builder/sample, keep its priority unchanged
icon: objecticons: arraymessage: objectsubMessage: objectextraMessage: objectpreMessage: objectactions: arrayparameters: object
message, subMessage, extraMessage, and preMessage use the same general
shape:
{
"body": "Text or %placeholder%",
"placeHolders": { ... },
"optionalProperties": ["userGeneratedContent"]
}Observed placeholder objectType values in the bundle:
- strongly supported in generic/title paths:
UserTitleConceptByTitleTitleByTitle
- additionally visible in sample catalogues:
StringNumber
Practical rule:
StringandNumberare good for local sample-like payloads- for full renderer/prefetch compatibility, the safest types remain
User,Title,ConceptByTitle, andTitleByTitle
The bundle supports:
messageAccessibilityPropssubMessageAccessibilityPropsextraMessageAccessibilityProps
Observed members:
accessibilitySpeakableaccessibilityLabelaccessibilityHintaccessibilityWidgetTypeaccessibilityCustomSpeechOrder
Frequently seen fields:
viewTemplateTypechannelTypeuseCaseIdbundleNametoastOverwriteTypeisImmediatepriorityviewDataplatformViewsplatformParameters
Observed values:
NoInQueueAlways
The overlay uses replacement rules based on:
- same
id - same
bundleName - same
useCaseIdif nobundleName
platformParameters.toastOverwriteType can override the root value.
Only one member is clearly confirmed by the generic local toast path:
platformParameters.toastOverwriteType
Observed behavior:
- when present, it overrides the root
toastOverwriteTypeduring replacement checks - no other
platformParametersmembers are clearly consumed in the same generic renderer / replacement path
Practical rule:
- for custom payloads, treat
platformParametersas effectively undocumented except fortoastOverwriteType - avoid inventing extra members unless you are copying a concrete internal builder
bundleName is used as a grouping/replacement key and also appears in listener
registration/filtering APIs.
bundleNameFlag appears in popup DB / accessor plumbing rather than in the
small local rawData examples.
Observed behavior:
- popup accessors default it to
0when omitted - it is forwarded into
NotificationDb2PopupAccessor.getItems(...) - it affects which grouped popup items are fetched from cached notification DB state
Practical rule:
- treat
bundleNameFlagas internal popup-cache/query metadata - do not add it to custom local payloads unless you are intentionally copying a DB-backed accessor path
useCaseId drives:
- validation
- replacement behavior
- suppression/in-context filtering
- template-specific rendering/behavior
Some useCaseId values are treated as more than just labels.
IN_CONTEXT- appears in popup-suppressed listener examples
- can be watched via notification listeners scoped by
useCaseId - used together with
channelType: "InContext"in debug samples
NO_SUPPRESS- appears in debug/suppression samples as a way to test non-suppressed in-context behavior
- treat this as observed/debug behavior, not a guaranteed public contract
POWER_MANAGEMENT- used by power-related system sample payloads
DISC_LOADING- used by disc-loading related sample payloads
NUCxxx- many specialized templates are keyed primarily by
NUC...values - the most important family is
InteractiveToastGamePreparation
- many specialized templates are keyed primarily by
Practical rule:
- for generic custom toasts, any stable string may satisfy structure checks, but
platform behavior becomes more predictable when using a known/observed
useCaseId - for specialized templates, copy the exact
useCaseIdfamily used by the bundle builder
The following catalogue contains only associations that are directly confirmed by dedicated builders or by explicit scenario/sample families.
InteractiveToastGamePreparationNUC238->gameReadyToPlayNUC241->dlcReadyToPlayNUC253->insufficientSystemStorageNUC255->insufficientExtendedStorageNUC257->downloadFailedNUC478->insufficientM2StorageNUC547->addonsReadyToPlay
InteractiveToastMessagesNUC63,NUC181-> add groupNUC64,NUC182-> join groupNUC65,NUC183-> multi-user join groupNUC69,NUC174-> message replyNUC108,NUC179-> stickerNUC109-> voice messageNUC110-> imageNUC111-> musicNUC112-> videoNUC116-> invitation / user scheduled eventNUC117-> official eventNUC351,NUC352,NUC353-> image + textNUC354,NUC355,NUC356-> voice + text
InteractiveToastVoiceChatNUC66-> party started with youNUC185-> private party start / invitationNUC527-> open party inviteNUC528-> open party invite with screen shareNUC532-> request to join
InteractiveToastTournamentsNUC510-> tournament startedNUC511-> join matchNUC512-> round winNUC513-> next round readyNUC514-> tournament lostNUC515-> tournament wonNUC516-> tournament cancelled
InteractiveToastAllowListRequestNUC469,NUC473-> deep-link CTANUC470,NUC474->GameCTANUC471,NUC472,NUC475,NUC476->OKbutton only
InteractiveToastActivityChallengesNUC264-> reclaim the leadNUC265-> challenge completedNUC269-> fell out of top 100NUC271-> final global placementNUC272-> challenge endedNUC345-> direct challenge from another userNUC463-> personal best
InteractiveToastFriendRequestNUC1-> standard / close-friend request variantsNUC2-> real-name / close-friends wording
InteractiveToastPlayerSessionRequestToJoinNUC449-> request to join player session
InteractiveToastTrophyNUC55-> trophy familyNUC273-> trophy family
InteractiveToastScreenShareNUC104-> dedicated screen-share interactive templateNUC171,NUC176,NUC177,NUC178,NUC359,NUC361,NUC378,NUC379,NUC450,NUC453-> screen-share related builder-visible cases
InteractiveToastSharePlayNUC107-> dedicated Share Play interactive templateNUC132,NUC133,NUC135,NUC136,NUC137,NUC138,NUC139,NUC140,NUC141,NUC142,NUC143,NUC145,NUC147,NUC148,NUC149,NUC150,NUC151,NUC152,NUC154,NUC155,NUC156,NUC158,NUC160,NUC162,NUC168,NUC170,NUC362,NUC363,NUC380,NUC381,NUC382,NUC383,NUC384,NUC385,NUC386,NUC407,NUC415,NUC436-> Share Play builder-visible cases
InteractiveToastSaveDataMessageNUC430,NUC431,NUC433,NUC461-> dedicated save-data templateNUC563,NUC564,NUC565,NUC566-> same family but routed toToastTemplateB
InteractiveToastPSNowPlayerNUC192-> dedicated PS Now / queue-turn templateNUC190,NUC280-> related family routed toInteractiveToastTemplateBNUC191-> related family routed toToastTemplateB
InteractiveToastSuppressionOnboardingNUC411-> suppression-onboarding flow
PlayStationSafety/IconOnlyToastNUC283-> signed-out / safety flow
VolumeIndicator/MixSliderIndicatorNUC58-> volume / mix slider family
- broadcast / sharing informative family
NUC10-> broadcast paused / blocked-scene familyNUC11-> broadcasting resumed familyNUC12-> broadcast stopped familyNUC437-> now broadcasting family
- simple feedback families
NUC459-> request-sent feedbackNUC460-> request-send-error feedback
- indicator / system families with explicit
sendByIdcoverageNUC57-> device connection indicator familyNUC58-> volume / mix slider familyNUC376-> crash-report family
channelType is not just visual categorization. The bundle uses it in:
- DND suppression
- popup settings / category filters
- focus-mode filters
- default sound selection
- some template-specific routing
Observed channelType values in samples and builders include:
DownloadsUploadsSystemFeedbackSystemErrorServiceFeedbackServiceErrorTrophiesActivityChallengesFriendRequestGameInvitesPartyMessagesTournamentsPlayStationSafetyInContextDisplayableFromPlayStationPlayStationPlusPlayStationStorePlayStationNowPlayStationMusicPlayStationSeasonPassEAAccessEaPlayGameContentAnnouncementWhenFriendsGoOnlineWishlistItemsMusicTrackChangeFamilyActivityAccoladesgameVr:InformativeTesttestGroup1
Behavioral notes:
- some channels are exempt from DND/suppress rules:
SystemFeedbackServiceFeedbackSystemErrorServiceError
- settings/focus filters explicitly switch on many user-facing channel names
such as
GameInvites,Trophies,Messages,Party,Downloads,Uploads,Tournaments, and subscription/store families
Observed settings-category groupings:
- gaming:
GameInvitesTrophiesActivityChallengesGameContentAnnouncementTournaments
- social:
FriendRequestWhenFriendsGoOnlineMessagesPartyAccoladesFamilyActivity
- media/downloads:
MusicTrackChangeDownloadsUploads
- account/offers/subscriptions:
WishlistItemsFromPlayStationPlayStationPlusPlayStationStorePlayStationNowPlayStationMusicPlayStationSeasonPassEAAccessEaPlay
Practical rule:
- do not treat
channelTypeas arbitrary free text - for custom payloads, prefer already-observed values
- if you want system-style behavior that is less likely to be filtered, use a channel that matches the template family you are imitating
The following behavior is directly confirmed by popup filtering and suppression logic.
- DND suppression explicitly does not suppress:
SystemFeedbackServiceFeedbackSystemErrorServiceError
- Popup settings explicitly bypass the global
allowPopupNotificationsgate for:FamilyActivityPlayStationSafetySystemFeedbackServiceFeedbackSystemErrorServiceError
- Focus-mode filtering explicitly branches on these channel families:
GameInvitesTrophiesGameContentAnnouncementActivityChallengesPartyAccoladesFriendRequestWhenFriendsGoOnlineMessagesMusicTrackChangeDownloadsUploadsWishlistItemsFromPlayStationTournamentsPlayStationPlusPlayStationStorePlayStationNowPlayStationMusicPlayStationSeasonPassEAAccessEaPlay
- Popup settings map channels into these user-facing groups:
- gaming:
GameInvitesTrophiesActivityChallengesGameContentAnnouncementTournaments
- social:
FriendRequestWhenFriendsGoOnlineMessagesPartyAccolades
- media / downloads:
MusicTrackChangeDownloadsUploads
- account / offers / subscriptions:
WishlistItemsFromPlayStationPlayStationPlusPlayStationStorePlayStationNowPlayStationMusicPlayStationSeasonPassEAAccessEaPlay
- gaming:
- The following channel strings are confirmed only as observed sample/debug
values. No stronger display or suppression contract is asserted here:
TesttestGroup1
InContext- used by explicit in-context suppression/debug samples together with
useCaseId: "IN_CONTEXT"anduseCaseId: "NO_SUPPRESS" - also used with
Notification.sendToApplication(...)debug paths
- used by explicit in-context suppression/debug samples together with
Displayable- used by explicit “displayable notification” debug samples for both informative and interactive payloads
- confirmed in both logged and non-logged local send examples
gameVr:Informative- used as the channel and bundle family for VR-specific informative sample payloads
- sample family pairs it with
platformViews.virtualReality3D
Observed as a boolean on both informative and interactive payloads.
The bundle’s sample set includes both:
isImmediate: trueisImmediate: false
The renderer reads viewData and optionally replaces it with a platform-specific
variant.
Common members:
iconiconsmessagesubMessageextraMessagepreMessageactionsparameters
For screen-reader flow:
TemplateBusessubMessage -> message -> extraMessage- other templates use
message -> subMessage -> extraMessage
preMessage exists in the bundle and is processed in notification/accessibility
paths. It is not used by the common InteractiveToastTemplateA/B samples, but
it is supported in the model.
viewData.parameters is the least standardized part of the payload model.
There is no single global schema; instead, specialized templates read different
keys.
Recurring parameter families visible in the bundle:
expandedType- switches expanded-body renderer variants
- heavily used by
InteractiveToastGamePreparation
actionProps- embedded action object used by expanded game-preparation layouts
- commonly mirrors a
DeepLinkaction
titleId- game/content context for CTA or navigation
contentId- downloadable-content identifier for some download-manager scenarios
errorCode- shown in failure/storage/problem flows
focusMode- used by in-context / settings-adjustment paths
groupId- party/message/group context
messageUid- system-message or messaging lookup key
activityId- activity-challenge related context
occurrenceId- tournament occurrence context
associatedTitle- title context passed through specialized builders
fromUser- user context passed through specialized builders
text- generic text payload used in some summary/system variants
Practical rule:
- do not assume
viewData.parametersis generic across templates - copy the exact parameter shape from a known builder/sample for the target template
- if you are building custom generic
TemplateA/Bnotifications, you often do not needparametersat all
This subsection lists only parameters that are directly read by template code, or that recur consistently across the dedicated sample family for that template.
InteractiveToastGamePreparation- directly consumed:
viewData.parameters.expandedTypeviewData.parameters.titleId
- confirmed additional builder-populated fields for download/game-preparation
scenarios:
viewData.parameters.actionPropsviewData.parameters.errorCodeviewData.parameters.contentId
- directly consumed:
InteractiveToastGameToPlayer- directly consumed:
viewData.parameters.activityId
- top-level context read together with it:
associatedTitle.npTitleId
- the allow-list CTA family additionally reads:
viewData.parameters.fromUserviewData.parameters.associatedTitle
- directly consumed:
InteractiveToastSystemMessage- directly consumed:
viewData.parameters.messageUid
- directly consumed:
InteractiveToastMessages- consistently present across the dedicated message samples:
viewData.parameters.groupIdviewData.parameters.threadId
- confirmed recurring scenario-specific fields:
viewData.parameters.messageUidviewData.parameters.joinedUsersviewData.parameters.groupTypeviewData.parameters.fromUser
- consistently present across the dedicated message samples:
InteractiveToastVoiceChat- confirmed recurring sample fields:
viewData.parameters.sessionIdviewData.parameters.groupIdviewData.parameters.fromUser
- confirmed recurring sample fields:
InteractiveToastTournaments- confirmed recurring sample fields:
viewData.parameters.occurrenceIdviewData.parameters.pairingIdviewData.parameters.remainingDuration
- confirmed recurring sample fields:
InteractiveToastTemplateA- no template-specific
viewData.parameterscontract is confirmed here - dedicated samples often omit
parametersentirely
- no template-specific
InteractiveToastTemplateB- no template-specific
viewData.parameterscontract is confirmed here - specialized scenario families that reuse TemplateB may still define their own parameters
- no template-specific
Observed icon types:
FromUserAssociatedTitleConceptByTitleTitleByTitlePredefinedUrlDeviceInfo
Examples are visible in the bundle’s sample payloads:
"icon": {
"type": "Predefined",
"parameters": {
"icon": "system"
}
}"icon": {
"type": "Url",
"parameters": {
"url": "https://...",
"iconSize": "Square"
}
}"icon": {
"type": "TitleByTitle",
"parameters": {
"npTitleIds": ["CUSL00217_00"]
}
}{
"type": "DeviceInfo",
"parameters": {
"device": "game",
"battery": "battery_empty"
}
}iconscan be an array, not only a singleicon.- sample payloads show
disabled: trueon predefined icons. - sample payloads show
iconSizevalues such asSquareandLandscape. - title/user-derived icon types trigger metadata fetch behavior.
For practical payload generation, these are the most important observed icon contracts:
FromUser- simplest working shape uses top-level
fromUser - sample:
fromUser: { accountId: "..." }viewData.icon: { type: "FromUser" }
- simplest working shape uses top-level
AssociatedTitle- simplest working shape uses top-level
associatedTitle - sample:
associatedTitle: { npTitleId: "..." }viewData.icon: { type: "AssociatedTitle" }
- simplest working shape uses top-level
ConceptByTitle- uses
viewData.icon.parameters.npTitleIds
- uses
TitleByTitle- uses
viewData.icon.parameters.npTitleIds
- uses
Predefined- uses
viewData.icon.parameters.icon
- uses
Url- uses
viewData.icon.parameters.url - optional
iconSizevalues observed:SquareLandscape
- uses
DeviceInfo- used by
DeviceConnectionIndicator/ VR indicator-like paths - carries device-specific parameters rather than title/user metadata
- used by
Practical rule:
- prefer the shortest working form shown in bundle samples
- for
FromUserandAssociatedTitle, top-level context objects are the most reliable observed source - for
ConceptByTitle/TitleByTitle, passnpTitleIds
The following Predefined icon names are directly observed in working sample
payloads or concrete builder paths and are therefore safe choices for local
payload generation:
communitydownloaderror_message_cautionfamilyheadsetlocalasset_system_software_defaultmessagesmicmic_mute_statusno_operation_allowednotification_offpeoplephoto_storing_doneps4ps_usershare_playshare_screensound_level_game_up_party_downsound_level_party_up_game_downsound_speakingsystemtrophiesusers_guide_helpful_infovoice_command
Practical rule:
- if you want maximum compatibility, prefer icons from this list
system,download,messages,ps_user, andsound_speakingappear especially often in sample and builder paths
Only a small number of concrete DeviceInfo.parameters.device values are
directly confirmed by sample payloads and builder-generated payloads:
gamepsmove
Observed companion parameters for DeviceInfo:
battery- confirmed values observed in payloads:
battery_emptybattery_low
- confirmed values observed in payloads:
Practical rule:
- treat
DeviceInfoas a specialized path used mainly byDeviceConnectionIndicatorand related device-oriented templates - use only the confirmed
devicevalues above unless runtime testing confirms additional values on console
The bundle also contains a much larger icon-id catalogue used by general UI
components and device-oriented notification builders. The following icon ids are
observed and are useful as a reference when looking for device- or
hardware-themed visuals. These are observed icon resource ids, not all of them
are confirmed as accepted Predefined toast icons.
Audio, microphone, and headset:
headphoneheadsetmicmic_disconnectedmic_errormic_mutemic_mute_statusmic_preferencemic_speakingps5_wireless_headsetsingstar_micsound_allsound_errorsound_inputsound_level_game_up_party_downsound_level_party_up_game_downsound_mutesound_mute_statussound_outputsound_partysound_preferencesound_screensound_speaking
Controllers, input, and general devices:
devicesds4_connected_via_usbgamegame_controller_1game_controller_2game_controller_3game_controller_4headsethuman_interface_devicekeyboardmousemouse_keyboardps5_media_remoteps_buttonpscamerapsmovepsmove_doublepsmove_pscameraremote_controller
PS VR / VR-related:
psvrpsvr2psvr2_adjust_visibilitypsvr2_eye_trackingpsvr2_headset_motion_controllerpsvr2_headset_motion_controller_vibrationpsvr2_headset_vibrationpsvr2_motion_controllerpsvr2_motion_controller_leftpsvr2_motion_controller_rightpsvr2_motion_controller_trigger_effectpsvr2_motion_controller_trigger_effect_vibrationpsvr2_motion_controller_vibrationpsvr2_playermodepsvr2_playermode_roomscalepsvr2_playermode_sittingpsvr2_playermode_standingpsvr2_powerpsvr2_rumble_offpsvr2_rumble_onpsvr2_set_play_areapsvr_adjust_vr_headset_positionpsvr_and_psvr2psvr_aimcontrollerpsvr_aimcontroller_pscamerapsvr_confirm_your_positionpsvr_powerpsvr_pscamerapsvr_pscamera_psmovepsvr_reset_screen_modepsvr_screen_brightnesspsvr_screen_size
Connection, remote play, and external devices:
camera_disconnectedcamera_genericcamera_mutecamera_mute_statuscamera_preferenceconnection_to_ps4_connectedconnection_to_ps4_not_connectedconnection_to_ps4_unstableethernetethernet_disconnected_statusethernet_errornetworknetwork_cautionnetwork_connection_testnetwork_disconnectednetwork_disconnected_statusnetwork_errorphoneremote_play_blocked_sceneremote_play_connectionremote_play_disconnected_statusremote_play_exitremote_play_stopsmartphonesmartphone_tablet
Practical rule:
- for toast payloads, prefer the confirmed
Predefinedlist above - use this larger catalogue as a hint for promising icon ids when reverse engineering additional device-oriented templates or testing on-console
Typical placeholder usage:
"subMessage": {
"body": "%titleByTitle%",
"placeHolders": {
"titleByTitle": {
"objectType": "TitleByTitle",
"npTitleIds": ["CUSL00217_00"],
"defaultValue": "default title name"
}
}
}Observed placeholder object types:
UserTitleConceptByTitleTitleByTitleStringNumber
The bundle’s metadata logic specifically recognizes:
TitleConceptByTitleTitleByTitle
The bundle sample payloads show:
optionalProperties: ["userGeneratedContent"]
Interactive toasts can carry actions.
Observed action types:
DeepLinkActionCardLinkPlayerControl
{
"actionName": "Go to Profile",
"actionType": "DeepLink",
"defaultFocus": true,
"parameters": {
"actionUrl": "pspr:show"
}
}{
"actionName": "Go to Screen Share AC",
"actionType": "ActionCardLink",
"parameters": {
"type": "ActionCardScreenShare",
"param": {}
}
}{
"actionType": "PlayerControl",
"actionName": "Cancel",
"parameters": {
"command": "CancelGame"
}
}defaultFocus: trueis supported.DeepLinkactions typically useparameters.actionUrl.ActionCardLinkactions useparameters.typeandparameters.param.PlayerControluses command-style parameters, but it is not handled by the generic action factory the same wayDeepLinkandActionCardLinkare.
The bundle also contains internal focus target names used by the UI:
defaultFocusdefaultFocusLargeTextdefaultFocusLargeTextMultiListGameCTAButton
These are internal focus model names, not fields you set directly in payloads.
For custom generic interactive toasts, the bundle-backed contracts are:
DeepLink- required in practice:
actionType: "DeepLink"parameters.actionUrlorparameters.url
- behavior:
- checkout URLs are routed specially
- other URLs go through
LinkingPS.openURLArg(...)
- required in practice:
ActionCardLink- required in practice:
actionType: "ActionCardLink"parameters.typeparameters.param
- required in practice:
PlayerControl- not part of the generic action factory path
- use only in templates that already do so in the bundle
Practical rule:
- for custom local payloads,
DeepLinkis the safest action type ActionCardLinkis valid, but should follow sample structures closely
Interactive toasts can define a simplified preview-disabled variant:
"platformViews": {
"previewDisabled": {
"viewData": {
"icon": { ... },
"message": { "body": "New Message" }
}
}
}The bundle explicitly indicates that preview-disabled handling applies to interactive toasts, not informative ones.
VR-specific alternate views exist with toastHeaderTemplate values such as:
VrTemplateAVrTemplateBVrTemplateCVrTemplateDVrTemplateE
Source samples:
The bundle also processes virtualReality3D2 alongside virtualReality3D.
Some builders generate both variants from the same base data.
The bundle also processes an accessibility-specific alternate view:
"platformViews": {
"accessibility": {
"viewData": { ... }
}
}Behavior note:
- when present,
platformViews.accessibility.viewDatareplaces normalviewDatafor the accessibility-specific render path rather than being shallow-merged into it
Practical rule:
- treat
platformViews.accessibility.viewDataas a complete alternate payload for that path
The bundle does not treat all alternate views equally.
Observed order in the relevant selection paths:
- for ordinary popup rendering:
virtualReality3Dwins in VR mode- otherwise
previewDisabledcan replace baseviewData - otherwise base
viewDatais used
- in accessibility-specific rendering paths:
platformViews.accessibility.viewDataoverrides normalviewData- in some paths it also takes precedence over
previewDisabled
Practical rule:
- do not expect
previewDisabledto be the final override in all modes - treat accessibility and VR alternate views as higher-priority render-path substitutions
The bundle exports at least these template components:
InteractiveToastInteractiveToastTemplateAInteractiveToastTemplateBToastToastTemplateAToastTemplateBHandoverIndicatorDeviceConnectionIndicatorInteractiveToastMessagesInteractiveToastTrophyInteractiveToastPlayerSessionInvitationInteractiveToastLegacySessionInvitationInteractiveToastScreenShareInteractiveToastSharePlayInteractiveToastSummaryInteractiveToastFriendRequestInteractiveToastGamePreparationIconOnlyToastVolumeIndicatorMixSliderIndicatorInteractiveToastFriendAvailableInteractiveToastActivityChallengesInteractiveToastGameToPlayerInteractiveToastVoiceChatInteractiveToastSystemMessageInteractiveToastSuppressionOnboardingInteractiveToastPSNowPlayerInteractiveToastSaveDataMessageInteractiveToastPlayerSessionRequestToJoinInteractiveToastAllowListRequestInteractiveToastVoiceCommandUserFeedbackTransitionSample
These are not the only valid payloads, but they summarize the smallest practical shapes that are strongly supported by bundle samples.
- required in practice:
viewTemplateTypeuseCaseIdchannelTypeviewData.message
- commonly added:
viewData.icon
Representative shape:
{
"rawData": {
"viewTemplateType": "ToastTemplateA",
"useCaseId": "NUC_SAMPLE",
"channelType": "SystemFeedback",
"viewData": {
"message": { "body": "PrimaryContent" }
}
}
}- required in practice:
viewTemplateTypeuseCaseIdchannelTypeviewData.message
- commonly added:
viewData.subMessageviewData.icon
- required in practice:
viewTemplateTypeuseCaseIdchannelTypeviewData.message- at least one supported
action
- commonly added:
viewData.icon
- required in practice:
viewTemplateTypeuseCaseIdchannelTypeviewData.message
- commonly added:
viewData.subMessageviewData.iconactions
- required in practice:
viewTemplateTypeuseCaseIdchannelTypeviewData.iconviewData.messageviewData.subMessageviewData.parameters.expandedTypeviewData.parameters.titleId
- required in practice:
viewTemplateTypeuseCaseIdchannelTypeviewData.icon
- required in practice:
viewTemplateTypeuseCaseIdchannelTypeviewData.devices- in bundle samples/builders this uses
DeviceInfo
- required in practice:
viewTemplateTypeuseCaseIdchannelTypeviewData.iconsviewData.messageviewData.supportingIcons
- required in practice:
viewTemplateTypeuseCaseIdchannelTypeviewData.iconviewData.contentTypeviewData.progress.rate
- required in practice:
viewTemplateTypeuseCaseIdchannelTypeviewData.leftIconviewData.rightIconviewData.value
- confirmed builder minimum:
viewTemplateTypeuseCaseIdchannelTypebundleNameviewData.iconviewData.messageviewData.subMessageviewData.parameters.useCaseIdviewData.parameters.trophyviewData.parameters.gameviewData.parameters.label- at least one
DeepLinkaction
- confirmed sample minimum:
viewTemplateTypeassociatedTitlefromUserviewData.iconviewData.messageviewData.subMessageviewData.parameters.sessionIdviewData.parameters.groupIdviewData.parameters.associatedTitleviewData.parameters.associatedTitles
- confirmed sample minimum:
viewTemplateTypeassociatedTitlefromUserviewData.iconviewData.messageviewData.subMessageviewData.parameters.invitationIdviewData.parameters.associatedTitleviewData.parameters.associatedTitles
- confirmed sample minimum:
viewTemplateTypeuseCaseIdchannelTypefromUserviewData.iconviewData.messageviewData.subMessageviewData.parameters.associatedTitlesviewData.parameters.fromUserviewData.parameters.sessionIdviewData.parameters.sessionName
- confirmed sample minimum:
viewTemplateTypeuseCaseIdchannelTypefromUserviewData.iconviewData.messageviewData.subMessageviewData.parameters.fromUserviewData.parameters.fromUsersviewData.parameters.totalCountviewData.parameters.usersCount
- confirmed sample minimum:
viewTemplateTypefromUserviewData.iconviewData.messageviewData.subMessage
- confirmed sample minimum:
viewTemplateTypeuseCaseIdchannelTypeassociatedTitlefromUserviewData.iconviewData.messageviewData.subMessageviewData.parameters.npCommunicationIdviewData.parameters.challengeNameviewData.parameters.runIdviewData.parameters.challengeId
- confirmed sample minimum:
viewTemplateTypeuseCaseIdfromUserviewData.iconviewData.messageviewData.subMessageviewData.parameters.groupIdviewData.parameters.threadId
- confirmed renderer minimum:
viewTemplateTypeassociatedTitleviewData.iconviewData.subMessageviewData.parameters.activityId
- confirmed sample minimum:
viewTemplateTypeuseCaseIdchannelTypefromUserviewData.iconviewData.messageviewData.subMessage- at least one of:
viewData.parameters.groupIdviewData.parameters.sessionId
- confirmed sample minimum:
viewTemplateTypeviewData.iconviewData.messageviewData.subMessageviewData.parameters.messageUid
- confirmed renderer minimum:
viewTemplateTypeuseCaseIduserIdviewData.parameters- plus one of the following CTA-specific fields depending on
useCaseId:viewData.parameters.fromUserviewData.parameters.associatedTitle
- confirmed sample minimum:
viewTemplateTypeuseCaseIdchannelTypeassociatedTitleviewData.iconviewData.messageviewData.subMessageviewData.parameters.occurrenceId
- confirmed builder/sample minimum:
viewTemplateTypeuseCaseIdchannelTypefromUserviewData.iconviewData.message- for the dedicated interactive path, an
ActionCardLinkaction withtype: "ActionCardScreenShare"
- confirmed builder minimum:
viewTemplateTypeuseCaseIdchannelTypeviewData.iconviewData.message- template-specific actions vary by use case
- confirmed generated summary minimum:
viewTemplateTypeuseCaseId: "NUCSUMMARY"toastOverwriteType: "InQueue"viewData.parameters.sourcePayloads
- confirmed builder minimum:
viewTemplateTypeuseCaseIdchannelTypeviewData.iconviewData.messageviewData.subMessage- when details are available, a
DeepLinkaction
- confirmed builder minimum:
viewTemplateTypeuseCaseIdchannelTypeviewData.iconviewData.messageviewData.subMessage- for actionable variants, one or more actions
DeepLink- optionally
PlayerControl
- confirmed sample/builder minimum:
viewTemplateTypeuseCaseIdchannelTypeisSummaryProhibitedviewData.iconviewData.messageviewData.subMessageviewData.parameters.focusMode
- confirmed builder minimum:
viewTemplateTypeuseCaseIdchannelTypeviewData.iconviewData.messageviewData.subMessageviewData.parameters.useCaseIdviewData.parameters.agentIntentSessionIdviewData.parameters.voiceLanguageviewData.parameters.label
- confirmed sample minimum:
viewTemplateTypeuseCaseIdchannelTypeviewData
Practical rule:
- start from these minimal shapes when building custom payloads
- add metadata and alternate platform views only after the base form renders
This section cross-checks every exported template in the bundle export list
around 72896+ and summarizes what is actually visible elsewhere in the file:
wrapper/renderer role, builder logic, sample payloads, and notable fields.
-
InteractiveToast- appears to be the interactive card renderer/container selected by the overlay render path
- not typically used as a payload
viewTemplateType - render path uses template names such as
TemplateA,TemplateB,Toast,ToastOnSummaryToast
-
Toast- base informative toast renderer/container
- not typically emitted directly as a payload
viewTemplateType - used by the overlay to select informative layouts and summary variants
-
ToastTemplateA- fully covered by sample matrices
- supports
iconoricons,message,subMessage,extraMessage - also used by many system builders as the default non-interactive template
-
ToastTemplateB- fully covered by sample matrices
- used when a sender-style upper line plus main message is preferred
- also reused by non-specialized Share Play / save-data / PS Now scenarios
-
IconOnlyToast- used for pure icon status notifications
- selected by audio/capture builders for cases like screenshot stored or volume mute states
- sample exists with
VrTemplateC - representative
viewData:
{
"viewTemplateType": "IconOnlyToast",
"viewData": {
"icon": {
"type": "Predefined",
"parameters": {
"icon": "system"
}
}
}
}DeviceConnectionIndicator- concrete builder found
- uses
viewData.deviceswithDeviceInfoitems - if no devices can be derived, builder falls back to
ToastTemplateA - sample exists with
VrTemplateD - representative
viewData:
{
"viewTemplateType": "DeviceConnectionIndicator",
"viewData": {
"devices": [
{
"type": "DeviceInfo",
"parameters": {
"device": "game",
"battery": "battery_empty"
}
}
]
}
}VolumeIndicator- concrete builder found in audio-device notification path
- uses
contentType: "progress"andprogress.rate - VR variants use
VrTemplateE - accessibility variant uses
preMessageplus percentage text - representative
viewData:
{
"viewTemplateType": "VolumeIndicator",
"viewData": {
"icon": {
"type": "Predefined",
"parameters": {
"icon": "sound_speaking"
}
},
"contentType": "progress",
"progress": {
"rate": 0.25
}
}
}MixSliderIndicator- concrete builder found in audio-device path
- uses left/right icons and a normalized slider
value - VR variants also use
VrTemplateE
{
"viewTemplateType": "MixSliderIndicator",
"viewData": {
"leftIcon": {
"type": "Predefined",
"parameters": {
"icon": "sound_level_game_up_party_down"
}
},
"rightIcon": {
"type": "Predefined",
"parameters": {
"icon": "sound_level_party_up_game_down"
}
},
"value": 0.5
}
}HandoverIndicator- concrete builder found
- channel
SystemFeedback toastOverwriteType: "Always"viewDataincludes:iconsmessagesupportingIcons
- accessibility platform view concatenates message with device names
-
InteractiveToastTemplateA- fully covered by scenario samples and matrix samples
- compact interactive card with
actions - often paired with
DeepLink
-
InteractiveToastTemplateB- fully covered by generic sample matrices
- also reused by:
- system message universal checkout
- game trial countdown (
NUC559) - some Share Play / PS Now paths
-
InteractiveToastSummary- synthetic aggregate toast built by summary mode, not a usual app payload
- generated with:
viewTemplateType: "InteractiveToastSummary"useCaseId: "NUCSUMMARY"toastOverwriteType: "InQueue"viewData.parameters.sourcePayloads- callbacks like
markItemAsRead/markItemAsDeleted
- summary mode wraps multiple suppressed/deferred notifications into one
-
InteractiveToastMessages- large sample catalogue exists
- covers text, stickers, voice, image, video, music, events, invitations
- driven mainly by
useCaseIdand media-specificparameters
-
InteractiveToastTrophy- concrete builder found
- channel
Trophies bundleName: "local:Trophy"soundEffectdepends on trophy grade- action goes to trophy browser via
pstc:browse?... - preview-disabled and VR variants are generated
- use cases visible in builder:
NUC55NUC273
-
InteractiveToastPlayerSessionInvitation- scenario sample exists
- carries session-style metadata and user/title context
- used for player-session invitation flows
-
InteractiveToastPlayerSessionRequestToJoin- explicit scenario sample exists with
useCaseId: "NUC449" - separate specialized template export, not only a generic A/B reuse
- explicit scenario sample exists with
-
InteractiveToastLegacySessionInvitation- scenario sample exists
- uses
ConceptByTitleplaceholder and invitation/session parameters
-
InteractiveToastScreenShare- concrete builder found
- primary dedicated use case is
NUC104 - uses
FromUsericon and anActionCardLinkaction withtype: "ActionCardScreenShare" - related non-specialized cases route to
ToastTemplateAorToastTemplateB - builder-visible use cases:
NUC104NUC171NUC176NUC177NUC178NUC359NUC361NUC378NUC379NUC450NUC453
-
InteractiveToastSharePlay- concrete builder found
- dedicated interactive template used for
NUC107 - many other Share Play use cases route to
ToastTemplateAorToastTemplateB - builder-visible Share Play use cases include:
NUC107NUC132NUC133NUC135NUC136NUC137NUC138NUC139NUC140NUC141NUC142NUC143NUC145NUC147NUC148NUC149NUC150NUC151NUC152NUC154NUC155NUC156NUC158NUC160NUC162NUC168NUC170NUC362NUC363NUC380NUC381NUC382NUC383NUC384NUC385NUC386NUC407NUC415NUC436
-
InteractiveToastFriendRequest- concrete scenario samples exist for
NUC1andNUC2 - rich top-level metadata present in samples
- concrete scenario samples exist for
-
InteractiveToastFriendAvailable- simple sample exists
- compact
FromUser+%fromUser%pattern
-
InteractiveToastActivityChallenges- large scenario sample catalogue exists
- one of the richest placeholder/parameter families in the bundle
-
InteractiveToastVoiceChat- large scenario sample catalogue exists
- frequent
toastOverwriteType: "InQueue" - party/session parameters in
viewData.parameters
-
InteractiveToastSystemMessage- dedicated sample exists
- nearby scenarios also show that some “system message” experiences can use
generic
InteractiveToastTemplateBinstead
-
InteractiveToastGamePreparation- strongly documented elsewhere in this file
- specialized game-ready/download/storage CTA template
-
InteractiveToastTournaments- sample catalogue exists for
NUC510-NUC516 - uses title-centric
AssociatedTitleplus tournament parameters
- sample catalogue exists for
-
InteractiveToastSaveDataMessage- concrete builder found
- dedicated template for save-data sync/storage errors
- builder-visible use cases:
NUC430NUC431NUC433NUC461
- related use cases
NUC563-NUC566instead route toToastTemplateB - notable fields:
associatedTitle- title placeholder in
subMessage - warning-style
message - optional
uploadData - deep link to save-data sync details
-
InteractiveToastPSNowPlayer- concrete builder found
- dedicated template used for
NUC192 - nearby use cases
NUC190andNUC280useInteractiveToastTemplateB - icon switches between
ps_nowandps_plusdepending on entitlement - actions can include:
DeepLinktopscloudplayer:play?...PlayerControlwithcommand: "CancelGame"
-
InteractiveToastGameToPlayer- concrete interactive renderer found in bundle module
2028 - rendered through the generic interactive container with:
template: "TemplateB"- custom expanded header/body renderer
- expanded header uses:
model.viewData.iconmodel.viewData.subMessageas the upper game-title linemodel.associatedTitle
- expanded body uses:
- optional
model.viewData.parameters.text GameCTAbutton area in horizontal compact layout
- optional
- supports async
preFetch(model, telemetryProps)and, whenviewData.parameters.activityIdis present, resolves:uamInfoviagetUamInfoObject(...)ctaDataviaGameIntentUtility.formatToCtaData(...)
- representative model shape implied by the renderer:
- concrete interactive renderer found in bundle module
{
"viewTemplateType": "InteractiveToastGameToPlayer",
"associatedTitle": {
"npTitleId": "PPSA00000_00"
},
"viewData": {
"icon": {
"type": "TitleByTitle",
"parameters": {
"npTitleIds": ["PPSA00000_00"]
}
},
"subMessage": {
"body": "Game title / source line"
},
"parameters": {
"activityId": "activity-id",
"text": "Expanded body text"
}
}
}InteractiveToastAllowListRequest- concrete interactive renderer found in bundle module
2187 - rendered through the generic interactive container with:
template: "TemplateB"- async prefetch of title/concept metadata
preFetch(model)requiresviewData.parameters.associatedTitleand looks up:objectType: "ConceptByTitle"npTitleIds: [associatedTitle]
- expanded body shows:
- loading spinner while prefetch runs
- title/content list item on success
- partial error state on failure
- CTA area below the fetched title info
- CTA behavior depends on
useCaseId:NUC469,NUC473: deep link to allowed-games settings for the requester (fromUser)NUC470,NUC474:GameCTAforassociatedTitleNUC471,NUC472,NUC475,NUC476: plainOKbutton
- visible parameter fields:
viewData.parameters.associatedTitleviewData.parameters.fromUser
- representative model shape implied by the renderer:
- concrete interactive renderer found in bundle module
{
"viewTemplateType": "InteractiveToastAllowListRequest",
"useCaseId": "NUC469",
"viewData": {
"parameters": {
"associatedTitle": "PPSA00000_00",
"fromUser": "account-or-requester-id"
}
}
}-
InteractiveToastVoiceCommandUserFeedback- concrete builder found
- channel
ServiceFeedback viewData.parametersincludes:useCaseIdagentIntentSessionIdvoiceLanguagelabelobject withicon,primaryText,subText
- uses dedicated template rather than generic A/B
-
InteractiveToastSuppressionOnboarding- explicit send sample found for
useCaseId: "NUC411" - uses:
isSummaryProhibited: trueplatformViews.previewDisabled- onboarding/help-style icon and text
- clearly separate from normal runtime notifications
- explicit send sample found for
TransitionSample- explicit sample exists in the template sample catalogue
- logged form:
{
"rawData": {
"viewTemplateType": "TransitionSample",
"useCaseId": "NUC_TRANSITION_SAMPLE",
"channelType": "ServiceFeedback",
"toastOverwriteType": "No",
"isImmediate": false,
"priority": 1,
"viewData": {
"icon": {
"type": "Predefined",
"parameters": {
"icon": "system"
}
},
"message": {
"body": "Transition sample for %fromUser% (%title%)"
}
}
}
}Typical shape:
{
"rawData": {
"viewTemplateType": "InteractiveToastTemplateA",
"useCaseId": "NUC_XXX",
"channelType": "ServiceFeedback",
"toastOverwriteType": "No",
"isImmediate": true,
"priority": 100,
"viewData": {
"icon": { ... },
"message": { "body": "PrimaryContent" },
"actions": [ ... ]
}
}
}Characteristics:
- compact interactive card
- primary text line
- optional actions
Samples:
Typical shape:
{
"rawData": {
"viewTemplateType": "InteractiveToastTemplateB",
"useCaseId": "IDC",
"channelType": "Downloads",
"toastOverwriteType": "No",
"isImmediate": true,
"priority": 100,
"viewData": {
"icon": { ... },
"subMessage": { "body": "Sender" },
"message": { "body": "PrimaryContent" },
"extraMessage": { "body": "TertiaryContent" },
"actions": [ ... ]
}
}
}Characteristics:
subMessageis the upper/secondary linemessageis the main line- optional
extraMessage - actions supported
Samples:
This is a specialized interactive template for game-ready, DLC-ready, download-failed, storage-shortage, and related game-preparation scenarios.
Builder and helper code:
{
"rawData": {
"viewTemplateType": "InteractiveToastGamePreparation",
"channelType": "Downloads",
"useCaseId": "NUC238",
"toastOverwriteType": "No",
"isImmediate": true,
"priority": 1,
"bundleName": "PPSA00000",
"viewData": {
"icon": {
"type": "TitleByTitle",
"parameters": {
"npTitleIds": ["PPSA00000_00"]
}
},
"message": {
"body": "Installed."
},
"subMessage": {
"body": "%titleByTitle%",
"placeHolders": {
"titleByTitle": {
"objectType": "TitleByTitle",
"npTitleIds": ["PPSA00000_00"],
"defaultValue": "Unknown"
}
}
},
"parameters": {
"expandedType": "GameCTA",
"titleId": "PPSA00000"
}
}
}
}GameCTAStorageShortageViewGame
The bundle explicitly logs that GameCTA:
- does not support
titleIdinput onCommonDialog - is supported only on
ShellUIorCommonDialog
NUC238->gameReadyToPlayNUC241->dlcReadyToPlayNUC253->insufficientSystemStorageNUC255->insufficientExtendedStorageNUC257->downloadFailedNUC478->insufficientM2StorageNUC547->addonsReadyToPlay
InteractiveToastGamePreparation can also carry:
parameters.actionProps- storage-related parameters
- title/content IDs
uploadDatain some builders
Non-interactive families include:
ToastTemplateAToastTemplateBIconOnlyToastDeviceConnectionIndicatorVolumeIndicator
Observed payload differences:
- they often use
viewData.messageandviewData.subMessagewithout actions - some indicator templates use:
viewData.devicesviewData.iconsviewData.textviewData.minimal
Examples:
DeviceConnectionIndicatorwithdevicesIconOnlyToastwith icon only- compact indicators using
icons+text
Notifications are sorted by createdDateTime.
Replacement behavior depends on:
toastOverwriteTypebundleNameuseCaseIdid
Notifications can be suppressed based on:
useCaseIdbundleName- or both
The bundle suppresses some notifications when:
- there are no login users
- the payload depends on title/user metadata
- or a
localNotificationIdpath is involved
The bundle contains off-console suppression handling with:
AlwaysOnDemand
OnDemand behavior depends on whether notificationId or
localNotificationId is already known.
The local overlay dispatch path handles:
sendsendByIddebugiduvrIndicator
For send, it parses payload as JSON.
For locally generated notifications in a payload like ShadowMount, the safest subset inferred from the bundle is:
- use
rawData - always provide:
viewTemplateTypeuseCaseIdchannelTypeviewData
- prefer
isImmediate=trueif immediate popup is desired - use
toastOverwriteType="No"unless replacement is intentional - use
bundleNameonly when grouping/replacement is wanted - keep
InteractiveToastTemplateBpayloads simple unless you really need a specialized system template - if using
InteractiveToastGamePreparation, expect much stricter assumptions - if using title/user placeholders, provide valid title/user context
- if using
localNotificationId, keep it non-empty
{
"rawData": {
"viewTemplateType": "InteractiveToastTemplateB",
"channelType": "Downloads",
"useCaseId": "IDC",
"toastOverwriteType": "No",
"isImmediate": true,
"priority": 100,
"viewData": {
"icon": {
"type": "Url",
"parameters": {
"url": "/user/data/shadowmount/smp_icon.png"
}
},
"message": {
"body": "PrimaryContent"
},
"subMessage": {
"body": "SecondaryContent"
}
}
},
"createdDateTime": "2026-03-09T12:00:00.000Z",
"updatedDateTime": "2026-03-09T12:00:00.000Z",
"expirationDateTime": "2026-03-09T13:00:00.000Z",
"localNotificationId": "123456789"
}{
"rawData": {
"viewTemplateType": "InteractiveToastGamePreparation",
"bundleName": "PPSA00000",
"channelType": "Downloads",
"useCaseId": "NUC238",
"toastOverwriteType": "No",
"isImmediate": true,
"priority": 1,
"viewData": {
"icon": {
"type": "TitleByTitle",
"parameters": {
"npTitleIds": ["PPSA00000_00"]
}
},
"message": {
"body": "Installed."
},
"parameters": {
"expandedType": "GameCTA",
"titleId": "PPSA00000"
},
"subMessage": {
"body": "%titleByTitle%",
"placeHolders": {
"titleByTitle": {
"defaultValue": "Unknown",
"npTitleIds": ["PPSA00000_00"],
"objectType": "TitleByTitle"
}
}
}
}
},
"createdDateTime": "2026-03-09T12:00:00.000Z",
"updatedDateTime": "2026-03-09T12:00:00.000Z",
"expirationDateTime": "2026-03-09T13:00:00.000Z",
"localNotificationId": "987654321"
}The bundle also contains a large catalogue of concrete sample notifications in
the range around 332904-335303. Those examples are useful because they show
real useCaseId, channelType, placeholder, and parameters combinations,
not only generic template skeletons.
Found examples:
NUC264points/time: reclaim the leadNUC265points/time: challenge completedNUC269points/time: fell out of top 100NUC271points/time: final global placementNUC272points/time: challenge endedNUC345points/time: direct challenge from another userNUC463points/time: personal best
Observed shape:
{
"viewTemplateType": "InteractiveToastActivityChallenges",
"associatedTitle": {
"npTitleId": "NPXS45020_00"
},
"fromUser": {
"accountId": "3184494961250237665"
},
"useCaseId": "NUC264",
"channelType": "ActivityChallenges",
"viewData": {
"icon": {
"type": "AssociatedTitle"
},
"subMessage": {
"body": "%fromUser%",
"placeHolders": {
"fromUser": {
"objectType": "User",
"accountId": "3184494961250237665",
"defaultValue": "Default User"
}
}
},
"message": {
"body": "Reclaim the lead in %challengeName%?",
"placeHolders": {
"challengeName": {
"objectType": "String",
"defaultValue": "Defeat Raid Boss"
}
}
},
"parameters": {
"npCommunicationId": "NPWR17252_00",
"challengeName": "Defeat Raid Boss",
"runId": "faf0d1d0-5d20-435b-bb8b-b620c5a33714",
"challengeId": "challenge05"
}
}
}Notes:
- uses
AssociatedTitleicon heavily - mixes
User,String,Title, andNumberplaceholders parameterscarry challenge identity and scoring metadata
Observed sample:
{
"fromUser": {
"accountId": "1000187643835253666"
},
"viewData": {
"icon": {
"type": "FromUser"
},
"message": {
"body": "Your friend just came online."
},
"subMessage": {
"body": "%fromUser%",
"placeHolders": {
"fromUser": {
"objectType": "User",
"accountId": "1000187643835253666",
"defaultValue": "default user name"
}
}
}
},
"viewTemplateType": "InteractiveToastFriendAvailable"
}Found examples:
NUC1standard friend requestNUC1close friend request variantNUC2real-name / close-friends wording
Observed shape:
{
"viewTemplateType": "InteractiveToastFriendRequest",
"channelType": "FriendRequest",
"createdDateTime": "2019-06-14T19:38:13.155Z",
"expirationDateTime": "2100-09-12T19:38:13.155Z",
"fromUser": {
"accountId": "7066465281289280957"
},
"notificationId": "399498519847690",
"priority": 2,
"state": "New",
"updatedDateTime": "2019-06-14T19:38:13.197Z",
"useCaseId": "NUC1",
"viewData": {
"icon": {
"type": "FromUser"
},
"message": {
"body": "%fromUser%",
"placeHolders": {
"fromUser": {
"objectType": "User",
"accountId": "7066465281289280957",
"defaultValue": "SUGITV"
},
"usersCount": {
"objectType": "Number",
"defaultValue": 1
}
}
},
"subMessage": {
"body": "Wants to become friends",
"placeHolders": {}
},
"parameters": {
"fromUser": "7066465281289280957",
"fromUsers": ["7066465281289280957"],
"totalCount": 1,
"usersCount": 1
}
}
}Notes:
- unlike minimal local payloads, system samples often include top-level
createdDateTime,updatedDateTime,expirationDateTime,state,notificationId - message text is often driven by
%fromUser%, with wording moved tosubMessage
Observed sample characteristics:
notificationGroup: "np:session:invite"ConceptByTitleplaceholder viaassociatedTitlesparameters.invitationId- title and user metadata both present
Representative excerpt:
{
"viewTemplateType": "InteractiveToastLegacySessionInvitation",
"associatedTitle": {
"npTitleId": "NPXS29104_00"
},
"fromUser": {
"accountId": "5214476082371262855"
},
"viewData": {
"icon": {
"type": "FromUser"
},
"message": {
"body": "Invited you to play %associatedTitles%.",
"placeHolders": {
"associatedTitles": {
"objectType": "ConceptByTitle",
"npTitleIds": ["NPXS29104_00"],
"defaultValue": "NPXS29104"
}
}
},
"subMessage": {
"body": "%fromUser%",
"placeHolders": {
"fromUser": {
"objectType": "User",
"accountId": "5214476082371262855",
"defaultValue": "qd5ccba95d5-US"
}
}
}
}
}Found examples:
NUC63,NUC181add groupNUC64,NUC182join groupNUC65,NUC183join group with 3/4 playersNUC69,NUC174message replyNUC108,NUC179stickerNUC109voiceNUC110imageNUC111musicNUC112videoNUC116invitation / user scheduled eventNUC117official eventNUC351-356mixed media + text
Representative message-group example:
{
"viewTemplateType": "InteractiveToastMessages",
"useCaseId": "NUC63",
"channelType": "Messages",
"viewData": {
"icon": {
"type": "FromUser"
},
"subMessage": {
"body": "%fromUser%",
"placeHolders": {
"fromUser": {
"objectType": "User",
"accountId": "1000187643835253666",
"defaultValue": "default user name"
}
}
},
"message": {
"body": "Added you to a group."
}
}
}Family notes:
- this family is the densest consumer of mixed media variants
- many examples keep the same template while only changing
useCaseId, message wording, andparameters
Observed family:
- player-session invitation sample
- player-session request-to-join sample (
NUC449)
Representative characteristics:
- session-specific
parameters - player-session oriented template name rather than generic A/B
- usually combines user context with session metadata
Observed sample:
"System Message Multiple Links"usesviewTemplateType: "InteractiveToastSystemMessage"- nearby
"System Message Universal Checkout"instead usesInteractiveToastTemplateB
Implication:
- system-message scenarios are not tied to a single template
- same feature area can route through either a specialized template or generic
InteractiveToastTemplateB
Found direct scenario uses:
NUC131left from group- two
associatedTitle + fromUsersamples with:bundleNametoastOverwriteType: "Always"isImmediate: falseDeepLinkaction to notification list
Representative excerpt:
{
"bundleName": "testGroup1",
"toastOverwriteType": "Always",
"priority": 1,
"channelType": "testGroup1",
"isImmediate": false,
"useCaseId": "NUCTESTG1",
"associatedTitle": {
"npTitleId": "CUSA00001_00"
},
"fromUser": {
"accountId": "1832258314344407885"
},
"viewTemplateType": "InteractiveToastTemplateA",
"viewData": {
"icon": {
"type": "AssociatedTitle"
},
"message": {
"body": "<<< %fromUser% >>>"
},
"subMessage": {
"body": "((( %associatedTitle% )))"
},
"actions": [
{
"actionName": "Notification List",
"actionType": "DeepLink",
"defaultFocus": true,
"parameters": {
"actionUrl": "psnotificationlist:play"
}
}
]
}
}The bundle also includes explicit sample-only templates:
UnmSampleMessageReplySampleCTASampleLargeSizeExpandSample
Representative shapes:
{
"viewTemplateType": "UnmSample",
"useCaseId": "NUC_UNM_SAMPLE",
"channelType": "ServiceFeedback",
"toastOverwriteType": "No",
"isImmediate": false,
"priority": 1,
"viewData": {
"icon": {
"type": "FromUser"
},
"message": {
"body": "UNM sample for %fromUser%"
},
"subMessage": {
"body": "Notification for UNM sample"
},
"parameters": {
"message1": "message from feature server 1",
"message2": "message from feature server 2"
}
}
}{
"viewTemplateType": "MessageReplySample",
"useCaseId": "NUCtesttest",
"viewData": {
"icon": {
"type": "Predefined",
"parameters": {
"icon": "community"
}
},
"message": {
"body": "Someone"
},
"subMessage": {
"body": "send to me a message"
}
}
}{
"viewTemplateType": "CTASample",
"useCaseId": "NUC_CTA_SAMPLE",
"channelType": "ServiceFeedback",
"toastOverwriteType": "No",
"isImmediate": false,
"priority": 1,
"viewData": {
"icon": {
"type": "Predefined",
"parameters": {
"icon": "system"
}
},
"message": {
"body": "PrimaryContent"
},
"subMessage": {
"body": "SecondaryContent"
},
"parameters": {
"type": "3"
}
}
}Found examples:
NUC66party started with youNUC185private party start / invitationNUC527open party inviteNUC528open party invite with screen shareNUC532request to join
Representative shape:
{
"viewTemplateType": "InteractiveToastVoiceChat",
"useCaseId": "NUC527",
"channelType": "Party",
"toastOverwriteType": "InQueue",
"isImmediate": false,
"priority": 1,
"fromUser": {
"accountId": "64271530114044507"
},
"viewData": {
"icon": {
"type": "FromUser"
},
"message": {
"body": "Invited you to a party."
},
"subMessage": {
"body": "%fromUser%"
},
"parameters": {
"sessionId": "sessionId",
"fromUser": "64271530114044507"
}
}
}Notes:
- often uses
toastOverwriteType: "InQueue" parameterscarrygroupIdorsessionId
Found examples:
NUC510tournament startedNUC511join matchNUC512round winNUC513next round readyNUC514tournament lostNUC515tournament wonNUC516tournament cancelled
Representative shape:
{
"viewTemplateType": "InteractiveToastTournaments",
"associatedTitle": {
"npTitleId": "NPXS45020_00"
},
"useCaseId": "NUC510",
"channelType": "Tournaments",
"viewData": {
"icon": {
"type": "AssociatedTitle"
},
"subMessage": {
"body": "%associatedTitles%"
},
"message": {
"body": "Your tournament started. You have 5 minutes to join your match."
},
"parameters": {
"remainingDuration": 5,
"pairingId": "36ab0940-2247-4b29-9502-a6819a4b09f7",
"occurrenceId": "7b92ae52-5ee5-43df-8d34-d9c282c13152"
}
}
}In addition to scenario-specific samples, the bundle contains large template
stress-test matrices around 338943-341001.
These are especially useful because they reveal truncation, line-count, icon,
action, and logged/rawData behavior.
Observed variants include:
messageonlymessage + subMessagemessage + subMessage + extraMessage- very long
messageandsubMessagestrings to test ellipsis iconsarray with two predefined icons
Representative extracted examples:
{
"viewTemplateType": "ToastTemplateA",
"viewData": {
"icon": {
"type": "Predefined",
"parameters": {
"icon": "system"
}
},
"message": {
"body": "PrimaryContent"
}
}
}{
"viewTemplateType": "ToastTemplateA",
"viewData": {
"icons": [
{
"type": "Predefined",
"parameters": {
"icon": "family"
}
},
{
"type": "Predefined",
"parameters": {
"icon": "ps_user"
}
}
],
"message": {
"body": "PrimaryContent"
},
"subMessage": {
"body": "SecondaryContent"
}
}
}Observed variants emphasize:
subMessageas sender linemessageas primary content- optional
extraMessage - long sender/main strings for ellipsis behavior
Representative extracted example:
{
"viewTemplateType": "ToastTemplateB",
"viewData": {
"icon": {
"type": "Predefined",
"parameters": {
"icon": "system"
}
},
"subMessage": {
"body": "Sender"
},
"message": {
"body": "PrimaryContent"
},
"extraMessage": {
"body": "TertiaryContent"
}
}
}The interactive matrices mirror informative samples but add actions, usually
through a shared action array.
Representative extracted example:
{
"viewTemplateType": "InteractiveToastTemplateA",
"viewData": {
"icon": {
"type": "Predefined",
"parameters": {
"icon": "system"
}
},
"message": {
"body": "PrimaryContent"
},
"actions": [
{
"actionType": "DeepLink"
},
{
"actionType": "ActionCardLink"
}
]
}
}{
"viewTemplateType": "InteractiveToastTemplateB",
"viewData": {
"icon": {
"type": "Predefined",
"parameters": {
"icon": "system"
}
},
"subMessage": {
"body": "Sender"
},
"message": {
"body": "PrimaryContent"
},
"extraMessage": {
"body": "TertiaryContent"
},
"actions": [
{
"actionType": "DeepLink"
}
]
}
}The sample matrix also shows two delivery forms:
- non-logged/direct:
{
"viewTemplateType": "InteractiveToastTemplateA",
"useCaseId": "NUC_xxx",
"channelType": "ServiceFeedback",
"viewData": { ... }
}- logged/local-wrapper:
{
"rawData": {
"viewTemplateType": "InteractiveToastTemplateA",
"useCaseId": "NUC_xxx",
"channelType": "ServiceFeedback",
"viewData": { ... }
}
}That matches the dispatch behavior elsewhere in the bundle:
- logged local send paths often wrap the payload in
rawData - direct sample sends can still use the bare template object