These are the various events which are triggered from within the SDK. React Native integrations receive the exported EventType enum and an event-specific data payload through StorytellerSdk.onUserActivityOccurred().
Register the listener before the interactions you want to measure. The callback receives { type, data } and registration returns a subscription with remove(). For a component-owned listener:
Mount this listener once for the area of your app that owns tracking. Multiple listeners each receive the events. enableUserActivityTracking: false disables the host callback. With enableFullVideoAnalytics: false, native SDKs remove content-identifying fields such as Story/Page/Clip/Card IDs and titles before forwarding data. Ad events also depend on ad tracking and the configured ad integration. enableStorytellerTracking controls Storyteller collection separately from your listener.
In the below discussion, "completing" a Page refers to allowing the timer to expire - so this would correspond to watching all of an Image Page for the duration set for it (default 15s) or watching all of a video.
The table below is the complete EventType enum exported by @getstoryteller/react-native-storyteller-sdk. This is the exported type contract, not a promise that each member reaches your listener. SdkInitialized is internal to native analytics and is not forwarded to the host on either platform. Not every other event is emitted on every platform, content type, tenant configuration, or native SDK path; handle events by enum member and treat payload fields as event-dependent.
This event is recorded in the following scenarios:
When a user taps on a row item to open a story
When a story is loaded because the previous Story finished
When a story is loaded because the user tapped to skip the last page of the previous story
When a user swipes left on a story to go to the next story
When a user swipes right on a story to go to the previous story
When a user is sent directly to a story via a deep link
For Opened Story, the payload can include storyId, storyTitle, storyIndex, storyPageCount, storyReadStatus, storyPlaybackMode, openedReason, currentCategory and categories.
This event is recorded whenever a user views content from a page.
OpenedPage is a page impression and also applies to images and interactive pages. Use MediaStarted to measure the start of video playback; opening a page does not prove that its video started.
For Opened Page, the payload can include pageId, pageIndex, pageType, storyPlaybackMode, pageHasAction, pageActionText, pageActionUrl, contentLength, storyId, storyTitle, storyIndex, storyPageCount, currentCategory and openedReason.
This event is recorded in the following scenarios:
When a user taps the close button to dismiss the story
When a user swipes down to dismiss the story
When a user taps to skip the last page of the final story - this dismisses the story and exits the story view
When a user swipes left on the final story to dismiss the story
When a user swipes right on the first story to dismiss the story
When a user completes the final page of the final story and the story view is dismissed
Android does not emit DismissedStory from the Search-origin content scope.
For Dismissed Story, the payload can include storyId, storyTitle, storyIndex, storyPageCount, storyPlaybackMode, pageId, pageIndex, pageType, dismissedReason, durationViewedMs, currentCategory and pagesViewedCount.
a user advances from a Story before reaching its final page. Reaching the final page is counted as CompletedStory; skipping that final page is not an additional SkippedStory.
For Skipped Story, the payload can include storyId, storyTitle, storyIndex, storyPageCount, storyPlaybackMode, pageId, pageIndex, currentCategory and pageType.
This event is recorded when a user taps to go to the next page before completing the current page.
For Skipped Page, the payload can include storyId, storyTitle, storyIndex, storyPageCount, storyPlaybackMode, pageId, pageIndex, currentCategory and pageType.
This event is recorded at the same time as OpenedPage for the final page in a story.
For Completed Story, the payload can include storyId, storyTitle, storyIndex, storyPageCount, storyPlaybackMode, pageId, pageIndex, currentCategory and pageType.
This event is recorded when a user watches a page to completion (i.e. the timer for that page finishes.)
For Completed Page, the payload can include storyId, storyTitle, storyIndex, storyPageCount, storyPlaybackMode, pageId, pageIndex, pageType, currentCategory and contentLength.
This event is recorded when a user taps an action button on a page to open a link
For Action Button Tapped, the payload can include storyId, storyTitle, storyIndex, storyPageCount, storyPlaybackMode, pageId, pageIndex, pageType, pageHasAction, pageActionText, currentCategory and pageActionUrl.
This event is recorded when a user taps the share button on a page.
For Share Button Tapped, the payload can include storyId, storyTitle, storyIndex, storyPageCount, storyPlaybackMode, pageId, pageIndex, currentCategory and pageType.
a user swipes right to go to the previous story (unless this is the first story - in which case DismissedStory is fired instead)
a user taps back on the first page in a story (and this is not the first page is the first story)
For Previous Story, the payload can include storyId, storyTitle, storyIndex, storyPageCount, storyPlaybackMode, pageId, pageIndex, currentCategory and pageType.
This event is recorded when a user taps back to go to a previous page in the story.
For Previous Page, the payload can include storyId, storyTitle, storyIndex, storyPageCount, storyPlaybackMode, pageId, pageIndex, currentCategory and pageType.
Android records this event when the user selects a sharing target. iOS records it when the system sharing activity reports completion.
For Share Success, the payload can include storyId, storyTitle, storyIndex, storyPageCount, storyPlaybackMode, pageId, pageIndex, pageType, currentCategory and shareMethod.
This event is recorded when a user answers a question in a trivia quiz.
For Trivia Quiz Question Answered, the payload can include storyId, storyTitle, storyIndex, storyPlaybackMode, pageId, pageIndex, pageType, triviaQuizId, triviaQuizTitle, triviaQuizQuestionId, currentCategory and triviaQuizAnswerId.
This event is recorded when a user completes a trivia quiz.
For Trivia Quiz Completed, the payload can include storyId, storyTitle, storyIndex, storyPlaybackMode, pageId, pageIndex, pageType, triviaQuizId, triviaQuizTitle, triviaQuizScore and currentCategory.
a user is sent directly to a clip via a call to openCollection
a user is sent directly to a clip via a deep link
a user opens a Category and navigates to a new Clip or moves back to a previous Category.
a user dismisses the last Category (by pressing back or swiping right) and returns to the top-level Collection.
a user opens embedded Clips for the first time.
a user pulls to refresh at the top of Embedded Clips.
a user is viewing a Collection with “For You/Following” enabled and switches between "For You" and "Following".
For Opened Clip, the payload can include clipId, clipTitle, clipIndex, clipHasAction, openedReason, collection, categories, contentLength, clipFeedType (values: default, forYou, following) and categoryDetails.
a user taps on the back button in the top-left to exit the Clips player (and is at the top of the stack of Clip Categories)
This event does not fire when the user is not at the top of the Clip Category stack.
For Dismissed Clip, the payload can include clipId, clipTitle, clipIndex, dismissedReason, durationViewedMs, clipsViewed, collection, categories, clipFeedType and loopsViewed.
a user taps the action button at the bottom of a clip
a user swipes left on a clip to open the relevant action
For Action Button Tapped, the payload can include clipId, clipTitle, clipIndex, clipHasAction, clipActionText, collection, categories, clipFeedType and clipActionUrl.
a user taps on the screen whilst a clip is playing to pause the clip - it does not fire when a clip is paused automatically by sharing or following an action
For Paused Clip, the payload can include clipId, clipTitle, collection, categories, clipFeedType and clipIndex.
Note: For live clips this event will never be fired, as pausing/resuming live clips is not supported.
A user is viewing a Collection with “For You/Following” enabled and switches between "For You" and "Following".
For Finished Clip, the payload can include clipId, clipTitle, clipIndex, loopsViewed, durationViewedMs, collection, categories, clipFeedType and contentLength.
a user taps a category at the bottom of the Clips Player to open a new Category
a user opens a category by navigating back from another category
This event is not fired when opening the top level of a collection - only when navigating to a specific category.
For Opened Category, the payload can include clipId, clipTitle, clipIndex, collection, categories, categoryId, clipFeedType and categoryName.
a user taps the follow category button of the Clips Player to open the Followable Category screen
a user swipes left from the right edge of the screen on a Clip with a Followable Category and opens the Followable Category screen
For Followable Category Tapped, the payload can include clipId, clipTitle, clipIndex, collection, categories, categoryId, clipFeedType and categoryName.
This event is recorded when a Story or Clip tile becomes visible in a row or grid.
For Tile Visible, event data includes tileIndex. Story tile events include storyId, storyTitle, categories, and context when available. Clip tile events include clipId, clipTitle, collection, categories, and context when available.
an ad is loaded because the previous story finished
a user swipes left on a story to go to the next story and an ad appears
a user swipes right on a story to go to the previous story and an ad appears
For Opened Ad, the payload can include advertiserName, adId, adType, adPlacement, adFormat, adResponseIdentifier, pageType, openedReason, contentLength, pageHasAction, pageActionText, currentCategory and pageActionUrl.
a user swipes up on a clip to go to the next clip and an ad should appear next
a user swipes down on a clip to go to the previous clip and an ad should appear next
an ad completes a loop and begins playing again from the start
React Native exposes the analytics payload; it does not include the native ad view object.
For Opened Ad, the payload can include advertiserName, adId, adType, adPlacement, adFormat, adResponseIdentifier, pageType, openedReason, contentLength, pageHasAction, clipHasAction, pageActionText, clipActionText, pageActionUrl, clipActionUrl, currentCategory, collection.
taps back on their device UI to dismiss the ad (Android only)
taps to skip the ad if the ad is the last page in the current set of stories
swipes left on the ad to skip it if the ad is the last page in the current set of stories
completes the ad if the ad is the last page in the current set of stories
For Dismissed Ad, the payload can include advertiserName, adId, adType, adPlacement, adFormat, adResponseIdentifier, pageType, dismissedReason, durationViewedMs, pagesViewedCount, pageHasAction, pageActionText, currentCategory and pageActionUrl.
swipes left to go to the next story before completing the current ad
taps to go to the next page on an ad before completing the current ad
For Skipped Ad, the payload can include advertiserName, adId, adType, adPlacement, adFormat, adResponseIdentifier, pageType, contentLength, pageHasAction, pageActionText, currentCategory and pageActionUrl.
taps on the swipe up element of an ad to open a link
For Ad Action Button Tapped, the payload can include advertiserName, adId, adType, adPlacement, adFormat, adResponseIdentifier, pageType, pageHasAction, pageActionText, currentCategory and pageActionUrl.
taps the action button at the bottom of an ad displayed in clips
swipes left on a clip to open the relevant action
For Ad Action Button Tapped, the payload can include advertiserName, adId, adType, adPlacement, adFormat, adResponseIdentifier, pageType, pageHasAction, clipHasAction, pageActionText, clipActionText, pageActionUrl, clipActionUrl, currentCategory, collection.
This event is recorded at the same time as Dismissed Ad, Skipped Ad and Viewed Ad Page Complete and gives an easier way to determine when an ad finishes for any reason.
For Finished Ad, the payload can include advertiserName, adId, adType, adPlacement, adFormat, adResponseIdentifier, pageType, contentLength, pageHasAction, pageActionText, currentCategory and pageActionUrl.
This event is recorded when a user pauses a page within an ad by pressing and holding on the page.
For Paused Ad Page, the payload can include advertiserName, adId, adType, adPlacement, adFormat, adResponseIdentifier, pageType, contentLength, pageHasAction, pageActionText, currentCategory and pageActionUrl.
This event is recorded when a user pauses a clip which is an ad by tapping the screen. It does not fire when a clip is paused automatically for sharing or following an action
For Paused Ad Clip, the payload can include advertiserName, adId, adType, adPlacement, adFormat, adResponseIdentifier, pageType, contentLength, pageHasAction, clipHasAction, pageActionText, clipActionText, pageActionUrl, clipActionUrl, currentCategory, collection.
This event is recorded when a user resumes playing a page within an ad by releasing their long press which paused the ad.
For Resumed Ad Page, the payload can include advertiserName, adId, adType, adPlacement, adFormat, adResponseIdentifier, pageType, contentLength, pageHasAction, pageActionText, currentCategory and pageActionUrl.
This event is fired when a clip which is an ad is paused and a user taps the screen to resume playback. It does not fire when a clip is resumed automatically
For Resumed Ad Clip, the payload can include advertiserName, adId, adType, adPlacement, adFormat, adResponseIdentifier, pageType, contentLength, pageHasAction, clipHasAction, pageActionText, clipActionText, pageActionUrl, clipActionUrl, currentCategory, collection.
This event is recorded when a user reaches 1/4 of the way through the duration of a page or clip which is an ad.
For clip ads (which loop), it fires for each loop of the clip.
For Viewed Ad Page First Quartile, the payload can include advertiserName, adId, adType, adPlacement, adFormat, adResponseIdentifier, pageType, contentLength, pageHasAction, clipHasAction, pageActionText, clipActionText, pageActionUrl, clipActionUrl, currentCategory, collection.
This event is recorded when a user reaches halfway through the duration of a page or clip which is an ad.
For clip ads (which loop), it fires for each loop of the clip.
For Viewed Ad Page Midpoint, the payload can include advertiserName, adId, adType, adPlacement, adFormat, adResponseIdentifier, pageType, contentLength, pageHasAction, clipHasAction, pageActionText, clipActionText, pageActionUrl, clipActionUrl, currentCategory, collection.
This event is recorded when a user reaches 3/4 of the way through the duration of a page or clip which is an ad.
For clip ads (which loop), it fires for each loop of the clip.
For Viewed Ad Page Third Quartile, the payload can include advertiserName, adId, adType, adPlacement, adFormat, adResponseIdentifier, pageType, contentLength, pageHasAction, clipHasAction, pageActionText, clipActionText, pageActionUrl, clipActionUrl, currentCategory, collection.
This event is recorded when a user reaches the end of the duration for a page or clip which is an ad.
For clip ads (which loop), it fires for each loop of the clip.
For Viewed Ad Page Complete, the payload can include advertiserName, adId, adType, adPlacement, adFormat, adResponseIdentifier, pageType, contentLength, pageHasAction, clipHasAction, pageActionText, clipActionText, pageActionUrl, clipActionUrl, currentCategory, collection.
This event is called on video pages whenever the video finishes buffering.
Note: Readiness and media-start events describe a playback load, not a unique content ID across all visits. There may be multiple Buffering Started/Buffering Ended pairs of events for an individual page. There may not always be a Buffering Ended event for every Buffering Started event as the user may choose to exit the page during buffering.
For Buffering Ended, the payload can include storyId, storyTitle, storyIndex, pageId, pageIndex, pageType, isInitialBuffering and timeSinceBufferingBegan.
Mute and captions events report the corresponding user-visible state change for Stories, Clips or ads. ScrubbedClip can include startPosition, endPosition and scrubDirection.
OpenedSheet and DismissedSheet identify SDK sheets with optional sheetId, sheetTitle and sheetSize, plus originating content when known.
StoryInstructionScreenViewed identifies a displayed Story instruction screen.
CardViewed and CardTapped describe Card visibility and interaction. CardVideoStarted, CardVideoHeartbeat, and CardVideoCompleted describe Card playback; CardAudioToggled can include audioToggleFrom, audioToggleTo and mute state where forwarded.
Followable-category limit events describe the limit dialogue being shown, dismissed or its action being tapped. Related copy and action fields are optional.
CurrentVideoPlayerChanged identifies a native player transition. Its RN analytics payload does not expose the native video player object.
For each event, data is returned with details about the content involved and additional information about what the user has done. The exported UserActivityData type lists the payload fields. The callback uses a generated event type whose metadata is currently declared as Object, whereas UserActivityData.metadata is a string map. Keep the callback parameter inferred; when forwarding it to a typed analytics service, derive that service's input from the callback type or validate and map the metadata first.
The following implementation notes were checked against the React Native integration source with Android 12.1.1 and iOS 11.8.0:
Android suppresses Story and ad dismissal events in Search-origin content scopes; iOS also suppresses Story-ad dismissal in that scope.
Missing native values are omitted; do not expect every field listed for an event. Search payloads contain originating Story or Clip context only when Search was opened from that content.
Native durationViewed is renamed to durationViewedMs by both bridges. contentLength is in seconds; viewing and buffering durations and scrub positions are in milliseconds. Android converts content length, viewed duration and scrub positions to integers when forwarding them.
isMuted, originalPosition, and displayPosition are declared in UserActivityData but are currently omitted by the iOS RN bridge. airplayEnabled is iOS-only.
Device/app and SDK-initialization fields remain part of the TypeScript type. The iOS RN bridge does not forward these groups, and SdkInitialized never reaches the host subscription on either platform.
metadata and context are string-keyed objects. categoryDetails contains category objects with name, id, type, and placement; currentCategory contains name, id, and placement when supplied.
All fields are optional because the native SDK only supplies data relevant to the event and platform. The table is the complete React Native payload type; the detailed sections below explain common fields and event-specific behavior.
The storyIndex?: number identifies the Story in the player/list analytics context and can accompany multiple Story and playback events. Story-player analytics use 1-based indexes; this is not limited to OpenedStory.
The pageIndex?: number is the 1-based content Page index for Story-player events. Android excludes inserted ad pages from this content index. Search-origin and other payloads can use native source indexes; do not use it as a universal UI-array offset.
The pageType?: string is the type of the page associated with the event. Examples include image, video and poll; other native content types can also supply a string value.
The storyPlaybackMode?: string value states if the story was opened during the list or in the single story mode (Storyteller static method.) It is supplied for relevant Story events and may be omitted for other event groups. The values for this are either list or singleStory.
The pageActionType?: string defines the type of action associated with a page, native values include inApp, web, store, externalApp, share, sheet, story, storyCategory, clip, clipCollection and none.
The openedReason?: string value states how the user opened a story or clip. Common values include storyListTap (the user tapped the story in the story row); deepLink (openStory or openPage was called to open the story); swipe (the user swiped left or right to change the current story); automaticPlayback (the user completed the previous page); tap (the user tapped on the previous page to navigate to this page) and clipListTap (the user tapped the clip in a clip list).
openedReason can also accompany Page, ad, sheet and instruction events when native supplies it. The values above are common examples; programmatic open reasons and other native paths can supply additional strings.
The dismissedReason?: string value states the way the user dismissed a story or clip. Common values include closeButtonTapped (the user tapped close to dismiss the story); swipedDown (the user swiped down to dismiss the story); swipedFirstStory (the user swiped the first story to dismiss it); swipedFinalStory (the user swiped the final story to dismiss it); skippedFinalPage (the user tapped to skip the final page of the final story); completedFinalPage (the user completed the final page of the final story) and backButtonTapped (the user tapped the back button to dismiss the clip).
dismissedReason can also accompany ad and Search dismissals. Treat it as an optional string, including a custom reason passed by the host when dismissing content.
The durationViewedMs?: number is the native viewing duration for the Story or Clip session in milliseconds. Story dismissal duration is measured from the opening session; Android accumulates intervals marked as viewing, while iOS Story dismissal uses elapsed session time. Use the organic heartbeat events for active watch-time measurement.
A new content-viewing session resets the relevant timer.
For FinishedClip, Duration Viewed describes the Clip viewing session being finished, in milliseconds. It is not restricted to Clips entered by a swipe.
The pagesViewedCount?: number is the total number of pages a user has viewed since the most recent OpenedStory event with an Opened Reason of storyListTap or deepLink. This count is reset after any DismissedStory events.
The adFormat?: string represents the format of the Ad that was displayed. Examples include customNative, native and banner; the value depends on the ad source and format.
The adPlacement?: string represents the placement of the ad. Full-screen examples are Between Stories, Between Pages and Between Clips; paid banner telemetry can use Bottom Banner. This is only included for ad events.
The adResponseIdentifier?: string represents the response identifier attached to the ad that was received from the ad provider. Used for debugging ad targeting.
The isInitialBuffering?: boolean value is returned if the buffering happens at the start of playback for that page. This is only included for BufferingStarted and BufferingEnded events.
The timeSinceBufferingBegan?: number value is the duration the current buffering lasted for in milliseconds. This is only included for BufferingEnded events.
The categories?: Array<string> value is the list of categories assigned to the story for which the event occurred. It can accompany Story, Clip, tile, Search and other content events when available.
The triviaQuizId?: string is the ID of the trivia quiz that was completed or answered. This is only included on TriviaQuizQuestionAnswered and TriviaQuizCompleted events.
The triviaQuizTitle?: string is the title of the trivia quiz that was completed or answered. This is only included on TriviaQuizQuestionAnswered and TriviaQuizCompleted events.
The triviaQuizQuestionId?: string is the ID of the trivia quiz question which was answered. This is only included on TriviaQuizQuestionAnswered events.
The clipIndex?: number is the native analytics index for the Clip in its row/grid or player feed. Player analytics use 1-based indexes. It can change when the feed changes; use clipId as the stable content identifier.
The tileIndex?: number is the 1-based index of the Story or Clip tile in the row or grid at the point it became visible. It is supplied for TileVisible and can also accompany external Search result taps.
The clipsViewed?: number value is the total number of clips a user has viewed since the most recent OpenedClip event with an Opened Reason of clipListTap or deepLink. This count should be reset after any DismissedClip events.
The loopsViewed?: number is for DismissedClip, the total number of loops (plays of an individual clip) a user has viewed since the most recent OpenedClip event with an Opened Reason of clipListTap or deepLink.
This count should be reset after any DismissedClip events. For FinishedClip, the total number of loops.
The clipActionType?: string defines the type of action associated with a clip, native values include inApp, web, store, externalApp, share, sheet, story, storyCategory, clip, clipCollection and none.
The currentCategory?: CurrentCategoryData is the category for the row that is currently being interacted with. The information provided from this is the category title, ID and placement.
It can also accompany list-tile and Search events when a current category is known.
The containerTitle?: string represents the title of the container that current item is in, for Stories that's a Story title, for Clips it's a collection name.
RN 12 exposes the following values from Android 12.0.0+ and iOS 11.7.0+ through the existing onUserActivityOccurred subscription. Availability depends on content and tracking settings.
Enum member
Emitted value
Meaning
EventType.StoryHeartbeat
storyHeartbeat
Cumulative active-viewing threshold for an organic Story Page
EventType.StoryPageQuartile
storyPageQuartile
Organic Story Page progress milestone
EventType.ClipVideoHeartbeat
clipVideoHeartbeat
Cumulative actual-playback threshold for an organic Clip
EventType.ClipVideoQuartile
clipVideoQuartile
Fixed-duration organic Clip playback milestone
EventType.SearchResultTapped
searchResultTapped
Configured external Search result tapped
Organic heartbeats occur at five-second cumulative active-viewing thresholds. Story tracking resets for each Page view; Clip heartbeat time continues across natural loops, while Clip quartiles reset per playback pass. Live Clips can emit heartbeats but not organic quartiles.
UserActivityData.quartile is optional and contains 25, 50 or 75 for the two organic quartile events. External Search-result payloads can additionally contain optional actionType, searchResultId, searchResultTitle and searchResultSource. Missing native fields are omitted. Existing event names and payload fields are unchanged.
{"slug": "analytics", "page_title": "Analytics", "page_url": "Analytics/", "canonical_url": "/react-native/Analytics/", "markdown": "# Analytics\n\n1. [Event Types](#event-types)\n - [Complete React Native EventType Reference](#complete-react-native-eventtype-reference)\n1. [Story Events](#story-events)\n1. [Clip Events](#clip-events)\n1. [List Tile Events](#list-tile-events)\n1. [Search Events](#search-events)\n - [Opened Search](#opened-search)\n - [Dismissed Search](#dismissed-search)\n - [Performed Search](#performed-search)\n - [Opened Filters](#opened-filters)\n - [Dismissed Filters](#dismissed-filters)\n - [Used Suggestion](#used-suggestion)\n1. [Ad Events](#ad-events)\n1. [Playback Events](#playback-events)\n1. [Event Data](#event-data)\n - [Complete React Native UserActivityData Reference](#complete-react-native-useractivitydata-reference)\n\n## Event Types\n\nThese are the various events which are triggered from within the SDK. React Native integrations receive the exported `EventType` enum and an event-specific data payload through `StorytellerSdk.onUserActivityOccurred()`.\n\nRegister the listener before the interactions you want to measure. The callback receives `{ type, data }` and registration returns a subscription with `remove()`. For a component-owned listener:\n\n```tsx\nimport { useEffect } from 'react';\nimport StorytellerSdk, { EventType } from '@getstoryteller/react-native-storyteller-sdk';\n\nexport function AnalyticsListener() {\n useEffect(() => {\n const subscription = StorytellerSdk.onUserActivityOccurred(({ type, data }) => {\n if (type === EventType.OpenedStory && data.storyId !== undefined) {\n console.log('Story opened', data.storyId);\n }\n });\n return () => subscription.remove();\n }, []);\n return null;\n}\n```\n\nMount this listener once for the area of your app that owns tracking. Multiple listeners each receive the events. `enableUserActivityTracking: false` disables the host callback. With `enableFullVideoAnalytics: false`, native SDKs remove content-identifying fields such as Story/Page/Clip/Card IDs and titles before forwarding data. Ad events also depend on ad tracking and the configured ad integration. `enableStorytellerTracking` controls Storyteller collection separately from your listener.\n\nIn the below discussion, \"completing\" a Page refers to allowing the timer to expire - so this would correspond to watching all of an Image Page for the duration set for it (default 15s) or watching all of a video.\n\n### Complete React Native `EventType` Reference\n\nThe table below is the complete `EventType` enum exported by `@getstoryteller/react-native-storyteller-sdk`. This is the exported type contract, not a promise that each member reaches your listener. `SdkInitialized` is internal to native analytics and is not forwarded to the host on either platform. Not every other event is emitted on every platform, content type, tenant configuration, or native SDK path; handle events by enum member and treat payload fields as event-dependent.\n\n| Group | Enum member | Emitted value |\n| ------------ | ----------------------------------------------------- | ------------------------------------------- |\n| story | `EventType.Unsupported` | `unsupported` |\n| story | `EventType.OpenedStory` | `openedStory` |\n| story | `EventType.StoryHeartbeat` | `storyHeartbeat` |\n| story | `EventType.StoryPageQuartile` | `storyPageQuartile` |\n| story | `EventType.DismissedStory` | `dismissedStory` |\n| story | `EventType.SkippedStory` | `skippedStory` |\n| story | `EventType.CompletedStory` | `completedStory` |\n| story | `EventType.PreviousStory` | `previousStory` |\n| story | `EventType.MutedStory` | `mutedStory` |\n| story | `EventType.UnmutedStory` | `unmutedStory` |\n| story | `EventType.ActionButtonTapped` | `actionButtonTapped` |\n| sharing | `EventType.ShareButtonTapped` | `shareButtonTapped` |\n| sharing | `EventType.ShareSuccess` | `shareSuccess` |\n| page | `EventType.CompletedPage` | `completedPage` |\n| page | `EventType.PreviousPage` | `previousPage` |\n| page | `EventType.OpenedPage` | `openedPage` |\n| page | `EventType.SkippedPage` | `skippedPage` |\n| ad | `EventType.OpenedAd` | `openedAd` |\n| ad | `EventType.DismissedAd` | `dismissedAd` |\n| ad | `EventType.SkippedAd` | `skippedAd` |\n| ad | `EventType.AdActionButtonTapped` | `adActionButtonTapped` |\n| ad | `EventType.PreviousAd` | `previousAd` |\n| ad | `EventType.MutedAd` | `mutedAd` |\n| ad | `EventType.UnmutedAd` | `unmutedAd` |\n| ad | `EventType.PausedAdPage` | `pausedAdPage` |\n| ad | `EventType.ResumedAdPage` | `resumedAdPage` |\n| ad | `EventType.ViewedAdPageStart` | `viewedAdPageStart` |\n| ad | `EventType.ViewedAdPageFirstQuartile` | `viewedAdPageFirstQuartile` |\n| ad | `EventType.ViewedAdPageMidpoint` | `viewedAdPageMidpoint` |\n| ad | `EventType.ViewedAdPageThirdQuartile` | `viewedAdPageThirdQuartile` |\n| ad | `EventType.ViewedAdPageComplete` | `viewedAdPageComplete` |\n| ad | `EventType.FinishedAd` | `finishedAd` |\n| ad | `EventType.AdOpportunity` | `adOpportunity` |\n| ad | `EventType.AdRequested` | `adRequested` |\n| ad | `EventType.AdLoaded` | `adLoaded` |\n| ad | `EventType.AdFailedToLoad` | `adFailedToLoad` |\n| ad | `EventType.AdPaid` | `adPaid` |\n| ad | `EventType.AdSessionSummary` | `adSessionSummary` |\n| playback | `EventType.ReadyToPlay` | `readyToPlay` |\n| playback | `EventType.MediaStarted` | `mediaStarted` |\n| playback | `EventType.BufferingStarted` | `bufferingStarted` |\n| playback | `EventType.BufferingEnded` | `bufferingEnded` |\n| playback | `EventType.CurrentVideoPlayerChanged` | `onCurrentVideoPlayerChanged` |\n| playback | `EventType.TileVisible` | `tileVisible` |\n| poll | `EventType.VotedPoll` | `votedPoll` |\n| trivia quiz | `EventType.TriviaQuizQuestionAnswered` | `triviaQuizQuestionAnswered` |\n| trivia quiz | `EventType.TriviaQuizCompleted` | `triviaQuizCompleted` |\n| clips | `EventType.OpenedClip` | `openedClip` |\n| clips | `EventType.ClipVideoHeartbeat` | `clipVideoHeartbeat` |\n| clips | `EventType.ClipVideoQuartile` | `clipVideoQuartile` |\n| clips | `EventType.PausedClip` | `pausedClip` |\n| clips | `EventType.ResumedClip` | `resumedClip` |\n| clips | `EventType.MutedClip` | `mutedClip` |\n| clips | `EventType.UnmutedClip` | `unmutedClip` |\n| clips | `EventType.CompletedLoop` | `completedLoop` |\n| clips | `EventType.NextClip` | `nextClip` |\n| clips | `EventType.PreviousClip` | `previousClip` |\n| clips | `EventType.DismissedClip` | `dismissedClip` |\n| clips | `EventType.FinishedClip` | `finishedClip` |\n| clips | `EventType.LikedClip` | `likedClip` |\n| clips | `EventType.UnlikedClip` | `unlikedClip` |\n| clips | `EventType.OpenedCategory` | `openedCategory` |\n| clips | `EventType.DismissedCategory` | `dismissedCategory` |\n| clips | `EventType.FollowableCategoryTapped` | `followableCategoryTapped` |\n| clips | `EventType.FollowCategory` | `followCategory` |\n| clips | `EventType.UnfollowCategory` | `unfollowCategory` |\n| clips | `EventType.EnabledClipCaptions` | `enabledClipCaptions` |\n| clips | `EventType.DisabledClipCaptions` | `disabledClipCaptions` |\n| clips | `EventType.ScrubbedClip` | `scrubbedClip` |\n| search | `EventType.OpenedSearch` | `openedSearch` |\n| search | `EventType.DismissedSearch` | `dismissedSearch` |\n| search | `EventType.PerformedSearch` | `performedSearch` |\n| search | `EventType.SearchResultTapped` | `searchResultTapped` |\n| search | `EventType.OpenedFilters` | `openedFilters` |\n| search | `EventType.DismissedFilters` | `dismissedFilters` |\n| search | `EventType.UsedSuggestion` | `usedSuggestion` |\n| sheet | `EventType.OpenedSheet` | `openedSheet` |\n| sheet | `EventType.DismissedSheet` | `dismissedSheet` |\n| instructions | `EventType.StoryInstructionScreenViewed` | `storyInstructionScreenViewed` |\n| card | `EventType.CardTapped` | `cardTapped` |\n| card | `EventType.CardViewed` | `cardViewed` |\n| card | `EventType.CardVideoStarted` | `cardVideoStarted` |\n| card | `EventType.CardVideoHeartbeat` | `cardVideoHeartbeat` |\n| card | `EventType.CardVideoCompleted` | `cardVideoCompleted` |\n| card | `EventType.CardAudioToggled` | `cardAudioToggled` |\n| sdk | `EventType.SdkInitialized` | `sdkInitialized` |\n| sdk | `EventType.FollowableCategoryLimitShown` | `followableCategoryLimitShown` |\n| sdk | `EventType.FollowableCategoryLimitActionButtonTapped` | `followableCategoryLimitActionButtonTapped` |\n| sdk | `EventType.FollowableCategoryLimitDismissed` | `followableCategoryLimitDismissed` |\n| sdk | `EventType.EnabledStoryCaptions` | `enabledStoryCaptions` |\n| sdk | `EventType.DisabledStoryCaptions` | `disabledStoryCaptions` |\n\n## Story Events\n\n### Opened Story\n\nThis event is recorded in the following scenarios:\n\n- When a user taps on a row item to open a story\n- When a story is loaded because the previous Story finished\n- When a story is loaded because the user tapped to skip the last page of the previous story\n- When a user swipes left on a story to go to the next story\n- When a user swipes right on a story to go to the previous story\n- When a user is sent directly to a story via a deep link\n\nFor Opened Story, the payload can include `storyId`, `storyTitle`, `storyIndex`, `storyPageCount`, `storyReadStatus`, `storyPlaybackMode`, `openedReason`, `currentCategory` and `categories`.\n\n### Opened Page\n\nThis event is recorded whenever a user views content from a page.\n\n`OpenedPage` is a page impression and also applies to images and interactive pages. Use `MediaStarted` to measure the start of video playback; opening a page does not prove that its video started.\n\nFor Opened Page, the payload can include `pageId`, `pageIndex`, `pageType`, `storyPlaybackMode`, `pageHasAction`, `pageActionText`, `pageActionUrl`, `contentLength`, `storyId`, `storyTitle`, `storyIndex`, `storyPageCount`, `currentCategory` and `openedReason`.\n\n### Dismissed Story\n\nThis event is recorded in the following scenarios:\n\n- When a user taps the close button to dismiss the story\n- When a user swipes down to dismiss the story\n- When a user taps to skip the last page of the final story - this dismisses the story and exits the story view\n- When a user swipes left on the final story to dismiss the story\n- When a user swipes right on the first story to dismiss the story\n- When a user completes the final page of the final story and the story view is dismissed\n\nAndroid does not emit `DismissedStory` from the Search-origin content scope.\n\nFor Dismissed Story, the payload can include `storyId`, `storyTitle`, `storyIndex`, `storyPageCount`, `storyPlaybackMode`, `pageId`, `pageIndex`, `pageType`, `dismissedReason`, `durationViewedMs`, `currentCategory` and `pagesViewedCount`.\n\n### Skipped Story\n\nThis event is recorded when:\n\n- a user advances from a Story before reaching its final page. Reaching the final page is counted as `CompletedStory`; skipping that final page is not an additional `SkippedStory`.\n\nFor Skipped Story, the payload can include `storyId`, `storyTitle`, `storyIndex`, `storyPageCount`, `storyPlaybackMode`, `pageId`, `pageIndex`, `currentCategory` and `pageType`.\n\n### Skipped Page\n\nThis event is recorded when a user taps to go to the next page before completing the current page.\n\nFor Skipped Page, the payload can include `storyId`, `storyTitle`, `storyIndex`, `storyPageCount`, `storyPlaybackMode`, `pageId`, `pageIndex`, `currentCategory` and `pageType`.\n\n### Completed Story\n\nThis event is recorded at the same time as `OpenedPage` for the final page in a story.\n\nFor Completed Story, the payload can include `storyId`, `storyTitle`, `storyIndex`, `storyPageCount`, `storyPlaybackMode`, `pageId`, `pageIndex`, `currentCategory` and `pageType`.\n\n### Completed Page\n\nThis event is recorded when a user watches a page to completion (i.e. the timer for that page finishes.)\n\nFor Completed Page, the payload can include `storyId`, `storyTitle`, `storyIndex`, `storyPageCount`, `storyPlaybackMode`, `pageId`, `pageIndex`, `pageType`, `currentCategory` and `contentLength`.\n\n### Action Button Tapped\n\nThis event is recorded when a user taps an action button on a page to open a link\n\nFor Action Button Tapped, the payload can include `storyId`, `storyTitle`, `storyIndex`, `storyPageCount`, `storyPlaybackMode`, `pageId`, `pageIndex`, `pageType`, `pageHasAction`, `pageActionText`, `currentCategory` and `pageActionUrl`.\n\n### Share Button Tapped\n\nThis event is recorded when a user taps the share button on a page.\n\nFor Share Button Tapped, the payload can include `storyId`, `storyTitle`, `storyIndex`, `storyPageCount`, `storyPlaybackMode`, `pageId`, `pageIndex`, `currentCategory` and `pageType`.\n\n### Previous Story\n\nThis event is recorded when:\n\n- a user swipes right to go to the previous story (unless this is the first story - in which case `DismissedStory` is fired instead)\n- a user taps back on the first page in a story (and this is not the first page is the first story)\n\nFor Previous Story, the payload can include `storyId`, `storyTitle`, `storyIndex`, `storyPageCount`, `storyPlaybackMode`, `pageId`, `pageIndex`, `currentCategory` and `pageType`.\n\n### Previous Page\n\nThis event is recorded when a user taps back to go to a previous page in the story.\n\nFor Previous Page, the payload can include `storyId`, `storyTitle`, `storyIndex`, `storyPageCount`, `storyPlaybackMode`, `pageId`, `pageIndex`, `currentCategory` and `pageType`.\n\n### Share Success\n\nAndroid records this event when the user selects a sharing target. iOS records it when the system sharing activity reports completion.\n\nFor Share Success, the payload can include `storyId`, `storyTitle`, `storyIndex`, `storyPageCount`, `storyPlaybackMode`, `pageId`, `pageIndex`, `pageType`, `currentCategory` and `shareMethod`.\n\n### Voted Poll\n\nThis event is recorded when user votes in a poll.\n\nFor Voted Poll, the payload can include `storyId`, `storyTitle`, `storyIndex`, `pageId`, `pageIndex`, `pageType`, `currentCategory` and `pollAnswerId`.\n\n### Trivia Quiz Question Answered\n\nThis event is recorded when a user answers a question in a trivia quiz.\n\nFor Trivia Quiz Question Answered, the payload can include `storyId`, `storyTitle`, `storyIndex`, `storyPlaybackMode`, `pageId`, `pageIndex`, `pageType`, `triviaQuizId`, `triviaQuizTitle`, `triviaQuizQuestionId`, `currentCategory` and `triviaQuizAnswerId`.\n\n### Trivia Quiz Completed\n\nThis event is recorded when a user completes a trivia quiz.\n\nFor Trivia Quiz Completed, the payload can include `storyId`, `storyTitle`, `storyIndex`, `storyPlaybackMode`, `pageId`, `pageIndex`, `pageType`, `triviaQuizId`, `triviaQuizTitle`, `triviaQuizScore` and `currentCategory`.\n\n## Clip Events\n\n### Opened Clip\n\nThis event is recorded when:\n\n- a user taps on a row or grid item to open a clip\n- a user swipes up to the next clip\n- a user swipes down to the previous clip\n- a user is sent directly to a clip via a call to `openCollection`\n- a user is sent directly to a clip via a deep link\n- a user opens a Category and navigates to a new Clip or moves back to a previous Category.\n- a user dismisses the last Category (by pressing back or swiping right) and returns to the top-level Collection.\n- a user opens embedded Clips for the first time.\n- a user pulls to refresh at the top of Embedded Clips.\n- a user is viewing a Collection with \u201cFor You/Following\u201d enabled and switches between \"For You\" and \"Following\".\n\nFor Opened Clip, the payload can include `clipId`, `clipTitle`, `clipIndex`, `clipHasAction`, `openedReason`, `collection`, `categories`, `contentLength`, `clipFeedType` (values: `default`, `forYou`, `following`) and `categoryDetails`.\n\n### Dismissed Clip\n\nThis event is recorded when:\n\n- a user taps on the back button in the top-left to exit the Clips player (and is at the top of the stack of Clip Categories)\n\nThis event does not fire when the user is not at the top of the Clip Category stack.\nFor Dismissed Clip, the payload can include `clipId`, `clipTitle`, `clipIndex`, `dismissedReason`, `durationViewedMs`, `clipsViewed`, `collection`, `categories`, `clipFeedType` and `loopsViewed`.\n\n### Next Clip\n\nThis event is recorded when:\n\n- a user swipes up to go to the next clip\n\nFor Next Clip, the payload can include `clipId`, `clipTitle`, `collection`, `categories`, `clipFeedType` and `clipIndex`.\n\n### Previous Clip\n\nThis event is recorded when:\n\n- a user swipes down to go to the previous clip\n\nFor Previous Clip, the payload can include `clipId`, `clipTitle`, `collection`, `categories`, `clipFeedType` and `clipIndex`.\n\n### Completed Loop\n\nThis event is recorded when:\n\n- a user completes a loop of a clip\n\nFor Completed Loop, the payload can include `clipId`, `clipTitle`, `collection`, `categories`, `clipFeedType` and `clipIndex`.\n\n> Note: For live clips this event will never be fired.\n\n### Action Button Tapped\n\nThis event is recorded when:\n\n- a user taps the action button at the bottom of a clip\n- a user swipes left on a clip to open the relevant action\n\nFor Action Button Tapped, the payload can include `clipId`, `clipTitle`, `clipIndex`, `clipHasAction`, `clipActionText`, `collection`, `categories`, `clipFeedType` and `clipActionUrl`.\n\n### Share Button Tapped\n\nThis event is recorded when:\n\n- a user taps the share button on a clip\n\nFor Share Button Tapped, the payload can include `clipId`, `clipTitle`, `collection`, `categories`, `clipFeedType` and `clipIndex`.\n\n### Share Success\n\nAndroid records this event when the user selects a sharing target. iOS records it when the system sharing activity reports completion.\n\nFor Share Success, the payload can include `clipId`, `clipTitle`, `clipIndex`, `collection`, `categories`, `clipFeedType` and `shareMethod`.\n\n### Paused Clip\n\nThis event is recorded when:\n\n- a user taps on the screen whilst a clip is playing to pause the clip - it does not fire when a clip is paused automatically by sharing or following an action\n\nFor Paused Clip, the payload can include `clipId`, `clipTitle`, `collection`, `categories`, `clipFeedType` and `clipIndex`.\n\n> Note: For live clips this event will never be fired, as pausing/resuming live clips is not supported.\n\n### Resumed Clip\n\nThis event is recorded when:\n\n- a user taps a clip that is paused to resume playback - it does not fire when a clip is resumed automatically\n\nFor Resumed Clip, the payload can include `clipId`, `clipTitle`, `collection`, `categories`, `clipFeedType` and `clipIndex`.\n\n> Note: For live clips this event will never be fired, as pausing/resuming live clips is not supported.\n\n### Liked Clip\n\nThis event is recorded when:\n\n- a user likes a clip by tapping the like button when they do not currently like the clip\n\nFor Liked Clip, the payload can include `clipId`, `clipTitle`, `collection`, `categories`, `clipFeedType` and `clipIndex`.\n\n### Unliked Clip\n\nThis event is recorded when:\n\n- a user unlikes a clip by tapping the like button when they currently like the clip\n\nFor Unliked Clip, the payload can include `clipId`, `clipTitle`, `collection`, `categories`, `clipFeedType` and `clipIndex`.\n\n### Finished Clip\n\nThis event is recorded when:\n\n- Dismissed Clip is fired\n- Next Clip is fired\n- Previous Clip is fired\n- At the same time as OpenedCategory\n- A user is viewing a Collection with \u201cFor You/Following\u201d enabled and switches between \"For You\" and \"Following\".\n\nFor Finished Clip, the payload can include `clipId`, `clipTitle`, `clipIndex`, `loopsViewed`, `durationViewedMs`, `collection`, `categories`, `clipFeedType` and `contentLength`.\n\n### Opened Category\n\nThis event is recorded when:\n\n- a user taps a category at the bottom of the Clips Player to open a new Category\n- a user opens a category by navigating back from another category\n\nThis event is not fired when opening the top level of a collection - only when navigating to a specific category.\nFor Opened Category, the payload can include `clipId`, `clipTitle`, `clipIndex`, `collection`, `categories`, `categoryId`, `clipFeedType` and `categoryName`.\n\n### Dismissed Category\n\nThis event is recorded when:\n\n- a user navigates back using the back button (or system back on Android) to the previous category.\n\nThis event does not fire when dismissing the top level collection.\n\nFor Dismissed Category, the payload can include `clipId`, `clipTitle`, `clipIndex`, `collection`, `categories`, `categoryId`, `clipFeedType` and `categoryName`.\n\n### Follow Category\n\nThis event is recorded when:\n\n- a user taps the plus button under the follow category button of the Clips Player\n- a user taps the follow button at the top right of the Followable Category screen and the category was not followed\n\nFor Follow Category, the payload can include `clipId`, `clipTitle`, `clipIndex`, `collection`, `categories`, `categoryId`, `clipFeedType` and `categoryName`.\n\n### Unfollow Category\n\nThis event is recorded when:\n\n- a user taps the checkmark button under the follow category button of the Clips Player\n- a user taps the follow button at the top right of the Followable Category screen and the category was followed\n\nFor Unfollow Category, the payload can include `clipId`, `clipTitle`, `clipIndex`, `collection`, `categories`, `categoryId`, `clipFeedType` and `categoryName`.\n\n### Followable Category Tapped\n\nThis event is recorded when:\n\n- a user taps the follow category button of the Clips Player to open the Followable Category screen\n\n- a user swipes left from the right edge of the screen on a Clip with a Followable Category and opens the Followable Category screen\n\nFor Followable Category Tapped, the payload can include `clipId`, `clipTitle`, `clipIndex`, `collection`, `categories`, `categoryId`, `clipFeedType` and `categoryName`.\n\n## List Tile Events\n\n### Tile Visible\n\nThis event is recorded when a Story or Clip tile becomes visible in a row or grid.\n\nFor Tile Visible, event data includes `tileIndex`. Story tile events include `storyId`, `storyTitle`, `categories`, and `context` when available. Clip tile events include `clipId`, `clipTitle`, `collection`, `categories`, and `context` when available.\n\n## Search Events\n\n### Opened Search\n\nThis event is recorded when:\n\n- a user open Search screen\n\nFor Opened Search, the payload can include `storyId`, `storyTitle`, `storyDisplayTitle`, `storyIndex`, `storyPageCount`, `storyReadStatus`, `pageId`, `pageTitle`, `pageIndex`, `pageType`, `storyPlaybackMode`, `pageHasAction`, `pageActionText`, `pageActionUrl`, `categories`, `categoryDetails`, `collection`, `currentCategory`, `clipId`, `clipTitle`, `clipIndex`, `clipActionText` and `searchFrom`.\n\n### Dismissed Search\n\nThis event is recorded when:\n\n- a user exits the Search screen\n\nFor Dismissed Search, the payload can include `storyId`, `storyTitle`, `storyDisplayTitle`, `storyIndex`, `storyPageCount`, `storyReadStatus`, `pageId`, `pageTitle`, `pageIndex`, `pageType`, `storyPlaybackMode`, `pageHasAction`, `pageActionText`, `pageActionUrl`, `dismissedReason`, `categories`, `categoryDetails`, `collection`, `currentCategory`, `clipId`, `clipTitle`, `clipIndex`, `clipActionText` and `searchFrom`.\n\n### Performed Search\n\nThis event is recorded when:\n\n- a user clicks on the Search button after entering the search term\n\nFor Performed Search, the payload can include `storyId`, `storyTitle`, `storyDisplayTitle`, `storyIndex`, `storyPageCount`, `storyReadStatus`, `pageId`, `pageTitle`, `pageIndex`, `pageType`, `storyPlaybackMode`, `pageHasAction`, `pageActionText`, `pageActionUrl`, `categories`, `categoryDetails`, `collection`, `currentCategory`, `clipId`, `clipTitle`, `clipIndex`, `clipActionText`, `searchFilter`, `searchSort`, `searchTerm`, `searchFrom`, `isSuggestion`, and `initialInput`.\n\n### Opened Filters\n\nThis event is recorded when:\n\n- a user taps the filter button to open the sheet containing filter options\n\nFor Opened Filters, the payload can include `storyId`, `storyTitle`, `storyDisplayTitle`, `storyIndex`, `storyPageCount`, `storyReadStatus`, `pageId`, `pageTitle`, `pageIndex`, `pageType`, `storyPlaybackMode`, `pageHasAction`, `pageActionText`, `pageActionUrl`, `categories`, `categoryDetails`, `collection`, `currentCategory`, `clipId`, `clipTitle`, `clipIndex`, `clipActionText`, `searchFilter`, `searchSort`, `searchTerm`, `searchFrom`, `isSuggestion`, and `initialInput`.\n\n### Dismissed Filters\n\nThis event is recorded when:\n\n- a user closes the sheet containing filter options\n\nFor Dismissed Filters, the payload can include `storyId`, `storyTitle`, `storyDisplayTitle`, `storyIndex`, `storyPageCount`, `storyReadStatus`, `pageId`, `pageTitle`, `pageIndex`, `pageType`, `storyPlaybackMode`, `pageHasAction`, `pageActionText`, `pageActionUrl`, `categories`, `categoryDetails`, `collection`, `currentCategory`, `clipId`, `clipTitle`, `clipIndex`, `clipActionText`, `searchFilter`, `searchSort`, `searchTerm`, `searchFrom`, `isSuggestion`, and `initialInput`.\n\n### Used Suggestion\n\nThis event is recorded when:\n\n- a user taps on a search suggestion\n\nFor Used Suggestion, the payload can include `storyId`, `storyTitle`, `storyDisplayTitle`, `storyIndex`, `storyPageCount`, `storyReadStatus`, `pageId`, `pageTitle`, `pageIndex`, `pageType`, `storyPlaybackMode`, `pageHasAction`, `pageActionText`, `pageActionUrl`, `categories`, `categoryDetails`, `collection`, `currentCategory`, `clipId`, `clipTitle`, `clipIndex`, `clipActionText`, `searchTerm`, `searchFrom`, `isSuggestion`, and `initialInput`.\n\n## Ad Events\n\n### Opened Ad\n\n#### Stories\n\nThis event is recorded when:\n\n- an ad is loaded because the previous story finished\n- a user swipes left on a story to go to the next story and an ad appears\n- a user swipes right on a story to go to the previous story and an ad appears\n\nFor Opened Ad, the payload can include `advertiserName`, `adId`, `adType`, `adPlacement`, `adFormat`, `adResponseIdentifier`, `pageType`, `openedReason`, `contentLength`, `pageHasAction`, `pageActionText`, `currentCategory` and `pageActionUrl`.\n\n#### Clips\n\nThis event is recorded when:\n\n- a user swipes up on a clip to go to the next clip and an ad should appear next\n- a user swipes down on a clip to go to the previous clip and an ad should appear next\n- an ad completes a loop and begins playing again from the start\n\nReact Native exposes the analytics payload; it does not include the native ad view object.\n\nFor Opened Ad, the payload can include `advertiserName`, `adId`, `adType`, `adPlacement`, `adFormat`, `adResponseIdentifier`, `pageType`, `openedReason`, `contentLength`, `pageHasAction`, `clipHasAction`, `pageActionText`, `clipActionText`, `pageActionUrl`, `clipActionUrl`, `currentCategory`, `collection`.\n\n### Dismissed Ad\n\n#### Stories\n\nThis event is recorded when a user:\n\n- taps close to dismiss the ad\n- swipes down to dismiss the ad\n- taps back on their device UI to dismiss the ad (Android only)\n- taps to skip the ad if the ad is the last page in the current set of stories\n- swipes left on the ad to skip it if the ad is the last page in the current set of stories\n- completes the ad if the ad is the last page in the current set of stories\n\nFor Dismissed Ad, the payload can include `advertiserName`, `adId`, `adType`, `adPlacement`, `adFormat`, `adResponseIdentifier`, `pageType`, `dismissedReason`, `durationViewedMs`, `pagesViewedCount`, `pageHasAction`, `pageActionText`, `currentCategory` and `pageActionUrl`.\n\n#### Clips\n\nThis event is recorded when a user:\n\n- taps the back button to exit the clips player when an ad is being shown\n- (Android only) presses the system back button to exit the clips player when an ad is being shown\n\nFor Dismissed Ad, the payload can include `advertiserName`, `adId`, `adType`, `adPlacement`, `adFormat`, `adResponseIdentifier`, `pageType`, `dismissedReason`, `durationViewedMs`, `pagesViewedCount`, `clipsViewed`, `loopsViewed`, `pageHasAction`, `clipHasAction`, `pageActionText`, `clipActionText`, `pageActionUrl`, `clipActionUrl`, `currentCategory`, `collection`.\n\n### Skipped Ad\n\n#### Stories\n\nThis event is recorded when a user:\n\n- swipes left to go to the next story before completing the current ad\n- taps to go to the next page on an ad before completing the current ad\n\nFor Skipped Ad, the payload can include `advertiserName`, `adId`, `adType`, `adPlacement`, `adFormat`, `adResponseIdentifier`, `pageType`, `contentLength`, `pageHasAction`, `pageActionText`, `currentCategory` and `pageActionUrl`.\n\n#### Clips\n\nThis event is recorded when:\n\n- a user swipes up to go to the next clip\n- a user swipes down to go the previous clip\n\nFor Skipped Ad, the payload can include `advertiserName`, `adId`, `adType`, `adPlacement`, `adFormat`, `adResponseIdentifier`, `pageType`, `contentLength`, `pageHasAction`, `clipHasAction`, `pageActionText`, `clipActionText`, `pageActionUrl`, `clipActionUrl`, `currentCategory`, `collection`.\n\n### Ad Action Button Tapped\n\n#### Stories\n\nThis event is recorded when a user:\n\n- swipes up on an ad to open a link\n- taps on the swipe up element of an ad to open a link\n\nFor Ad Action Button Tapped, the payload can include `advertiserName`, `adId`, `adType`, `adPlacement`, `adFormat`, `adResponseIdentifier`, `pageType`, `pageHasAction`, `pageActionText`, `currentCategory` and `pageActionUrl`.\n\n#### Clips\n\nThis event is recorded when a user:\n\n- taps the action button at the bottom of an ad displayed in clips\n- swipes left on a clip to open the relevant action\n\nFor Ad Action Button Tapped, the payload can include `advertiserName`, `adId`, `adType`, `adPlacement`, `adFormat`, `adResponseIdentifier`, `pageType`, `pageHasAction`, `clipHasAction`, `pageActionText`, `clipActionText`, `pageActionUrl`, `clipActionUrl`, `currentCategory`, `collection`.\n\n### Finished Ad\n\n#### Stories\n\nThis event is recorded at the same time as Dismissed Ad, Skipped Ad and Viewed Ad Page Complete and gives an easier way to determine when an ad finishes for any reason.\n\nFor Finished Ad, the payload can include `advertiserName`, `adId`, `adType`, `adPlacement`, `adFormat`, `adResponseIdentifier`, `pageType`, `contentLength`, `pageHasAction`, `pageActionText`, `currentCategory` and `pageActionUrl`.\n\n#### Clips\n\nThis event is recorded at the same time as DismissedAd, or SkippedAd.\n\nFor Finished Ad, the payload can include `advertiserName`, `adId`, `adType`, `adPlacement`, `adFormat`, `adResponseIdentifier`, `pageType`, `contentLength`, `pageHasAction`, `clipHasAction`, `pageActionText`, `clipActionText`, `pageActionUrl`, `clipActionUrl`, `currentCategory`, `collection`.\n\n### Paused Ad\n\n#### Stories\n\nThis event is recorded when a user pauses a page within an ad by pressing and holding on the page.\n\nFor Paused Ad Page, the payload can include `advertiserName`, `adId`, `adType`, `adPlacement`, `adFormat`, `adResponseIdentifier`, `pageType`, `contentLength`, `pageHasAction`, `pageActionText`, `currentCategory` and `pageActionUrl`.\n\n#### Clips\n\nThis event is recorded when a user pauses a clip which is an ad by tapping the screen. It does not fire when a clip is paused automatically for sharing or following an action\n\nFor Paused Ad Clip, the payload can include `advertiserName`, `adId`, `adType`, `adPlacement`, `adFormat`, `adResponseIdentifier`, `pageType`, `contentLength`, `pageHasAction`, `clipHasAction`, `pageActionText`, `clipActionText`, `pageActionUrl`, `clipActionUrl`, `currentCategory`, `collection`.\n\n### Resumed Ad\n\n#### Stories\n\nThis event is recorded when a user resumes playing a page within an ad by releasing their long press which paused the ad.\n\nFor Resumed Ad Page, the payload can include `advertiserName`, `adId`, `adType`, `adPlacement`, `adFormat`, `adResponseIdentifier`, `pageType`, `contentLength`, `pageHasAction`, `pageActionText`, `currentCategory` and `pageActionUrl`.\n\n#### Clips\n\nThis event is fired when a clip which is an ad is paused and a user taps the screen to resume playback. It does not fire when a clip is resumed automatically\n\nFor Resumed Ad Clip, the payload can include `advertiserName`, `adId`, `adType`, `adPlacement`, `adFormat`, `adResponseIdentifier`, `pageType`, `contentLength`, `pageHasAction`, `clipHasAction`, `pageActionText`, `clipActionText`, `pageActionUrl`, `clipActionUrl`, `currentCategory`, `collection`.\n\n### Viewed Ad Page First Quartile\n\nThis event is recorded when a user reaches 1/4 of the way through the duration of a page or clip which is an ad.\n\nFor clip ads (which loop), it fires for each loop of the clip.\n\nFor Viewed Ad Page First Quartile, the payload can include `advertiserName`, `adId`, `adType`, `adPlacement`, `adFormat`, `adResponseIdentifier`, `pageType`, `contentLength`, `pageHasAction`, `clipHasAction`, `pageActionText`, `clipActionText`, `pageActionUrl`, `clipActionUrl`, `currentCategory`, `collection`.\n\n### Viewed Ad Page Midpoint\n\nThis event is recorded when a user reaches halfway through the duration of a page or clip which is an ad.\n\nFor clip ads (which loop), it fires for each loop of the clip.\n\nFor Viewed Ad Page Midpoint, the payload can include `advertiserName`, `adId`, `adType`, `adPlacement`, `adFormat`, `adResponseIdentifier`, `pageType`, `contentLength`, `pageHasAction`, `clipHasAction`, `pageActionText`, `clipActionText`, `pageActionUrl`, `clipActionUrl`, `currentCategory`, `collection`.\n\n### Viewed Ad Page Third Quartile\n\nThis event is recorded when a user reaches 3/4 of the way through the duration of a page or clip which is an ad.\n\nFor clip ads (which loop), it fires for each loop of the clip.\n\nFor Viewed Ad Page Third Quartile, the payload can include `advertiserName`, `adId`, `adType`, `adPlacement`, `adFormat`, `adResponseIdentifier`, `pageType`, `contentLength`, `pageHasAction`, `clipHasAction`, `pageActionText`, `clipActionText`, `pageActionUrl`, `clipActionUrl`, `currentCategory`, `collection`.\n\n### Viewed Ad Page Complete\n\nThis event is recorded when a user reaches the end of the duration for a page or clip which is an ad.\n\nFor clip ads (which loop), it fires for each loop of the clip.\n\nFor Viewed Ad Page Complete, the payload can include `advertiserName`, `adId`, `adType`, `adPlacement`, `adFormat`, `adResponseIdentifier`, `pageType`, `contentLength`, `pageHasAction`, `clipHasAction`, `pageActionText`, `clipActionText`, `pageActionUrl`, `clipActionUrl`, `currentCategory`, `collection`.\n\n### Paid ad lifecycle events\n\nThese events require the matching paid-ad integration and callback path; a custom ad implementation does not guarantee revenue telemetry.\n\n| Event | Meaning | Optional payload examples |\n| ------------------ | ------------------------------------------ | ----------------------------------------------------- |\n| `AdOpportunity` | Player has an opportunity to request an ad | `playerSessionId`, `adSlotType`, `adPlacement` |\n| `AdRequested` | Ad request begins | `adRequestId`, `adUnitId`, `adSource` |\n| `AdLoaded` | Ad loads | request context and available source/adapter metadata |\n| `AdFailedToLoad` | Ad request fails | `adErrorCode`, `adErrorDomain`, `adErrorMessage` |\n| `AdPaid` | Provider reports a paid impression | `adValueMicros`, `adCurrencyCode`, `adValuePrecision` |\n| `AdSessionSummary` | Paid-ad player session is summarized | `adSession*` counters, revenue and currency |\n\n`AdOpportunity` and `AdSessionSummary` do not identify a single requested ad unit. Treat provider fields and paid-impression values as optional.\n\n## Playback Events\n\n### Ready to Play\n\nThis event indicates that the video player is ready to play. A Page revisit or a new player load can create another readiness event.\n\nFor Ready to Play, the payload can include `storyId`, `storyTitle`, `storyIndex`, `pageId`, `pageIndex` and `pageType`.\n\n### Media Started\n\nThis event indicates that the video starts playback for the current player load.\n\nFor Media Started, the payload can include `storyId`, `storyTitle`, `storyIndex`, `pageId`, `pageIndex` and `pageType`.\n\n### Buffering Started\n\nThis event is called on video pages whenever the video starts to buffer.\n\nFor Buffering Started, the payload can include `storyId`, `storyTitle`, `storyIndex`, `pageId`, `pageIndex`, `pageType` and `isInitialBuffering`.\n\n### Buffering Ended\n\nThis event is called on video pages whenever the video finishes buffering.\n\n> Note: Readiness and media-start events describe a playback load, not a unique content ID across all visits. There may be multiple Buffering Started/Buffering Ended pairs of events for an individual page. There may not always be a Buffering Ended event for every Buffering Started event as the user may choose to exit the page during buffering.\n\nFor Buffering Ended, the payload can include `storyId`, `storyTitle`, `storyIndex`, `pageId`, `pageIndex`, `pageType`, `isInitialBuffering` and `timeSinceBufferingBegan`.\n\n## Other exported event groups\n\n- Mute and captions events report the corresponding user-visible state change for Stories, Clips or ads. `ScrubbedClip` can include `startPosition`, `endPosition` and `scrubDirection`.\n- `OpenedSheet` and `DismissedSheet` identify SDK sheets with optional `sheetId`, `sheetTitle` and `sheetSize`, plus originating content when known.\n- `StoryInstructionScreenViewed` identifies a displayed Story instruction screen.\n- `CardViewed` and `CardTapped` describe Card visibility and interaction. `CardVideoStarted`, `CardVideoHeartbeat`, and `CardVideoCompleted` describe Card playback; `CardAudioToggled` can include `audioToggleFrom`, `audioToggleTo` and mute state where forwarded.\n- Followable-category limit events describe the limit dialogue being shown, dismissed or its action being tapped. Related copy and action fields are optional.\n- `CurrentVideoPlayerChanged` identifies a native player transition. Its RN analytics payload does not expose the native video player object.\n\n## Event Data\n\nFor each event, data is returned with details about the content involved and additional information about what the user has done. The exported `UserActivityData` type lists the payload fields. The callback uses a generated event type whose `metadata` is currently declared as `Object`, whereas `UserActivityData.metadata` is a string map. Keep the callback parameter inferred; when forwarding it to a typed analytics service, derive that service's input from the callback type or validate and map the metadata first.\n\n### React Native payload differences\n\nThe following implementation notes were checked against the React Native integration source with Android 12.1.1 and iOS 11.8.0:\n\n- Android suppresses Story and ad dismissal events in Search-origin content scopes; iOS also suppresses Story-ad dismissal in that scope.\n- Missing native values are omitted; do not expect every field listed for an event. Search payloads contain originating Story or Clip context only when Search was opened from that content.\n- Native `durationViewed` is renamed to `durationViewedMs` by both bridges. `contentLength` is in seconds; viewing and buffering durations and scrub positions are in milliseconds. Android converts content length, viewed duration and scrub positions to integers when forwarding them.\n- `isMuted`, `originalPosition`, and `displayPosition` are declared in `UserActivityData` but are currently omitted by the iOS RN bridge. `airplayEnabled` is iOS-only.\n- Device/app and SDK-initialization fields remain part of the TypeScript type. The iOS RN bridge does not forward these groups, and `SdkInitialized` never reaches the host subscription on either platform.\n- `metadata` and `context` are string-keyed objects. `categoryDetails` contains category objects with `name`, `id`, `type`, and `placement`; `currentCategory` contains `name`, `id`, and `placement` when supplied.\n\n### Complete React Native `UserActivityData` Reference\n\nAll fields are optional because the native SDK only supplies data relevant to the event and platform. The table is the complete React Native payload type; the detailed sections below explain common fields and event-specific behavior.\n\n| Group | Optional fields |\n| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| story | `storyId` (string), `storyIndex` (number), `storyTitle` (string), `storyReadStatus` (string), `storyPageCount` (number), `storyDisplayTitle` (string) |\n| clip | `clipId` (string), `clipTitle` (string), `clipIndex` (number), `tileIndex` (number), `clipHasAction` (boolean), `clipActionUrl` (string), `clipActionText` (string), `clipActionType` (string), `clipFeedType` (string), `clipsViewed` (number), `loopsViewed` (number), `originalPosition` (number), `displayPosition` (number), `tappedClipActionText` (string), `tappedClipActionUrl` (string), `tappedClipActionType` (string), `clipHasSecondaryActions` (boolean), `clipSecondaryActionsText` (string array), `clipSecondaryActionUrls` (string array), `clipSecondaryActionTypes` (string array), `categoryId` (string), `categoryName` (string), `categoryType` (string) |\n| search | `searchFilter` (string), `searchSort` (string), `searchTerm` (string), `searchFrom` (string), `isSuggestion` (boolean), `initialInput` (string), `actionType` (string), `searchResultId` (string), `searchResultTitle` (string), `searchResultSource` (string) |\n| organic watch time | `quartile` (number) |\n| page | `pageId` (string), `pageTitle` (string), `pageType` (string), `pageIndex` (number), `pageHasAction` (boolean), `pageActionText` (string), `pageActionType` (string), `pageActionUrl` (string), `pagesViewedCount` (number), `contentLength` (number) |\n| playback | `storyPlaybackMode` (string), `openedReason` (string), `videoStartReason` (string), `dismissedReason` (string), `isInitialBuffering` (boolean), `timeSinceBufferingBegan` (number), `durationViewedMs` (number), `isMuted` (boolean), `captionsEnabled` (boolean), `airplayEnabled` (boolean), `startPosition` (number), `endPosition` (number), `scrubDirection` (string), `completionType` (string) |\n| ad | `advertiserName` (string), `adId` (string), `adType` (string), `adPlacement` (string), `adStrategy` (string), `adFormat` (string), `adIndex` (number), `adResponseIdentifier` (string), `playerSessionId` (string), `adRequestId` (string), `adSlotType` (string), `adUnitId` (string), `adSource` (string), `adSourceName` (string), `adSourceId` (string), `adSourceInstanceName` (string), `adSourceInstanceId` (string), `adMediationGroupName` (string), `adMediationAbTestName` (string), `adMediationAbTestVariant` (string), `adAdapterLatencyMillis` (number), `adErrorCode` (number), `adErrorDomain` (string), `adErrorMessage` (string), `adValueMicros` (number), `adCurrencyCode` (string), `adValuePrecision` (string), `adSessionOpportunitiesCount` (number), `adSessionRequestsCount` (number), `adSessionLoadsCount` (number), `adSessionFailedToLoadCount` (number), `adSessionPaidCount` (number), `adSessionRevenueMicros` (number), `adSessionCurrencyCode` (string) |\n| poll | `pollAnswerId` (string) |\n| trivia quiz | `triviaQuizAnswerId` (string), `triviaQuizId` (string), `triviaQuizQuestionId` (string), `triviaQuizTitle` (string), `triviaQuizScore` (number) |\n| sharing | `shareMethod` (string) |\n| sheet | `sheetId` (string), `sheetTitle` (string), `sheetSize` (number) |\n| action | `actionClass` (string), `actionIndex` (number), `actionText` (string), `actionLinkId` (string) |\n| card | `cardActionType` (string), `cardActionUrl` (string), `cardAspectRatio` (string), `cardBackgroundType` (string), `cardCollectionId` (string), `cardId` (string), `cardIndex` (number), `cardSubtitle` (string), `cardTitle` (string), `audioToggleFrom` (string), `audioToggleTo` (string), `hasButton` (boolean) |\n| device/app | `appName` (string), `appId` (string), `appVersion` (string), `deviceModel` (string), `deviceBrand` (string), `deviceType` (string), `screenResolution` (string), `operatingSystem` (string), `osVersion` (string), `minOsVersion` (string), `targetOsVersion` (string), `languageVersion` (string) |\n| SDK initialization | `initializationSucceeded` (boolean), `enablePersonalization` (boolean), `enableStorytellerTracking` (boolean), `enableUserActivityTracking` (boolean), `enableAdTracking` (boolean), `enableFullVideoAnalytics` (boolean), `enableRemoteViewingStore` (boolean) |\n| followable category | `followableCategoryLimitActionText` (string), `followableCategoryLimitActionUrl` (string), `followableCategoryLimitDialogue` (string) |\n| categories | `categories` (string array), `categoryDetails` (`CategoryDetail` array), `currentCategory` (`CurrentCategoryData`) |\n| collection | `collection` (string), `collectionClipCount` (number) |\n| miscellaneous | `location` (string), `locale` (string), `itemTitle` (string), `containerTitle` (string), `metadata` (string map), `context` (string map), `isLive` (boolean) |\n\n### Story ID\n\nThe `storyId?: string` is the ID of the story for which the event occurred.\n\n### Story Title\n\nThe `storyTitle?: string` is the title of the story for which the event occurred.\n\n### Story Display Title\n\nThe `storyDisplayTitle?: string` is the display title of the Story for which the event occurred.\n\n### Story Index\n\nThe `storyIndex?: number` identifies the Story in the player/list analytics context and can accompany multiple Story and playback events. Story-player analytics use 1-based indexes; this is not limited to `OpenedStory`.\n\n### Story Page Count\n\nThe `storyPageCount?: number` is the number of pages in the story.\n\n### Story Read Status\n\nThe `storyReadStatus?: string` is whether the story was read or unread at the point the story was opened. Note this will either be `read` or `unread`.\n\n### Page ID\n\nThe `pageId?: string` is the ID of the page for which the event occurred.\n\n### Page Index\n\nThe `pageIndex?: number` is the 1-based content Page index for Story-player events. Android excludes inserted ad pages from this content index. Search-origin and other payloads can use native source indexes; do not use it as a universal UI-array offset.\n\n### Page Type\n\nThe `pageType?: string` is the type of the page associated with the event. Examples include `image`, `video` and `poll`; other native content types can also supply a string value.\n\n### Story Playback Mode\n\nThe `storyPlaybackMode?: string` value states if the story was opened during the list or in the single story mode (Storyteller static method.) It is supplied for relevant Story events and may be omitted for other event groups. The values for this are either `list` or `singleStory`.\n\n### Page Has Action\n\nThe `pageHasAction?: boolean` value states whether the page associated with the event contains an action.\n\n### Page Action Text\n\nThe `pageActionText?: string` is the text call to action if the page has an action.\n\n### Page Action URL\n\nThe `pageActionUrl?: string` is the URL for the link if the page has an action.\n\n### Page Action Type\n\nThe `pageActionType?: string` defines the type of action associated with a page, native values include `inApp`, `web`, `store`, `externalApp`, `share`, `sheet`, `story`, `storyCategory`, `clip`, `clipCollection` and `none`.\n\n### Opened Reason\n\nThe `openedReason?: string` value states how the user opened a story or clip. Common values include `storyListTap` (the user tapped the story in the story row); `deepLink` (openStory or openPage was called to open the story); `swipe` (the user swiped left or right to change the current story); `automaticPlayback` (the user completed the previous page); `tap` (the user tapped on the previous page to navigate to this page) and `clipListTap` (the user tapped the clip in a clip list).\n\n`openedReason` can also accompany Page, ad, sheet and instruction events when native supplies it. The values above are common examples; programmatic open reasons and other native paths can supply additional strings.\n\n### Dismissed Reason\n\nThe `dismissedReason?: string` value states the way the user dismissed a story or clip. Common values include `closeButtonTapped` (the user tapped close to dismiss the story); `swipedDown` (the user swiped down to dismiss the story); `swipedFirstStory` (the user swiped the first story to dismiss it); `swipedFinalStory` (the user swiped the final story to dismiss it); `skippedFinalPage` (the user tapped to skip the final page of the final story); `completedFinalPage` (the user completed the final page of the final story) and `backButtonTapped` (the user tapped the back button to dismiss the clip).\n\n`dismissedReason` can also accompany ad and Search dismissals. Treat it as an optional string, including a custom reason passed by the host when dismissing content.\n\n### Duration Viewed\n\nThe `durationViewedMs?: number` is the native viewing duration for the Story or Clip session in milliseconds. Story dismissal duration is measured from the opening session; Android accumulates intervals marked as viewing, while iOS Story dismissal uses elapsed session time. Use the organic heartbeat events for active watch-time measurement.\n\nA new content-viewing session resets the relevant timer.\n\nFor `FinishedClip`, Duration Viewed describes the Clip viewing session being finished, in milliseconds. It is not restricted to Clips entered by a swipe.\n\n### Pages Viewed Count\n\nThe `pagesViewedCount?: number` is the total number of pages a user has viewed since the most recent `OpenedStory` event with an Opened Reason of `storyListTap` or `deepLink`. This count is reset after any `DismissedStory` events.\n\n### Content Length\n\nThe `contentLength?: number` is the total duration of the page content in seconds.\n\n### Share Method\n\nThe `shareMethod?: string` is the component name of the app which the user has selected for sharing.\n\n### Advertisers Name\n\nThe `advertiserName?: string` is the name of the advertiser for a particular ad. This is only included for ad events.\n\n### Ad ID\n\nThe `adId?: string` is the ad ID if an event is associated with an ad.\n\n### Ad Type\n\nThe `adType?: string` is the type of component on which the ad is displayed. This can have values `stories` or `clips`.\n\n### Ad Format\n\nThe `adFormat?: string` represents the format of the Ad that was displayed. Examples include `customNative`, `native` and `banner`; the value depends on the ad source and format.\n\n### Ad Placement\n\nThe `adPlacement?: string` represents the placement of the ad. Full-screen examples are `Between Stories`, `Between Pages` and `Between Clips`; paid banner telemetry can use `Bottom Banner`. This is only included for ad events.\n\n### Ad Response Identifier\n\nThe `adResponseIdentifier?: string` represents the response identifier attached to the ad that was received from the ad provider. Used for debugging ad targeting.\n\n### Is Initial Buffering\n\nThe `isInitialBuffering?: boolean` value is returned if the buffering happens at the start of playback for that page. This is only included for `BufferingStarted` and `BufferingEnded` events.\n\n### Time Since Buffering Began\n\nThe `timeSinceBufferingBegan?: number` value is the duration the current buffering lasted for in milliseconds. This is only included for `BufferingEnded` events.\n\n### Categories\n\nThe `categories?: Array<string>` value is the list of categories assigned to the story for which the event occurred. It can accompany Story, Clip, tile, Search and other content events when available.\n\n### Poll Answer\n\nThe `pollAnswerId?: string` is the ID of the answer the user selected when voting. This is only included on `VotedPoll` events.\n\n### Trivia Quiz ID\n\nThe `triviaQuizId?: string` is the ID of the trivia quiz that was completed or answered. This is only included on `TriviaQuizQuestionAnswered` and `TriviaQuizCompleted` events.\n\n### Trivia Quiz Title\n\nThe `triviaQuizTitle?: string` is the title of the trivia quiz that was completed or answered. This is only included on `TriviaQuizQuestionAnswered` and `TriviaQuizCompleted` events.\n\n### Trivia Quiz Score\n\nThe `triviaQuizScore?: number` value is the score of the trivia quiz that was completed. This is only included on `TriviaQuizCompleted` events.\n\n### Trivia Quiz Question ID\n\nThe `triviaQuizQuestionId?: string` is the ID of the trivia quiz question which was answered. This is only included on `TriviaQuizQuestionAnswered` events.\n\n### Trivia Quiz Answer ID\n\nThe `triviaQuizAnswerId?: string` is the ID of the selected trivia quiz answer. This is only included on `TriviaQuizQuestionAnswered` events.\n\n### Clip ID\n\nThe `clipId?: string` is the ID of the clip for which the event occurred.\n\n### Clip Title\n\nThe `clipTitle?: string` is the title of the clip for which the event occurred.\n\n### Clip Index\n\nThe `clipIndex?: number` is the native analytics index for the Clip in its row/grid or player feed. Player analytics use 1-based indexes. It can change when the feed changes; use `clipId` as the stable content identifier.\n\n### Tile Index\n\nThe `tileIndex?: number` is the 1-based index of the Story or Clip tile in the row or grid at the point it became visible. It is supplied for `TileVisible` and can also accompany external Search result taps.\n\n### Clips Viewed\n\nThe `clipsViewed?: number` value is the total number of clips a user has viewed since the most recent OpenedClip event with an Opened Reason of `clipListTap` or `deepLink`. This count should be reset after any DismissedClip events.\n\n### Loops Viewed\n\nThe `loopsViewed?: number` is for DismissedClip, the total number of loops (plays of an individual clip) a user has viewed since the most recent OpenedClip event with an Opened Reason of `clipListTap` or `deepLink`.\n\nThis count should be reset after any DismissedClip events. For FinishedClip, the total number of loops.\n\n### Clip Has Action\n\nThe `clipHasAction?: boolean` value is whether the clip associated with the event contains an action.\n\n### Clip Action Text\n\nThe `clipActionText?: string` is the text call to action if the clip associated with the event has an action link.\n\n### Clip Action URL\n\nThe `clipActionUrl?: string` is the URL linked to from the action if a clip associated with the event has an action.\n\n### Clip Action Type\n\nThe `clipActionType?: string` defines the type of action associated with a clip, native values include `inApp`, `web`, `store`, `externalApp`, `share`, `sheet`, `story`, `storyCategory`, `clip`, `clipCollection` and `none`.\n\n### Clip Feed Type\n\nThe `clipFeedType?: string` indicates the type of feed the clip is in, possible values are: `default`, `forYou`, `following`.\n\n### Is Live\n\nThe `isLive?: boolean` indicates if the Clip is live.\n\n### Category Type\n\nThe `categoryType?: string` specifies the type of the Clip category.\n\n### Collection\n\nThe `collection?: string` is the ID of the collection if a Story or Clip is being played from a collection.\n\n### Collection Clip Count\n\nThe `collectionClipCount?: number` represents the number of Clips in a collection.\n\n### Location\n\nThe `location?: string` represents the location of a Clip, possible values are: `On Clip` and `Category Screen`.\n\n### Category Details\n\nThe `categoryDetails?: Array<CategoryDetail>` is a list of Category Detail objects. The details are the name, ID, type and placement of the category.\n\n### Category Name\n\nThe `categoryName?: string` of the category being navigated to or dismissed.\n\n### Category ID\n\nThe `categoryId?: string` of the category being navigated to or dismissed.\n\n### Current Category\n\nThe `currentCategory?: CurrentCategoryData` is the category for the row that is currently being interacted with. The information provided from this is the category title, ID and placement.\n\nIt can also accompany list-tile and Search events when a current category is known.\n\n### Locale\n\nThe `locale?: string` indicates the locale setting when the event occurred.\n\n### Item Title\n\nThe `itemTitle?: string` represents the title of the item involved in the event, for Stories that's a page title, for Clips it's a Clip title.\n\n### Action Text\n\nThe `actionText?: string` represents the text on the action button of the item involved in the event.\n\n### Container Title\n\nThe `containerTitle?: string` represents the title of the container that current item is in, for Stories that's a Story title, for Clips it's a collection name.\n\n### Metadata\n\nThe `metadata?: { [key: string]: string }` contains additional metadata associated with the event.\n\n## RN 12 organic watch-time and Search events\n\nRN 12 exposes the following values from Android 12.0.0+ and iOS 11.7.0+ through the existing `onUserActivityOccurred` subscription. Availability depends on content and tracking settings.\n\n| Enum member | Emitted value | Meaning |\n| ------------------------------ | -------------------- | ------------------------------------------------------------- |\n| `EventType.StoryHeartbeat` | `storyHeartbeat` | Cumulative active-viewing threshold for an organic Story Page |\n| `EventType.StoryPageQuartile` | `storyPageQuartile` | Organic Story Page progress milestone |\n| `EventType.ClipVideoHeartbeat` | `clipVideoHeartbeat` | Cumulative actual-playback threshold for an organic Clip |\n| `EventType.ClipVideoQuartile` | `clipVideoQuartile` | Fixed-duration organic Clip playback milestone |\n| `EventType.SearchResultTapped` | `searchResultTapped` | Configured external Search result tapped |\n\nOrganic heartbeats occur at five-second cumulative active-viewing thresholds. Story tracking resets for each Page view; Clip heartbeat time continues across natural loops, while Clip quartiles reset per playback pass. Live Clips can emit heartbeats but not organic quartiles.\n\n`UserActivityData.quartile` is optional and contains `25`, `50` or `75` for the two organic quartile events. External Search-result payloads can additionally contain optional `actionType`, `searchResultId`, `searchResultTitle` and `searchResultSource`. Missing native fields are omitted. Existing event names and payload fields are unchanged.\n", "copy_markdown_include_header": false, "base_path": "", "ai_dir": "ai", "missing_payload_behavior": "empty"}