---
title: SDK API reference - React Native
description: SDK commands reference including signature, parameter descriptions, and examples
lastUpdated: 08 December 2025
source_url:
  html: https://docs.contentsquare.com/en/csq-sdk-react-native/experience-analytics/command-reference/
  md: https://docs.contentsquare.com/en/csq-sdk-react-native/experience-analytics/command-reference/index.md
---

## GDPR / Identification

### CSQ.optIn

**Added in:** `6.0.0`

Get user consent.\
Calling this API generates a user ID and initiates tracking.

Call [optIn](#csqoptin) after [start](#csqstart).

```javascript
CSQ.optIn();
```

### CSQ.optOut

**Added in:** `6.0.0`

Revoke user consent, remove stored `userID`.\
Stop CSQ SDK, flush, and clear all data.

```javascript
CSQ.optOut();
```

### CSQ.identify

Product Analytics | **Added in:** `6.0.0`

Assigns an identity to be associated with the current user.

This assigns the identity to all events for the user ID and lets the analysis module merge multiple user IDs with the same identity.

This should be called only after Product Analytics is configured and the SDK started. It's safe to call multiple times with the same value. Please always provide a value that will be unique to this user. Setting values like "guest", "anonymous", "unauthenticated" or similar will merge all those users into a single user profile.

Warning

Changing an identity forces a new user ID and session ID. That is, calling `identify("A"); identify("B")` creates a new user ID and session for `B`.

```javascript
CSQ.identify("user_identity");
```

#### Parameters

* #### identity   string (<= 100 chars)  

  Identity to be associated with the current user.

### CSQ.resetIdentity

Product Analytics | **Added in:** `6.0.0`

If the user was previously identified with [`identify()`](#csqidentify), this creates a new unidentified user and session. This is technically similar to calling [`optOut()`](#csqoptout) then [`optIn()`](#csqoptin).

This should be called only after Product Analytics is configured and the SDK started.

```javascript
CSQ.resetIdentity();
```

### CSQ.sendUserIdentifier

Experience Analytics | **Added in:** `6.0.0`

Associate the user identifier to the session.

```javascript
CSQ.sendUserIdentifier("any_identifier")
```

#### Parameters

* #### userIdentifier   string  

  The user identifier to track. Should be max 100 characters long.

### CSQ.onMetadataChange

**Added in:** `6.0.0`

Get all the information related to the user and project. Refer to the [`CSQMetadata`](#csqmetadata) object.

```javascript
CSQ.onMetadataChange(callback: (metadata: CSQMetadata) => void) => {
  // Handle metadata change
});
```

#### Parameters

* #### callback   (metadata: CSQMetadata) => void  

  Callback function triggered when metadata changes.

### CSQMetadata

CSQMetadata object contains information related to the user and project.

```javascript
interface CSQMetadata {
    userID: string | null;
    sessionID: string | null;
    identity: string | null;
    environmentID: string | null;
    projectID: string | null;
    sessionReplayURL: string | null;
}
```

#### `userID`

Identifier of the current user. This is an identifier from Product Analytics by default or Experience Analytics if PA is not active.

#### `sessionID`

Session identifier. This is an identifier from Experience Analytics by default or Product Analytics if Experience Analytics is not active.

#### `projectID`

Project identifier for Experience Analytics.

#### `environmentID`

Environment identifier for Experience Analytics.

#### `sessionReplayURL`

URL of current session replay.

#### `identity`

Identity associated with the user by calling [`identify()`](#csqidentify).

## Property Tracking

### CSQ.addDynamicVar

Experience Analytics | **Added in:** `6.0.0`

Adds dynamic variables to the session properties.\
This method allows you to pass a `key` and a `value` parameters, representing a key-value pair that is scoped to the session. You can also add, as a last parameter, a function that we will call so you can handle it gracefully

```javascript
CSQ.addDynamicVar(key: "key1", value: "value1")
CSQ.addDynamicVar(key: "key2", value: 2, (errorObject) => {
  console.log(errorObject.toString());
});
```

#### Parameters

* #### key   string  

  Dynamic variable key

* #### value   string  

  Dynamic variable value

* #### callback   (error: Error) => void (optional)  

  Optional callback function to handle errors.

### CSQ.addUserProperties

Product Analytics | **Added in:** `6.0.0`

Add a collection of properties to be associated with the current user.

```javascript
CSQ.addUserProperties({
  propertyKey: "propertyValue",
});
```

#### Parameters

* #### properties   Record\<string, PropertyValue  

  A dictionary of user properties. `PropertyValue` can be `number`, `string`, `boolean`, `bigint`

### CSQ.addEventProperties

Product Analytics | **Added in:** `6.0.0`

Add a collection of properties to be associated with all future events.

```javascript
CSQ.addEventProperties({
  propertyKey: "propertyValue",
});
```

#### Parameters

* #### properties   Record\<string, PropertyValue>  

  A dictionary of event properties. `PropertyValue` can be `number`, `string`, `boolean`, `bigint`

### CSQ.removeEventProperty

Product Analytics | **Added in:** `6.0.0`

Removes a single property from the collection of event-wide properties.

```javascript
CSQ.removeEventProperty("propertyKey")
```

#### Parameters

* #### name   string  

  The key of the property to remove.

### CSQ.clearEventProperties

Product Analytics | **Added in:** `6.0.0`

Removes all event-wide properties.

```javascript
CSQ.clearEventProperties()
```

## CSInApp

### CSQ.handleUrl

Experience Analytics | **Added in:** `6.0.0`

Allows the Contentsquare SDK to monitor CS in-app features activation through a custom URL scheme.

For more details check our [CSInApp documentation](../../experience-analytics/in-app-features/).

```javascript
CSQ.handleUrl("sample_url")
```

#### Parameters

* #### urlString   string | null | undefined  

  The url handled by [React Native Linking API ↗](https://reactnative.dev/docs/linking).

## Interoperability

### \<CSQWebView>

Experience Analytics | **Added in:** `6.0.0`

Allows Contentsquare SDK to track webviews.

```javascript
<CSQWebView>
  <WebView
    source={{
      uri: "https://test-url.com",
    }}
  />
</CSQWebView>
```

#### Parameters

* #### children   ReactElement  

  The webview to register for tracking. CSQWebView supports [react-native-webview ↗](https://github.com/react-native-webview/react-native-webview).

## Event Tracking

### CSQ.trackTransaction

Experience Analytics | **Added in:** `6.0.0`

Send a transaction.

```javascript
CSQ.trackTransaction(10, Currency.EUR, "transactionId");
```

#### Parameters

* #### value   number  

  The monetary value of the transaction.

* #### currency   Currency | string  

  The ISO 4217 currency code of the transaction.

* #### transactionId   string | null (optional)  

  An optional identifier for the transaction.

### CSQ.trackScreenview

**Added in:** `6.0.0`

Send a screen view with or without custom variables. Requires Experience Analytics to be started.

```javascript
CSQ.trackScreenview(name: "ScreenName", cvars: [{index: 0, key: "key", value: "value"}])
```

#### Parameters

* #### name   String  

  The name of the screen.

* #### cvars   CustomVar\[] (optional)  

  An array of custom variables to attach to the screen view.

  * #### index   number  

    Custom variable index

  * #### key   string (<= 512 chars)  

    Custom variable key

  * #### value   string (<= 256 chars)  

    Custom variable value

### CSQ.trackEvent

Product Analytics | **Added in:** `6.0.0`

Creates an event message to be tracked and sent to the API.

```javascript
CSQ.trackEvent('event', { some_property: 100 });
```

#### Parameters

* #### eventName   string  

  The name of the event to be tracked.

* #### properties   Record\<string, PropertyValue> (optional)  

  Optional properties to associate with the event. `PropertyValue` in Swift can be `String`, `Substring`, `Bool`, `Double`, `Float`, `Int`, `Int64`, `Int32`, `Int16` or `Int8` or in Objective-C `NSString` and `NSNumber` (including `BOOL`).

## Logging

### CSQ.logToConsole

Product Analytics | **Added in:** `6.0.0`

Enables logging to the console for Product Analytics events and diagnostics.

```javascript
CSQ.logToConsole();
```

### CSQ.setLogChannel

Product Analytics | **Added in:** `6.0.0`

Sets the log channel for Product Analytics logging.

```javascript
import { LogChannel } from '@contentsquare/react-native-bridge';


CSQ.setLogChannel(LogChannel.LOG);
```

#### Parameters

* #### logChannel   LogChannel  

  The log channel to use. Available values: `LogChannel.LOG`, `LogChannel.TRACE`, `LogChannel.DEBUG`, `LogChannel.INFO`, `LogChannel.WARN`, `LogChannel.ERROR`, `LogChannel.NONE`.

### CSQ.setLogLevel

Product Analytics | **Added in:** `6.0.0`

Sets the log level for Product Analytics logging.

```javascript
import { LogLevel } from '@contentsquare/react-native-bridge';


CSQ.setLogLevel(LogLevel.INFO);
```

#### Parameters

* #### logLevel   LogLevel  

  The log level to use. Available values: `LogLevel.TRACE`, `LogLevel.DEBUG`, `LogLevel.INFO`, `LogLevel.WARN`, `LogLevel.ERROR`, `LogLevel.NONE`.

## Error tracking

### CSQ.setUrlMaskingPatterns

Experience Analytics | **Added in:** `6.0.0`

Sets URL masking patterns.

```javascript
CSQ.setUrlMaskingPatterns(["pattern1", "pattern2"])
```

#### Parameters

* #### patterns   string\[]  

  A list of URL patterns to mask.

### CSQ.triggerNativeCrash

Experience Analytics | **Added in:** `6.0.0`

Trigger a native crash for testing purposes.

```javascript
CSQ.triggerNativeCrash()
```

## Personal Data/Masking

### CSQ.setDefaultMasking

Experience Analytics | **Added in:** `6.0.0`

Set the default masking state.\
All Views are fully masked by default.

```javascript
CSQ.setDefaultMasking(true)
```

#### Parameters

* #### masked   Bool  

  The default masking state to be set.

### \<CSQMask>

**Added in:** `6.0.0`

Allows to mask content for session replay and suppress events for view inside \<CSQMask> and all its children.\_\_ By default, session replay masking is enabled, and event tracking is disabled.

```javascript
<CSQMask>
  <View>
    ...
  </View>
</CSQMask>
```

#### Props

* #### isSessionReplayMasked   boolean  

  The view which content will be masked.

* #### ignoreTextOnly   boolean  

  Product Analytics This will ignore text and accessibility labels inside the masked view for event tracking.

* #### allowInnerHierarchy   boolean  

  Product Analytics Allows the full hierarchy to be exposed, but without properties or text capture.

* #### allowProps   boolean  

  Product Analytics Allows property capture, but will exclude text-containing properties if the below options are omitted.

* #### allowText   boolean  

  Product Analytics Allows text capture. It can be used alongside allowProps to expose text-containing properties.

* #### allowAccessibilityLabel   boolean  

  Product Analytics Allows accessibilityLabel capture.

* #### children   ReactElement  

  The view which masking rules will be applied to.

### WithCSQMask

Higher Order Component (HOC) to mask content for session replay and suppress events for view inside WithCSQMask and all its children.

#### Props

* #### WrappedComponent   ReactElement  

  The component which masking rules will be applied to.

* #### maskOptions   CSQMaskProps  

  Masking options to be applied to the wrapped component.

* #### isSessionReplayMasked   boolean  

  The view which content will be masked.

* #### ignoreTextOnly   boolean  

  Product Analytics This will ignore text and accessibility labels inside the masked view for event tracking.

* #### allowInnerHierarchy   boolean  

  Product Analytics Allows the full hierarchy to be exposed, but without properties or text capture.

* #### allowProps   boolean  

  Product Analytics Allows property capture, but will exclude text-containing properties if the below options are omitted.

* #### allowText   boolean  

  Product Analytics Allows text capture. It can be used alongside allowProps to expose text-containing properties.

* #### allowAccessibilityLabel   boolean  

  Product Analytics Allows accessibilityLabel capture.

## SDK Initialisation and Management

### CSQ.configureProductAnalytics

Product Analytics | **Added in:** `6.0.0`

SDK configuration method for Product Analytics. Must be called before [`start()`](#csqstart).

```javascript
CSQ.configureProductAnalytics("YOUR_ENVIRONMENT_ID", {
  enableAutocapture: true
});
```

#### Parameters

* #### envId   string  

  Your Product Analytics environment ID.

* #### productAnalyticsOptions   ProductAnalyticsOptions (optional)  

  Product Analytics [initialization options](#product-analytics-initialization-options).

### CSQ.start

**Added in:** `6.0.0`

Start the SDK.

```javascript
CSQ.start();
```

### CSQ.stop

**Added in:** `6.0.0`

Stop all activity from the SDK.\
Once run no requests, telemetry collection, or logs will be generated.

```javascript
CSQ.stop();
```

### CSQ.pauseTracking

**Added in:** `6.0.0`

Pause all tracking features.

```javascript
CSQ.pauseTracking();
```

### CSQ.resumeTracking

**Added in:** `6.0.0`

Resume all tracking features.

```javascript
CSQ.resumeTracking();
```

## Product Analytics initialization options

CSQ SDK options for Product Analytics passed to [`CSQ.configureProductAnalytics()`](#csqconfigureproductanalytics).

```javascript
type ProductAnalyticsOptions = {
  enableRNAutocapture?: boolean;
  disableScreenviewForwardToDXA?: boolean;
  disableScreenviewForwardToPA?: boolean;
  disableInteractionAutocapture?: boolean;
  disablePageviewAutocapture?: boolean;
  clearEventPropertiesOnNewUser?: boolean;
  resumePreviousSession?: boolean;
  baseUrl?: string;
  uploadInterval?: number;
  captureVendorId?: boolean;
  captureAdvertiserId?: boolean;
  // Native specific options
  enablePushNotificationAutocapture?: boolean;
  enablePushNotificationTitleAutocapture?: boolean;
  enablePushNotificationBodyAutocapture?: boolean;
  messageBatchMessageLimit?: number;
  pruningLookBackWindow?: number;
  enableViewAutocapture?: boolean;
  // Android specific options
  maximumDatabaseSize?: number;
  maximumBatchCountPerUpload?: number;
  // iOS specific options
  disablePageviewTitleAutocapture?: boolean;
  messageBatchByteLimit?: number;
};
```

## React Native Product Analytics initialization options

### `enableRNAutocapture`

Enable React Native view autocapture.\
Defaults to false.

### `disableScreenviewForwardToDXA`

Disable forwarding of Product Analytics Pageviews to Experience Analytics.\
Defaults to false.

### `disableScreenviewForwardToDXA`

Disable forwarding of Product Analytics Pageviews to Experience Analytics.

### `disableScreenviewForwardToPA`

Disable forwarding of Experience Analytics Screenviews to Product Analytics.

### `disableInteractionAutocapture`

Disables autocapture of touch events on React Native Views.\
Defaults to false.

### `disablePageviewAutocapture`

Whether or not source pageview events will be auto-captured.\
Defaults to false.

### `clearEventPropertiesOnNewUser`

Whether or not to clear event properties when a new user is created.\
Defaults to false.

### `resumePreviousSession`

Enables Contentsquare behavior of persisting non-expired sessions across app launch.

### `baseURL`

URI object specifying the base URI for the desired API endpoint. The Heap SDK resolves paths using this base URI and ignores any pre-existing path elements.

### `uploadInterval`

Interval at which event batches should be uploaded to the API. Defaults to 15 seconds.

### `captureVendorID`

Whether or not the vendor ID should be included in tracked events if made available by the device.\
Defaults to false.

### `captureAdvertiserID`

Whether or not the advertiser ID should be included in tracked events if made available by the device.\
Defaults to false.

## Native specific Product Analytics initialization options

### `enablePushNotificationAutocapture`

Whether or not the SDK will auto capture interaction events on notifications.\
Defaults to false.

### `enablePushNotificationTitleAutocapture`

Whether or not capture the title of the notification where an interaction was performed. `enablePushNotificationAutocapture` must be to true.\
Defaults to false.

### `enablePushNotificationBodyAutocapture`

Whether or not capture the body text of the notification where an interaction was performed. `enablePushNotificationAutocapture` must be to true.\
Defaults to false.

### `messageBatchMessageLimit`

The maximum number of messages to be included in each batch sent to Heap. Setting a lower limit can help reduce network traffic in situations where bandwidth is limited.\
Defaults to 100.

### `pruningLookBackWindow`

The number of days to look back when pruning old data in days.\
Defaults to 6 days.\
Requires an entitlement to use.

### `messageBatchByteLimit`

The maximum size, in bytes, to allocate for the local event storage database.\
Defaults to -1, meaning there is no limit on database size. Must be greater than or equal to 200KB.

### `enableViewAutocapture`

Whether or not the SDK will auto captureUI interactions and source pageviews. Defaults to false.

## Android specific Product Analytics initialization options

### `maximumDatabaseSize`

The maximum size, in bytes, to allocate for the local event storage database. Defaults to -1, meaning there is no limit on database size. Must be greater than or equal to 200KB.

### `maximumBatchCountPerUpload`

The maximum number of batches to send per upload cycle. This can be used in conjunction with messageBatchMessageLimit to control the amount of data that is uploaded in a given cycle.

## iOS specific Product Analytics initialization options

### `disablePageviewTitleAutocapture`

Disable pageview title capture.
