> This is part 1 of 2 of the full documentation (pages 1–100 of 184).
> The content is paginated: fetch every part to see all of it.
> Next part: https://docs.zipy.ai/llms-full.txt/1
> Page index: https://docs.zipy.ai/llms.txt

# Welcome to Zipy ai

Welcome to a one stop platform which solves for customer experience.

Zipy is a proactive debugging tool that helps your developers monitor session replays in your web app and track errors and exceptions occurring in the end user environment. This can be achieved by simply including a two-line JavaScript SDK provided by Zipy in your web app. Once the installation is successful, Zipy starts recording the user actions, request responses, console events, errors and exceptions on your app in the user environment, thus giving developers a way to proactively resolve issues on the user end.

Here's a screenshot of the Error Classification screen in Zipy:

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FghoYKs1rypIHBQ3yMRhn%2Fimage.png?alt=media&amp;token=f159056c-9ba5-4b2c-8ef1-17cd00debaca" alt=""><figcaption></figcaption></figure>


# Install Zipy

How can I install Zipy on my product?

Getting started is easy. Go to the Install page in the Zipy application after Signing In.&#x20;

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2F6QPVOZaK5qLFMfeffqjt%2FInstallScreen.png?alt=media&amp;token=524609fb-7bc4-4b36-972b-f73ed2d21152" alt=""><figcaption></figcaption></figure>

You can use either of the following methods:

1. **Install Zipy via SDK script**

You can achieve this by simply including a two-line JavaScript SDK provided by Zipy in the head section of the html page of your web application.&#x20;

Sample SDK script:&#x20;

<pre data-overflow="wrap"><code><strong>&#x3C;script src="https://cdn.zipy.ai/sdk/v1.0/zipy.min.umd.js" crossorigin="anonymous">&#x3C;/script>
</strong><strong>&#x3C;script> window.zipy &#x26;&#x26; window.zipy.init('YOUR_PROJECT_SDK_KEY');&#x3C;/script>
</strong></code></pre>

**Note:** If you are using **lazy loading** for external scripts on your website, please ensure that the Zipy script is downloaded before calling the `zipy.init()` function.

\
2\.  **Install Zipy via npm**

Following are the steps for installation:

* Install zipy module in the app project:

```
npm i zipyai
```

* Then import zipy module and initialize in your \_app.js or any other source file:

```
import zipy from 'zipyai';
zipy.init('YOUR_PROJECT_SDK_KEY');  
```

