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

# Properties

## What are properties?

Properties are identifiers for a session, represented as key-value pairs (e.g., `account_type: paid`), that enable you to filter sessions in Adora. Each session can have an unlimited number of properties.

Examples of useful property data include:

* **Experiment flags** (e.g., `new_onboarding_experience = true`)
* **User account data** (e.g., `type = free`, `type = paid`)
* **User settings** (e.g., `light-mode = dark`)

***

## What is captured?

By default, the Adora snippet automatically captures the following:

* **Country**: Inferred from the user's IP address.
* **Language**: Determined by the browser's language setting ([`navigator.language`](https://developer.mozilla.org/en-US/docs/Web/API/Navigator/language)).
* **Browser** and **device type**: Extracted from the user agent.

Additional data can be supplied to enhance session details:

* **User ID**: A unique identifier for a user.
* **Properties**: Custom key-value pairs that you define.

If the User ID or Properties changes during the session, you can call `adoraStart` again with the new
user ID or properties.

### Overriding the language

If your application's displayed language is determined by user account settings rather than the browser, you can manually override the language by specifying the `language` parameter in `adoraStart` using an [ISO 639-1](https://www.iso.org/iso-639-language-code) code (optionally with a country code):

```js theme={"system"}
adoraStart({
  orgId: "ORGANIZATION_ID",
  language: "en-AU"
});
```

***

## Adding User IDs

To uniquely identify a user, include a `uid` argument in `adoraStart`:

```js theme={"system"}
adoraStart({
  orgId: "ORGANIZATION_ID",
  uid: "uid"
});
```

The `uid` can be either a string or a number.

***

## Adding Custom Property Data

Custom property data can be added using the `properties` field in `adoraStart`. This field accepts a set of arbitrary string key-value pairs for flexible segmentation.

```js theme={"system"}
adoraStart({
  orgId: "ORGANIZATION_ID",
  properties: {
    "plan": "free",
    "theme": "dark",
    "has_new_onboarding_flow": "true"
  }
});
```

This overrides the `window` object to include `adoraStart`.

***

## Bypassing sampling

In some cases you may want to bypass sampling and ensure that a session is captured (e.g. if there are a group of users that are important to your business). This can be done by passing in `bypassSampling: true` when `adoraStart` is called.
Although `bypassSampling` skips sampling, it is still subject to daily and monthly session caps.

```js theme={"system"}
adoraStart({
  orgId: "ORGANIZATION_ID",
  bypassSampling: true, // or user.isVIP
});
```
