> ## Documentation Index
> Fetch the complete documentation index at: https://docs.appdna.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Auto-Tracked Events

> Events the SDK records automatically -- do not track these manually

# Auto-Tracked Events

The SDK automatically tracks the events listed below. You do **not** need to call `track()` for any of them. Tracking them manually will result in duplicate data.

These events can be used as:

* **Experiment conversion goals** in the Console
* **Webhook triggers** for server-side integrations
* **In-app message and survey triggers**
* **Analytics filters** in dashboards and exports

***

## Core Events

| Event           | Trigger                                           | Key Properties |
| --------------- | ------------------------------------------------- | -------------- |
| `session_start` | New session begins                                | `session_id`   |
| `session_end`   | 30 minutes of inactivity or app enters background | --             |
| `app_open`      | App enters foreground                             | --             |
| `app_close`     | App enters background                             | --             |

<Info>
  A new session starts when the app comes to the foreground after 30 minutes of inactivity. The `session_id` is included in all events for the duration of the session.
</Info>

***

## Onboarding Events

| Event                       | Trigger                                          | Key Properties                               |
| --------------------------- | ------------------------------------------------ | -------------------------------------------- |
| `onboarding_flow_started`   | An onboarding flow begins                        | `flow_id`                                    |
| `onboarding_step_viewed`    | A step is displayed to the user                  | `flow_id`, `step_id`, `step_index`           |
| `onboarding_step_completed` | User completes a step (e.g., answers a question) | `flow_id`, `step_id`, `step_index`           |
| `onboarding_step_skipped`   | User skips a step                                | `flow_id`, `step_id`, `step_index`           |
| `onboarding_flow_completed` | User completes the entire flow                   | `flow_id`, `total_steps`                     |
| `onboarding_flow_dismissed` | User dismisses the flow before completing        | `flow_id`, `last_step_id`, `last_step_index` |

***

## Paywall Events

| Event           | Trigger                | Key Properties                 |
| --------------- | ---------------------- | ------------------------------ |
| `paywall_view`  | A paywall is displayed | `paywall_id`, `placement`      |
| `paywall_close` | Paywall is closed      | `paywall_id`, `dismiss_reason` |

***

## Billing Events

| Event                | Trigger                                                     | Key Properties                                           |
| -------------------- | ----------------------------------------------------------- | -------------------------------------------------------- |
| `purchase_started`   | A purchase flow begins                                      | `product_id`                                             |
| `purchase_pending`   | A purchase is pending approval (e.g. Ask to Buy / deferred) | `product_id`                                             |
| `purchase_completed` | A purchase completes successfully                           | `product_id`, `transaction_id`                           |
| `purchase_failed`    | A purchase fails with an error                              | `product_id`, `error`                                    |
| `purchase_canceled`  | User cancels the purchase dialog                            | `product_id`                                             |
| `purchase_restored`  | A previous purchase is restored                             | `product_id` (per product), `restored_count` (aggregate) |

***

## Push Notification Events

| Event                     | Trigger                                        | Key Properties           |
| ------------------------- | ---------------------------------------------- | ------------------------ |
| `push_token_registered`   | Device token is registered with AppDNA         | `token_hash`, `platform` |
| `push_permission_granted` | User grants push notification permission       | --                       |
| `push_permission_denied`  | User denies push notification permission       | --                       |
| `push_delivered`          | A push notification is delivered to the device | `push_id`                |
| `push_tapped`             | User taps on a push notification               | `push_id`, `action`      |

***

## Experiment Events

| Event                 | Trigger                                              | Key Properties             |
| --------------------- | ---------------------------------------------------- | -------------------------- |
| `experiment_exposure` | First `getVariant()` call per session per experiment | `experiment_id`, `variant` |

<Note>
  Exposure is tracked **once per session** per experiment. Calling `getVariant()` multiple times in the same session does not create duplicate exposure events.
</Note>

***

## In-App Message Events

| Event                      | Trigger                            | Key Properties               |
| -------------------------- | ---------------------------------- | ---------------------------- |
| `in_app_message_shown`     | An in-app message is displayed     | `message_id`, `message_type` |
| `in_app_message_clicked`   | User taps an action in the message | `message_id`, `cta_action`   |
| `in_app_message_dismissed` | Message is closed                  | `message_id`                 |

***

## Survey Events

| Event              | Trigger                             | Key Properties                        |
| ------------------ | ----------------------------------- | ------------------------------------- |
| `survey_shown`     | A survey is displayed               | `survey_id`, `survey_type`            |
| `survey_completed` | User submits a survey response      | `survey_id`, `survey_type`, `answers` |
| `survey_dismissed` | Survey is closed without completing | `survey_id`                           |

***

## Deep Link Events

| Event                         | Trigger                                          | Key Properties                 |
| ----------------------------- | ------------------------------------------------ | ------------------------------ |
| `deep_link_handled`           | A deep link is opened                            | `url`                          |
| `deferred_deep_link_resolved` | A deferred deep link is resolved on first launch | `path`, `params`, `visitor_id` |

***

## Server-Driven Screen Events

| Event                    | Trigger                                              | Key Properties                                          |
| ------------------------ | ---------------------------------------------------- | ------------------------------------------------------- |
| `screen_presented`       | A server-driven screen is displayed                  | `screen_id`, `presentation`                             |
| `screen_dismissed`       | A server-driven screen is closed                     | `screen_id`, `screen_name`, `duration_ms`               |
| `screen_action`          | User taps a CTA or interactive element in a screen   | `screen_id`, `action_type`                              |
| `flow_started`           | A multi-screen flow begins                           | `flow_id`, `flow_name`, `start_screen_id`               |
| `flow_completed`         | A multi-screen flow finishes                         | `flow_id`, `flow_name`, `screens_viewed`, `duration_ms` |
| `flow_abandoned`         | A flow is dismissed before completion                | `flow_id`, `flow_name`, `screens_viewed`, `duration_ms` |
| `slot_registered`        | A screen slot first renders in the app               | `slot_name`                                             |
| `slot_rendered`          | A slot displays content from a screen config         | `slot_name`, `screen_id`                                |
| `slot_empty`             | A slot renders with no assigned content              | `slot_name`                                             |
| `interception_triggered` | A navigation interception fires and injects a screen | `trigger_screen`, `timing`, `screen_id`                 |

***

## Web Entitlement Events

| Event                       | Trigger                                 | Key Properties        |
| --------------------------- | --------------------------------------- | --------------------- |
| `web_entitlement_activated` | Web subscription becomes active         | `plan_name`, `status` |
| `web_entitlement_expired`   | Web subscription expires or is canceled | `plan_name`, `reason` |