Please sign into [*https://app.zipy.ai*](https://app.zipy.ai/) to get your Project SDK Key.


# Installing with Google Tag Manager

Installing Zipy with Google Tag Manager

You will need to integrate the Zipy SDK before you can start recording sessions and errors. Here are the steps for Integrating Zipy through GTM&#x20;

**Step 1. Go to Google Tag Manager**  [**https://tagmanager.google.com/#/home**](https://tagmanager.google.com/#/home)

**Step 2. Select or Create the account where you would like to Install Zipy**&#x20;

<figure><img src="https://lh6.googleusercontent.com/MWTSOMxc8UglmVz7Vi0L7NpsMwuULHWZAgb0YNhVOw6FNGIENWjbZ3q21_WlpPbLspFpZ6u4A2vT1STFxIstDXNSxxWlPAVPy3y7c_YyBFMnerzdba5YjDdylZrkjTp9B7KXiY8hf6vkAYEqAsuMzbE" alt=""><figcaption></figcaption></figure>

**Step 3. Select Tags from the Workspace Menu**

<figure><img src="https://lh5.googleusercontent.com/p-T9Whwyvzt3BcymYAuSA4AG6APiyd0JdkGOF3QDWydLIuwgA_EFxt3bc4Aq1KA2t1O5U_obdhf3RcZltVKAqwkyft9FTMjlM1-tSL5EgkXA2o54Hbe3655H_SQkXHn3BGWEWIt-S6xi3aV0bh5W1mE" alt=""><figcaption></figcaption></figure>

**Step 4. Create a New Tag**&#x20;

<figure><img src="https://lh6.googleusercontent.com/D-Epfl1KAb1S6YbEdjJIk6vi5jhc_RnQLFm8Gxf6fT-6iTmINdpE9MepJgCM-pbdGwYRpiQ4xGH_dx5ZWlQNGSh3R0l6WUs3kdzrg4tQC0OZyn2_VfVvR85HnpwB51iX-tdJpmg7BmV7B4g_O62IBG4" alt=""><figcaption></figcaption></figure>

**Step 5. Select Tag Configuration**&#x20;

<figure><img src="https://lh3.googleusercontent.com/Jn9oBzNNGUkm8thdT5RS_CJrBOm6IxCZCGkK3OZNKhYE5KVMe8z54aSrfV-AhxssXikemk7V0Ts_PPCjkQ2YkhTtA6lazAMUNMIXfCfqhnjd59zdZUxhVVbzto2PU7mVXkwxmPtX2BU1sN0lSlb5tKk" alt=""><figcaption></figcaption></figure>

**Step 6. Choose Custom HTML tag in Tag Type**&#x20;

<figure><img src="https://lh6.googleusercontent.com/rrdIYNvAD0dcfWVVvwO0MMCg2v3OuBvbyewjSyBe3oZI8QJHNpxnW04eVGJNDUQ61y8JVAfasBwsANLeC6HjTHobG_lxI8aQ5pTiXh5S2dPi9-hgrWtFdB4GkMcMvLWu27xETKMftcGeulX9ZeXwkaY" alt=""><figcaption></figcaption></figure>

**Step 7. Open a new tab in browser and sign into Zipy app -** [**https://app.zipy.ai/sign-in**](https://app.zipy.ai/sign-in)

**Step8. Go to Project Settings and copy the Script Tag**

<figure><img src="https://lh6.googleusercontent.com/iZBwWMqDU8xs1UuDLc-zu4eEBmGw7v4u0DHTs_P-77-axGn6XDd0VMxqbroyW5rmP_IrSJIzbk3LIWaBnRIgEJ-g9ldJ_Ud6rIlgCrOdNbcTYoSK-breLlsc55OkTQBqPCACkwHcvlvYyjJxVFSFNYg" alt=""><figcaption></figcaption></figure>

**Step 9. Paste this Script Tag in Custom HTML in GTM**&#x20;

<figure><img src="https://lh5.googleusercontent.com/9A1lsKqlHUanXNgCbwmCtCVMhi9IlW3wTHbT8AoBVyc_7RD7Lxidm5QgGokDM_jd_LQ3DmHfgn1FmYHN2l1xVyqbg-OiWLAKOYtlDmOFEtk4quOi4AhL_eWRxK92PdbTTxjBfMrUjhhWeBLwaiBmCpU" alt=""><figcaption></figcaption></figure>

**Step 10. Select Triggering from Tag Configuration**

<figure><img src="https://lh4.googleusercontent.com/Uuhkgz5Sdcdc3iuIYVHxeQ9fmwA2owDNvjFQ_NbbGLzZ3kIZINk98-tfMhtuRiEbCx5Tstcwij4HIfMS8Rp7uv2o32w-2rk4jb-5pNOHC3J9_ehJ_ucRfeXu59fUXte7jyP5zI0S1ke8HfgSz4zONvY" alt=""><figcaption></figcaption></figure>

**Step 11. Select All Pages from Triggers**&#x20;

<figure><img src="https://lh3.googleusercontent.com/E0ceydIYhhbYuLeWJzgJ0oq-_u7JxCn7SukCankRCvH1daeabb54MiMV3b4JhH3Se9Fcvgh4QJGsJjrwwl2gHr3uBIKRehVtT1ItBJtOhowOwqgbTdrBWrP6FRgtI6iBM9jai8vSZoYiBsADVIH8aHY" alt=""><figcaption></figcaption></figure>

**Step 12. Save the Tag Configuration**

<figure><img src="https://lh3.googleusercontent.com/-Eq3UKO0UCbCT0Lce0jj0K2j0KgaWqSrNC4vUntEaHLx9uxYmcfqWH1-Xa-ZuQg9TJVVmQiyVs6mobOldejoEpE7WmUZn6DXnZCuhLHolKEIg_T3y65fLGR1xcfBtcwp5NVzn-d_5Lya73ho_l_XxfI" alt=""><figcaption></figcaption></figure>

**Step 13. Click on Submit, you are almost there.**&#x20;

<figure><img src="https://lh5.googleusercontent.com/089BMSAX2M7P8TUWaZx92vwLos1mc2zpyjjgq8rWJP-W4snCH3gP4LgjsnqjudXBEB2E4Am4k8GzW7muQfOfeV1cHB9oeWCLhBOIJm5ztlidKGzLI2d7m_5rP4HPcmuJHWQokNgt_7kLwXfGSNHRx6w" alt=""><figcaption></figcaption></figure>

**Step 14. Add the Version Name and Publish! You are all set.**&#x20;

<figure><img src="https://lh4.googleusercontent.com/4PgS64vyehhEG3e7TQ0fdcYPA_NRT0j1ZePk2OXQyhjncMcKY3qFbJs9ntK-AbXqJDoyYXLO2M9NYgH5XP39i9yyLuu6OEd2miIi0knddIG6IOSkNVZvSapBRNAYfAm6swKZNPtY_Z4gjcFrxUel_L4" alt=""><figcaption></figcaption></figure>

<br>


# Supported frameworks

What types of apps and frameworks does Zipy support?

Zipy works with any JavaScript web app and supports most commonly used frameworks/libraries like ReactJS,Next.js Angular, Svelte, AngularJS, VueJS, JQuery, Ember etc.&#x20;

For Mobile support please join our waitlist here&#x20;

{% embed url="<https://www.zipy.ai/framework/android>" %}

{% embed url="<https://www.zipy.ai/framework/ios>" %}

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FgCVLyO4WfXCTXlGkAPzq%2FScreenshot%202023-04-06%20at%209.41.21%20PM.png?alt=media&amp;token=287eb89b-8c85-427b-a8ec-9f1b4e0d234a" alt=""><figcaption></figcaption></figure>


# Security Overview

Zipy Security Overview

We believe that consumer experience data is very important for your business and security of this data is equally important.&#x20;

Hence to provide our customers peace of mind we follow certain security standards and practices, which will constantly keep evolving to protect the data against any security breaches.

Our customers can control what data Zipy will record and store. Any data that our customers deem sensitive should not be recorded and Zipy will not store it.&#x20;

The following are the best practices followed by Zipy to ensure the security of our customers data.&#x20;

**System Security**&#x20;

* Servers and Networking&#x20;

All production servers running Zipy are hosted on Google Cloud and support only https connections on port 443.&#x20;

All recorded data transmitted from customer products to Zipy servers is over https and hence encrypted and secure. We support SSL certificates on all our network API endpoints.&#x20;

Our website is also secure and supports https.&#x20;

* Storage Security&#x20;

We are storing all customer data in Google Cloud Platform which allows multi layer access, encryption and monitoring.&#x20;

Each customer data is stored in a separate bucket.&#x20;

Data is stored in an encrypted manner using Google-managed keys. (Objects are encrypted automatically using keys that Google manages on Zipy’s behalf)

We plan to use Customer-managed keys going forward.&#x20;

**Employee Access**

We use Google account roles and policies to verify employee account identity. We also provide two factor authentication for all sensitive data access. All Google Cloud based access is based on Google accounts.&#x20;

**Application Security**&#x20;

* Sensitive Data&#x20;

Any data that is sensitive to the customer shall not be recorded by Zipy unless specified or enabled by the customer. Zipy provides configuration parameters to allow the customers to enable and disable what data is recorded by Zipy.&#x20;

* All recorded data is transferred over https ( Data security in transit)&#x20;
* All recorded data is stored in encrypted format in separate customer partitions ( Data security in store)&#x20;
* SDK ( javascript) which is embedded in customers code&#x20;
  * The sdk is hosted at a secure endpoint on the Google cloud and it cannot cause security vulnerabilities as all the communication endpoints are behind SSL certificates and only allow an https connection.&#x20;
  * Every customer has a unique sdk key which can only be used by them. It is verified and authenticated in Zipy backend before storing any data for that customer. There is an additional handshake Zipy provides before any communication is initiated with Zipy servers for recording and storing data.&#x20;
* Developer interface&#x20;
  * Our developer console - app.zipy.ai allows only authenticated users to login. We support standard JWT email authentication and SSO currently.&#x20;
  * All current developer console REST APIs are over https.


# Sensitive User Data

How does Zipy handle sensitive user data?

At Zipy, data privacy and security is of utmost importance to us. Hence by default, our tool will disable the capture of all sensitive and Personal Identifiable Information of the users, which includes email IDs, passwords, usernames, credit card information, etc.

Further, Zipy allows configuration of the following parameters, to ensure better privacy. Please reach out to us if you want to change the default values.

| **Config Param Name** | **Description**                                                              | **Default Value** |
| --------------------- | ---------------------------------------------------------------------------- | ----------------- |
| <p>IP Capture<br></p> | Capture IP address of the user                                               | true              |
| Input Masking         | Masking of user inputs in TextFields, TextAreas, FormInputs, Passwords, etc. | true              |

Also, Zipy allows you to block additional sensitive data using the **zipy-block** class.

**\<div class="zipy-block">Sample div\</div>**

Example Usage:&#x20;

```html
<div class="zipy-block">
    <label>Card details</label>
    <input type="text" placeholder="Name">
    <input type="text" placeholder="Card number">
</div>
```


# SOC2  Type II

Zipy is SOC2 compliant

Zipy is SOC2 Type II compliant. If you need more information please reach out to <support@zipy.ai>.

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FDQTuSWsAIP8uzu0CH1ye%2Fimage%20(16).png?alt=media&amp;token=a314aabd-9295-4877-8202-738f17d0775c" alt=""><figcaption></figcaption></figure>

For access to the complete report, email us at: [support@zipy.ai](mailto:undefined)&#x20;


# Android Setup


# Install in an Android app

How do I install Zipy in my Android mobile application?

## Step 1: Add Dependency

In your app-level `build.gradle` file with the latest version:

Go to the following link for latest version:\
<https://central.sonatype.com/artifact/ai.zipy/zipy-android>&#x20;

```gradle
dependencies {
    implementation 'ai.zipy:zipy-android:1.0.1'
}
```

## Step 2: Initialize SDK

Initialize Zipy as early as possible (typically inside `Application` class).

```java
import com.zipy.zipyandroid.Zipy;

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        // Provide application context
        Zipy.setApplicationContext(application);
        // Initialize with API Key
        Zipy.init("YOUR_API_KEY");
    }
}

```

If you just want the latest version without hardcoding the number—which gives you flexibility but reduces clarity—you can use a dynamic version specifier:

```gradle
dependencies {
    implementation 'ai.zipy:zipyandroid:+'
}
```

Add these rules in proguard rules file if you are minifying code in release

```
-dontwarn com.zipy.zipyandroid.**
-keep class com.zipy.zipyandroid.** { *; }
-keepclassmembers class com.zipy.zipyandroid.** { *; }
-keepattributes *Annotation*,Signature,EnclosingMethod

# Prevent protobuf Lite classes (used by Zipy events/types) from being stripped/obfuscated.
# The crash "Field kind_ for j3.z1 not found" indicates Value/Struct fields were obfuscated.
-dontwarn com.google.protobuf.**
-keep class com.google.protobuf.** { *; }
-keepclassmembers class com.google.protobuf.** { *; }

# Keep generated proto event classes under types.* to preserve field names for reflection.
-dontwarn types.**
-keep class types.** { *; }
-keepclassmembers class types.** { *; } 
```


# Identify Users

How do I identify my users or customers using Zipy?

## Identify a User

To identify **users you will need to additionally call Zipy.identify(uuid, {userInfo}).** This will help you identify the users of your application by associating your own unique identifier with their activity. This method should typically be called when your users identify themselves by signing in to your application.

To identify users you need to-

1. [Install zipy](/zipy-for-mobile/android-setup/install-in-an-android-app) for android in you application
2. Import Zipy where you want to identify the user

```swift
import com.zipy.zipyandroid.Zipy;
```

3. Call the identify function like this

```swift
// Associates the current session with a specific user identity
val userInfo = HashMap<String, Any>().apply {
    put("email", "john.doe@example.com")
    put("firstName", "John")
    put("lastName", "Doe")
    put("customerName", "ACME Corp")
    // Additional custom fields
    put("role", "developer")
    put("plan", "enterprise")
    put("region", "US-West")
    put("teamSize", 15)
    put("lastLogin", System.currentTimeMillis())
    }
            
// Call identify with a unique external ID and user info
Zipy.identify("user_${System.currentTimeMillis()}", userInfo)
```

## Anonymize a User

To anonymize or disassociate a identified user of your application from the session, use the following code in a source file where the user signs out of your application:

```swift
import com.zipy.zipyandroid.Zipy;

// Clears all user-identifying information and creates a new session
Zipy.anonymize();
```

> **Note:** We recommend calling `Zipy.anonymize()` when the user logs out. This ends the current identified session and starts a fresh, anonymous session, ensuring that subsequent activity isn't mistakenly linked to the previous user.

**The** `uuid` **sent to Zipy can be viewed in the Session Replays list in the user column, as shown in the image below:**

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FOBcKflSfC2XKN5UiakLj%2Fimage.png?alt=media&amp;token=0c8211c3-d5d3-4960-87b0-05c6e3df3549" alt=""><figcaption></figcaption></figure>

**Previously identified users of your application can be anonymized by calling the zipy.anonymize()** m**ethod. This will automatically split the session and associate the new session with a new anonymous user which Zipy will identify with its own identification. This method should typically be called when users sign out of your application.**

## Custom Identifiers

We allow a maximum of 10 custom identifiers per project which can be created as per your use-case. To use custom identifiers, you can add them to the existing userInfo object in Zipy’s identify method:

**In case you want to add your own custom identifiers in addition to the identifiers we have defined for you, please reach out to <support@zipy.ai>.**


# Network Calls

Monitor and log Network calls seamlessly with Zipy for enhanced debugging and performance optimization.

Add this interceptor to Http client builder for capturing network calls

```java
import com.zipy.zipyandroid.network.NetworkInterceptor

OkHttpClient.Builder()
      .addInterceptor(NetworkInterceptor())
      .build()
```

Example:&#x20;

```java
class NetworkDemoActivity : AppCompatActivity() {
    private lateinit var tvResult: TextView
    private val client by lazy {
        OkHttpClient.Builder()
            .addInterceptor(NetworkInterceptor())
            .build()
}
```


# Custom Logging

Recording key events and managed errors to boost app reliability and debugging efficiency

Logging Messages and Capturing Handled Exceptions enhances app reliability by recording key events and errors during app execution.

### Log Messaage

Logs various types of informational, debug, warning, or error messages to capture events, notifications, or actions within the application.

```swift
import com.zipy.zipyandroid.Zipy;

// Simple message logging
Zipy.logMessage("User completed onboarding");

// With additional context
Zipy.logMessage("Cart updated", cartObject);

// With custom max length
Zipy.logMessage("Custom message", data, 2000);
```

### Log Errors

Logs all the error, providing all the details you pass for debugging. Captures and records error events within your application

```swift
import com.zipy.zipyandroid.Zipy;

// Simple error logging
Zipy.logError("Payment processing failed");

// With error object
Zipy.logError("API error", errorObject);

// With custom max length
Zipy.logError("Database error", error, 2000);

```

### Log Exceptions

Logs exceptions encountered by the application, providing detailed stack traces and context to aid in debugging and troubleshooting. This feature ensures critical data is logged promptly to diagnose and resolve issues.

```swift
import com.zipy.zipyandroid.Zipy;

try {
    // Your code here
} catch (Exception e) {
    // Simple exception logging
    Zipy.logException("Operation failed");

    // With exception details
    Zipy.logException("Failed to process payment", e);

    // With custom max length
    Zipy.logException("Custom error", e, 2000);
}

```

**Note:** For custom logging, if `maxLength` is not provided, it will default to capturing the full length.


# Session URL Retrieval

Retrieve and utilize the current session URL dynamically with Zipy's getCurrentSessionUrl function.

Retrieve the current session URL with Zipy's getCurrentSessionUrl function, enabling you to obtain and utilize the session's URL dynamically. Here is a sample code snippet:

```java
import com.zipy.zipyandroid.Zipy
String sessionUrl = Zipy.getCurrentSessionURL();
```

This function can be useful for tracking and analyzing user behavior within your application.


# Input Masking & Custom Masking

Blocking sensitive data on Zipy

Zipy's Input Masking feature ensures that all input field data on the screen is automatically masked during session recordings. This powerful feature prevents sensitive information from being visible in the recordings, safeguarding user privacy and maintaining compliance with data security standards.

Key benefits:

* Masks sensitive information to prevent unauthorized viewing
* Automatically protects input fields like passwords and personal data
* Maintains compliance with data security standards
* Ensures user privacy in session recordings

The SDK provides two types of masking:

1. **Automatic Input Masking**: Built-in protection for standard input fields
2. **Custom UI Masking**: Using `zipy_block` for additional UI elements

### Using ZipyBlock

When screenshots are captured, the masked elements will appear as black rectangles in the screenshot while remaining fully visible to the user during normal app usage.

Add the tag to do custom masking in xml files\
android:tag="zipy\_block"

```xml
<Button
    android:id="@+id/btnGetSessionUrl"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Get Session URL"
    android:tag="zipy_block"
    android:layout_marginBottom="8dp" />
```


# Flutter Setup


# Install Flutter

How do I install Zipy in my Flutter mobile application?

**Steps to install Zipy**

1. Installing Zipy Plugin

```dart
flutter pub add zipy_flutter
```

This will add a line like this to your package's pubspec.yaml and run `flutter pub get`

```yaml
dependencies:
  zipy_flutter: ^0.1.6
```

2. &#x20;Import the Zipy module and initialize it in your `main.dart` or another source file used as the entry point:

```dart
import 'package:zipy_flutter/zipy_flutter.dart'; // import

void main() {
WidgetsFlutterBinding.ensureInitialized(); // Initialize the binding.
Zipy.init(key: 'YOUR_API_KEY');
runApp(MyApp());
}


```

**Important:** **To view session replays, it is necessary to implement** [**Gesture Capturing.**](/zipy-for-mobile/flutter-setup/gesture-capturing)

Haven't set up an account or Zipy project yet? No worries! Just pop over to <https://app.zipy.ai> to get started.&#x20;

Once you're all set, come back here to continue.


# Session Replay

Analyzing user journeys with Session Replays

Session replays offer a comprehensive view of user journeys through session replays. You can filter these sessions based on various parameters such as time, user email, name, city, country, and operating system.

**Important:** To view session replays, it is necessary to implement [**Gesture Capturing**](/zipy-for-mobile/flutter-setup/gesture-capturing)**.**

Clicking on a session replays allows you to replay the entire session.

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FjMaW0t0d1kVBDPWA5C6j%2FMobile%20User%20Sessions%20Option%205%402x.png?alt=media&amp;token=6709f999-a3c4-4361-968c-4fcc6587a175" alt=""><figcaption></figcaption></figure>

The Zipy session replays Player provides the following features:

* **Complete Session Replay**

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FI2DS1mO8yOa93dpcjIqr%2Fimage%20(1).png?alt=media&amp;token=915ac4cb-7148-497b-a7af-3626686d8651" alt=""><figcaption></figcaption></figure>

* **Timeline with Inactivity and Errors:** Options to fast forward and adjust playback speeds.
* **Breadcrumbs:** All user events, including clicks, network data, console logs, and errors.
* **Dev Tools:** Console logs, network logs, stack traces, and any custom logs.
* **User Environment Details:** Information such as the operating system, and more.

**Note:** Add storage and internet permissions to your `AndroidManifest.xml` for Zipy’s session replay and initialization.


# Input Masking & Custom Masking

Blocking sensitive data on Zipy

Zipy’s **Input Masking** feature ensures that all input field data on the screen is automatically masked during session recordings. This powerful feature prevents sensitive information from being visible in the recordings, safeguarding user privacy and maintaining compliance with data security standards.

Masks sensitive information to prevent unauthorized viewing.

**Update the Flutter package version to 0.0.7 or above.**&#x20;

This feature is enabled by default, providing seamless protection for your mobile session replays.

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FJyc1fhHDogYZn5VPdshp%2Fspaces_cCYilc27NCELgnKQNPVF_uploads_brpPf0VkvSknfJtfKtgS_image%20(1).webp?alt=media&amp;token=3b6e9061-a7e3-44f4-97a2-2f3443a229a0" alt=""><figcaption></figcaption></figure>

### **Custom Input Masking**

Zipy also offers custom input masking options. You can implement these by wrapping buttons, widgets, or containers with `ZipyBlock`. See the example below for guidance.

```dart
import 'package:zipy_flutter/zipy_flutter.dart';

ZipyBlock(
 child: ElevatedButton(
  onPressed: dioPostFailCall,
  child: Text('Dio POST Fail'),
 ),
),
```

**Note**: Input masking is enabled by default. For custom masking options, please contact us at [support@zipy.ai](mailto:undefined).


# Screen Transition Capture

Capturing Screen Transitions for enhanced user journey analysis

Screen Transition Capture is a Zipy feature for capturing screen transitions within your flutter app.&#x20;

Here's how you can do it:

1. **Import the Observer in you material app:**

```dart
MaterialApp(
        navigatorObservers: [ZipyNavigationObserver()], //need to add this for capturing screen transitions
        home: const HomeScreen(),
        routes: {
          '/profile': (context) => const ProfileScreen(),
        },
      ),
```

### Dynamic Screen Tagging

With dynamic screen tagging, you can enhance your analytics by assigning each screen a contextual name that reflects its real-time content.

```dart
import 'package:zipy_flutter/zipy_flutter.dart';

Zipy.tagScreenName(screenName: 'YOUR_SCREEN_NAME');
```

> NOTE: If both the navigation observer and dynamic screen tagging are implemented, duplicate screen names may be captured — one by the observer and another by the `tagScreenName` method.\
> Use only one approach, or if you use both, apply dynamic screen tagging only to screens that are **not** part of the main app’s routes.


# Gesture Capturing

Capturing user Gestures for comprehensive interaction tracking

Gesture Capture is a feature provided by Zipy that allows you to capture gestures within your Flutter application. To enable this feature, wrap your application with the `ZipyWrapper` wrapper.

1. Wrap ZipyWrapper to your main app.

```dart
import 'package:zipy_flutter/zipy_flutter.dart';

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  Zipy.init(key: 'YOUR_API_KEY');
  runApp(const ZipyWrapper(child: MyApp()));
}
```

or

<pre class="language-dart"><code class="lang-dart">import 'package:zipy_flutter/zipy_flutter.dart';

<strong>  @override
</strong>  Widget build(BuildContext context) {
    return ZipyWrapper(
      child: MaterialApp(
        navigatorObservers: [ZipyNavigationObserver()],
        home: const HomeScreen(),
        routes: {
          '/profile': (context) => const ProfileScreen(),
        },
      ),
    );
  }
</code></pre>

Gesture Capture provides useful information, including:

* The x and y coordinates of user clicks.
* Detection of single taps, double taps, and long taps.
* The component tree on which the user has clicked.
* Identification of the clicked element type (e.g., view, text).
* The specific text clicked by the user (e.g., "Get Started").


# Unhandled Exception Capture

Recording unexpected errors for comprehensive issue logging and analysis

Unhandled Exception Capture is a feature that records unexpected errors that occur during app execution, ensuring that critical issues are logged for later analysis.

**Key Features:**

**Automatic Logging:**

* Captures exceptions not handled by the app.
* Logs detailed error messages and stack traces.

**Contextual Information:**

* Records app state and user actions at the time of the exception.
* Includes device and environment details for better diagnosis.


# Custom Logging

Recording key events and managed errors to boost app reliability and debugging efficiency

Logging Messages and Capturing Handled Exceptions enhances app reliability by recording key events and errors during app execution.

1. **Logging Messages:**

Logs various types of informational, debug, warning, or error messages to capture events, notifications, or actions within the application. It supports custom messages and timestamps for tracking events.

Here is the sample code snippet:

```dart
 Zipy.logMessage(
        message: 'Log Message Button Pressed',
        exceptionObj: {'zipy ': 'test'},
        maxLength: 100 // this is an optional field
        );
```

2. **Logging Exceptions:**

Logs exceptions and errors encountered by the application, providing detailed stack traces and context to aid in debugging and troubleshooting. This feature ensures critical data is logged promptly to diagnose and resolve issues.

Here is the sample code snippet:

```dart
Zipy.logException(
        message: 'Log Message Button Pressed',
        exceptionObj: {'zipy ': 'test'},
        maxLength: 100 // this is an optional field
        );
```

**Note:** For custom logging, if `maxLength` is not provided, it will default to capturing the full length.

This feature ensures you have the essential data to quickly diagnose and resolve issues, thereby improving your app's functionality and reliability.


# Http Network Calls

Monitor and log Http calls seamlessly with Zipy for enhanced debugging and performance optimization.

Use the `ZipyHttpClient` to call http network calls in your flutter application

```dart
import 'package:zipy_flutter/zipy_flutter.dart';

final client = ZipyHttpClient();
client.get(url); or client.post(url);

```

Example-&#x20;

```dart
final client = ZipyHttpClient();
const String url = 'url';

final Map<String, String> headers = {
  'Content-Type': 'application/json',
  'Authorization': 'Bearer your_api_key',
};

try {
  final response = await client.get(
    Uri.parse(url),
    headers: headers,
  );
} catch (e) {
  print(e);
}
```

or

```dart
final client = ZipyHttpClient(); 
const baseUrl = 'url';
var request = http.Request('GET', Uri.parse(baseUrl));
http.StreamedResponse response = await client.send(request);
```

Use the instance of `client` to call the api by importing it wherever needed or you can call it in your network call wrapper.


# Dio Network Calls

Monitor and log Dio calls seamlessly with Zipy for enhanced debugging and performance optimization.

Use the `ZipyDioClient` to call http network calls in your flutter application

```dart
import 'package:zipy_flutter/zipy_flutter.dart';

final dioClient = ZipyDioClient();
dioClient.get(url); or dioClient.post(url);
```

Example-&#x20;

1. Using dio interceptors.

```dart
final Dio dio = Dio();
dio.interceptors.add(NetworkLogger());
final Uri todosUri = Uri.parse('url');
final Map<String, String> headers = {
  'Content-Type': 'application/json',
  'Authorization': 'Bearer your_api_key',
};

final Map<String, dynamic> postData = {
  'title': '2',
  'body': '33',
  'userId': 4343,
};

try {
  final response = await dio.post(
    todosUri.toString(),
    data: postData,
    options: Options(headers: headers),
  );

} catch (e) {
  print('Error posting data: $e');
}
```

or

2. Using zipy dio client.

```dart
final dioClient = ZipyDioClient();
const String url = 'url';
final Map<String, String> headers = {
  'Content-Type': 'application/json',
  'Authorization': 'Bearer diogetCalls',
};

try {
  final Response response = await dioClient.get(
    url,
    options: Options(headers: headers),
  );

} catch (e) {
  print(e);
}
```

Use the instance of `client` to call the api by importing it wherever needed or you can call it in your network call wrapper.


# Profiling

Optimize application performance and gain deeper insights with Zipy's profiling tools.

Zipy's profiling feature allows you to monitor and analyze your application's performance, identifying bottlenecks and optimizing resource usage. This helps you ensure your application runs smoothly and efficiently.

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2F7ruTunhmuVLMZQFIfbNI%2Fimage.png?alt=media&amp;token=a18af09a-0390-45bd-900f-97811ff22a74" alt=""><figcaption></figcaption></figure>

**Key Features:**

**Comprehensive Monitoring:**

* Tracks application performance in real-time.
* Monitors CPU, memory usage, and other critical metrics.

**Detailed Analysis:**

* Provides in-depth reports on performance bottlenecks.
* Identifies inefficient code paths and resource-heavy operations.


# Device Information Capture

Capture device information with Zipy to optimize app performance across diverse hardware configurations.

Device information is automatically collected upon Zipy initialization, providing detailed insights into users' devices to optimize app performance across various hardware configurations.

**Key features include:**

* **Device Type and Model:** Identifies the specific device and model.
* **Operating System:** Captures OS type and version.
* **Screen Resolution:** Records screen size and pixel density.
* **Hardware Specifications:** Details RAM and storage.
* **Network Information:** Captures network type and speed.
* **Battery Status:** Logs battery level and charging status.


# Session URL Retrieval

Retrieve and utilize the current session URL dynamically with Zipy's getCurrentSessionUrl function.

Retrieve the current session URL with Zipy's getCurrentSessionUrl function, enabling you to obtain and utilize the session's URL dynamically. Here is a sample code snippet:

```dart
String a = await Zipy.getCurrentSessionURL();
print(a);
```

This function can be useful for tracking and analyzing user behavior within your application.


# Identify Users

How do I identify my users or customers using Zipy?

### Identify a User

To identify **users you will need to additionally call Zipy.identify(uuid, {userInfo}).** This will help you identify the users of your application by associating your own unique identifier with their activity. This method should typically be called when your users identify themselves by signing in to your application.

\
To identify users you need to-

1. [Install zipy ](/zipy-for-mobile/flutter-setup/install-flutter)for flutter  in your application.
2. Import zipy where you want to identify the user

   ```dart
   import 'package:zipy_flutter/zipy_flutter.dart';
   ```
3. Call the identify function like this

   ```dart
   Zipy.identify("cbrandon@brands.com", { //uuid should be unique for all the users
         email :  "cbrandon@brands.com",
         firstName : "Charles",
         lastName : "Brandon",
       });   
   ```

### Anonymize a User

To anonymize or disassociate a previously identified user of your application from the session, use the following code in a source file where the user signs out of your application:

**Note:** We recommend calling `Zipy.anonymize()` when the user logs out. This ends the current identified session and starts a fresh, anonymous session, ensuring that subsequent activity isn’t mistakenly linked to the previous user.

```dart
import 'package:zipy_flutter/zipy_flutter.dart';

Zipy.anonymize();
```

**The** `uuid` **sent to Zipy can be viewed in the Session Replays list in the user column, as shown in the image below:**

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FBr9Q7rMYzsHDyT5dYGO4%2FScreenshot%202024-09-13%20at%202.53.52%E2%80%AFPM.png?alt=media&amp;token=40f1ef96-654b-4a26-8cf7-650f540193aa" alt=""><figcaption></figcaption></figure>

Zipy.identify(uid, {userInfo})

Following are the method parameters:

| Name     | Description                                                                                                                                                                        |
| -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| uuid     | A string denoting your unique identifier for your user. Examples of unique identifiers could be UUID, email ID, full name or any other string that uniquely identifies your users. |
| userInfo | A JSON object which specifies additional details about your user. (Optional)                                                                                                       |

**Previously identified users of your application can be anonymized by calling the zipy.anonymize()** m**ethod. This will automatically split the session and associate the new session with a new anonymous user which Zipy will identify with its own identification. This method should typically be called when users sign out of your application.**

### **Custom identifiers**

We allow a maximum of 10 custom identifiers per project which can be created as per your use-case. To use custom identifiers, you can add them to the existing userInfo object in Zipy’s identify method:

```dart
Zipy.identify("cbrandon@brands.com", {
  'email':  "cbrandon@brands.com",
  'firstName': "Charles",
  'lastName' : "Brandon",
  'customerName': "LLC",
  'product': "Bottles",
    });
```

**In case you want to add your own custom identifiers in addition to the identifiers we have defined for you, please reach out to <support@zipy.ai>.**&#x20;

[<br>](https://docs.zipy.ai/configure/identifying-users)


# Firebase Integration

If you are using Firebase for capturing crashes and ANRs or freezes in your application, then Zipy adds much more information to those with a seamless integration. You can now link the Zipy session to your crashes and observe the actions performed by the user before the crash and identify any network or framework error that led to a crash or freeze for end-to-end debugging.&#x20;

Here are the simple steps to integrate Zipy with Firebase:

1. Retrieve the current session URL in your app with Zipy’s getCurrentSessionUrl function, enabling you to obtain and utilize the session’s URL dynamically. Here is a sample code snippet:

```javascript
const sessionUrl = zipy.getCurrentSessionUrl();
console.log('Current session URL:', sessionUrl);
```

2\. Add this url to Firebase as a key so the session url is passed with any crash or ANR

```javascript
FirebaseCrashlytics.instance.setCustomKey('ZipySessionURL',sessionUrl );
```

Now, with every crash or freeze, Zipy’s session url will be passed to Firebase and you can get more insights on the crashes from the replays.


# Session Recording Control

Start, pause, resume, or stop event recording as needed.

**Note: Use version `0.1.1` or above to use this functionality.**

### Overview

The session control functions allow you to manage when data is collected by the SDK. Whether you need to temporarily halt data capture or end a session entirely, the following functions provide the necessary control:

* **Pause:** Temporarily stop capturing events while keeping the session active.
* **Resume:** Continue event recording after a pause.
* **Stop:** End the current session and stop all event recording.
* **Start/Init:** Start a new session after stopping.

### Detailed Function Descriptions

1. **Pause:**&#x20;
   * Use this function when you need to momentarily stop data capture without ending the session.&#x20;

```dart
Zipy.pause();
```

2. Resume:&#x20;
   * Use this function to continue capturing events after a pause.
   * Note that it will  start a new session if the current one has already timed out ( i.e. paused for 30mins or whatever is configured).

```dart
Zipy.resume();
```

3. Stop:
   * When this function is called, the session ends and no further events are captured. To capture events again, you must initialise a new session.

```dart
Zipy.stop();
```

4. Start/Init:
   * Use this function with your API key to either start a new session.

```dart
Zipy.init(key: 'YOUR_API_KEY');
```


# Data Sanitization

Sanitizing sensitive information in payloads, responses, and headers

## Overview

The Zipy Flutter SDK includes powerful data sanitization features to protect sensitive information in your network requests and responses. You can configure what to sanitize, how deep to scrub nested objects, and which keys or headers to target.

## Default Behavior

1. Sanitizes both payloads and responses
2. Sanitizes up to 3 levels deep in nested objects
3. Scrubs the following sensitive keys

```
password, secret, passwd, api_key, apikey, access_token, auth, credentials, mysql_pwd,
stripetoken, cardnumber
```

4. Sanitizes the following headers

```
authorization, auth, auth-token
```

The scrubbing level determines how deep the sanitization process goes into nested objects.

<pre class="language-json"><code class="lang-json"><strong>{
</strong>  "user": {                    // Level 1
    "details": {               // Level 2
      "password": "secret123"  // Will be scrubbed
    },
    "preferences": {           // Level 2
      "settings": {            // Level 3
        "api_key": "xyz123"    // Won't be scrubbed
      }
    }
  }
}
</code></pre>

To modify scrubbing level or add your own keys contact us <support@zipy.ai>&#x20;

## How sanitization works

1. When a key matches one in the scrubbing list (case-insensitive), its value is replaced with "xxxx"
2. For headers in the sanitization list, their values are replaced with "xxxx"
3. Both request payloads and responses are sanitized if enabled

### Example

Original Request:

```json
{
  "user": {
    "name": "John",
    "password": "secret123",
    "payment": {
      "cardnumber": "4111-1111-1111-1111",
      "details": {
        "api_key": "xyz123"
      }
    }
  }
}
```

Sanitized Request:

```json
{
  "user": {
    "name": "John",
    "password": "xxxx",
    "payment": {
      "cardnumber": "xxxx",
      "details": {
        "api_key": "xxxx"
      }
    }
  }
}
```


# iOS Setup


# Install in an iOS app

How do I install Zipy in my iOS mobile application?

## Swift Package Manager

**Option 1: Xcode GUI (Recommended)**

1. Open your project in Xcode
2. Select File > Add Package Dependencies...
3. In the search field, enter: `https://github.com/zipyinc/zipy-ios-sdk.git`
4. Select the version you want to use
5. Click "Add Package"
6. Select your target and click "Add Package" again

**Option 2: Package.swift**

Add the following dependency to your `Package.swift`:

```swift
dependencies: [
    .package(url: "https://github.com/zipyinc/zipy-ios-sdk.git", from: "1.0.0")
]
```

> **Note:** Swift Protobuf will be automatically installed as a dependency when you add the ZipyiOS package.

## Zipy Initialization&#x20;

For optimal performance and complete session capture, initialize the SDK as early as possible in your app's lifecycle, typically in `AppDelegate` or `SceneDelegate`. While you can integrate the SDK at any point in your application, early initialization ensures the best results and most comprehensive data collection.

#### In AppDelegate:

```swift
import ZipyiOS

class AppDelegate: UIResponder, UIApplicationDelegate {
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Initialize Zipy SDK
        Zipy.initialize("YOUR_API_KEY")
        return true
    }
}
```

#### In SceneDelegate:

```swift
import ZipyiOS

class SceneDelegate: UIResponder, UIWindowSceneDelegate {
    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        // Initialize Zipy SDK
        Zipy.initialize("YOUR_API_KEY")
    }
}
```

<br>

<br>


# Identify Users

How do I identify my users or customers using Zipy?

## Identify a User

To identify **users you will need to additionally call Zipy.identify(uuid, {userInfo}).** This will help you identify the users of your application by associating your own unique identifier with their activity. This method should typically be called when your users identify themselves by signing in to your application.

To identify users you need to-

1. [Install zipy](/zipy-for-mobile/ios-setup/install-in-an-ios-app) for iOS in you application
2. Import ZipyiOS where you want to identify the user

```swift
import ZipyiOS
```

3. Call the identify function like this

```swift
// Basic user identification without custom keys
Zipy.identify(
        externalUUId: "user123",
        userInfo: [
            "email": "user@example.com",
            "firstName": "John",
            "lastName": "Doe",
            "customerName": "ACME Corp"
        ]
    )
```

## Anonymize a User

To anonymize or disassociate a previously identified user of your application from the session, use the following code in a source file where the user signs out of your application:

```swift
Zipy.anonymize()
```

> **Note:** We recommend calling `Zipy.anonymize()` when the user logs out. This ends the current identified session and starts a fresh, anonymous session, ensuring that subsequent activity isn't mistakenly linked to the previous user.

**The** `uuid` **sent to Zipy can be viewed in the Session Replays list in the user column, as shown in the image below:**

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FOBcKflSfC2XKN5UiakLj%2Fimage.png?alt=media&amp;token=0c8211c3-d5d3-4960-87b0-05c6e3df3549" alt=""><figcaption></figcaption></figure>

**Previously identified users of your application can be anonymized by calling the zipy.anonymize()** m**ethod. This will automatically split the session and associate the new session with a new anonymous user which Zipy will identify with its own identification. This method should typically be called when users sign out of your application.**

## Custom Identifiers

We allow a maximum of 10 custom identifiers per project which can be created as per your use-case. To use custom identifiers, you can add them to the existing userInfo object in Zipy’s identify method:

```swift
Zipy.identify(
        externalUUId: "user123",
        userInfo: [
            "email": "user@example.com",
            "firstName": "John",
            "lastName": "Doe",
            "customerName": "ACME Corp",
            "role": "admin",
            "plan": "premium",
            "country": "US"
        ]
    )
```

**In case you want to add your own custom identifiers in addition to the identifiers we have defined for you, please reach out to <support@zipy.ai>.**


# Screen Tracking & Tagging

Screen Tracking and Tagging for enhanced user journey analysis

## Overview

Zipy’s SDK seamlessly instruments your app to capture every screen transition and view controller name without any extra setup. As users navigate through your interface, Zipy automatically logs screen appearance, and also it takes screenshots on every transition. This hands‑off approach ensures you get comprehensive visibility into user flows from the moment you integrate Zipy, so you can focus on building features instead of writing tracking code.

## Automatic Screen Tracking

The SDK automatically tracks screen transitions with some important behaviors to note:

* View controllers are tracked automatically with their class names
* View controllers starting with `UI`, `_UI`, `PU` or `WK` are ignored to prevent system-level tracking
* No additional code is required for basic screen tracking

## Manual Screen Tagging

While an automatic screen will cover almost all the cases, you can implement manual screen tagging when you need to. This can be used in various use cases like tagging popups, tabs, etc. And also, you can update screen names for dynamic content.

* Override the default screen name
* Track custom views, popups, or tab changes
* Add tracking to views that aren't traditional view controllers

**Here is an example on how you can use manual screen tagging**

```swift
import ZipyiOS

class ProfileViewController: UIViewController {
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        Zipy.tagScreenName("UserProfile")
    }
    
    func showCustomPopup() {
        // Tag custom popup view
        Zipy.tagScreenName("ProfileSettings-Popup")
        // Show popup logic
    }
    
    func onTabChanged(index: Int) {
        // Tag different tabs
        let tabName = ["Overview", "Details", "Settings"][index]
        Zipy.tagScreenName("Profile-\(tabName)Tab")
    }
}
```

## Handling Dynamic Content using Screen Tagging

With dynamic screen tagging, you can enrich your analytics by giving each screen a contextual name that reflects its real‑time content—whether it’s a product category, user segment, or custom UI state. Instead of seeing every product detail view under a generic label, you’ll automatically tag them as “ProductDetails‑Electronics,” “ProductDetails‑Apparel,” or whatever category the user is viewing. This makes it easy to filter session replays.

```swift
func showProductDetails(product: Product) {
       Zipy.tagScreenName("ProductDetails-\(product.category)")
}
```

With both automatic and manual tagging, Zipy gives you full control over how screens are identified and tracked, ensuring your analytics align perfectly with your app’s unique structure.


# Custom Logging

Recording key events and managed errors to boost app reliability and debugging efficiency

Logging Messages and Capturing Handled Exceptions enhances app reliability by recording key events and errors during app execution.

### Log Messaage

Logs various types of informational, debug, warning, or error messages to capture events, notifications, or actions within the application.

```swift
import ZipyiOS

// Simple message logging
Zipy.logMessage("User completed onboarding")

// With additional context
Zipy.logMessage(
    "Payment processed",
    exceptionObj: ["amount": 99.99, "currency": "USD"]
)

// With custom message length
Zipy.logMessage(
    "Detailed process log...",
    exceptionObj: ["processId": "12345"],
    maxLength: 2000
)
```

### Log Errors

Logs all the error, providing all the details you pass for debugging. Captures and records error events within your application

```swift
// Simple error logging
Zipy.logError("Failed to process payment")

// With error object
let error = NSError(
    domain: "PaymentError",
    code: 401,
    userInfo: [NSLocalizedDescriptionKey: "Invalid card"]
)
Zipy.logError("Payment failed", exceptionObj: error)
```

### Log Exceptions

Logs exceptions encountered by the application, providing detailed stack traces and context to aid in debugging and troubleshooting. This feature ensures critical data is logged promptly to diagnose and resolve issues.

```swift
// Simple exception logging
Zipy.logException("Unexpected data format")

// With exception details
do {
    // Your code that might throw
} catch {
    Zipy.logException(
        "Data processing failed",
        exceptionObj: error
    )
}
```

**Note:** For custom logging, if `maxLength` is not provided, it will default to capturing the full length.


# Session URL Retrieval

Retrieve and utilize the current session URL dynamically with Zipy's getCurrentSessionUrl function.

Retrieve the current session URL with Zipy's getCurrentSessionUrl function, enabling you to obtain and utilize the session's URL dynamically. Here is a sample code snippet:

```dart
let sessionURL = Zipy.getCurrentSessionURL()
print("Current session can be viewed at: \(sessionURL)")
```

This function can be useful for tracking and analyzing user behavior within your application.


# Session Recording Control

Start, pause, resume, or stop event recording as needed.

## Overview

The session control functions allow you to manage when data is collected by the SDK. Whether you need to temporarily halt data capture or end a session entirely, the following functions provide the necessary control:

* **Pause:** Temporarily stop capturing events while keeping the session active.
* **Resume:** Continue event recording after a pause.
* **Stop:** End the current session and stop all event recording.
* **Start/Init:** Start a new session after stopping.

## Pause Recording

Use this function when you need to momentarily stop data capture without ending the session.

```swift
// Pause recording (e.g., before handling sensitive information)
Zipy.pause()

// Your sensitive code here
handleSensitiveData()

// Resume recording
Zipy.resume()
```

## Resume Recording

Use this function to continue capturing events after a pause.&#x20;

> **Note:**  It will start a new session if the current one has already timed out ( i.e. paused for 30mins or whatever is configured).

```swift
Zipy.resume()
```

## Stop Recording

When this function is called, the session ends and no further events are captured. To capture events again, you must initialise a new session.

```swift
Zipy.stop()
```

## Start/Init Again

Use this function with your API key to either start a new session.

```swift
Zipy.init("YOUR_API_KEY")
```


# Input Masking & Custom Masking

Blocking sensitive data on Zipy

Zipy's Input Masking feature ensures that all input field data on the screen is automatically masked during session recordings. This powerful feature prevents sensitive information from being visible in the recordings, safeguarding user privacy and maintaining compliance with data security standards.

Key benefits:

* Masks sensitive information to prevent unauthorized viewing
* Automatically protects input fields like passwords and personal data
* Maintains compliance with data security standards
* Ensures user privacy in session recordings

The SDK provides two types of masking:

1. **Automatic Input Masking**: Built-in protection for standard input fields
2. **Custom UI Masking**: Using `ZipyBlock` for additional UI elements

### Using ZipyBlock

You can add a `ZipyBlock` to any `UIView` or its subclasses. When screenshots are captured, the masked elements will appear as black rectangles in the screenshot while remaining fully visible to the user during normal app usage.

**Basic Usage**

```swift
import ZipyiOS

// Create a ZipyBlock on any UIView
let sensitiveView = UIView()
_ = ZipyBlock(on: sensitiveView)
```

**Masking UI Elements in Code**

```swift
// Masking a button
private let maskedButton: UIButton = {
    let button = UIButton(type: .system)
    button.translatesAutoresizingMaskIntoConstraints = false
    button.setTitle("Masked Button", for: .normal)
    _ = ZipyBlock(on: button) // This will mask the button in screenshots
    return button
}()

// Masking a text field
private let sensitiveTextField: UITextField = {
    let textField = UITextField()
    textField.placeholder = "Sensitive Information"
    textField.translatesAutoresizingMaskIntoConstraints = false
    _ = ZipyBlock(on: textField) // This will mask the text field in screenshots
    return textField
}()
```

**Masking Elements in Interface Builder**

```swift
class CustomView: UIView {
    @IBOutlet weak var sensitiveLabel: UILabel! {
        didSet {
            _ = ZipyBlock(on: sensitiveLabel)
        }
    }
}
```

**Dynamic Masking**

```swift
class PaymentViewController: UIViewController {
    private let cardNumberField: UITextField = {
        let field = UITextField()
        field.placeholder = "Card Number"
        return field
    }()
    
    private var maskBlock: ZipyBlock?
    
    func toggleMasking(isEnabled: Bool) {
        if isEnabled {
            // Add masking
            maskBlock = ZipyBlock(on: cardNumberField)
        } else {
            // Remove masking
            maskBlock?.removeFromSuperview()
            maskBlock = nil
        }
    }
}
```

<br>


# React Native Setup


# Install React Native

How do I install Zipy in my React Native mobile application?

**Steps to install Zipy**

1. Installing Zipy Module

```javascript
npm install zipyai-react-native
```

&#x20; 2\.    After installing the Zipy package, you also need to install the following package

```javascript
npm install react-native-fs
```

3. &#x20;Import the Zipy module and initialize it in your `index.js` or another source file used as the entry point:

```javascript
import zipy from 'zipyai-react-native';

zipy.init('YOUR_API_KEY');
```

**Important: To view session replays, it is necessary to implement** [**Gesture Capturing.**](/zipy-for-mobile/react-native-setup/gesture-capturing)

Haven't set up an account or Zipy project yet? No worries! Just pop over to <https://app.zipy.ai> to get started.&#x20;

Once you're all set, come back here to continue.


# Input Masking

Blocking sensitive data on Zipy

Zipy’s **Input Masking** feature ensures that all input field data on the screen is automatically masked during session recordings. This powerful feature prevents sensitive information from being visible in the recordings, safeguarding user privacy and maintaining compliance with data security standards.

Masks sensitive information to prevent unauthorized viewing.

This feature is enabled by default, providing seamless protection for your mobile session replays.

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FJyc1fhHDogYZn5VPdshp%2Fspaces_cCYilc27NCELgnKQNPVF_uploads_brpPf0VkvSknfJtfKtgS_image%20(1).webp?alt=media&amp;token=3b6e9061-a7e3-44f4-97a2-2f3443a229a0" alt=""><figcaption></figcaption></figure>

**Note**: Input masking is enabled by default. For custom masking options, please contact us at <support@zipy.ai>.


# Session Replay

Analyzing user journeys with Session Replays

Session replay offer a comprehensive view of user journeys through session replays. You can filter these sessions based on various parameters such as time, user email, name, city, country, and operating system.

**Important:** To view session replay, it is necessary to implement [**Gesture Capturing.**](/zipy-for-mobile/react-native-setup/gesture-capturing)

Clicking on a session replay allows you to replay the entire session.

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FjMaW0t0d1kVBDPWA5C6j%2FMobile%20User%20Sessions%20Option%205%402x.png?alt=media&amp;token=6709f999-a3c4-4361-968c-4fcc6587a175" alt=""><figcaption></figcaption></figure>

The Zipy Session Replay Player provides the following features:

* **Complete Session Replay**

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FI2DS1mO8yOa93dpcjIqr%2Fimage%20(1).png?alt=media&amp;token=915ac4cb-7148-497b-a7af-3626686d8651" alt=""><figcaption></figcaption></figure>

* **Timeline with Inactivity and Errors:** Options to fast forward and adjust playback speeds.
* **Breadcrumbs:** All user events, including clicks, network data, console logs, and errors.
* **Dev Tools:** Console logs, network logs, stack traces, and any custom logs.
* **User Environment Details:** Information such as the operating system, and more.

**Note:** Add storage and internet permissions to your `AndroidManifest.xml` for Zipy’s session replay and initialization.


# Screen Transition Capture

Capturing Screen Transitions for enhanced user journey analysis

Screen Transition Capture is a Zipy feature for capturing screen transitions within your React Native app. To enable this feature, you need to import ScreenNavigation from 'zipy-react-native' and add onStateChange to your NavigationContainer.&#x20;

Here's how you can do it:

1. **Import the module:**

```javascript
import { ScreenNavigation } from 'zipyai-react-native';
```

2. &#x20;**Add `onStateChange` to your navigation container:**

<pre class="language-javascript"><code class="lang-javascript"><strong>return (
</strong>  &#x3C;NavigationContainer onStateChange={ScreenNavigation}>
  )
</code></pre>

OR

<pre class="language-javascript"><code class="lang-javascript"><strong>return (
</strong>  &#x3C;NavigationContainer onStateChange={(state)=> {ScreenNavigation(state)}}>
  )
</code></pre>


# Gesture Capturing

Capturing user Gestures for comprehensive interaction tracking

Gesture Capture is a feature provided by Zipy that allows you to capture gestures within your React Native application. To enable this feature, wrap your application with the `withGestureCapture` wrapper.

Here's how you can do this in your index file:

1. Import withGestureCapture in your index file.

```javascript
import { withGestureCapture } from "zipyai-react-native";
```

2. Wrap withGestureCapture to your main app.

```javascript
AppRegistry.registerComponent(appName, () => withGestureCapture(App));
```

Gesture Capture provides useful information, including:

* The x and y coordinates of user clicks.
* Detection of single taps, double taps, and long taps.
* The component tree on which the user has clicked.
* Identification of the clicked element type (e.g., view, text).
* The specific text clicked by the user (e.g., "Get Started").


# Unhandled Exception Capture

Recording unexpected errors for comprehensive issue logging and analysis

Unhandled Exception Capture is a feature that records unexpected errors that occur during app execution, ensuring that critical issues are logged for later analysis.

**Key Features:**

**Automatic Logging:**

* Captures exceptions not handled by the app.
* Logs detailed error messages and stack traces.

**Contextual Information:**

* Records app state and user actions at the time of the exception.
* Includes device and environment details for better diagnosis.


# Custom Logging

Recording key events and managed errors to boost app reliability and debugging efficiency

Logging Messages and Capturing Handled Exceptions enhances app reliability by recording key events and errors during app execution.

1. **Logging Messages:**

Logs various types of informational, debug, warning, or error messages to capture events, notifications, or actions within the application. It supports custom messages and timestamps for tracking events.

Here is the sample code snippet:

```javascript
zipy.logMessage({
    message: 'Your custom message',
    maxLength: 10,
    exceptionObj: { 'custom key': 'Your custom message' }
});
```

2. **Logging Exceptions:**

Logs exceptions and errors encountered by the application, providing detailed stack traces and context to aid in debugging and troubleshooting. This feature ensures critical data is logged promptly to diagnose and resolve issues.

Here is the sample code snippet:

```javascript
zipy.logException({
    message: 'Your custom message',
    maxLength: 10,
    exceptionObj: { 'custom key': 'Your custom message' }
});
```

**Note:** For custom logging, if `maxLength` is not provided, it will default to capturing the full length.

This feature ensures you have the essential data to quickly diagnose and resolve issues, thereby improving your app's functionality and reliability.


# Fetch and XHR Network Calls

Monitor and log Fetch and XHR network calls seamlessly with Zipy for enhanced debugging and performance optimization.

Zipy offers comprehensive monitoring for Fetch and XHR network calls. Automatically log all network requests, capturing details such as URLs, request methods, headers, bodies (if applicable), and response information. This feature aids in debugging network issues, optimizing performance, and gaining insights into how your application interacts with external APIs and services.

**Key Features:**

**Automatic Logging:**

* Captures all network requests automatically.
* Logs comprehensive details including URLs, methods, headers, and responses.

**Enhanced Debugging:**

* Facilitates thorough analysis and debugging of network interactions.

By enabling Network call monitoring, developers can effectively monitor and analyze network activity within their applications, ensuring robust performance and reliability.


# Profiling

Optimize application performance and gain deeper insights with Zipy's profiling tools.

Zipy's profiling feature allows you to monitor and analyze your application's performance, identifying bottlenecks and optimizing resource usage. This helps you ensure your application runs smoothly and efficiently.

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2F7ruTunhmuVLMZQFIfbNI%2Fimage.png?alt=media&amp;token=a18af09a-0390-45bd-900f-97811ff22a74" alt=""><figcaption></figcaption></figure>

**Key Features:**

**Comprehensive Monitoring:**

* Tracks application performance in real-time.
* Monitors CPU, memory usage, and other critical metrics.

**Detailed Analysis:**

* Provides in-depth reports on performance bottlenecks.
* Identifies inefficient code paths and resource-heavy operations.


# Device Information Capture

Capture device information with Zipy to optimize app performance across diverse hardware configurations.

Device information is automatically collected upon Zipy initialization, providing detailed insights into users' devices to optimize app performance across various hardware configurations.

**Key features include:**

* **Device Type and Model:** Identifies the specific device and model.
* **Operating System:** Captures OS type and version.
* **Screen Resolution:** Records screen size and pixel density.
* **Hardware Specifications:** Details RAM and storage.
* **Network Information:** Captures network type and speed.
* **Battery Status:** Logs battery level and charging status.


# Session URL Retrieval

Retrieve and utilize the current session URL dynamically with Zipy's getCurrentSessionUrl function.

Retrieve the current session URL with Zipy's getCurrentSessionUrl function, enabling you to obtain and utilize the session's URL dynamically. Here is a sample code snippet:

```javascript
const url = zipy.getCurrentSessionUrl();
console.log('Current session URL:', url);
```

This function can be useful for tracking and analyzing user behavior within your application.


# Identify Users

How do I identify my users or customers using Zipy?

To identify **users you will need to additionally call zipy.identify(uuid, {userInfo}).** This will help you identify the users of your application by associating your own unique identifier with their activity. This method should typically be called when your users identify themselves by signing in to your application.

\
To identify users you need to-

1. [Install zipy ](/zipy-for-mobile/react-native-setup/install-react-native)for react-native  in your application.
2. Import zipy where you want to identify the user

   ```javascript
   import zipy from 'zipyai-react-native';
   ```
3. Call the identify function like this

   ```javascript
   zipy.identify("cbrandon@brands.com",{ //uuid should be unique for all the users
         email:  "cbrandon@brands.com",
         firstName: "Charles",
         lastName : "Brandon",
        })
   ```

To anonymize or disassociate a previously identified user of your application from the session, use the following code in a source file where the user signs out of your application:

```javascript
import zipy from 'zipyai-react-native';

zipy.anonymize();
```

**The** `uuid` **sent to Zipy can be viewed in the Session Replays list in the user column, as shown in the image below:**

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FBr9Q7rMYzsHDyT5dYGO4%2FScreenshot%202024-09-13%20at%202.53.52%E2%80%AFPM.png?alt=media&amp;token=40f1ef96-654b-4a26-8cf7-650f540193aa" alt=""><figcaption></figcaption></figure>

zipy.identify(uid, {userInfo})

Following are the method parameters:

| Name     | Description                                                                                                                                                                        |
| -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| uuid     | A string denoting your unique identifier for your user. Examples of unique identifiers could be UUID, email ID, full name or any other string that uniquely identifies your users. |
| userInfo | A JSON object which specifies additional details about your user. (Optional)                                                                                                       |

**Previously identified users of your application can be anonymized by calling the zipy.anonymize()** **method. This will automatically split the session and associate the new session with a new anonymous user which Zipy will identify with its own identification. This method should typically be called when users sign out of your application.**

### **Custom identifiers**

We allow a maximum of 10 custom identifiers per project which can be created as per your use-case. To use custom identifiers, you can add them to the existing userInfo object in Zipy’s identify method:

zipy.identify(uid, \[userInfo])

**In case you want to add your own custom identifiers in addition to the identifiers we have defined for you, please reach out to <support@zipy.ai>.**&#x20;


# Firebase Integration

If you are using Firebase for capturing crashes and ANRs or freezes in your application, then Zipy adds much more information to those with a seamless integration. You can now link the Zipy session to your crashes and observe the actions performed by the user before the crash and identify any network or framework error that led to a crash or freeze for end-to-end debugging.&#x20;

Here are the simple steps to integrate Zipy with Firebase:

1. Retrieve the current session URL in your app with Zipy’s getCurrentSessionUrl function, enabling you to obtain and utilize the session’s URL dynamically. Here is a sample code snippet:

```javascript
const sessionUrl = zipy.getCurrentSessionUrl();
console.log('Current session URL:', sessionUrl);
```

2\. Add this url to Firebase as a key so the session url is passed with any crash or ANR

```javascript
crashlytics().setAttribute('ZipySessionURL', sessionUrl);
```

Now, with every crash or freeze, Zipy’s session url will be passed to Firebase and you can get more insights on the crashes from the replays.


# Zipy Plug and Play Support

A chrome browser extension to record and replay sessions and errors

Zipy plug and play chrome extension allows you to record the sessions seamlessly across any websites. Recorded sessions can be replayed instantly. Along with the recorded sessions, you can see the details of the networks calls, console logs, stack traces and user environment details. Integrated with[ **OpenAI**](https://openai.com/) platform, Zipy plug and play introduces AI Resolve feature, that suggests fixes for all the frontend and java script errors in your web application

Zipy plug and play is very useful for web development teams, where your customers can report their issues by recording and sharing their sessions with the support teams. Even QA, dog fooding, field testing, and other non-technical teams can easily record problematic sessions and share them with their engineering teams. No time gets wasted on issue reproduction or issue understanding. Engineering teams can use the Zipy AI Resolve feature to identify the right fixes quickly which in turn expedates the bug fix turn around time.

## Getting Started

Install the Zipy plug and play from the [chrome web store](https://chrome.google.com/webstore/detail/zipy-plug-and-play/pbddhebkagleamondfbgochoekdamama/). Once installed, you can add the extension to your toolbar for quick access. You can read this [guide](https://support.google.com/chrome_webstore/answer/2664769?hl=en) to learn more about installing the extension.&#x20;

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FGai2GAyBofzAIePut74F%2Fzipy_pluginon_browser_toolbar.png?alt=media&amp;token=1b604fa9-ac95-423d-bf28-f74d1fdaf1d8" alt=""><figcaption><p>Zipy plug and play pinned to browser tool bar</p></figcaption></figure>

## Recording sessions

When you click the extension for the first time, the extension asks you to identify yourself with a google account. Once you identify with your google account, you are ready to record your sessions on any website. Open any website on your browser and record the session by clicking the extension. Upon clicking the extension, the chrome extension shows record the current tab button. Click this button to record the session of the current tab. When the session gets recorded, you will see a snack bar indicating the page being recorded

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2F2iIM3sSNa8CEPzn8i4ti%2Fzipy_plugin_recording.png?alt=media&amp;token=d369ecab-e66e-4280-9c37-e57dd9319646" alt=""><figcaption><p>Zipy plug and play screen recording snack bar</p></figcaption></figure>

Recording can be stopped by clicking the red button on the snack bar and the recorded session opens automatically in another tab for you to view the recorded session.

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FiU5vDJNDAKtjgtRy0vMa%2Fzp_plugin_localRecorded_Sessions.png?alt=media&amp;token=455b94a3-a864-4914-8bcb-f01f8afd3c37" alt=""><figcaption><p>Zipy plug and play recorded session</p></figcaption></figure>

In the recorded session, the left tab captures the breadcrumbs and user environment details. Devtools captures the console/network logs and stack traces. You can upload the sessions to zipy by clicking upload to zipy button.  Clicking this button will ask you to sign up (new users) or sign in(existing users). Note that the recorded sessions will be accessible to you until the site and the tab in which you recorded are active. If you close the tab or if you visit some other website in that tab, the sessions are not accessible.&#x20;

## Uploading the sessions to Zipy

Uploading your sessions to Zipy will enable you to share these sessions to others. Uploading the sessions to Zipy allows you to store all the sessions recorded using the plugin, reporting the error sessions on Jira, uploading the source maps to get more precise suggestions for errors reported, inviting others to view these sessions, just to name a few.&#x20;

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FpeWpLuDEZidCaVExIrW2%2Fzipy_plugin_uploaded_session.png?alt=media&amp;token=a073bf5f-3f3c-4678-b6fa-b556a2eac244" alt=""><figcaption><p>Plug and Play sessions uploaded to Zipy</p></figcaption></figure>

## Zipy AI Resolve

Zipy plug and play supports AI Resolve feature powered by [**OpenAI**](https://openai.com/)**,** that suggests fixes for all the frontend and java script errors in your web application. Note that to get a more precise suggestion of the fix, you need to provide the source map to Zipy. Accessing the source code would help Zipy AI Resolve feature to provide more accurate fixes. You can read this [source map](https://docs.zipy.ai/configure/source-maps) related documentation to understand on how to upload the source maps

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FW49ZQBcFzSam9koNs8Ma%2Fimage.png?alt=media&amp;token=28665160-045f-4d8f-b7f4-c3f4d8c45582" alt=""><figcaption></figcaption></figure>

## Trouble shooting & Constraints

Zipy plug and play extension throws up the below message whenever the extension is reloaded or the page in which you are triggering a record is downloaded before the extension is installed. Reloading the page again will ensure that you can record the session

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2F5t4Ruk5pfcBJMjgXDQMz%2Fzipy_reload_extension.png?alt=media&amp;token=56d348f6-7337-4e00-8d3d-988f797e0785" alt=""><figcaption><p>Page refresh message</p></figcaption></figure>

Zipy plug and play extension shall stop the session recording if you navigate from one domain into a different domain on the same tab. Refresh page and restart the recording

Zipy plug and play extension shall record the sessions for a maximum of 5 mins.&#x20;

Zipy plug and play shall not record the videos present inside any website&#x20;


# Adding Custom Identifiers

How do I add custom identifiers when using zipy.identify()?

To identify users, we provide you with the **zipy.identify()** function in our SDK. [You can read more about this here](https://docs.zipy.ai/configure/identifying-users). Zipy now supports two kinds of identifiers - predefined and custom identifiers.

**Predefined identifiers**

You can use one or more of the following predefined identifiers when you call zipy.identify():

* **firstName** - String&#x20;
* **lastName** - String&#x20;
* **email** - String&#x20;
* **customerName** - String&#x20;
* **avatar** - String&#x20;
* **phone** - String&#x20;
* **age** - String&#x20;

**Custom identifiers**

We allow a maximum of 10 custom identifiers per project which can be created as per your use-case. To use custom identifiers, you can add them to the existing userInfo JSON in Zipy’s identify method:&#x20;

zipy.identify(uid, \[userInfo])

<br>

**Example Usage:**

To uniquely identify your users with Zipy using your own custom identifiers e.g. “city”, “state” & “country”, update your existing zipy.identify method as given below:

```javascript
window.zipy.identify("jdoe@yourcompany.com", {
   firstName: "John",
   lastName: "Doe",
   email: "jdoe@yourcompany.com",
   customerName: "Your Company",
   age: "34",
   city:  "Los Angeles",
   state: "California",
   country: "United States of America"
});
```

In case your custom identifier key has a special character (space, - , \_ etc), please quote the key within double quotes inside the JSON e.g.:

```javascript
"emp_city": "Los Angeles"
```

This **userInfo** including the custom identifiers will be captured by Zipy and can be viewed in the User Environment details in each user session, as shown in the image below:

![](https://s3-ap-south-1.amazonaws.com/ind-cdn.freshdesk.com/data/helpdesk/attachments/production/82025114905/original/sVMen8OGWGit6f2LMz40t5z6uw_jwhIe6g.png?1643966838)

The custom identifiers can also be used to filter your sessions & errors.

**In case you want to add your own custom identifiers in addition to the identifiers we have defined for you, please raise a support ticket with the list of custom identifier names for your project so that we can add them for you. Alternatively, you can use the chat widget in the Zipy application for the required support.**<br>


# Anonymize Users

How do I anonymize my previously identified users?

**Previously identified users of your application can be anonymized by calling zipy.anonymize()** m**ethod. This will automatically split the session and associate the new session with a new anonymous user which Zipy will identify with its own identification. This method should typically be called when users sign out of your application.**

**Example Usage:**

**1.  Usage after installing Zipy via the script tag method:**

In case you chose to install Zipy in your app with the script tag method, to anonymize a previously identified user of your application, use the following code in a source file where users sign out of your application:

<pre class="language-generic"><code class="lang-generic"><strong>window.zipy.anonymize()
</strong></code></pre>

**2.  Usage after installing Zipy via the npm method:**

In case you chose to install Zipy in your app with the npm method, to anonymize a previously identified user of your application, use the following code in a source file where users sign out of your application:

```generic
import zipy from "zipyai";
zipy.anonymize();    
```


# Blocking PII data

How can I block my sensitive data on Zipy?

Zipy allows you to block your sensitive data using the **zipy-block** class.

**\<div class="zipy-block">Sample div\</div>**<br>

**Example Usage:**&#x20;

```html
<div class="zipy-block">
    <label>Card details</label>
    <input type="text" placeholder="Name">
    <input type="text" placeholder="Card number">
</div>
```


# Changelog


# Zipy Web SDK (Script)

This page covers script SDK releases from version 1.0.48 onwards.

### SDK 1.0.58 (10-12-2025)

* Fixed an issue that could cause proxy-based network requests to fail.
* Improved reliability of network request handling.

***

### SDK 1.0.57 (09-12-2025)

* Performance improvements through background data encoding and compression.

***

### SDK 1.0.56 (07-10-2025)

* More consistent and reliable session replays.
* Improved detection of user frustration signals.

***

### SDK 1.0.55 (04-08-2025)

* Improved error handling to reduce noise from invalid or empty error events.

***

### SDK 1.0.54 (17-07-2025)

* Stability improvements to reduce unnecessary processing.
* Improved performance and memory usage under high load.

***

### SDK 1.0.53 (07-07-2025)

* Security improvements and dependency updates.
* Improved validation to prevent unnecessary data transmission in invalid configurations.

***

### SDK 1.0.51 (22-05-2025)

* Enhanced session initialization to reliably capture session ID and user details.
* Improved availability of session URLs during active sessions.

***

### SDK 1.0.50 (16-01-2025)

* Improved response capturing for network requests using specific response type configurations.

***

### SDK 1.0.49 (07-01-2025)

* Fixed an issue where network event timestamps were recorded at request completion instead of request start.
* Network events, breadcrumbs, and DevTools timelines now reflect accurate request start times.

***

### SDK 1.0.48 (02-01-2025)

* Improved handling of network requests to ensure more reliable network instrumentation.


# Zipy Web SDK (NPM)

This page covers NPM SDK releases from version 1.0.36 onwards.

### (NPM) 1.7.44 (22-12-2025)

* Fixed an issue that could cause proxy-based network requests to fail.
* Improved reliability of network request handling.
* Performance improvements through background data encoding and compression.

***

### (NPM) 1.7.43 (08-10-2025)

* Improved detection of user frustration signals.
* More consistent and reliable session replays.
* Improved handling of network retries under unstable network conditions.

***

### (NPM) 1.7.42 (04-08-2025)

* Improved error handling to reduce noise from invalid or empty error events.

***

### (NPM) 1.7.41 (17-07-2025)

* Stability improvements to reduce unnecessary processing.
* Improved performance and memory usage under high load.

***

### (NPM) 1.7.40 (07-07-2025)

* Security improvements and dependency updates.
* Improved validation to prevent unnecessary data transmission in invalid configurations.

***

### (NPM) 1.7.39 (23-05-2025)

* Enhanced session initialization to reliably capture session ID and user details.
* Improved availability of session URLs during active sessions.
* Improved response capturing for network requests using specific response type configurations.

***

### (NPM) 1.7.37 (08-01-2025)

* Fixed an issue where network event timestamps were recorded at request completion instead of request start.
* Network events, breadcrumbs, and DevTools timelines now reflect accurate request start times.

***

### (NPM) 1.7.36 (06-01-2025)

* Improved handling of network requests to ensure more reliable network instrumentation.


# Identifying Users

How do I identify my users or customers using Zipy?

To identify **users you will need to additionally call zipy.identify(uuid, {userInfo}).** This will help you identify the users of your application by associating your own unique identifier with their activity. This method should typically be called when your users identify themselves by signing in to your application.

**Example Usage:**

{% tabs %}
{% tab title="Installed Zipy using Script Tag" %}
**In case you choose to install Zipy in your app** with the script tag method, you would first need to include a two line JavaScript SDK provided by Zipy in the \<head>\</head> section of your web app.

```generic
<script src="https://storage.googleapis.com/zipy-files/index.standalone.umd.js" crossorigin="anonymous"></script>
<script> window.zipy && window.zipy.init('YOUR_PROJECT_SDK_KEY');</script>
  
```

After installing Zipy with the script tag, you can associate the recorded sessions with a unique identifier and information of your users. You can do so by adding the following code in your login module or any other source file where your users get successfully authenticated into your application. Given below is an example usage in the code:

```javascript
window.zipy.identify("cbrandon@brands.com", {
   firstName: "Charles",
   lastName: "Brandon",
   email: "cbrandon@brands.com",
   customerName: "Brands LLC",
   age: "34"
});
```

To anonymize a previously identified user of your application, use the following code in a source file where users sign out of your application:

<pre class="language-generic"><code class="lang-generic"><strong>window.zipy.anonymize()
</strong></code></pre>

{% endtab %}

{% tab title="Installed Zipy using NPM" %}
**In case you choose to install Zipy in your app with the npm method, you would need to install zipy module in the app project as a first step:**

```generic
npm i zipyai
```

Then import zipy module and initialize in your \_app.js or any other source file:

```generic
import zipy from "zipyai";
zipy.init("YOUR_PROJECT_SDK_KEY");  
```

After integrating Zipy using npm, you can associate the recorded sessions in Zipy with a unique identifier and information of your users. You can do so by adding the following code in your login module or any other source file where your users get successfully authenticated into your application. Given below is an example usage in the code:

```javascript
import zipy from "zipyai";
zipy.identify("cbrandon@brands.com", {
    firstName: "Charles",
    lastName: "Brandon",
    email: "cbrandon@brands.com"",
    customerName: "Brands LLC",
    age: "34"
});
```

To anonymize or disassociate a previously identified user of your application from the session, use the following code in a source file where the user signs out of your application:

```generic
import zipy from “zipyai”;
zipy.anonymize();
```

{% endtab %}
{% endtabs %}

**The** `uuid` **sent to Zipy can be viewed in the Session Replays list in the user column, as shown in the image below:**

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FHmfXn3iToHtyrg0v2gKd%2Fimage.png?alt=media&amp;token=3bd314a7-480e-46d6-a94e-88e2b6415b13" alt=""><figcaption></figcaption></figure>

The **userInfo** sent to Zipy can be viewed in the User Environment details in each session repla&#x79;**, as shown in the image below:**

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FJFOrwZ4rJ9A4PiWy04jM%2Fimage.png?alt=media&amp;token=f79e37ff-6a68-4a50-b62a-f163b0745b22" alt=""><figcaption></figcaption></figure>

zipy.identify(uid, {userInfo})<br>

Following are the Method Parameters:

| Name     | Description                                                                                                                                                                        |
| -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| uuid     | A string denoting your unique identifier for your user. Examples of unique identifiers could be UUID, email ID, full name or any other string that uniquely identifies your users. |
| userInfo | A JSON object which specifies additional details about your user. (Optional)                                                                                                       |

In addition to the unique identifier sent via **uid**, the userInfo parameter is a JSON object supporting the key/value pairs mentioned below. You can choose to include one or more of the following information in your userInfo parameter:

* **firstName** - String&#x20;
* **lastName** - String&#x20;
* **email** - String&#x20;
* **customerName** - String&#x20;
* **avatar** - String&#x20;
* **phone** - String&#x20;
* **age** - String&#x20;

Zipy now supports two kinds of identifiers - predefined and custom identifiers. [You can read more about custom identifiers here.](https://docs.zipy.ai/configure/adding-custom-identifiers)

**Previously identified users of your application can be anonymized by calling the zipy.anonymize()** m**ethod. This will automatically split the session and associate the new session with a new anonymous user which Zipy will identify with its own identification. This method should typically be called when users sign out of your application.**


# Ignoring Errors/Noise

Which are the errors ignored by Zipy by default, in order to reduce noise in my project?

We understand how important it is for you to get to the critical errors in your application on priority without having to surf through the unimportant or irrelevant ones.

Hence, by default, we do not capture errors and events from 3rd party APIs to reduce noise. Below is the list of patterns set up for your projects, from which errors are ignored. If you require errors or events to flow in from any of the below tools/APIs, please raise a [support ticket here](https://zipy.freshdesk.com/support/tickets/new) or use the chat widget in the Zipy application.

| mixpanel.com                                                                 |
| ---------------------------------------------------------------------------- |
| hotjar                                                                       |
| [smartlook.com](http://smartlook.com/)                                       |
| [newrelic.com](http://newrelic.com/)                                         |
| bugsnag                                                                      |
| fullstory                                                                    |
| [sentry.io](http://sentry.io/)                                               |
| [google-analytics.com](http://google-analytics.com/)                         |
| [bam.nr-data.net](http://bam.nr-data.net/)                                   |
| [wistia.com](http://wistia.com/)                                             |
| [amplitude.com](http://amplitude.com/)                                       |
| [segment.io](http://segment.io/)                                             |
| [pendo.io](http://pendo.io/)                                                 |
| raygun                                                                       |
| smartlook.cloud                                                              |
| [segment.com](http://segment.com/)                                           |
| [visualstudio.com](https://visualstudio.com/)                                |
| [agora.io](http://agora.io/)                                                 |
| [agoraio.cn](http://agoraio.cn/)                                             |
| [kinesis.ap-south-1.amazonaws.com](http://kinesis.ap-south-1.amazonaws.com/) |
| /tstagmanager/triggers/scripts                                               |
| [stats.g.doubleclick.net](http://stats.g.doubleclick.net/)                   |
| adsbygoogle                                                                  |
| [pagead2.googlesyndication.com](http://pagead2.googlesyndication.com/)       |

**In addition to these, if you want Zipy to ignore errors from any additional URL/Text patterns, you can add those patterns in** [**Error Settings**](https://app.zipy.ai/abc/00/error-settings) **of your project.**


# npm Update

Why is my Zipy SDK npm not getting updated and how do I resolve it?

If your Zipy SDK npm is not getting updated to the latest version every time you build your web app, it could most likely be due to the following reasons:

1. Missing “^” icon for the zipyai npm dependency in your package.json file.

Please make sure that there is an “^” icon for the dependency. This will ensure that the latest version of npm is downloaded.

For example, the below snippet from package.json will ensure that the 1.X.Y version getting used is the latest version.

```html
"dependencies": {
       ..other dependencies
       "zipyai": "^1.0.0"
}
```

2. Uncommitted package-lock or yarn-lock file in your workspace.

For every new version of npm, also make sure that the package-lock or yarn-lock file is updated with the latest version and committed into your version control. This is required because the package-lock json file eventually determines which version of npm is downloaded on the npm/yarn install.&#x20;

To understand more about package-lock.json, please take a look at the following short video:

{% embed url="<https://www.loom.com/share/186d09d6e63e4806929e4894cca9002c>" %}


# Release Version

How can I capture the release version of my application for the captured session replay?

You can capture the release version of your application using the **zipy.init()** method with options.

Initialise Zipy with your Project SDK key and begin recording the session replay. The release version will be captured as part of this.<br>

**zipy.init(**&#x59;OUR\_PROJECT\_SDK\_KE&#x59;**,** option&#x73;**)**<br>

Following are the Method Parameters:

| **Name** | **Description**                                                                                 |
| -------- | ----------------------------------------------------------------------------------------------- |
| sdk\_key | Your project SDK key                                                                            |
| options  | A JSON object which specifies optional parameters to initialize your recording with. (Optional) |

The option to be used with this method is described below:

* **releaseVer** - String&#x20;

This specifies a release version for your project making it easier for you to identify which release version of your project was used when your session was recorded or your error was captured.&#x20;

Example Usage:&#x20;

```generic
zipy.init("YOUR_PROJECT_SDK_KEY", {
   releaseVer: "0.1.0"
});
```


# Session Stitching (rootDomain)

Using this parameter, you can specify whether or not sessions between the subdomains of your site should be split up into individual sessions for each subdomain. Set this to the highest level hostname that sessions should be shared over ((e.g. example.com or shared.example.com). If you want a distinct session for each subdomain, leave it unspecified.

```javascript
window.zipy.init('YOUR_PROJECT_SDK_KEY', {
   rootDomain: 'example.com'
});
```


# Session URL Retrieval

Retrieve and utilize the current session URL dynamically with Zipy's getCurrentSessionUrl function.

The `getCurrentSessionURL` function lets you capture a shareable link to the current Zipy session. By default, it returns the standard session URL. You can also include a timestamp, which links directly to the exact moment in the session when the function was called.

**Note:** If you don’t pass any option, `withCurrentTimestamp` defaults to `false` (regular session URL).

***

#### Using NPM

```javascript
// Regular session URL
const url = zipy.getCurrentSessionURL();
console.log('Session URL:', url);

// Session URL with timestamp
const urlWithTime = zipy.getCurrentSessionURL({ withCurrentTimestamp: true });
console.log('Session URL with timestamp:', urlWithTime);
```

***

#### Using Script Tag

<pre class="language-html"><code class="lang-html">&#x3C;script>
<strong>  // Regular session URL
</strong>  const url = window.zipy.getCurrentSessionURL();
  console.log('Session URL:', url);

  // Session URL with timestamp
  const urlWithTime = window.zipy.getCurrentSessionURL({ withCurrentTimestamp: true });
  console.log('Session URL with timestamp:', urlWithTime);
&#x3C;/script>
</code></pre>

✨ **Tip:** Use the timestamp option when you want to share the *exact activity point* in a session with your team.


# Source Maps

How can I upload JavaScript Source Maps via Zipy CLI?

Zipy CLI helps in debugging the minified stack trace that occurs on the user's browser environment. The minified stack trace can be parsed, so that you can see the actual source code with the help of source maps. This lets you view the actual source context of the frontend JavaScript errors, including the code from any other libraries that you may have used in your frontend code.\
\
**How to enable this feature?**\
You will have to upload the source maps to Zipy Server with the help of the [CLI](https://www.npmjs.com/package/zipy-cli). The package can be globally installed and integrated in the build steps for smoother integration. Following are the steps to upload the source map files:<br>

// Globally Install the CLI Package -

```html
npm i -g zipy-cli
```

// CLI Command -

```
zipy-cli --authKey authKey --dirname ~/sourcemaps/ --apiKey YOUR_PROJECT_SDK_KEY --releaseVer releaseVerString
```

// CLI help Command -

```
zipy-cli --help
```

\
**Below are the params accepted by the CLI:**

* authKey: It is an authentication key for your Zipy projects.&#x20;
* dirname: A string value of the directory where source maps are available
* apiKey: Zipy Project Key
* releaseVer: Release Version of your application<br>

Please contact Zipy via chat or send us an email at <support@zipy.ai> to get an authorization key for access. Note that you can upload only up to 100 and a maximum of 100 MB files at once.

#### Controlling log output

The CLI supports a `-v` or `--verbose` flag that enables detailed file upload output.\
Without this flag, only minimal logs are shown in the terminal.\
With this flag, the CLI prints detailed filenames and progress information during sourcemap uploads.

Example

```
zipy-cli --authKey authKey --dirname ~/sourcemaps/ --apiKey YOUR_PROJECT_SDK_KEY --releaseVer releaseVerString --verbose
```

\
**Why can't I see the proper stack trace?**

If you are unable to see the proper stack trace in your Zipy dev tools section, please verify the following:

1. Check if you initialized the SDK with a proper release version. Make sure the release version for which the sourcemaps have been uploaded matches with SDK init release version.
2. Confirm if you uploaded all the source map files. Stack traces can be broken if some source map files are missing.


# Support Integration

How to include Zipy Session Replay links in the support tickets my customers create?

You can now capture and include a Zipy session URL in any ticket raised by your end users from inside your application where Zipy is integrated. It is as simple as calling a Javascript function **getCurrentSessionURL.** \
\
This function can be called from any page of the application where Zipy is active and will return the ongoing Zipy session URL of that user. On the form submission, when your users create tickets from inside your application, the same Zipy link can be sent to your support desk/chat client. This will enable your support team to access the Zipy sessions of the users, in the corresponding issues reported by them.

### Synchronous Method

```javascript
const sessionUrl = window.zipy.getCurrentSessionURL();
/* You can send this URL in an email/chat that is sent on form submission. */
```

**Example Usage:**

```javascript
const handleLogin = (data) => {
    let sessionURL = window.zipy.getCurrentSessionURL();
    console.log("sessionURL", sessionURL);
    setLoading(true);    
};
```

### Asynchronous Method

For scenarios where you need to fetch the session URL asynchronously, such as when performing other operations before accessing the session URL, you can use the asynchronous version of the function, getCurrentSessionURLAsync.

```javascript
window.zipy.getCurrentSessionURLAsync().then((sessionUrl) => {
    console.log("Session URL: ", sessionUrl);
    // Use this URL in form submission or send it to your support desk.
});
```

**Example Usage:**

```javascript
const handleLogin = (data) => {
    window.zipy.getCurrentSessionURLAsync().then((sessionURL) => {
        console.log("sessionURL", sessionURL);
        setLoading(true);    
        // Now, send this session URL along with login details or include it in the support ticket
    });
};
```


# Zipy Recording Control

Zipy allows you to record user sessions by capturing screen activity and interactions. For privacy or security reasons, you may need to stop the recording on specific routes, such as during checkout or while viewing sensitive data.&#x20;

### Stop Recording&#x20;

The `zipy.record.stop()` function can be used to stop recording based on user actions or route changes. However, note that this stop functionality does not persist across page refreshes. On refresh a new session is created.

**Example: Stop Recording on /checkout Route**

To prevent recording on sensitive routes like /checkout, stop the recording as soon as the user navigates to that route:

```
if (currentRoute === "/checkout") {
     zipy.record.stop();
}
```

Once called, the recording stops for the current session. However, if the page is refreshed, a new session will be created.&#x20;

### Start Recording&#x20;

To resume recording, reinitialize the Zipy SDK, which creates a new session for the same user:

```
zipy.init("<YOUR_APIKEY>"); // Starts a new session and resumes recording
```

#### **Important Note:**&#x20;

**Page refresh:** On a page refresh, the stop functionality does not persist, and a new session will automatically begin.


# AI Summary

Instantly understand what happened in any session — without watching the entire replay.

AI Summary is a Zipy feature that uses AI to automatically generate a concise, human-readable summary of any recorded user session. Instead of scrubbing through a full session replay to understand what a user did, you get a clear narrative of the session in seconds.

Every session is analyzed across user actions, errors, network requests, and console events. The AI then produces a structured summary that tells you exactly what the user experienced — from the moment they landed on your app to when they left.

**Example Summary**

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FR9ypURS1LpyTV56JgVfU%2FAISummaryExample1.png?alt=media&amp;token=95790708-f6f1-4e84-b10f-7f7ce29447c4" alt=""><figcaption></figcaption></figure>

| <p>⚡  Save Time</p><p>Skip replays that don't need deep investigation. Get the gist in seconds.</p> | <p>🔍  Faster Debugging</p><p>Understand the sequence of events leading to an error without manual analysis.</p> | <p>🤝  Better Collaboration</p><p>Share session context with PMs, support, and designers without requiring them to watch a full replay.</p> |
| --------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |

#### Accessing AI Summary:

1. Go to your Zipy Dashboard and navigate to Sessions.
2. Open any recorded session by clicking on it.
3. In the Session Replay view, locate the AI Summary button in the bottom control bar (bottom right, next to Skip Inactivity).
4. Click the AI Summary button. A dropdown appears with two options: Short Summary and Detailed Summary.
5. Select your preferred summary type. The Session Summary modal opens with the AI-generated breakdown.
6. Use the Copy Summary button at the bottom of the modal to copy the full summary text to clipboard

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2F2ZWY5RQuZvsbkDzrmdyj%2FAI%20Summary%203.jpg?alt=media&amp;token=d91be491-c772-406e-bab9-2047c8e5b991" alt=""><figcaption></figcaption></figure>

•  Short Summary — a concise overview of the key actions, issues, and outcome of the session.

•  **Detailed Summary** — a comprehensive breakdown including User Actions, Issues, Outcome, Insights, Highlights, Goal Achievement, and Recommendations.

#### Accessing AI Summary from the Session Replay Tab

You can also access AI Summary directly from the Session Replay list view — without opening a full session replay first. Each session row has a lightning bolt icon next to the play button. Clicking this icon opens the Session Summary panel on the right side of the screen, giving you an instant AI-generated overview of that session without needing to watch the full replay.

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FlSJjP46cYOEowrpPnRdK%2FAI%20Summary%204.jpg?alt=media&amp;token=7d4ee291-25b1-46fd-9fea-6c5d7b078c85" alt=""><figcaption></figcaption></figure>

### What AI Summary Covers

Each AI Summary is generated from the full data Zipy captures during a session, including:

**User Actions** - The User Actions section lists every meaningful action the user took during the session — navigation events, button clicks, and UI interactions — in chronological order.

**Issues** - The Issues section highlights any errors or failed network requests that occurred during the session. This includes XHR failures, API errors, and HTTP error status codes.

**Outcome** - The Outcome section summarizes what the user ultimately did by the end of the session — whether they completed a goal, navigated away, or took a specific final action.

**Insights** - The Insights section provides AI-generated interpretations of what the observed behavior might indicate about your application or the user's intent.

**Highlights** - The Highlights section calls out notable positive or significant events in the session — key actions the user successfully completed.

**Goal Achievement** - The Goal Achievement section assesses whether the user successfully completed their apparent primary goal during the session, based on their navigation and interaction patterns.

**Recommendations** - The Recommendations section provides AI-generated, actionable suggestions for your team based on the errors, behaviors, and patterns observed in the session.<br>

| <p>ℹ️  Note</p><p>AI Summary does not include screenshots or replay visuals. It is a text-based narrative.</p><p>For visual context, click through to the full Session Replay directly from the summary view.</p> |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |


# Alerts

Stay one step ahead of bugs, spikes, and user-flow issues.

Zipy watches every session in real time. **Alerts that turn raw stream into actionable pings** so the right person can jump in on the issue. Choose your channel—Slack, Email, Web-hooks and get notified the moment something goes wrong.

### Which alert is right for you?

| Alert Type                                                  | Why you’d use it                                                          | What it can fire on                                                          |
| ----------------------------------------------------------- | ------------------------------------------------------------------------- | ---------------------------------------------------------------------------- |
| [**Slack Alerts**](/product-features/alerts/slack-alerts)   | Instant visibility for engineering & on-call                              | <p>• Daily or Weekly Digest<br>• Every new error<br>• Error-rate surge</p>   |
| [**Email Alerts**](/product-features/alerts/email-alerts)   | Keep cross-functional teams (PM, CS, execs) in the loop                   | <p>• Daily or Weekly Digest<br>• Every new error<br>• Anomaly detection</p>  |
| [**Live Alerts**](/product-features/alerts/live-alerts)     | Real-time, user-specific nudges while people are on your site             | Any custom event you emit—e.g. live visit, pricing-page view, signup failure |
| [**Custom Alerts**](/product-features/alerts/custom-alerts) | Laser-focused rules with filters, frequencies, and multi-channel delivery | Any metric or error plus filters on browser, OS, URL, release, etc.          |


# Slack Alerts

Setting Slack Alerts in Zipy

Integrate with Slack easily to enable proactive alerting on slack channel.&#x20;

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FWH5d0n8FeTGluk5Y3z4v%2Fimage.png?alt=media&amp;token=40b46871-70fb-4d69-b919-2d34b4606af5" alt=""><figcaption></figcaption></figure>

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2F3mv52WTj8p3LgVbRJl1U%2Fimage.png?alt=media&amp;token=2fe5d5fe-105b-4a05-87c8-35c6e8ecc793" alt=""><figcaption></figcaption></figure>

The following slack alerts can be currently configured in Zipy

1. Daily Digest  Alert&#x20;
2. Weekly Digest  Alert&#x20;
3. New Error Alert&#x20;
4. Surge Alert&#x20;

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2F9Rp25Y7cBCskqZyU6d11%2Fimage.png?alt=media&amp;token=b72e5269-df2e-4d18-a55f-5cf711197425" alt=""><figcaption></figcaption></figure>


# Email Alerts

Setting Email Alerts in Zipy

Get proactive alerting on your email. These can be easily enabled or disabled in the Alert Settings.&#x20;

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FtqATIZntqmNUoPPAutxa%2Fimage.png?alt=media&amp;token=fd4eea06-2dfe-4cad-8caa-7fc3aee061ed" alt=""><figcaption></figcaption></figure>

The following email alerts can be currently configured in Zipy

1. Daily Digest  Alert&#x20;
2. Weekly Digest  Alert&#x20;
3. New Error Alert&#x20;
4. Anomaly Detection&#x20;


# Live Alerts

### Overview

\
Zipy provides you the ability to send custom alerts to your desired Slack channel to track and take quick actions on the activities being performed by the users on your application. You can now send real time alerts for example: alert on a live user visit on your platform, or user landing on your pricing page, or a sign-up failure for a user. This gives you the control to be alerted whenever you want to be and act and communicate with your users faster and while they are there on the platform.

### **Function Signature**

function sendAlertOnSlack(title, message)

#### **Parameters**

* title (String): The title of the alert.
* message (String): The detailed alert message.

**Here’s a basic example to get started:**

```javascript
const title = "Payment Failure Alert";
const message = "Payment failed for John Doe User"; 
zipy.sendAlertOnSlack(title, message);
```

**Special Case Handling**

If you want to add quoted text eg a name in the message as shown below, you need to use single quotes.

```javascript
const title = "Payment Failure Alert";
const message = "Payment failed for 'John Doe' User";
zipy.sendAlertOnSlack(title, message);
```

**Note**: Backslashing double quotes in the message is not supported. eg. Below will not work as a message.

```javascript
const title = "Payment Failure Alert";
const message = "Payment failed for \"John Doe\" User";
zipy.sendAlertOnSlack(title, message);

```

Below is an example of how the Slack alert will appear when using the sendAlertOnSlack function. The title "Payment Failure Alert", is followed by the message "Payment failed for 'John Doe' User". This is a sample alert to demonstrate how notifications are formatted and displayed in Slack.

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXfolrZsTTagPGEdK52jdLrOl_4szifAy4Bjmfwa8ef6bijPSjvNZNTx9qIUFy5M8QZ4ovN0hSNmNMERdTo_eJLc8YYgGnbvdMHjsL5gXorN6rOdETgpznU0CTGHNu_8oi9loUnlhW6fSduytRwPGNp4pi5H?key=fE_JW6XeGG87SOh_REmRDw" alt=""><figcaption></figcaption></figure>

### Slack Integration Steps:&#x20;

\
To get the alert on Slack, [integrate slack with Zipy](/product-features/alerts/slack-alerts).\
Select a slack workspace and channel where you want to send an alert.\
Uncheck all the alerts to get the live Alerts from the above function.


# Custom Alerts

Custom Alerts in Zipy help you stay on top of application errors by automatically notifying your team when predefined error conditions occur. These alerts are fully customizable using error-specific conditions and filters, allowing you to take immediate action and reduce issue resolution time.

### **Key Features**

* **Real-Time Notifications**: Get alerted as soon as the condition is met.
* **Custom Filters**: Fine-tune alerts using environment, platform, and error message filters.
* **Multiple Channels**: Send alerts via Slack, Email, or Webhooks.
* **Configurable Severity**: Set priority levels (Info, Warning, Critical) to match your workflow.

### **How It Works**

1. **Navigate to Custom Alerts**&#x20;

   <figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FIIl0zdNKdyrZD3tWSWjN%2Fimage.png?alt=media&amp;token=f8f1a03c-a9fe-4d77-9d15-2a5811b9bf71" alt=""><figcaption></figcaption></figure>

2. **Define Alert Conditions**\
   Choose the condition from the list and set your value and interval based on your requirement

   <figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FMD9B6uUXIAyadxKlQ92M%2Fimage.png?alt=media&amp;token=320eb3d8-c5dc-4a46-b086-7036972a6f43" alt=""><figcaption></figcaption></figure>

3. **Define the filters**

   Customize your alert using Zipy filters (Browser, Error Category, Error Context, Error Type, Navigation URL, OS, and Release Version). It also supports multiple filter combinations.&#x20;

   <br>

   <figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2F0chvbA2JvQc8AeQl63Wo%2Fimage.png?alt=media&amp;token=ac6256b7-701d-4de4-8b24-63272093ce01" alt=""><figcaption></figcaption></figure>

4. **Configure Notification Settings**

   Select channels (Email, Slack, Webhook, and Roles - Invited users in Zipy Project)

   <figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FGkNmdWz5ZD36SVFFSzDL%2Fimage.png?alt=media&amp;token=3874d269-4dc4-4833-b613-14a5dae64b4b" alt=""><figcaption></figcaption></figure>

5. **Set Frequency (Optional)**

   You can define the frequency of alerts triggered to reduce the noise of alerts being sent.&#x20;

   <figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FoL2wITkt4XHntwXNiQ1r%2Fimage.png?alt=media&amp;token=e98ef4b2-2b46-41fe-b765-e74bfa527d11" alt=""><figcaption></figcaption></figure>

6. **Save and Activate**\
   Once activated, Zipy will continuously monitor incoming sessions and trigger alerts as per the defined conditions.&#x20;

   <figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FeTrftInLD1heBiUZSuLi%2Fimage.png?alt=media&amp;token=8694501f-d0eb-454b-b823-bcf03d7fb2f9" alt=""><figcaption></figcaption></figure>

**Note:**&#x20;

* Alerts are triggered only for the upcoming data from the point of activation.
* You will be able to update any conditions set live anytime, and the new changes will be reflected for the upcoming sessions.&#x20;
* To activate alerts for your account, contact us at <support@zipy.ai> or through the in-app chat support.


# API Performance

Use API Performance to monitor, analyze and get insights about your website's API performance

Zipy's API Performance helps you to monitor, analyze and quickly fix your API's performance issues.&#x20;

Zipy provides you with not just analytics, but in-depth insights at multiple levels.&#x20;

### Overall API Performance and Health

You can see Insights and Analytics for your web application's overall API health by checking the graphs, diagnostics and API lists at the entire application level.&#x20;

Insights give you a quick overview of your web application's APIs most important metrics like API latency, API failures and the impact of the API failures on your users.&#x20;

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FXcnjrtGBTUtsO09pMa5P%2FScreenshot%202023-06-07%20at%2010.39.58%20AM.png?alt=media&amp;token=59a2f685-4bad-43de-82f3-d0b893da3927" alt=""><figcaption></figcaption></figure>

You can also see detailed API Performance Diagnostics based on how your APIs are performing with recommendations on how to fix them.

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FKEnpGyCWaXjkyHaVnkD0%2FScreenshot%202023-06-07%20at%2010.42.39%20AM.png?alt=media&amp;token=d40571cb-285e-4314-be8c-dcd6c68b2aa3" alt=""><figcaption></figcaption></figure>

Analytics provide you charts & graphs for various API performance metrics like API Latency, Network Timing Split, API Failures by Latency, API Failures by Geography etc.&#x20;

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FfdO24AWDZCBCjkdv9uEj%2FScreenshot%202023-06-07%20at%2011.01.37%20AM.png?alt=media&amp;token=35438bd3-3754-4280-a185-b03da54b6bc4" alt=""><figcaption></figcaption></figure>

### Individual API Performance and Health

API Performance also allows you to dig to a particular API and get Insights and Analytics relevant to that API.

You can check detailed graphs, diagnostics and session recordings for every individual API. You can choose a time filter to check data over the time interval that you wish to focus on.

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FukuzznTo4yrNXHGqY6Ou%2FScreenshot%202023-06-07%20at%2011.06.54%20AM.png?alt=media&amp;token=9db41f33-5b3f-48c2-9bf7-3d4c9a18211d" alt=""><figcaption></figcaption></figure>

You can dig deeper into each session that may have slow performing or failing API(s) to check the user journey or to collect more information about each API call in the session.&#x20;

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2Fd7Qq5CIBGND4tbqT6vgl%2FScreenshot%202023-06-07%20at%2011.08.13%20AM.png?alt=media&amp;token=f861af3c-efa7-4885-bc2d-872643cb4057" alt=""><figcaption></figcaption></figure>

Use the Network tab in Dev Tools to check more details like API response, API response size, Network timings split and even request & response payload (if enabled).

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FtXmjC9UNXvgBDbShtD1n%2FScreenshot%202023-06-07%20at%2011.10.56%20AM.png?alt=media&amp;token=269a00fe-e9f2-448c-8553-6f818f9ed945" alt=""><figcaption></figcaption></figure>

### Resource timing and CORS

Zipy uses the [Resource Timing API](https://developer.mozilla.org/en-US/docs/Web/API/Performance_API/Resource_timing) to retrieve information about the timing of various resources loaded by a web application. However, it is restricted by the cross-origin security policies enforced by browsers. By default, only resources loaded from the same origin as the web application are accessible for timing information.

To overcome this limitation, you can enable extended data collection for cross-origin resources subject to Cross-Origin Resource Sharing (CORS). This can be achieved by including the "Timing-Allow-Origin" HTTP response header in your cross-origin resources. For instance, you can grant access to resource timing for any origin by setting the header value to "Timing-Allow-Origin: \*". Additional details about CORS can be found in the [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/API/Performance_API/Resource_timing#cross-origin_timing_information).


# Auto Resolve Errors

Auto Resolve Errors in Zipy

Zipy can now auto-resolve the frontend errors and suggest how to fix errors in your code. Here's how you can try Zipy AI Resolve on your code. This is powered by ChatGPT.&#x20;

Step 1 : Go to a Frontend Error Session&#x20;

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FGePC414knT7ZmZsKjkHn%2Fimage.png?alt=media&amp;token=5148f7e6-d213-4edb-8b59-bf0dbcd4e53f" alt=""><figcaption></figcaption></figure>

Step 2 : Click on DevTools&#x20;

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2Fkctu86cGtzQzIpLn3ejj%2Fimage.png?alt=media&amp;token=fad48d0d-1e32-40f8-a938-caae0db08734" alt=""><figcaption></figcaption></figure>

Step 3 : Select Stack Trace - if your files are minified then upload the source map. For this refer to documentation here - <https://docs.zipy.ai/configure/source-maps>

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2Fd7oAYWXucorcQNsz1c6r%2Fimage.png?alt=media&amp;token=9aa21fbe-1476-4593-b57d-ba5ecf771094" alt=""><figcaption></figcaption></figure>

Step 4 : Click on Zipy AI Resolve and viola you get the code fix suggestion.&#x20;

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FwUpGgZaozGHBC4eLjJ8F%2Fimage.png?alt=media&amp;token=89f80258-6ab6-4556-9bd5-5f4e3456509c" alt=""><figcaption></figcaption></figure>

Please note that Zipy AI Resolve is a paid feature and you can only try it 3 times in the free/trial plan.&#x20;

Your code snippet of the stack trace will be shared with OpenAI and would only be done if you accept to share the code snippet.&#x20;

If you do not want to share the code snippet with OpenAI, you are recommended to not use this feature.&#x20;


# Clicked Element Filters

Clicked Element Filters allow you to analyze user behavior by filtering session data based on specific elements on your website or application.&#x20;

By applying this filter, you can:

* **Understand user intent:** Gain insights into why users click or do not click certain elements and understand their navigation patterns.
* **Troubleshoot issues:** Identify broken or unresponsive elements that users frequently attempt to interact with.
* **Perform A/B testing:** Compare the number of users that clicked on a button vs another to understand what works better with your users and make design decisions accordingly

You can use the text of a clicked element or its ID or CSS selector to filter the data.

### **Clicked Element Text Filter**

#### **How to Use the Clicked Element Filter**

1. Select **"Clicked Element Text"** from the filters

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FWo3wMuTzG14ZorOHce7X%2Fimage.png?alt=media&amp;token=0f4a0a6a-8165-460f-b20d-47c5926aeb61" alt=""><figcaption></figcaption></figure>

2. **Select the operator as per your requirement**

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FbENJPovQKCS7Ff4OzjB0%2Fimage.png?alt=media&amp;token=0c7854a1-e8ea-4448-81f2-f25b8f9335ff" alt=""><figcaption></figcaption></figure>

3. Specify **the** **element**/ select the element from **Dropdown**

> Input the unique identifier of the element (e.g., button text, link text...).

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FwjhM84JWXXXWyMvmEvhB%2Fimage.png?alt=media&amp;token=34965c45-9d0b-4b97-9cf2-bcb7118308c5" alt=""><figcaption></figcaption></figure>

4. Additionally, you can add a URL filter (Optional)

> If not specified all pages where the particular element was clicked, are considered.&#x20;

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FD0Ww4fojks5pQWaCixy5%2Fimage.png?alt=media&amp;token=aa8e41cb-d436-4756-8995-22b66b95aa21" alt=""><figcaption></figcaption></figure>

#### **Use Cases for Clicked Element Filter**

* Monitor clicks on specific call-to-action buttons.
* Analyze interactions with navigation menus.
* Track clicks on promotional banners or key features.

***

### **CSS Selector Filter**

**CSS Selector Filter** provides an alternate way to filter click interactions based on CSS selectors or click element IDs. This is particularly useful when targeting elements dynamically or when identifiers are not unique.

#### **How to Use the CSS Selector**

1. Select **"Clicked Element Text"** from the filters

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FYYqqPpWtB91KvFIOw89p%2Fimage.png?alt=media&amp;token=87674f37-3d0d-4ce4-9142-c88bb8cb9450" alt=""><figcaption></figcaption></figure>

2. **Select the operator as per your requirement**

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2F8AlAwB408CTMPxVjYLI0%2Fimage.png?alt=media&amp;token=2590b0fb-78df-4b68-a9fd-7506881b6252" alt=""><figcaption></figcaption></figure>

3. Select the **CSS selector** from the dropdown. Preferably do a "contains" on the element ID because the CSS selector that Zipy captures in real time might vary from what appears on your live site.&#x20;

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FYFNicW9v5xrOmaH5cQFc%2Fimage.png?alt=media&amp;token=5f12d977-9f48-418b-9e72-ebbd46893804" alt=""><figcaption></figcaption></figure>

4. Additionally, you can add a URL filter (Optional)

> If not specified allwhere the CSS Selector element was clicked, are considered.  pages&#x20;

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FWOs07I13TBQqiQpK7wEF%2Fimage.png?alt=media&amp;token=066040fb-02f6-4a4a-ab67-5a25a66c5e04" alt=""><figcaption></figcaption></figure>

#### **Use Cases for CSS Selector Filtering**

* Debugging issues with dynamic elements.
* Analyzing interactions on elements styled with specific classes or IDs.

### **Best Practices**

* **Use Specific Selectors:** Narrow down your focus by providing unique identifiers or detailed selector patterns to avoid noise in your data.
* **Combine Filters:** Pair Clicked Element or CSS Selector filters with other session filters like user details, location, or device for deeper insights.


# Control Zipy Recording

This feature provides users with a toggle button that allows them to control whether Zipy recording is enabled or disabled. When the toggle is set to "off," Zipy initialization is stopped, effectively halting all recording activities. This ensures that users have full control over when and how Zipy collects session data.

### How to configure?

1. Go to Project Settings Page from Zipy navigation.&#x20;

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FhhYAicJ08qhbAf0y4SEd%2Fimage.png?alt=media&amp;token=da457435-1d26-40b2-ba7e-5e899a3dfed7" alt=""><figcaption></figcaption></figure>

2. **Scroll down to Block Zipy section**

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FAlJh5dznTFarKbwGn1VV%2Fimage.png?alt=media&amp;token=db4b90fe-7ba4-41e0-81fb-6a652e83bcf0" alt=""><figcaption></figcaption></figure>

3. **Turn Off/On Zipy recording**

* Zipy immediately stops initializing for your upcoming sessions when the toggle button is turned Off.&#x20;
* No further session or error data will be recorded until the toggle is turned back on.

#### Note:

* Zipy Block functionality is controlled on project level.&#x20;


# Console Logs

View Console info, warning and error logs in Dev Tools

**To view console error details, click on the console error breadcrumb "Open in Dev Tools". You can also browse console logs directly via Dev Tools.** &#x20;

Console error, debug, warning and info logs are shown in Console logs.&#x20;

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2F4VZck0rUVO9h1Jg9rRlT%2Fimage.png?alt=media&amp;token=21c1f987-c588-4341-a9ad-ca88232992ee" alt=""><figcaption></figcaption></figure>


# Custom Events

Zipy provides a way for customers to attach custom events and properties to their session replays via the logEvent function. These custom events help with enhancing insights on user journeys, highlighting important business events, and building custom analytics. The session data can also be filtered based on the custom events for focused analysis.

To log custom events based on any business logic, clicks or page visits, use the following method after initializing Zipy

```
window.zipy.logEvent('<custom event name>', {
    '<property_name>': '<property_value>',
    '<property_name>': '<property_value>',
    '<property_name>': '<property_value>'
});
```

Here is an example:&#x20;

```javascript
window.zipy.logEvent('Payment_successful', {
       plan: "enterprise",
       payment_mode: "card"
});
```

* Custom events allow you to track specific user actions or behaviors that are unique to your application and business logic.
* You can instrument events for actions such as button clicks, form submissions, page navigation, errors, or any other user interactions that are important for your analysis.
* This enables you to visualize and analyze the entire user experience from start to finish and get to important segments in user journeys faster.

There are a few limitations to consider when specifying properties for Custom Events:

* Event names and Property names are strings that should be under 250 characters
* Maximum of 5 properties can be set per event.&#x20;

Please reach out to support for any further questions.


# Custom Logs

How can I send custom logs to Zipy from my app?

In addition to capturing your application’s standard logs, JS exceptions & Network errors, Zipy allows you to log custom messages, JS exceptions and application errors to enable you to capture messages & issues that may be specific to your application.

To enable that, Zipy supports three different methods in its SDK.

* zipy.logMessage
* zipy.logException
* zipy.logError

Let’s look at the method signature, sample usage and Zipy App views for each of these methods to understand how to use them in your application to make your troubleshooting even more effective.

### **zipy.logMessage(message,  \[info])**

Capture custom messages and report to Zipy with this method.

**Following are the Method Parameters:**

| **Name** | **Type**    | **Description**                                                                                                |
| -------- | ----------- | -------------------------------------------------------------------------------------------------------------- |
| message  | String      | Any custom message that you would like Zipy to log                                                             |
| info     | JSON object | A JSON object which specifies additional details that you would like to log along with the message. (Optional) |

**Example usage:**

```javascript
// Script
window.zipy.logMessage("Something went wrong", { 
     module: "Auth module"
})
```

```javascript
// NPM
zipy.logMessage("Something went wrong", { 
     module: "Auth module"
});
```

**How can I view custom logged messages in the Zipy App?**

All your custom logged messages will be visible in the Zipy App’s Error Context & Session Context screen’s “Zipy Logs” tab in Dev Tools as indicated by this screen grab:

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FhVuB1yFchjiJtXxRunOj%2Fimage.png?alt=media&amp;token=8c67aeb2-31b6-46b4-9298-57379d86943d" alt=""><figcaption></figcaption></figure>

### **zipy.logException(error)**

Log Javascript Exceptions at any point in your application code and report to  Zipy&#x20;

**Following are the Method Parameters:**

| Name  | Type         | Description             |
| ----- | ------------ | ----------------------- |
| error | Error object | Javascript Error object |

**Example usage:**

A common usage of this method would be after you encounter buggy code in a try...catch block. zipy.logException could be used in the catch block to log the exception that you can

```javascript
// Script
try {
    buggyCode();
} catch (err) {
    window.zipy.logException(err);
}
```

```javascript
// NPM
try {
    buggyCode();
} catch (err) {
    zipy.logException(err);
}
```

**How can I view custom logged exceptions in the Zipy App?**

All your custom logged Exceptions will be visible as normal Javascript Exceptions in the Error dashboard as well as the Zipy App’s Error Context & Session Context screen’s “Stack trace” tab in Dev Tools.<br>

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FgzyYuLznuBHVUDq6jsGF%2Fimage.png?alt=media&amp;token=ba202494-3208-49bc-8722-24c49d942768" alt=""><figcaption></figcaption></figure>

**How can I search for custom logged exceptions in the Zipy App?**

You can use Zipy’s Advanced Filtering to search for custom logged exceptions just like you would search for other Javascript Exceptions.

### **zipy.logError(errorType, errorMessage, \[category], \[errInfo])**

Log your custom application errors with your custom Error Name and Error Message<br>

**Following are the Method Parameters:**

| Name         | Type        | Description                                                                        |
| ------------ | ----------- | ---------------------------------------------------------------------------------- |
| errorType    | String      | Your custom Error Type                                                             |
| errorMessage | String      | Your custom Error Message                                                          |
| category     | String      | <p>One of Frontend (FE) or Network (NE) Defaults to Frontend </p><p>(Optional)</p> |
| errInfo      | JSON object | <p>A JSON object with additional information about the error</p><p>(Optional)</p>  |

**Example usage:**

The usage of this method depends on your application code. You may want to log an error that is not a standard Javascript exception or Network error, but is important for your application.

E.g.: If your application Frontend code has requested a user operation to your Backend via an API call, the Backend might be responding with a 200 OK response, but indicating to the Frontend in the response body that the delete has failed. It would be useful to capture this failure which can be done with the zipy.logError method

```javascript
// Script
//xhr call to Backend
//check response code
//use zipy.logError
window.zipy.logError("FrontEndIssue", "Grid not rendered", "FE", {
  failed_project_ids: [34, 67, 88]
})
```

```javascript
// NPM
//xhr call for delete
//check response code
//use zipy.logError

zipy.logError("APIFailure", "Delete project failed", "NE", {
  failed_project_ids: [34, 67, 88]
})
```

**How can I view custom logged errors in the Zipy App?**

All your custom logged Errors will be visible as normal Javascript Exceptions in the Error dashboard as well as the Zipy App’s Error Context & Session Context screen’s “Zipy Logs” tab in Dev Tools a shown by the screen grabs below: <br>

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FN5MzgQjcHiVYDOsbmvse%2Fimage.png?alt=media&amp;token=f66d4d48-6316-4f22-b1f9-feeb62560dd0" alt=""><figcaption></figcaption></figure>

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FUZceq0e8vr1R3GNVs2SO%2Fimage.png?alt=media&amp;token=f2b7f9ac-043c-4678-82f8-3e3d755fc6a5" alt=""><figcaption></figcaption></figure>

**How can I search for custom logged errors in the Zipy App?**

You can use Zipy’s Advanced Filtering to search for custom logged errors based on the Error Type and the Error Message that you provided. Use the “Error Type” and “Error Context” filters in the Error filtering to look for your custom Error Type and custom Error Message respectively.<br>


# Dashboard

Error and User Behaviour Analytics to solve for digital experiences

**Zipy provides an out of box analytics dashboard with two primary sections.**&#x20;

1. Error Metrics&#x20;
2. Usage Metrics &#x20;

**The error dashboard contains the following charts**&#x20;

1. Error Trend&#x20;
2. Errors by Category&#x20;
3. Errors by URL
4. Top API Errors&#x20;
5. Errors by Customers (Identify should be implemented for this chart). See Documentation. &#x20;
6. Errors by Users (Identify should be implemented for this chart). See Documentation. &#x20;
7. Errors by Types&#x20;
8. Errors by Browsers&#x20;
9. Frontend Error Distribution&#x20;
10. API Error Distribution&#x20;

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2Fny6LZmkJNFng1Cd5f4C5%2Fimage.png?alt=media&amp;token=6575422a-f586-4b35-bd88-77781aaf3487" alt=""><figcaption></figcaption></figure>

**The usage metrics contain the following charts**&#x20;

1. DAU/WAU/MAU &#x20;
2. User Sessions by Customers&#x20;
3. User Sessions Trend Line&#x20;
4. User Sessions by Location&#x20;
5. User Sessions by Browser&#x20;

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FynJDmuZZBfxvB0CQPgn0%2Fimage.png?alt=media&amp;token=4b5ec6c3-6182-4bc6-942e-914bafbee66a" alt=""><figcaption></figcaption></figure>


# Errors

Viewing All Errors for All Users

Error is a powerful way to view all your errors combined across users. There are two primary categories of errors that are captured by Zipy :

1. Frontend Errors&#x20;
2. API Errors&#x20;

By default the errors are sorted by latest error first. You can sort the errors by total sessions, count of all errors, OS, browser and time when it occurred.&#x20;

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FmP8L4XCHRIhpFbbVEedn%2Fimage.png?alt=media&amp;token=9ad949db-a7b8-405f-8ae2-a02143a9c55b" alt=""><figcaption></figcaption></figure>

Clicking on a given error will playback the latest session where the error occurred. The Zipy Error Session Player will show the following data&#x20;

1. The complete session playback&#x20;
2. Exact point on timeline where the error occurred&#x20;
3. Breadcrumbs will also show the exact error detail&#x20;

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FVFKgxLPVSuxoDrEZGj6Y%2Fimage.png?alt=media&amp;token=ae3e3b42-1d99-4a8c-a8f0-e7ec5c4c4e5e" alt=""><figcaption></figcaption></figure>

4. Dev Tools will contain the error information details. This could be stack trace, console errors, API errors and exception captured via Zipy logs.&#x20;
5. User environment details&#x20;
6. All user session where the given error was detected

The following actions can be taken inside an error session screen

1. Share the session URL with your team members with exact timestamp
2. Create a JIRA ticket with auto filled details&#x20;
3. Link a JIRA ticket with auto filled details&#x20;


# Funnels

Optimizing Conversion Rates via Funnel Tracking

Funnels helps you understand how users move through your application by tracking their journey across multiple steps. It shows you where users drop off and helps you optimize your user experience.

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FdtBqXl08zAcxesNc6AGV%2Fimage.png?alt=media&amp;token=70edd49f-e3d9-4e8b-a1dd-4e85353a9b5c" alt=""><figcaption></figcaption></figure>

### How to Create a Funnel

#### Step 1: Define Your Funnel Steps

You can create funnels with 2 or more steps. Each step can be one of these 4 types:

### Step Types

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FhXP7B3NLwwnZlIjPlPfH%2FScreenshot%202025-10-27%20at%202.41.10%E2%80%AFPM.png?alt=media&amp;token=9553e440-5ed5-4a9e-bf49-50131e818ca3" alt=""><figcaption></figcaption></figure>

#### 1. Page Visit URL

Track when users visit specific pages

**Example:** `sign-up`, `checkout`, `thank-you`\
**Use case:** Track page-to-page navigation

#### 2. Clicked Element Name

Track when users click specific buttons or elements

**Example:** `submit-button`, `add-to-cart`, `download-now`\
**Use case:** Track button clicks and interactions

#### 3. CSS Selector

Track interactions with specific CSS elements

**Example:** `.form-input`, `#login-button`, `.product-card`\
**Use case:** Track form interactions or specific UI elements

#### 4. Custom Events

Track [custom events](/product-features/custom-events) you've defined in your application

**Example:** `registration_completed`, `purchase_made`, `video_watched`\
**Use case:** Track business-specific actions

***

#### Step 2: Configure Analysis Settings

### Dropdown Options

#### Session Scope

Choose how to analyze user behavior:

**Single Session:** Only count users who completed all steps within one session

**Across Sessions:** Count users who completed steps across multiple sessions (more flexible)

#### User Counting

Choose how to count users:

**Unique Users:** Count each user only once (recommended for most analyses)

**Total Users:** Count all user interactions (includes repeat visits)

***

## How to Save and Delete a Funnel&#x20;

Once the Funnel is created, you can save the funnel using the **Save button** on the top right corner of the Funnels View as shown in the image below.&#x20;

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FMnmueqfVsutj83u234Hf%2FGitbookFunnelsSaveDelete.png?alt=media&amp;token=5fa7c893-a794-424c-88b9-08deb4bd5fa0" alt=""><figcaption></figcaption></figure>

You can **edit and delete** the created funnel from the list view as shown in the image below.&#x20;

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FFjsqXxjONyryj5ORApmr%2FDeleteEditFunnels.png?alt=media&amp;token=413fc28a-17b4-4ad9-86b7-9668573a1d38" alt=""><figcaption></figcaption></figure>

### Example Funnels

#### User Registration Funnel

1. Page Visit URL = "<https://app.zipy.ai/sign-up>"
2. Clicked Element Name = "Sign up with work email"
3. Page Visit URL = "<https://app.zipy.ai/organization>"
4. Custom Event = "registration\_completed"

***

### Understanding Your Results

#### Funnel Visualization

Your funnel results will show:

**Example Results**

* **Step 1:** 1,000 users visited the landing page
* **Step 2:** 800 users clicked the CTA button (20% drop-off)
* **Step 3:** 600 users filled out the form (25% drop-off)
* **Step 4:** 400 users completed the process (33% drop-off)

#### Key Metrics

* **User Count:** Number of users who completed each step
* **Drop-off Rate:** Percentage of users who left at each step
* **Conversion Rate:** Percentage of users who completed the entire funnel

***

### Best Practices

#### 1. Start Simple

Begin with 2-3 step funnels to understand basic user flow

#### 2. Choose the Right Step Types

* Use **Page Visit URL** for page navigation
* Use **Clicked Element Name** for button interactions
* Use **CSS Selector** for form interactions
* Use **Custom Events** for business actions

#### 3. Session Scope Guidelines

* **Single Session:** Use for short, immediate processes (checkout, signup)
* **Across Sessions:** Use for longer processes (product research, onboarding)

#### 4. User Counting Guidelines

* **Unique Users:** Use for conversion analysis and drop-off rates
* **Total Users:** Use for engagement analysis and repeat behavior

#### 5. Step Naming

Give each step a clear, descriptive name:

✅ **Good:** "Add to Cart", "Checkout Page", "Purchase Completed"

⚠️ **Avoid:** "Step 1", "Button Click", "Page Visit"

***

### Common Use Cases

1. **E-commerce Optimization**\
   Track the complete purchase journey from product view to order completion
2. **User Onboarding**\
   Monitor how new users progress through your onboarding flow
3. **Lead Generation**\
   Analyze how visitors convert from landing page to qualified leads
4. **Feature Adoption**\
   Track how users discover and start using new features

***

### Troubleshooting

#### No Data Showing?

* Check that your step values match exactly what's in your application
* Verify the date range includes when the events occurred
* Ensure the customer ID is correct

#### Unexpected Drop-offs?

* Check if the step values are case-sensitive
* Verify that the events are actually being tracked
* Consider if users might be completing steps in different sessions

#### Low Conversion Rates?

* Analyze each step to identify bottlenecks
* Consider if the funnel steps are too complex
* Check if users are completing the process through alternative paths

***

### Let's Get Started

1. **Identify your key user journey** (e.g., signup, purchase, feature adoption)
2. **Map out the steps** users need to complete
3. **Choose appropriate step types** for each action
4. **Set your analysis preferences** (session scope, user counting)
5. **Create your funnel** and start analyzing!

***

#### Need Help?

If you need assistance creating or analyzing funnels, contact the Zipy support team (<support@zipy.ai>). We're here to help you get the most out of your user analytics!


# Heatmaps

Understand which page drives the most engagement, where they don't interact and how much they scroll.

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2Frw4tdF859qfPPEs3uhZA%2Fimage.png?alt=media&amp;token=f71a6232-caca-483e-a280-8a731306b008" alt=""><figcaption></figcaption></figure>

Get the exact number of clicks on a given page for different parts of the page.

### Rage Clicks

Detect poor user experience across app or website pages with rageclicks detected by Zipy heatmap software.

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FZyMEvuvx9aq9d3JoLxQD%2Fimage.png?alt=media&amp;token=89b3c345-b487-4f00-8071-a242e2dcd0a1" alt=""><figcaption></figcaption></figure>

### Dead Clicks

Use Zipy heatmap software to identify dead clicks and gain insights into user frustrations that could potentially result in drop-offs, thereby improving the usability of your application.

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2F9sl9LQEmE9LA783b1kys%2Fimage.png?alt=media&amp;token=aae9fcc5-de6a-48f0-ac7d-fb5cf72e5eac" alt=""><figcaption></figcaption></figure>

<br>


# iFrame Support

Does Zipy support capturing content present within the iframe element

Zipy offers support for capturing iframes across a wide range of application scenarios. However, it's important to note that the way you integrate and configure Zipy may vary depending on specific iframe use cases. In this section, we will explore these possibilities.

| Iframe configuration                                                                                                                                                         | Example                                                                 | Support                                                                                                                                                                     |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <ol><li>The parent page and the embedded iframe run on the same domain.</li></ol>                                                                                            | A single-domain site using iframes to organize various components       | Integrate and initialize Zipy on the parent page.                                                                                                                           |
| <ol start="2"><li>The parent page and the embedded iframe run on two different domains.</li></ol>                                                                            | A cross-domain site using iframes to organize various components.       | Zipy should be integrated and initialized in both the parent and the iframe application\*\*                                                                                 |
| <ol start="3"><li>The parent page embeds an iframe and you want to capture the iframe app content only in that page.</li></ol>                                               | Your content is embedded into a third-party site that doesn’t use Zipy. | <p>Integrate and initialize Zipy in the iFrame app.<br><strong>Use the below code snippet:</strong><br>zipy.init("YOUR\_PROJECT\_SDK\_KEY", {recordOnlyIframe : true});</p> |
| <ol start="4"><li>The parent page has Zipy integrated and initialized, but you don’t have access to the cross-domain iframe content source code to integrate Zipy.</li></ol> | A third-party support widget embedded in your site.                     | Iframe recording in such a case is not Supported                                                                                                                            |

&#x20;\
How to integrate Zipy?&#x20;

<https://docs.zipy.ai/getting-started/install-zipy>

\*\* To support the cross-origin iframe please contact zipy support team or email to <support@zipy.ai>&#x20;

<br>


# Ignore Errors / Noise

Filter out non-critical or irrelevant errors to keep your Zipy dashboard clean and focused.

### How to Ignore Errors?

The Ignore Errors feature in Zipy allows you to filter out non-critical or unwanted errors from your dashboard (for example, from third-party libraries or external scripts). This helps reduce noise so your team can focus on issues that actually affect your users.

These errors are ignored at the source itself and not captured by the Zipy SDK.

| <p>ℹ️  Note</p><p>By default, Zipy also ignores errors from certain third-party libraries and APIs. See the full list:<a href="https://docs.zipy.ai/configure/ignoring-errors-noise"> docs.zipy.ai/configure/ignoring-errors-noise</a></p> |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

| <p>⚡  Cleaner Dashboard</p><p>Remove noise from third-party scripts, CDNs, and irrelevant sources so your team only sees errors that matter.</p> | <p>🎯  Stay Focused</p><p>Stop chasing errors you cannot fix. Ignore known or expected errors and focus on real application issues.</p> | <p>✅  Faster Triage</p><p>With fewer irrelevant errors in the feed, your team can triage and resolve critical issues faster.</p> |
| ------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- |

### How to Ignore Errors

Follow the steps below to create an ignore rule in Zipy.

#### 1. Go to Error Settings

Navigate to:

Zipy Dashboard → Settings → Error Settings

In this section, you will find Ignore Errors by Text / URL Patterns.

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FaqMttMaw6RBBTb1Fu0Os%2FIgnore%20Error%202.png?alt=media&amp;token=65dcfd72-beb2-4228-8c48-83f9a9ba4a26" alt=""><figcaption></figcaption></figure>

#### 2. Add a New Pattern

Click Add Pattern to create a new rule for ignoring errors.

This allows you to define which errors should be filtered.

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FRhIlUlOxojkmZMsxtVg3%2Funknown.png?alt=media&amp;token=7d189fed-f5d4-4a3b-b052-d907d2cf5cc2" alt=""><figcaption></figcaption></figure>

#### 3. Enter the Error Pattern

Enter a text string, URL, or library pattern that identifies the error you want to ignore.

For example:

* Third-party script errors
* CDN URLs
* Specific error messages

Zipy will match incoming errors with this pattern.

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FGaUDwC48JEphXub6ZbFr%2Funknown.png?alt=media&amp;token=983d3bff-2c85-452b-91a9-b20482ce1327" alt=""><figcaption></figcaption></figure>

#### 4. Select Error Type

Choose the type of errors the rule should apply to:

* Frontend Errors
* Network Errors
* Console Errors
* Other Network Events
* Other Console Events
* All Errors

Then click ![:heavy\_check\_mark:](https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FvAvoZTrsphTUCVr6octo%2F%3Aheavy_check_mark%3A?alt=media\&token=ca460e7c-873a-4ed9-9cb6-7f336ce14a11) to save the rule.

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FK8RYzPAUzuZ6QKfqWrT9%2Funknown.png?alt=media&amp;token=3f2c9b83-3b05-4158-86b9-619f02872f5f" alt=""><figcaption></figcaption></figure>

#### Managing Ignore Rules

Once created, you can manage patterns from the same section:

* Activate / Deactivate a rule
* Edit the pattern
* Delete the rule

![](https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FejmYok2FTMxJ49nDfmFz%2Funknown.png?alt=media\&token=b647789a-68a6-47eb-8f0a-5f70f0f7c45e)

Ignored errors will no longer appear in your Zipy error dashboard, helping you focus on important issues.

| <p>ℹ️  Note</p><p>Ignored errors will no longer appear in your Zipy error dashboard, helping you focus on important issues. Rules take effect immediately after saving and apply to all new incoming errors from that point forward.</p> |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |


# Live Users

Capturing Live Users in Zipy

Zipy allows you to capture real time users. You could see how many users are live at any point in time in your application.&#x20;

The count of these users and  live user sessions are easily visible in User Sessions to help you stay on top of real time activity in your website or application.&#x20;

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FgOHWn52KOXxMaSQk9Q2j%2Fimage.png?alt=media&amp;token=076d9a5f-25ec-47c5-966d-07a1350e1ae3" alt=""><figcaption></figcaption></figure>


# Manage Teams

Control who can do what across your Zipy projects with role-based access.

#### How to use Roles & Permissions in Zipy?&#x20;

Zipy uses role-based access control (RBAC) to manage what each team member can see and do within a project. When you invite a team member to a project, you assign them one of two roles: Admin or Member. The person who creates the project is automatically assigned the Owner role.

Roles are assigned at the project level. A team member can have different roles in different projects. For example, the same person can be an Admin on one project and a Member on another.

| <p>📍  Where to Find This</p><p>Go to your Zipy Dashboard → Settings → Invite Team. You will see the Active Users and Invited Users tabs, along with each user's assigned role.</p> |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FU02ttaTq48XOG56HtiMr%2FRoles%20and%20Permissions.jpg?alt=media&amp;token=4495abf2-1f6a-4f2b-8f70-11a0c8ba2ba9" alt=""><figcaption></figcaption></figure>

### The Three Roles

Zipy has three roles: Owner, Admin, and Member. Each role has a defined set of permissions.

👑  **Owner** - Automatically assigned to the person who creates the project. There is exactly one Owner per project.

✓  Ability to create/delete projects

✓  Ability to invite/delete users

✓  Ability to change a user's role

✓  Access to all project-level features

✓  Access to project settings, error settings, alert settings, and integrations

✓  Automatically assigned to the person who creates the project. There is exactly one Owner per project.

The Owner role is not assignable via the invite flow. It is automatically set when a project is created and can only be transferred by contacting Zipy support.

🛡️ **Admin** - A trusted team member who can manage users and configure the project, but cannot create or delete projects.

✗  Ability to create/delete projects

✓  Ability to invite/delete users

✓  Access to all project-level features

✓  Access to project settings, error settings, alert settings, and integrations

Assign the Admin role to team leads, engineering managers, or anyone who needs to manage the team and configure project settings, without having full ownership of the project.

👤  **Member** - A standard collaborator with access to product features only. Cannot manage users or configure settings.

✗  Ability to create/delete projects

✗  Ability to invite/delete users

✓  Access to all project-level features

Assign the Member role to developers, designers, or support team members who need to view session replays, errors, and analytics, but should not be able to change project configuration or manage team access.

### Inviting Team Members

Only Owners and Admins can invite new users to a project. Here is how to invite a team member:

1. Go to Settings → Invite Team.
2. Click the Invite Users button.
3. In the Invite New Users modal, enter the team member's work email address.
4. Select a role from the dropdown — either Admin or Member.
5. Click + ADD ANOTHER USER to invite multiple people at once.
6. Click Invite Users to Project. The invitee will receive an email invitation


# Microsoft Teams Integration

Get notified about errors and sessions captured by Zipy directly in your Microsoft Teams channels.

Zipy's Microsoft Teams integration lets you receive error alerts and session notifications directly in your Teams channels. It works via an incoming webhook - a URL that Zipy uses to post messages to a specific Teams channel. You configure the webhook in Microsoft Teams and paste the URL into Zipy to complete the connection.

#### **Where to Find This**

Go to your Zipy Dashboard → Settings → Integrations. Click the Edit button next to Microsoft Teams to open the setup panel.

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FyYTdsFrZQVvAPlbhURNt%2FTeams%201.jpg?alt=media&amp;token=125199a5-c295-4446-b93b-a3c341a539cc" alt=""><figcaption></figcaption></figure>

### How It Works

The Microsoft Teams integration uses an incoming webhook. A webhook is a unique URL generated by Teams for a specific channel. When Zipy has an alert to send, it posts a message to that URL and the message appears in your Teams channel automatically.

#### The setup has two parts:

* **In Microsoft Teams:** Create an incoming webhook connector for the channel where you want to receive Zipy alerts.
* **In Zipy:** Paste the webhook URL and give the integration a name (Digest Name) to complete the connection.

#### Setting Up the Microsoft Teams Integration

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FtlUfv7di3SEseYdCrl56%2FTeams%202.jpg?alt=media&amp;token=d88c08bd-1fcf-48e6-ac6a-bfdd1f301632" alt=""><figcaption></figcaption></figure>

**Step 1: Go to the Teams Channel**\
Open Microsoft Teams and navigate to the channel where you want to receive Zipy error alerts and session notifications.

**Step 2: Open Channel Settings**\
In the top-right corner of the channel, click the ⋯ (more options) menu dropdown and select Manage channel.

**Step 3: Open Connectors**\
In the Manage channel panel, select Connectors. This opens the list of available connectors for your Teams channel.

**Step 4: Add the Incoming Webhook Connector**\
In the Connectors search bar, search for Incoming Webhook and click Add. If it is already installed, click Configure instead.

**Step 5: Configure the Webhook**\
Click Configure on the Incoming Webhook connector. You will be asked to provide:

* **Name:** We recommend naming it Zipy Alerts so it is easy to identify in Teams.
* **Image:** Optionally upload the Zipy logo. A download link is provided in the Zipy setup panel for your convenience.

Click Create (or Save) to generate the webhook.

**Step 6: Copy the Webhook URL**\
After creating the webhook, Microsoft Teams will display a unique Webhook URL. Copy this URL — you will need to paste it into Zipy in the next step. Do not close the Teams window until you have copied the URL, as it may not be shown again.

**Step 7: Complete the Setup in Zipy**\
Return to Zipy. In the Microsoft Teams Integration / Add New panel, fill in the following fields:

* **Digest Name:** Enter a name for this integration (e.g. zipy-alerts, teams-dev-channel). This is used to identify the integration in Zipy.
* **Microsoft Teams Webhook URL:** Paste the webhook URL you copied from Teams.

Click Save Teams Integration to complete the setup.

<br>


# Multiple Filters

Searching Sessions and Errors by Filtering Data

This feature allows you to quickly search a session or error based on multiple different parameters. You can filter user sessions or errors by url visited, user name, OS, browser and many other custom parameters. There are 25+ parameters on which search can be customised.&#x20;

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FP1eMiKsNv85lHLtxxdqk%2Fimage.png?alt=media&amp;token=c1352159-5878-40ba-bded-706847d6f603" alt=""><figcaption></figcaption></figure>

Multiple Filters can be used to search by a powerful combination of different parameters like user name, city, release version etc.&#x20;

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FT249sV3FbUEbCmXjXPfU%2Fimage.png?alt=media&amp;token=a7234396-b5dd-404c-89cd-c9b3bc667401" alt=""><figcaption></figcaption></figure>


# Network Headers and Payload

View all network request response headers and payload in Dev Tools

**Network request response headers**&#x20;

Network request response headers are captured by default in Zipy.  These are part of the Network Tab in **DevTools.**&#x20;

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FYGZYVMH8paNHGg48qisW%2Fimage.png?alt=media&amp;token=947c4c80-ff7e-40ac-9648-cdf5926bbff2" alt=""><figcaption></figcaption></figure>

**Network header sanitization**&#x20;

Some network headers are disabled by default due to security reasons.&#x20;

**Network request  payload and response**

Network request  payload and response capture  can be enabled or disabled for Enterprise Plan users. By default the network payload and response is not captured.&#x20;

If it is enabled for the users the network payload details will be captured as shown in the figure below.&#x20;

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FizshzkDlFrovOAiY91BQ%2Fimage.png?alt=media&amp;token=cd649102-d158-4d21-bf58-b5408c70dc1e" alt=""><figcaption></figcaption></figure>

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FPL6SdHAWh5xvYQOT70Cb%2Fimage.png?alt=media&amp;token=072922bc-9162-4394-9226-34133797e6ea" alt=""><figcaption></figcaption></figure>


# Network Requests

View all network request response logs in Dev Tools

**To View network request response details, click on the XHR breadcrumb "Open in Dev Tools"**

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2Fa6G2j2DK7ZnLksUdcjGO%2Fimage.png?alt=media&amp;token=dfc5e3a7-554b-4b55-b801-66a28f681017" alt=""><figcaption></figcaption></figure>


# Oopsie AI Agent

### What is Oopsie AI? <a href="#docs-internal-guid-4b81db04-7fff-dd5a-8e98-c10189f4daed" id="docs-internal-guid-4b81db04-7fff-dd5a-8e98-c10189f4daed"></a>

Oopsie AI identifies and highlights errors that directly affected what users saw or experienced in your product. This AI Agent watches all sessions and errors in real time and bubbles up the important customer experience problems.&#x20;

It filters out background or non-impacting technical errors and focuses only on those that visibly disrupted the user’s experience.

\
When an error impacts a user, Oopsie AI uses DOM and event data to show how the error appeared on screen and what the user was doing at that moment.\
This helps teams understand the real user impact of every issue — not just the code failure.

### Example Visuals <a href="#docs-internal-guid-b346a054-7fff-481e-3803-d6833e6d7786" id="docs-internal-guid-b346a054-7fff-481e-3803-d6833e6d7786"></a>

Example 1: Login Error

* Reconstructed Screen:<br>

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FqgxOtD3vSqf1vuw84jBq%2FScreenshot%202025-10-27%20at%2014.32.15.png?alt=media&amp;token=29d204f9-04d3-40ec-a600-1d8a9d4b1b27" alt=""><figcaption></figcaption></figure>

Example 2: Cart Error

* Reconstructed Screen:<br>

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FwuHWVrRFv7eAcH89D3Sw%2FScreenshot%202025-10-27%20at%2014.32.53.png?alt=media&amp;token=22d50145-8bfe-4954-a8ab-21d6c86c4c72" alt=""><figcaption></figcaption></figure>

<br>

***

### Why It Matters

Most error logs show what failed.\
Oopsie AI shows which failures actually mattered to users.

By surfacing only user-impacting errors, Oopsie AI helps you:

* Prioritize issues that visibly affected users
* Understand the user’s screen context at the time of error
* Fix problems that truly impact user experience

***

### Access Oopsie AI

1. Go to your Zipy Dashboard → Oopsie AI.
2. Browse recent AI-generated error visuals.
3. Click any image to view the session replay and understand the root cause instantly.<br>

Please reach out to support for any further questions.


# Page Performance

Zipy captures all important web vitals related to the performance of a page from your application.

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2F5aO8wVAks29RejLYyaPZ%2Fimage.png?alt=media&amp;token=c1ac2c62-4a5d-40e2-a258-33d6841a5e77" alt=""><figcaption><p><br><mark style="color:blue;"><strong>Find the various important aspects of page performance like FCP, FP, LCP, FID, Load time, CLS.</strong></mark><br></p></figcaption></figure>

### FCP, FP, LCP

1. **First Contentful Paint (FCP)**:

   FCP measures the time from when the page starts loading to when any part of the page's content is rendered on the screen. It indicates how quickly users can begin to consume content.
2. **First Paint (FP)**:

   FP marks the time when the first pixel is rendered on the screen, signaling the start of the page loading process. It provides an initial indication of load performance.
3. **Largest Contentful Paint (LCP)**:

   LCP measures the time from when the page starts loading to when the largest text block or image element is fully rendered within the viewport. It reflects the perceived load speed of the main content.

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FrKogjDxNoiEMiUQIz9N3%2Fimage.png?alt=media&amp;token=a8d1d3e0-7c95-457f-8f08-a1fdfdefa9b2" alt=""><figcaption></figcaption></figure>

### FID

FID quantifies the delay between the user's first interaction with a page (e.g., clicking a button) and the browser's response to that interaction. It is a key metric for measuring responsiveness and interactivity.

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FU7ncaQGNvJTCb5zMK541%2Fimage.png?alt=media&amp;token=4abb8743-2dcf-456d-b4b4-9b98806431ee" alt=""><figcaption></figcaption></figure>

### **Load Time**

Load time is the total duration from the start of the page load to the completion of all elements on the page. It determines how quickly users can fully interact with the page's content.

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FGsU2VuaqPXl8T8LXWzig%2Fimage.png?alt=media&amp;token=9537863d-9be7-4334-b002-7145ec6c07dc" alt=""><figcaption></figcaption></figure>

### CLS

CLS measures the total of all individual layout shift scores for unexpected layout shifts that occur during the entire lifespan of the page. It helps assess the visual stability of a webpage and reduces user frustration from content shifting unexpectedly.

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FIyss4eW92mM285ffJQow%2Fimage.png?alt=media&amp;token=d61cf7e7-cdab-42cc-85f5-6226a3f126d7" alt=""><figcaption></figcaption></figure>


# Public Session URL

The Public Share URL feature in Zipy allows users to hare session details with team members, clients, or other stakeholders who may not have direct access to the Zipy platform. This feature facilitates collaboration and accelerates the resolution of issues.

### How to Generate a Public Share URL

1. **Locate the Session**: Navigate to the session you want to share within the Zipy dashboard.
2. **Click on 'Share URL'**: Look for the 'Share' button located in the session details view.

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FcOxKAvvc12yuP4IZ2EXJ%2Fimage.png?alt=media&amp;token=8805ac3a-cc05-4997-a1b6-80f9602eaed8" alt=""><figcaption></figcaption></figure>

3. **Select Public Access**: Select **"Public Access"** from who can view.&#x20;

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2Fb1rteBvS3V7oedI6NCE4%2Fimage.png?alt=media&amp;token=b9ff4179-2294-4736-8cdf-23566ea42ef0" alt=""><figcaption></figcaption></figure>

**Note:** Public session URLs are not available for sessions that are currently live.


# Repro Steps

AI-generated steps to reproduce any error — so you can fix it faster.

#### How to reproduce a production bug using Repro Steps?&#xD;

Repro Steps is an AI-powered feature in Zipy that automatically generates the exact steps needed to reproduce any error recorded in a session. When you are investigating an error, instead of manually piecing together what the user did from breadcrumbs and console logs, Repro Steps does it for you instantly.

The AI analyzes the full session context - user actions, navigation events, console errors, network requests, and stack traces - and produces a structured report with reproduction steps, fix suggestions, and debugging guidance, all in one place.

#### **Example Summary**

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FwcnkpAWLVziKnCvnj5B0%2FRepro%20Steps%201.jpg?alt=media&amp;token=cd012419-6132-4471-9c36-049183f0faac" alt=""><figcaption></figcaption></figure>

### How to Access Repro Steps

1. Go to your Zipy Dashboard and navigate to Errors.
2. Click on any error to open the error detail view.
3. Select a user session from the session list on the left to open the Session Replay.
4. In the Session Replay view, click the REPRO STEPS button in the bottom control bar (bottom right).
5. The Steps to Reproduce modal opens with a full AI-generated breakdown of the error.
6. Use the Copy steps to reproduce button at the bottom of the modal to copy the full report to clipboard.

### Understanding the Repro Steps Modal

The Steps to Reproduce modal is organized into distinct sections. Each section gives you a different layer of information about the error and how to address it.

#### Error Metadata

At the top of the modal, Zipy displays key metadata about the error so you have full context before reading the reproduction steps.

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2Fq298pACaPoOHpsgQLvjC%2FRepro%20Steps%202.png?alt=media&amp;token=3399a030-ae2a-408b-b53a-2093c87412d5" alt="" width="347"><figcaption></figcaption></figure>

The metadata fields include:

* **Error Count**: Total number of times this error has occurred.
* **Sessions Count**: Number of unique sessions in which this error appeared.
* **Error Type**: The type of error (e.g., Error, TypeError, ReferenceError).
* **Category**: Whether the error is a Frontend or Network error.
* **Latest Occurrence**: Timestamp of the most recent occurrence of this error.
* **Platform**: The platform or device type on which the error occurred.
* **App Version**: The version of your application that was running when the error occurred.

#### Steps to Reproduce the Error

This section provides a numbered, chronological sequence of actions the user took that led to the error. It is generated by the AI from the session's breadcrumb and event data.

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FmDiG3BBdkDl5ULD7bRt7%2FRepro%20Steps%203.png?alt=media&amp;token=73c2bef9-1019-4dd3-9584-97779aea11ed" alt="" width="343"><figcaption></figcaption></figure>

#### Fix Suggestions&#x20;

The Fix Suggestions section provides an AI-generated analysis of the probable root causes of the error, along with concrete fixes for each. Each potential cause is numbered and accompanied by a sub-item describing the recommended fix.

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FfO30AaZmOWDNwf1WeE0Y%2FRepro%20Steps%204.png?alt=media&amp;token=6b10bc5f-9a72-460c-9b60-bb2a676dad80" alt="" width="344"><figcaption></figcaption></figure>

#### Debugging Steps&#x20;

Beyond fix suggestions, the modal also includes targeted Debugging Steps — a practical checklist of techniques your developer can follow to isolate and confirm the root cause in your codebase.

#### Closing Summary&#x20;

At the end of the modal, the AI provides a closing paragraph that summarises the most likely root cause and how the debugging steps connect to it. This gives you a concise takeaway before you jump into your code.

### Copy Steps to Reproduce

At the bottom of the Repro Steps modal, there is a Copy steps to reproduce button. Clicking it copies the entire content of the modal — including the reproduction steps, fix suggestions, and debugging steps — to your clipboard as plain text.

<br>


# Seen/Unseen Sessions

### Overview

The "Seen/Unseen" feature in Zipy helps users quickly identify whether a session has already been viewed or remains unviewed. This functionality is designed to streamline session management by providing clear visual indicators, allowing users to focus on the sessions that require attention.

### Purpose

The purpose of the "Seen/Unseen" feature is to:

* Clearly differentiate between viewed and unviewed sessions.
* Provide an intuitive way for users to manage session reviews.

### How It Works

#### Seen Session

* Definition: A session is marked as "Seen" once it has been watched or reviewed by a user.
* Visual Indicator: In the session table, "Seen" sessions are greyed out, signaling to the user that the session has been viewed.
* Behavior: The status automatically updates after a session is watched. Once greyed out, the session remains marked as "Seen".&#x20;

#### Unseen Session

* Definition: A session is marked as "Unseen" if it has not yet been viewed by the user.
* Visual Indicator: In the session table, "Unseen" sessions are not greyed out, making them easily distinguishable and prompting users to review these sessions.
* Behavior: Once an "Unseen" session is viewed, it transitions to "Seen" and is greyed out.

### Key Features

* Automatic Status Update: The system automatically transitions the session's status between "Seen" and "Unseen" based on user interactions.
* Visual Clarity: The use of greyed-out sessions for "Seen" and non-greyed-out for "Unseen" provides a clear, user-friendly way to navigate through the session table.

### Benefits

* Efficiency: Users can quickly identify and focus on unviewed sessions, improving workflow efficiency.
* Collaboration: Teams can easily track session review status, ensuring that work isn’t duplicated.
* Visual Simplicity: The clear distinction between "Seen" (greyed out) and "Unseen" (not greyed out) sessions makes it easy for users to manage and track their progress.

### Conclusion

The "Seen/Unseen" feature in Zipy provides a simple yet effective way to manage session reviews. By leveraging visual indicators—greyed-out for "Seen" and non-greyed-out for "Unseen"—the feature enhances workflow efficiency and collaboration across teams.


# Segment

Create and save Segment for a given cohort of users or conditions.

Create your own cohorts based on your choices with Segments feature. Use the filters feature to define your cohort. For example create Segments of users from a given city or users using a given platform. You can create Segments using mutliple filters i.e. a combination of filters.&#x20;

Segments can be defined at both personal or team level. Team level Segments will be accessible by all members of the given project.&#x20;

Segments once created, can also be edited or deleted.&#x20;

## **Create and Save Segment**

Go to Session Replay and create a filter. Once filter is created you will see a Save Segments option on the right hand side.&#x20;

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FZG61xp42NNnpwZ7F7e9r%2FCreateFIlter1.png?alt=media&amp;token=1cee5030-cf94-4fbd-bca0-e5e1ebf15b0e" alt=""><figcaption></figcaption></figure>

Select Save Segment and give it an appropriate name. Segment can be created for Team or Personal use. The below image shows a Filter created for Team.&#x20;

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FMlDoVWI1OnyiftqdJwYk%2FCreateSegment2.png?alt=media&amp;token=60028361-e033-4666-92d8-d45aa4070c68" alt=""><figcaption></figcaption></figure>

This image shows filter created for personal view only.&#x20;

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FtKhW4wIv2CcwOfbBX7pL%2FSaveSegment4.png?alt=media&amp;token=718351ac-0531-4ec9-8461-c3715a2ee613" alt=""><figcaption></figcaption></figure>

## **Update Segment**&#x20;

One can also update or create new segments after changing the filter a shown below.&#x20;

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2FB1ahBJBgz9Ad1AqPB5oV%2FUpdateSegment.png?alt=media&amp;token=db46af7b-026e-44ce-a0b9-5ecca90a2d65" alt=""><figcaption></figcaption></figure>

## **View Saved Segment**

Once a segment is created, you can view the list of all Segments accessible to you. These could be Team or Personal Segments as shown in the image below.&#x20;

The **Saved Segments** are visible in the Session Replay, Errors and Analytics in Zipy.&#x20;

<figure><img src="https://3440602746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcCYilc27NCELgnKQNPVF%2Fuploads%2F4alkNQAMhb7oAzFH0GNk%2FSelectSegment1.png?alt=media&amp;token=c54ba6bb-5cdc-45bd-9b9d-b53d5a3a2c15" alt=""><figcaption></figcaption></figure>




---

[Next Page](https://docs.zipy.ai/llms-full.txt/1)

