---
id: "integrations/third-party-integrations/supporting-files/paywall-component-interaction-events"
title: "Paywall component interaction events"
description: "The paywall_component_interacted event is emitted when a user changes a paywall control (tabs, toggles, carousels, packages, buttons, purchase actions, etc.). It is user-driven: for example, carousel auto-advance does not send this event when the user did not drag or tap to change the page."
permalink: "/docs/integrations/third-party-integrations/supporting-files/paywall-component-interaction-events"
slug: "paywall-component-interaction-events"
version: "current"
original_source: "docs/integrations/third-party-integrations/supporting-files/paywall-component-interaction-events.mdx"
---

The **`paywall_component_interacted`** event is emitted when a user changes a paywall control (tabs, toggles, carousels, packages, buttons, purchase actions, etc.). It is **user-driven**: for example, **carousel auto-advance does not** send this event when the user did not drag or tap to change the page.

Like other paywall analytics events, payloads include shared context such as **`session_id`**, **`offering_id`**, **`paywall_id`**, **`paywall_revision`** (when available), **`display_mode`**, **`dark_mode`**, **`locale`**, and a **timestamp**, plus integration-specific wrappers (see sample JSON under **Paywalls events** on [Amplitude](/integrations/third-party-integrations/amplitude) and [Mixpanel](/integrations/third-party-integrations/mixpanel)).

## Interaction-specific properties

Package and product context use the **same JSON keys on iOS, Android, and Web** (snake\_case in the wire payload). Only a subset applies per `component_type` / interaction.

| JSON key (wire)            | Description                                                                                  |
| -------------------------- | -------------------------------------------------------------------------------------------- |
| `component_type`           | Interaction category (see tables below).                                                     |
| `component_value`          | Type-specific value (e.g. tab id, `on` / `off`, button action, purchase flow discriminator). |
| `component_name`           | Optional; builder-dependent display name for the control.                                    |
| `component_url`            | Present when relevant (e.g. URL buttons, some purchase flows).                               |
| `origin_index`             | Starting index (e.g. carousel, tab strip).                                                   |
| `destination_index`        | Ending index.                                                                                |
| `origin_context_name`      | Optional context label for the origin index.                                                 |
| `destination_context_name` | Optional context label for the destination index.                                            |
| `default_index`            | Default / baseline index when applicable.                                                    |
| `origin_package_id`        | Package identifier at the start of a transition.                                             |
| `destination_package_id`   | Package identifier after the transition.                                                     |
| `default_package_id`       | Default package when applicable (e.g. sheet context).                                        |
| `current_package_id`       | Active package before a change (e.g. sheet close).                                           |
| `resulting_package_id`     | Package after a change (e.g. sheet close).                                                   |
| `origin_product_id`        | Product identifier aligned with `origin_package_id`.                                         |
| `destination_product_id`   | Product identifier aligned with `destination_package_id`.                                    |
| `default_product_id`       | Product aligned with `default_package_id`.                                                   |
| `current_product_id`       | Product aligned with `current_package_id`.                                                   |
| `resulting_product_id`     | Product aligned with `resulting_package_id`.                                                 |

SDKs may **fill missing product ids** from package ids when the mapping is known at event time.

## Interactions from paywalls built in the current editor

These are the **`component_type`** values you will see for paywalls created and shipped with the **current** RevenueCat Paywalls experience (dashboard editor, current templates).

| `component_type`          | Typical `component_value` / notes                                                                                                        |
| ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
| `tab`                     | Tab identifier; index fields may describe tab positions.                                                                                 |
| `switch`                  | `on` or `off`.                                                                                                                           |
| `carousel`                | User-driven page changes; includes origin/destination indices. **Auto-advance alone does not emit** this event.                          |
| `button`                  | Non-purchase actions such as `restore_purchases`, `navigate_to_terms`, `navigate_to_privacy_policy`, `navigate_to_url`, etc.             |
| `text`                    | e.g. `navigate_to_url` with `component_url` when applicable.                                                                             |
| `package`                 | Package selection / emphasis changes; includes package transition ids when relevant.                                                     |
| `package_selection_sheet` | Sheet lifecycle (e.g. open/close); may include `current_*` and `resulting_*` package/product ids on close.                               |
| `purchase_button`         | Discriminators such as `in_app_checkout`, `web_checkout`, `web_product_selection`, `custom_web_checkout`; `component_url` when relevant. |

## Interactions from first-generation (legacy) paywall templates

Older, **first-generation** paywall templates may emit overlapping concepts with different `component_type` / `component_value` pairs, for example:

| Control / action         | Typical mapping                                                                       |
| ------------------------ | ------------------------------------------------------------------------------------- |
| All plans / toggle plans | `component_value` such as `toggle_all_plans` (from controls like **All plans**).      |
| Restore                  | `restore_button` style interactions.                                                  |
| Terms / privacy          | `terms_link`, `privacy_link`, or `button` / `navigate_to_*` on editor-built paywalls. |
| Tier selector            | `tier_selector`.                                                                      |
| Purchase row             | `purchase_button` with `in_app_checkout` where applicable.                            |

**`component_name`** may be **absent** on some native paths depending on the template and SDK version; treat it as optional.

For how paywalls are presented on each platform, see [Displaying Paywalls](/tools/paywalls/displaying-paywalls).
