diff --git a/fern/docs.yml b/fern/docs.yml
index f5550017c..e8d5fc52d 100644
--- a/fern/docs.yml
+++ b/fern/docs.yml
@@ -67,6 +67,9 @@ products:
icon: fa-regular fa-browser
subtitle: Build voice, video and chat applications for the browser
versions:
+ - display-name: v4
+ path: products/browser-sdk/versions/v4.yml
+ availability: beta
- display-name: v3
path: products/browser-sdk/versions/latest.yml
availability: stable
@@ -174,7 +177,6 @@ css:
- brand-overrides.css
- styles.css
-
redirects:
- source: /docs/agents-sdk
destination: /docs/server-sdks
diff --git a/fern/fern.config.json b/fern/fern.config.json
index 922c7d61c..fb9f1280f 100644
--- a/fern/fern.config.json
+++ b/fern/fern.config.json
@@ -1,4 +1,4 @@
{
"organization": "signalwire",
- "version": "4.67.1"
+ "version": "4.106.1"
}
diff --git a/fern/products/browser-sdk/pages/v4/guides/overview.mdx b/fern/products/browser-sdk/pages/v4/guides/overview.mdx
new file mode 100644
index 000000000..b9fa127c0
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/guides/overview.mdx
@@ -0,0 +1,25 @@
+---
+title: "Browser SDK v4 Guides"
+sidebar-title: Overview
+position: 0
+slug: /js/v4/guides
+max-toc-depth: 3
+---
+
+The SignalWire Browser SDK is a JavaScript library that enables WebRTC-based voice, video, and chat applications directly in web browsers.
+Built on WebSocket architecture, it provides real-time communication capabilities without plugins or downloads.
+
+## Installation
+
+
+
+ @signalwire/js
+
+
+ signalwire-js
+
+
+
+```bash
+npm install @signalwire/js
+```
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/Address/activity$.md b/fern/products/browser-sdk/pages/v4/reference/classes/Address/activity$.md
new file mode 100644
index 000000000..3663a956e
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/Address/activity$.md
@@ -0,0 +1,35 @@
+# activity$
+
+#### Get Signature
+
+> **get** **activity$**(): `Observable`\<[`CallState`](../../interfaces/CallState.md)[]\>
+
+Defined in: [core/entities/Address.ts:340](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Address.ts#L340)
+
+Observable of active call states for this address.
+
+##### Throws
+
+Requires presence support.
+
+##### Returns
+
+`Observable`\<[`CallState`](../../interfaces/CallState.md)[]\>
+
+## activity
+
+#### Get Signature
+
+> **get** **activity**(): [`CallState`](../../interfaces/CallState.md)[]
+
+Defined in: [core/entities/Address.ts:346](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Address.ts#L346)
+
+Active call states for this address.
+
+##### Throws
+
+Requires presence support.
+
+##### Returns
+
+[`CallState`](../../interfaces/CallState.md)[]
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/Address/cachedObservable.md b/fern/products/browser-sdk/pages/v4/reference/classes/Address/cachedObservable.md
new file mode 100644
index 000000000..4e2ba6b39
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/Address/cachedObservable.md
@@ -0,0 +1,26 @@
+# cachedObservable
+
+> `protected` **cachedObservable**\<`T`\>(`key`, `factory`): `Observable`\<`T`\>
+
+Defined in: [behaviors/Destroyable.ts:19](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/behaviors/Destroyable.ts#L19)
+
+#### Type Parameters
+
+| Type Parameter |
+| ------ |
+| `T` |
+
+#### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `key` | `string` |
+| `factory` | () => `Observable`\<`T`\> |
+
+#### Returns
+
+`Observable`\<`T`\>
+
+#### Inherited from
+
+`Destroyable.cachedObservable`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/Address/channels$.md b/fern/products/browser-sdk/pages/v4/reference/classes/Address/channels$.md
new file mode 100644
index 000000000..59433ef5c
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/Address/channels$.md
@@ -0,0 +1,39 @@
+# channels$
+
+#### Get Signature
+
+> **get** **channels$**(): `Observable`\<\{ `audio?`: `string`; `messaging?`: `string`; `video?`: `string`; \}\>
+
+Defined in: [core/entities/Address.ts:213](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Address.ts#L213)
+
+Observable of available communication channels (audio, video, messaging).
+
+##### Returns
+
+`Observable`\<\{ `audio?`: `string`; `messaging?`: `string`; `video?`: `string`; \}\>
+
+## channels
+
+#### Get Signature
+
+> **get** **channels**(): `object`
+
+Defined in: [core/entities/Address.ts:229](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Address.ts#L229)
+
+Available communication channels.
+
+##### Returns
+
+`object`
+
+###### audio?
+
+> `optional` **audio?**: `string`
+
+###### messaging?
+
+> `optional` **messaging?**: `string`
+
+###### video?
+
+> `optional` **video?**: `string`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/Address/coverUrl$.md b/fern/products/browser-sdk/pages/v4/reference/classes/Address/coverUrl$.md
new file mode 100644
index 000000000..a556ebb3b
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/Address/coverUrl$.md
@@ -0,0 +1,27 @@
+# coverUrl$
+
+#### Get Signature
+
+> **get** **coverUrl$**(): `Observable`\<`string` \| `undefined`\>
+
+Defined in: [core/entities/Address.ts:153](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Address.ts#L153)
+
+Observable of the cover image URL.
+
+##### Returns
+
+`Observable`\<`string` \| `undefined`\>
+
+## coverUrl
+
+#### Get Signature
+
+> **get** **coverUrl**(): `string` \| `undefined`
+
+Defined in: [core/entities/Address.ts:165](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Address.ts#L165)
+
+Cover image URL.
+
+##### Returns
+
+`string` \| `undefined`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/Address/createBehaviorSubject.md b/fern/products/browser-sdk/pages/v4/reference/classes/Address/createBehaviorSubject.md
new file mode 100644
index 000000000..352d48f52
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/Address/createBehaviorSubject.md
@@ -0,0 +1,25 @@
+# createBehaviorSubject
+
+> `protected` **createBehaviorSubject**\<`T`\>(`initialValue`): `BehaviorSubject`\<`T`\>
+
+Defined in: [behaviors/Destroyable.ts:85](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/behaviors/Destroyable.ts#L85)
+
+#### Type Parameters
+
+| Type Parameter |
+| ------ |
+| `T` |
+
+#### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `initialValue` | `T` |
+
+#### Returns
+
+`BehaviorSubject`\<`T`\>
+
+#### Inherited from
+
+`Destroyable.createBehaviorSubject`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/Address/createReplaySubject.md b/fern/products/browser-sdk/pages/v4/reference/classes/Address/createReplaySubject.md
new file mode 100644
index 000000000..73a4e3d3d
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/Address/createReplaySubject.md
@@ -0,0 +1,26 @@
+# createReplaySubject
+
+> `protected` **createReplaySubject**\<`T`\>(`bufferSize?`, `windowTime?`): `ReplaySubject`\<`T`\>
+
+Defined in: [behaviors/Destroyable.ts:79](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/behaviors/Destroyable.ts#L79)
+
+#### Type Parameters
+
+| Type Parameter |
+| ------ |
+| `T` |
+
+#### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `bufferSize?` | `number` |
+| `windowTime?` | `number` |
+
+#### Returns
+
+`ReplaySubject`\<`T`\>
+
+#### Inherited from
+
+`Destroyable.createReplaySubject`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/Address/createSubject.md b/fern/products/browser-sdk/pages/v4/reference/classes/Address/createSubject.md
new file mode 100644
index 000000000..532f32e97
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/Address/createSubject.md
@@ -0,0 +1,19 @@
+# createSubject
+
+> `protected` **createSubject**\<`T`\>(): `Subject`\<`T`\>
+
+Defined in: [behaviors/Destroyable.ts:73](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/behaviors/Destroyable.ts#L73)
+
+#### Type Parameters
+
+| Type Parameter |
+| ------ |
+| `T` |
+
+#### Returns
+
+`Subject`\<`T`\>
+
+#### Inherited from
+
+`Destroyable.createSubject`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/Address/createdAt.md b/fern/products/browser-sdk/pages/v4/reference/classes/Address/createdAt.md
new file mode 100644
index 000000000..d6e2c204a
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/Address/createdAt.md
@@ -0,0 +1,13 @@
+# createdAt
+
+#### Get Signature
+
+> **get** **createdAt**(): `string`
+
+Defined in: [core/entities/Address.ts:102](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Address.ts#L102)
+
+ISO timestamp of when the address was created.
+
+##### Returns
+
+`string`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/Address/defaultChannel.md b/fern/products/browser-sdk/pages/v4/reference/classes/Address/defaultChannel.md
new file mode 100644
index 000000000..a19ec52b9
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/Address/defaultChannel.md
@@ -0,0 +1,13 @@
+# defaultChannel
+
+#### Get Signature
+
+> **get** **defaultChannel**(): `string` \| `undefined`
+
+Defined in: [core/entities/Address.ts:110](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Address.ts#L110)
+
+Default communication channel URI (video for rooms, audio otherwise).
+
+##### Returns
+
+`string` \| `undefined`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/Address/deferEmission.md b/fern/products/browser-sdk/pages/v4/reference/classes/Address/deferEmission.md
new file mode 100644
index 000000000..1b1fa66a9
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/Address/deferEmission.md
@@ -0,0 +1,32 @@
+# deferEmission
+
+> `protected` **deferEmission**\<`T`\>(`observable`): `Observable`\<`T`\>
+
+Defined in: [behaviors/Destroyable.ts:61](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/behaviors/Destroyable.ts#L61)
+
+Wraps an observable so emissions are deferred to the microtask queue.
+
+Use ONLY for public-facing getters that expose a subject via
+`.asObservable()` without going through `cachedObservable`.
+
+Do NOT use for observables consumed internally by the SDK.
+
+#### Type Parameters
+
+| Type Parameter |
+| ------ |
+| `T` |
+
+#### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `observable` | `Observable`\<`T`\> |
+
+#### Returns
+
+`Observable`\<`T`\>
+
+#### Inherited from
+
+`Destroyable.deferEmission`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/Address/destroy.md b/fern/products/browser-sdk/pages/v4/reference/classes/Address/destroy.md
new file mode 100644
index 000000000..3879b122f
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/Address/destroy.md
@@ -0,0 +1,13 @@
+# destroy
+
+> **destroy**(): `void`
+
+Defined in: [behaviors/Destroyable.ts:11](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/behaviors/Destroyable.ts#L11)
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+`Destroyable.destroy`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/Address/destroyed$.md b/fern/products/browser-sdk/pages/v4/reference/classes/Address/destroyed$.md
new file mode 100644
index 000000000..63dc55fe7
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/Address/destroyed$.md
@@ -0,0 +1,17 @@
+# destroyed$
+
+#### Get Signature
+
+> **get** **destroyed$**(): `Observable`\<`void`\>
+
+Defined in: [behaviors/Destroyable.ts:94](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/behaviors/Destroyable.ts#L94)
+
+Observable that emits when the instance is destroyed
+
+##### Returns
+
+`Observable`\<`void`\>
+
+#### Inherited from
+
+`Destroyable.destroyed$`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/Address/displayName$.md b/fern/products/browser-sdk/pages/v4/reference/classes/Address/displayName$.md
new file mode 100644
index 000000000..3e28cf514
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/Address/displayName$.md
@@ -0,0 +1,27 @@
+# displayName$
+
+#### Get Signature
+
+> **get** **displayName$**(): `Observable`\<`string`\>
+
+Defined in: [core/entities/Address.ts:115](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Address.ts#L115)
+
+Observable of the human-readable display name.
+
+##### Returns
+
+`Observable`\<`string`\>
+
+## displayName
+
+#### Get Signature
+
+> **get** **displayName**(): `string`
+
+Defined in: [core/entities/Address.ts:126](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Address.ts#L126)
+
+Human-readable display name.
+
+##### Returns
+
+`string`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/Address/history.md b/fern/products/browser-sdk/pages/v4/reference/classes/Address/history.md
new file mode 100644
index 000000000..633301c12
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/Address/history.md
@@ -0,0 +1,20 @@
+# history
+
+#### Get Signature
+
+> **get** **history**(): `EntityCollectionTransformed`\<`GetConversationMessageResponse`, [`AddressHistory`](../../interfaces/AddressHistory.md)\<`Address`\>\> \| `undefined`
+
+Defined in: [core/entities/Address.ts:314](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Address.ts#L314)
+
+Collection of call history entries for this address, with pagination support.
+
+Returns `undefined` until [history$](#history) has been subscribed to (lazy-loaded).
+Filters to `'log'` subtype messages including kind, status, start/end times.
+
+##### See
+
+[history$](#history) to trigger lazy loading.
+
+##### Returns
+
+`EntityCollectionTransformed`\<`GetConversationMessageResponse`, [`AddressHistory`](../../interfaces/AddressHistory.md)\<`Address`\>\> \| `undefined`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/Address/id.md b/fern/products/browser-sdk/pages/v4/reference/classes/Address/id.md
new file mode 100644
index 000000000..a6ff82f83
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/Address/id.md
@@ -0,0 +1,13 @@
+# id
+
+#### Get Signature
+
+> **get** **id**(): `string`
+
+Defined in: [core/entities/Address.ts:90](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Address.ts#L90)
+
+Unique address identifier.
+
+##### Returns
+
+`string`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/Address/index.md b/fern/products/browser-sdk/pages/v4/reference/classes/Address/index.md
new file mode 100644
index 000000000..1655edf66
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/Address/index.md
@@ -0,0 +1,76 @@
+# Class: Address
+
+Defined in: [core/entities/Address.ts:31](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Address.ts#L31)
+
+Represents a contact or room in the directory.
+
+Provides identity metadata, conversation history, text messaging,
+and activity state for an address entry.
+
+## Extends
+
+- `Destroyable`
+
+## Constructors
+
+### Constructor
+
+> **new Address**(`addressId`, `conversationManager`, `addressProvider`): `Address`
+
+Defined in: [core/entities/Address.ts:67](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Address.ts#L67)
+
+#### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `addressId` | `string` |
+| `conversationManager` | `ConversationsProvider` |
+| `addressProvider` | `AddressProvider`\<`Address`\> |
+
+#### Returns
+
+`Address`
+
+#### Overrides
+
+`Destroyable.constructor`
+
+## Properties
+
+| Property | Modifier | Type | Default value | Description | Inherited from | Defined in |
+| ------ | ------ | ------ | ------ | ------ | ------ | ------ |
+| `_destroyed$` | `protected` | `Subject`\<`void`\> | `undefined` | - | `Destroyable._destroyed$` | [behaviors/Destroyable.ts:8](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/behaviors/Destroyable.ts#L8) |
+| `history$` | `public` | `Observable`\<`EntityCollectionTransformed`\<`GetConversationMessageResponse`, [`AddressHistory`](../../interfaces/AddressHistory.md)\<`Address`\>\> \| `undefined`\> | `undefined` | Observable of call history for this address. Lazily loads conversation data. | - | [core/entities/Address.ts:49](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Address.ts#L49) |
+| `subjects` | `protected` | `Subject`\<`unknown`\>[] | `[]` | - | `Destroyable.subjects` | [behaviors/Destroyable.ts:7](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/behaviors/Destroyable.ts#L7) |
+| `subscriptions` | `protected` | `Subscription`[] | `[]` | - | `Destroyable.subscriptions` | [behaviors/Destroyable.ts:6](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/behaviors/Destroyable.ts#L6) |
+| `textMessages$` | `public` | `Observable`\<`EntityCollectionTransformed`\<`GetConversationMessageResponse`, [`TextMessage`](../../interfaces/TextMessage.md)\<`Address`\>\> \| `undefined`\> | `undefined` | Observable of text messages for this address. Lazily loads conversation data. | - | [core/entities/Address.ts:43](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Address.ts#L43) |
+
+## Accessors
+
+- [`activity$`](./activity$.md)
+- [`channels$`](./channels$.md)
+- [`coverUrl$`](./coverUrl$.md)
+- [`createdAt`](./createdAt.md)
+- [`defaultChannel`](./defaultChannel.md)
+- [`destroyed$`](./destroyed$.md)
+- [`displayName$`](./displayName$.md)
+- [`history`](./history.md)
+- [`id`](./id.md)
+- [`locked$`](./locked$.md)
+- [`name`](./name.md)
+- [`previewUrl$`](./previewUrl$.md)
+- [`resourceId$`](./resourceId$.md)
+- [`textMessage`](./textMessage.md)
+- [`type$`](./type$.md)
+
+## Methods
+
+- [`cachedObservable`](./cachedObservable.md)
+- [`createBehaviorSubject`](./createBehaviorSubject.md)
+- [`createReplaySubject`](./createReplaySubject.md)
+- [`createSubject`](./createSubject.md)
+- [`deferEmission`](./deferEmission.md)
+- [`destroy`](./destroy.md)
+- [`publicCachedObservable`](./publicCachedObservable.md)
+- [`sendText`](./sendText.md)
+- [`subscribeTo`](./subscribeTo.md)
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/Address/locked$.md b/fern/products/browser-sdk/pages/v4/reference/classes/Address/locked$.md
new file mode 100644
index 000000000..5e4e84e79
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/Address/locked$.md
@@ -0,0 +1,27 @@
+# locked$
+
+#### Get Signature
+
+> **get** **locked$**(): `Observable`\<`boolean`\>
+
+Defined in: [core/entities/Address.ts:249](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Address.ts#L249)
+
+Observable indicating whether the address (room) is locked.
+
+##### Returns
+
+`Observable`\<`boolean`\>
+
+## locked
+
+#### Get Signature
+
+> **get** **locked**(): `boolean`
+
+Defined in: [core/entities/Address.ts:241](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Address.ts#L241)
+
+Whether the address (room) is locked.
+
+##### Returns
+
+`boolean`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/Address/name.md b/fern/products/browser-sdk/pages/v4/reference/classes/Address/name.md
new file mode 100644
index 000000000..6833a0c10
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/Address/name.md
@@ -0,0 +1,13 @@
+# name
+
+#### Get Signature
+
+> **get** **name**(): `string`
+
+Defined in: [core/entities/Address.ts:94](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Address.ts#L94)
+
+Address name (resource identifier).
+
+##### Returns
+
+`string`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/Address/previewUrl$.md b/fern/products/browser-sdk/pages/v4/reference/classes/Address/previewUrl$.md
new file mode 100644
index 000000000..d707821e6
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/Address/previewUrl$.md
@@ -0,0 +1,27 @@
+# previewUrl$
+
+#### Get Signature
+
+> **get** **previewUrl$**(): `Observable`\<`string` \| `undefined`\>
+
+Defined in: [core/entities/Address.ts:134](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Address.ts#L134)
+
+Observable of the preview image URL.
+
+##### Returns
+
+`Observable`\<`string` \| `undefined`\>
+
+## previewUrl
+
+#### Get Signature
+
+> **get** **previewUrl**(): `string` \| `undefined`
+
+Defined in: [core/entities/Address.ts:145](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Address.ts#L145)
+
+Preview image URL.
+
+##### Returns
+
+`string` \| `undefined`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/Address/publicCachedObservable.md b/fern/products/browser-sdk/pages/v4/reference/classes/Address/publicCachedObservable.md
new file mode 100644
index 000000000..2a7cb58b6
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/Address/publicCachedObservable.md
@@ -0,0 +1,38 @@
+# publicCachedObservable
+
+> `protected` **publicCachedObservable**\<`T`\>(`key`, `factory`): `Observable`\<`T`\>
+
+Defined in: [behaviors/Destroyable.ts:42](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/behaviors/Destroyable.ts#L42)
+
+Like `cachedObservable`, but defers emissions to the microtask queue
+via `observeOn(asapScheduler)`.
+
+Use ONLY for public-facing observable getters that external consumers
+subscribe to. Prevents a class of bugs where `BehaviorSubject` or
+`ReplaySubject` replays synchronously during `subscribe()`, before
+the subscription variable is assigned in the caller's scope.
+
+Do NOT use for observables consumed internally by the SDK — internal
+code using `subscribeTo()`, `firstValueFrom()`, or `withLatestFrom()`
+depends on synchronous emission delivery.
+
+#### Type Parameters
+
+| Type Parameter |
+| ------ |
+| `T` |
+
+#### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `key` | `string` |
+| `factory` | () => `Observable`\<`T`\> |
+
+#### Returns
+
+`Observable`\<`T`\>
+
+#### Inherited from
+
+`Destroyable.publicCachedObservable`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/Address/resourceId$.md b/fern/products/browser-sdk/pages/v4/reference/classes/Address/resourceId$.md
new file mode 100644
index 000000000..d01b438b5
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/Address/resourceId$.md
@@ -0,0 +1,27 @@
+# resourceId$
+
+#### Get Signature
+
+> **get** **resourceId$**(): `Observable`\<`string`\>
+
+Defined in: [core/entities/Address.ts:173](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Address.ts#L173)
+
+Observable of the underlying resource ID.
+
+##### Returns
+
+`Observable`\<`string`\>
+
+## resourceId
+
+#### Get Signature
+
+> **get** **resourceId**(): `string`
+
+Defined in: [core/entities/Address.ts:185](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Address.ts#L185)
+
+Underlying resource ID.
+
+##### Returns
+
+`string`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/Address/sendText.md b/fern/products/browser-sdk/pages/v4/reference/classes/Address/sendText.md
new file mode 100644
index 000000000..0d860c7b3
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/Address/sendText.md
@@ -0,0 +1,23 @@
+# sendText
+
+> **sendText**(`text`): `Promise`\<`void`\>
+
+Defined in: [core/entities/Address.ts:270](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Address.ts#L270)
+
+Sends a text message to this address.
+
+#### Parameters
+
+| Parameter | Type | Description |
+| ------ | ------ | ------ |
+| `text` | `string` | The message text to send. |
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Example
+
+```ts
+await address.sendText('Hello!');
+```
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/Address/subscribeTo.md b/fern/products/browser-sdk/pages/v4/reference/classes/Address/subscribeTo.md
new file mode 100644
index 000000000..f75dcd4b5
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/Address/subscribeTo.md
@@ -0,0 +1,26 @@
+# subscribeTo
+
+> `protected` **subscribeTo**\<`T`\>(`observable`, `observerOrNext`): `void`
+
+Defined in: [behaviors/Destroyable.ts:65](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/behaviors/Destroyable.ts#L65)
+
+#### Type Parameters
+
+| Type Parameter |
+| ------ |
+| `T` |
+
+#### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `observable` | `Observable`\<`T`\> |
+| `observerOrNext` | `Partial`\<`Observer`\<`T`\>\> \| ((`value`) => `void`) \| `undefined` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+`Destroyable.subscribeTo`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/Address/textMessage.md b/fern/products/browser-sdk/pages/v4/reference/classes/Address/textMessage.md
new file mode 100644
index 000000000..d62d666a3
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/Address/textMessage.md
@@ -0,0 +1,21 @@
+# textMessage
+
+#### Get Signature
+
+> **get** **textMessage**(): `EntityCollectionTransformed`\<`GetConversationMessageResponse`, [`TextMessage`](../../interfaces/TextMessage.md)\<`Address`\>\> \| `undefined`
+
+Defined in: [core/entities/Address.ts:283](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Address.ts#L283)
+
+Collection of text messages for this address, with pagination support.
+
+Returns `undefined` until [textMessages$](#textmessages) has been subscribed to (lazy-loaded).
+Filters to `'chat'` subtype messages from the conversation.
+
+##### See
+
+ - [textMessages$](#textmessages) to trigger lazy loading.
+ - [sendText](#sendtext) to send a new message.
+
+##### Returns
+
+`EntityCollectionTransformed`\<`GetConversationMessageResponse`, [`TextMessage`](../../interfaces/TextMessage.md)\<`Address`\>\> \| `undefined`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/Address/type$.md b/fern/products/browser-sdk/pages/v4/reference/classes/Address/type$.md
new file mode 100644
index 000000000..a5904e1fd
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/Address/type$.md
@@ -0,0 +1,27 @@
+# type$
+
+#### Get Signature
+
+> **get** **type$**(): `Observable`\<`ResourceType`\>
+
+Defined in: [core/entities/Address.ts:193](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Address.ts#L193)
+
+Observable of the resource type (e.g. `'room'`, `'subscriber'`).
+
+##### Returns
+
+`Observable`\<`ResourceType`\>
+
+## type
+
+#### Get Signature
+
+> **get** **type**(): `ResourceType`
+
+Defined in: [core/entities/Address.ts:205](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Address.ts#L205)
+
+Resource type (e.g. `'room'`, `'subscriber'`).
+
+##### Returns
+
+`ResourceType`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/CallCreateError.md b/fern/products/browser-sdk/pages/v4/reference/classes/CallCreateError.md
new file mode 100644
index 000000000..fefb6d968
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/CallCreateError.md
@@ -0,0 +1,40 @@
+# Class: CallCreateError
+
+Defined in: [core/errors.ts:264](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/errors.ts#L264)
+
+## Extends
+
+- `Error`
+
+## Constructors
+
+### Constructor
+
+> **new CallCreateError**(`message`, `error?`, `direction?`, `options?`): `CallCreateError`
+
+Defined in: [core/errors.ts:265](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/errors.ts#L265)
+
+#### Parameters
+
+| Parameter | Type | Default value |
+| ------ | ------ | ------ |
+| `message` | `string` | `undefined` |
+| `error` | `unknown` | `null` |
+| `direction` | `"inbound"` \| `"outbound"` | `'outbound'` |
+| `options?` | `ErrorOptions` | `undefined` |
+
+#### Returns
+
+`CallCreateError`
+
+#### Overrides
+
+`Error.constructor`
+
+## Properties
+
+| Property | Modifier | Type | Default value | Inherited from | Defined in |
+| ------ | ------ | ------ | ------ | ------ | ------ |
+| `direction` | `public` | `"inbound"` \| `"outbound"` | `'outbound'` | - | [core/errors.ts:268](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/errors.ts#L268) |
+| `error` | `public` | `unknown` | `null` | - | [core/errors.ts:267](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/errors.ts#L267) |
+| `message` | `public` | `string` | `undefined` | `Error.message` | [core/errors.ts:266](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/errors.ts#L266) |
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/autoMuteVideoOnHidden.md b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/autoMuteVideoOnHidden.md
new file mode 100644
index 000000000..d7520d7b0
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/autoMuteVideoOnHidden.md
@@ -0,0 +1,29 @@
+# autoMuteVideoOnHidden
+
+#### Get Signature
+
+> **get** **autoMuteVideoOnHidden**(): `boolean`
+
+Defined in: [containers/PreferencesContainer.ts:898](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L898)
+
+Whether to auto-mute video when the tab becomes hidden.
+
+##### Returns
+
+`boolean`
+
+#### Set Signature
+
+> **set** **autoMuteVideoOnHidden**(`value`): `void`
+
+Defined in: [containers/PreferencesContainer.ts:901](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L901)
+
+##### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `value` | `boolean` |
+
+##### Returns
+
+`void`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/checkConnectionOnVisible.md b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/checkConnectionOnVisible.md
new file mode 100644
index 000000000..a32e9de6b
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/checkConnectionOnVisible.md
@@ -0,0 +1,29 @@
+# checkConnectionOnVisible
+
+#### Get Signature
+
+> **get** **checkConnectionOnVisible**(): `boolean`
+
+Defined in: [containers/PreferencesContainer.ts:916](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L916)
+
+Whether to check peer connection health when the page becomes visible.
+
+##### Returns
+
+`boolean`
+
+#### Set Signature
+
+> **set** **checkConnectionOnVisible**(`value`): `void`
+
+Defined in: [containers/PreferencesContainer.ts:919](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L919)
+
+##### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `value` | `boolean` |
+
+##### Returns
+
+`void`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/connectionTimeout.md b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/connectionTimeout.md
new file mode 100644
index 000000000..af7ce0ac5
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/connectionTimeout.md
@@ -0,0 +1,29 @@
+# connectionTimeout
+
+#### Get Signature
+
+> **get** **connectionTimeout**(): `number`
+
+Defined in: [containers/PreferencesContainer.ts:492](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L492)
+
+WebSocket connection timeout in seconds.
+
+##### Returns
+
+`number`
+
+#### Set Signature
+
+> **set** **connectionTimeout**(`seconds`): `void`
+
+Defined in: [containers/PreferencesContainer.ts:495](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L495)
+
+##### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `seconds` | `number` |
+
+##### Returns
+
+`void`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/defaultAudioConstraints.md b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/defaultAudioConstraints.md
new file mode 100644
index 000000000..ff870ce45
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/defaultAudioConstraints.md
@@ -0,0 +1,29 @@
+# defaultAudioConstraints
+
+#### Get Signature
+
+> **get** **defaultAudioConstraints**(): `MediaTrackConstraints` \| `undefined`
+
+Defined in: [containers/PreferencesContainer.ts:929](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L929)
+
+Default audio track constraints applied when no explicit constraints are provided.
+
+##### Returns
+
+`MediaTrackConstraints` \| `undefined`
+
+#### Set Signature
+
+> **set** **defaultAudioConstraints**(`value`): `void`
+
+Defined in: [containers/PreferencesContainer.ts:932](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L932)
+
+##### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `value` | `MediaTrackConstraints` \| `undefined` |
+
+##### Returns
+
+`void`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/defaultVideoConstraints.md b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/defaultVideoConstraints.md
new file mode 100644
index 000000000..08658f44b
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/defaultVideoConstraints.md
@@ -0,0 +1,29 @@
+# defaultVideoConstraints
+
+#### Get Signature
+
+> **get** **defaultVideoConstraints**(): `MediaTrackConstraints` \| `undefined`
+
+Defined in: [containers/PreferencesContainer.ts:937](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L937)
+
+Default video track constraints applied when video is enabled without explicit constraints.
+
+##### Returns
+
+`MediaTrackConstraints` \| `undefined`
+
+#### Set Signature
+
+> **set** **defaultVideoConstraints**(`value`): `void`
+
+Defined in: [containers/PreferencesContainer.ts:940](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L940)
+
+##### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `value` | `MediaTrackConstraints` \| `undefined` |
+
+##### Returns
+
+`void`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/degradationBitrateThreshold.md b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/degradationBitrateThreshold.md
new file mode 100644
index 000000000..f07869a6f
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/degradationBitrateThreshold.md
@@ -0,0 +1,29 @@
+# degradationBitrateThreshold
+
+#### Get Signature
+
+> **get** **degradationBitrateThreshold**(): `number`
+
+Defined in: [containers/PreferencesContainer.ts:967](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L967)
+
+Bitrate in kbps below which video is automatically disabled.
+
+##### Returns
+
+`number`
+
+#### Set Signature
+
+> **set** **degradationBitrateThreshold**(`value`): `void`
+
+Defined in: [containers/PreferencesContainer.ts:970](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L970)
+
+##### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `value` | `number` |
+
+##### Returns
+
+`void`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/degradationRecoveryThreshold.md b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/degradationRecoveryThreshold.md
new file mode 100644
index 000000000..211e478ab
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/degradationRecoveryThreshold.md
@@ -0,0 +1,29 @@
+# degradationRecoveryThreshold
+
+#### Get Signature
+
+> **get** **degradationRecoveryThreshold**(): `number`
+
+Defined in: [containers/PreferencesContainer.ts:976](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L976)
+
+Bitrate in kbps above which video is automatically re-enabled.
+
+##### Returns
+
+`number`
+
+#### Set Signature
+
+> **set** **degradationRecoveryThreshold**(`value`): `void`
+
+Defined in: [containers/PreferencesContainer.ts:979](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L979)
+
+##### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `value` | `number` |
+
+##### Returns
+
+`void`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/deviceDebounceTime.md b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/deviceDebounceTime.md
new file mode 100644
index 000000000..0cdfa7f23
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/deviceDebounceTime.md
@@ -0,0 +1,29 @@
+# deviceDebounceTime
+
+#### Get Signature
+
+> **get** **deviceDebounceTime**(): `number`
+
+Defined in: [containers/PreferencesContainer.ts:595](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L595)
+
+Debounce time for device change events, in seconds.
+
+##### Returns
+
+`number`
+
+#### Set Signature
+
+> **set** **deviceDebounceTime**(`seconds`): `void`
+
+Defined in: [containers/PreferencesContainer.ts:598](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L598)
+
+##### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `seconds` | `number` |
+
+##### Returns
+
+`void`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/devicePollingInterval.md b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/devicePollingInterval.md
new file mode 100644
index 000000000..93a45fcce
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/devicePollingInterval.md
@@ -0,0 +1,29 @@
+# devicePollingInterval
+
+#### Get Signature
+
+> **get** **devicePollingInterval**(): `number`
+
+Defined in: [containers/PreferencesContainer.ts:604](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L604)
+
+Polling interval for device enumeration, in seconds.
+
+##### Returns
+
+`number`
+
+#### Set Signature
+
+> **set** **devicePollingInterval**(`seconds`): `void`
+
+Defined in: [containers/PreferencesContainer.ts:607](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L607)
+
+##### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `seconds` | `number` |
+
+##### Returns
+
+`void`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/disableUdpIceServers.md b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/disableUdpIceServers.md
new file mode 100644
index 000000000..41a0ca05d
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/disableUdpIceServers.md
@@ -0,0 +1,29 @@
+# disableUdpIceServers
+
+#### Get Signature
+
+> **get** **disableUdpIceServers**(): `boolean`
+
+Defined in: [containers/PreferencesContainer.ts:613](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L613)
+
+Whether to filter out UDP-based ICE servers.
+
+##### Returns
+
+`boolean`
+
+#### Set Signature
+
+> **set** **disableUdpIceServers**(`value`): `void`
+
+Defined in: [containers/PreferencesContainer.ts:616](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L616)
+
+##### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `value` | `boolean` |
+
+##### Returns
+
+`void`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/enableAutoDegradation.md b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/enableAutoDegradation.md
new file mode 100644
index 000000000..b92b72367
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/enableAutoDegradation.md
@@ -0,0 +1,29 @@
+# enableAutoDegradation
+
+#### Get Signature
+
+> **get** **enableAutoDegradation**(): `boolean`
+
+Defined in: [containers/PreferencesContainer.ts:958](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L958)
+
+Whether automatic video degradation on low bandwidth is enabled.
+
+##### Returns
+
+`boolean`
+
+#### Set Signature
+
+> **set** **enableAutoDegradation**(`value`): `void`
+
+Defined in: [containers/PreferencesContainer.ts:961](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L961)
+
+##### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `value` | `boolean` |
+
+##### Returns
+
+`void`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/enableNetworkChangeDetection.md b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/enableNetworkChangeDetection.md
new file mode 100644
index 000000000..38becb4f4
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/enableNetworkChangeDetection.md
@@ -0,0 +1,29 @@
+# enableNetworkChangeDetection
+
+#### Get Signature
+
+> **get** **enableNetworkChangeDetection**(): `boolean`
+
+Defined in: [containers/PreferencesContainer.ts:854](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L854)
+
+Whether browser network change detection (online/offline) is enabled.
+
+##### Returns
+
+`boolean`
+
+#### Set Signature
+
+> **set** **enableNetworkChangeDetection**(`value`): `void`
+
+Defined in: [containers/PreferencesContainer.ts:857](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L857)
+
+##### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `value` | `boolean` |
+
+##### Returns
+
+`void`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/enableRelayFallback.md b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/enableRelayFallback.md
new file mode 100644
index 000000000..fbac3ed64
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/enableRelayFallback.md
@@ -0,0 +1,29 @@
+# enableRelayFallback
+
+#### Get Signature
+
+> **get** **enableRelayFallback**(): `boolean`
+
+Defined in: [containers/PreferencesContainer.ts:845](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L845)
+
+Whether relay-only escalation is enabled as a last-resort recovery tier.
+
+##### Returns
+
+`boolean`
+
+#### Set Signature
+
+> **set** **enableRelayFallback**(`value`): `void`
+
+Defined in: [containers/PreferencesContainer.ts:848](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L848)
+
+##### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `value` | `boolean` |
+
+##### Returns
+
+`void`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/enableSavePreferences.md b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/enableSavePreferences.md
new file mode 100644
index 000000000..21a6247ab
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/enableSavePreferences.md
@@ -0,0 +1,18 @@
+# enableSavePreferences
+
+> **enableSavePreferences**(`storage`): `void`
+
+Defined in: [containers/PreferencesContainer.ts:486](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L486)
+
+Enables persistence of preferences to storage.
+Loads any previously saved preferences and syncs future changes.
+
+#### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `storage` | `StorageManager` |
+
+#### Returns
+
+`void`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/enableServerHangupInterception.md b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/enableServerHangupInterception.md
new file mode 100644
index 000000000..e3875a204
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/enableServerHangupInterception.md
@@ -0,0 +1,29 @@
+# enableServerHangupInterception
+
+#### Get Signature
+
+> **get** **enableServerHangupInterception**(): `boolean`
+
+Defined in: [containers/PreferencesContainer.ts:863](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L863)
+
+Whether server-sent media-timeout hangups are intercepted for recovery.
+
+##### Returns
+
+`boolean`
+
+#### Set Signature
+
+> **set** **enableServerHangupInterception**(`value`): `void`
+
+Defined in: [containers/PreferencesContainer.ts:866](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L866)
+
+##### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `value` | `boolean` |
+
+##### Returns
+
+`void`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/iceCandidateTimeout.md b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/iceCandidateTimeout.md
new file mode 100644
index 000000000..003615dd0
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/iceCandidateTimeout.md
@@ -0,0 +1,29 @@
+# iceCandidateTimeout
+
+#### Get Signature
+
+> **get** **iceCandidateTimeout**(): `number`
+
+Defined in: [containers/PreferencesContainer.ts:631](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L631)
+
+Timeout for individual ICE candidate gathering, in seconds.
+
+##### Returns
+
+`number`
+
+#### Set Signature
+
+> **set** **iceCandidateTimeout**(`seconds`): `void`
+
+Defined in: [containers/PreferencesContainer.ts:634](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L634)
+
+##### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `seconds` | `number` |
+
+##### Returns
+
+`void`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/iceDisconnectedGracePeriod.md b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/iceDisconnectedGracePeriod.md
new file mode 100644
index 000000000..746086520
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/iceDisconnectedGracePeriod.md
@@ -0,0 +1,29 @@
+# iceDisconnectedGracePeriod
+
+#### Get Signature
+
+> **get** **iceDisconnectedGracePeriod**(): `number`
+
+Defined in: [containers/PreferencesContainer.ts:818](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L818)
+
+Grace period before treating ICE 'disconnected' as failure, in seconds.
+
+##### Returns
+
+`number`
+
+#### Set Signature
+
+> **set** **iceDisconnectedGracePeriod**(`seconds`): `void`
+
+Defined in: [containers/PreferencesContainer.ts:821](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L821)
+
+##### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `seconds` | `number` |
+
+##### Returns
+
+`void`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/iceGatheringTimeout.md b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/iceGatheringTimeout.md
new file mode 100644
index 000000000..f878cc5ce
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/iceGatheringTimeout.md
@@ -0,0 +1,29 @@
+# iceGatheringTimeout
+
+#### Get Signature
+
+> **get** **iceGatheringTimeout**(): `number`
+
+Defined in: [containers/PreferencesContainer.ts:640](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L640)
+
+Timeout for the entire ICE gathering phase, in seconds.
+
+##### Returns
+
+`number`
+
+#### Set Signature
+
+> **set** **iceGatheringTimeout**(`seconds`): `void`
+
+Defined in: [containers/PreferencesContainer.ts:643](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L643)
+
+##### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `seconds` | `number` |
+
+##### Returns
+
+`void`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/iceRestartTimeout.md b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/iceRestartTimeout.md
new file mode 100644
index 000000000..89c01187a
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/iceRestartTimeout.md
@@ -0,0 +1,29 @@
+# iceRestartTimeout
+
+#### Get Signature
+
+> **get** **iceRestartTimeout**(): `number`
+
+Defined in: [containers/PreferencesContainer.ts:827](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L827)
+
+Timeout for a single ICE restart attempt in seconds.
+
+##### Returns
+
+`number`
+
+#### Set Signature
+
+> **set** **iceRestartTimeout**(`seconds`): `void`
+
+Defined in: [containers/PreferencesContainer.ts:830](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L830)
+
+##### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `seconds` | `number` |
+
+##### Returns
+
+`void`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/iceServers.md b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/iceServers.md
new file mode 100644
index 000000000..1defd402a
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/iceServers.md
@@ -0,0 +1,29 @@
+# iceServers
+
+#### Get Signature
+
+> **get** **iceServers**(): `RTCIceServer`[] \| `undefined`
+
+Defined in: [containers/PreferencesContainer.ts:649](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L649)
+
+Custom ICE servers for TURN/STUN configuration.
+
+##### Returns
+
+`RTCIceServer`[] \| `undefined`
+
+#### Set Signature
+
+> **set** **iceServers**(`value`): `void`
+
+Defined in: [containers/PreferencesContainer.ts:652](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L652)
+
+##### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `value` | `RTCIceServer`[] \| `undefined` |
+
+##### Returns
+
+`void`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/index.md b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/index.md
new file mode 100644
index 000000000..2b366cf90
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/index.md
@@ -0,0 +1,82 @@
+# Class: ClientPreferences
+
+Defined in: [containers/PreferencesContainer.ts:479](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L479)
+
+Public preferences API for configuring SDK behavior.
+
+Exposed as [SignalWire.preferences](SignalWire.md#preferences). All timeout values
+are in seconds when accessed through this class.
+
+When [enableSavePreferences](#enablesavepreferences) is called, preferences are
+automatically loaded from storage and synced back on every change.
+
+## Constructors
+
+### Constructor
+
+> **new ClientPreferences**(): `ClientPreferences`
+
+#### Returns
+
+`ClientPreferences`
+
+## Accessors
+
+- [`autoMuteVideoOnHidden`](./autoMuteVideoOnHidden.md)
+- [`checkConnectionOnVisible`](./checkConnectionOnVisible.md)
+- [`connectionTimeout`](./connectionTimeout.md)
+- [`defaultAudioConstraints`](./defaultAudioConstraints.md)
+- [`defaultVideoConstraints`](./defaultVideoConstraints.md)
+- [`degradationBitrateThreshold`](./degradationBitrateThreshold.md)
+- [`degradationRecoveryThreshold`](./degradationRecoveryThreshold.md)
+- [`deviceDebounceTime`](./deviceDebounceTime.md)
+- [`devicePollingInterval`](./devicePollingInterval.md)
+- [`disableUdpIceServers`](./disableUdpIceServers.md)
+- [`enableAutoDegradation`](./enableAutoDegradation.md)
+- [`enableNetworkChangeDetection`](./enableNetworkChangeDetection.md)
+- [`enableRelayFallback`](./enableRelayFallback.md)
+- [`enableServerHangupInterception`](./enableServerHangupInterception.md)
+- [`iceCandidateTimeout`](./iceCandidateTimeout.md)
+- [`iceDisconnectedGracePeriod`](./iceDisconnectedGracePeriod.md)
+- [`iceGatheringTimeout`](./iceGatheringTimeout.md)
+- [`iceRestartTimeout`](./iceRestartTimeout.md)
+- [`iceServers`](./iceServers.md)
+- [`inputAudioConstraints`](./inputAudioConstraints.md)
+- [`inputVideoConstraints`](./inputVideoConstraints.md)
+- [`keyframeBurstWindow`](./keyframeBurstWindow.md)
+- [`keyframeCooldown`](./keyframeCooldown.md)
+- [`keyframeMaxBurst`](./keyframeMaxBurst.md)
+- [`maxRecoveryAttempts`](./maxRecoveryAttempts.md)
+- [`persistDeviceSelection`](./persistDeviceSelection.md)
+- [`preferredAudioCodecs`](./preferredAudioCodecs.md)
+- [`preferredAudioInput`](./preferredAudioInput.md)
+- [`preferredAudioOutput`](./preferredAudioOutput.md)
+- [`preferredVideoCodecs`](./preferredVideoCodecs.md)
+- [`preferredVideoInput`](./preferredVideoInput.md)
+- [`receiveAudio`](./receiveAudio.md)
+- [`receiveVideo`](./receiveVideo.md)
+- [`reconnectCallsTimeout`](./reconnectCallsTimeout.md)
+- [`reconnectDelayMax`](./reconnectDelayMax.md)
+- [`reconnectDelayMin`](./reconnectDelayMin.md)
+- [`recoveryCooldown`](./recoveryCooldown.md)
+- [`recoveryDebounceTime`](./recoveryDebounceTime.md)
+- [`refreshDevicesOnVisible`](./refreshDevicesOnVisible.md)
+- [`reinviteDebounceTime`](./reinviteDebounceTime.md)
+- [`reinviteMaxAttempts`](./reinviteMaxAttempts.md)
+- [`reinviteTimeout`](./reinviteTimeout.md)
+- [`relayHost`](./relayHost.md)
+- [`relayOnly`](./relayOnly.md)
+- [`statsBaselineSamples`](./statsBaselineSamples.md)
+- [`statsHistorySize`](./statsHistorySize.md)
+- [`statsJitterSpikeMultiplier`](./statsJitterSpikeMultiplier.md)
+- [`statsNoPacketThreshold`](./statsNoPacketThreshold.md)
+- [`statsPacketLossThreshold`](./statsPacketLossThreshold.md)
+- [`statsPollingInterval`](./statsPollingInterval.md)
+- [`statsRttSpikeMultiplier`](./statsRttSpikeMultiplier.md)
+- [`stereoAudio`](./stereoAudio.md)
+- [`syncDevicesToActiveCalls`](./syncDevicesToActiveCalls.md)
+- [`userVariables`](./userVariables.md)
+
+## Methods
+
+- [`enableSavePreferences`](./enableSavePreferences.md)
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/inputAudioConstraints.md b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/inputAudioConstraints.md
new file mode 100644
index 000000000..c8d4e4c9b
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/inputAudioConstraints.md
@@ -0,0 +1,29 @@
+# inputAudioConstraints
+
+#### Get Signature
+
+> **get** **inputAudioConstraints**(): `MediaTrackConstraints` \| `undefined`
+
+Defined in: [containers/PreferencesContainer.ts:579](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L579)
+
+Default audio input track constraints.
+
+##### Returns
+
+`MediaTrackConstraints` \| `undefined`
+
+#### Set Signature
+
+> **set** **inputAudioConstraints**(`value`): `void`
+
+Defined in: [containers/PreferencesContainer.ts:582](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L582)
+
+##### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `value` | `MediaTrackConstraints` \| `undefined` |
+
+##### Returns
+
+`void`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/inputVideoConstraints.md b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/inputVideoConstraints.md
new file mode 100644
index 000000000..4431695cb
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/inputVideoConstraints.md
@@ -0,0 +1,29 @@
+# inputVideoConstraints
+
+#### Get Signature
+
+> **get** **inputVideoConstraints**(): `MediaTrackConstraints` \| `undefined`
+
+Defined in: [containers/PreferencesContainer.ts:587](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L587)
+
+Default video input track constraints.
+
+##### Returns
+
+`MediaTrackConstraints` \| `undefined`
+
+#### Set Signature
+
+> **set** **inputVideoConstraints**(`value`): `void`
+
+Defined in: [containers/PreferencesContainer.ts:590](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L590)
+
+##### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `value` | `MediaTrackConstraints` \| `undefined` |
+
+##### Returns
+
+`void`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/keyframeBurstWindow.md b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/keyframeBurstWindow.md
new file mode 100644
index 000000000..873c00488
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/keyframeBurstWindow.md
@@ -0,0 +1,29 @@
+# keyframeBurstWindow
+
+#### Get Signature
+
+> **get** **keyframeBurstWindow**(): `number`
+
+Defined in: [containers/PreferencesContainer.ts:747](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L747)
+
+Keyframe burst window duration in milliseconds.
+
+##### Returns
+
+`number`
+
+#### Set Signature
+
+> **set** **keyframeBurstWindow**(`value`): `void`
+
+Defined in: [containers/PreferencesContainer.ts:750](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L750)
+
+##### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `value` | `number` |
+
+##### Returns
+
+`void`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/keyframeCooldown.md b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/keyframeCooldown.md
new file mode 100644
index 000000000..b22e1aebb
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/keyframeCooldown.md
@@ -0,0 +1,29 @@
+# keyframeCooldown
+
+#### Get Signature
+
+> **get** **keyframeCooldown**(): `number`
+
+Defined in: [containers/PreferencesContainer.ts:756](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L756)
+
+Cooldown period in ms after keyframe burst limit is reached.
+
+##### Returns
+
+`number`
+
+#### Set Signature
+
+> **set** **keyframeCooldown**(`value`): `void`
+
+Defined in: [containers/PreferencesContainer.ts:759](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L759)
+
+##### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `value` | `number` |
+
+##### Returns
+
+`void`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/keyframeMaxBurst.md b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/keyframeMaxBurst.md
new file mode 100644
index 000000000..5acfb9017
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/keyframeMaxBurst.md
@@ -0,0 +1,29 @@
+# keyframeMaxBurst
+
+#### Get Signature
+
+> **get** **keyframeMaxBurst**(): `number`
+
+Defined in: [containers/PreferencesContainer.ts:738](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L738)
+
+Maximum keyframe requests in a burst window.
+
+##### Returns
+
+`number`
+
+#### Set Signature
+
+> **set** **keyframeMaxBurst**(`value`): `void`
+
+Defined in: [containers/PreferencesContainer.ts:741](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L741)
+
+##### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `value` | `number` |
+
+##### Returns
+
+`void`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/maxRecoveryAttempts.md b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/maxRecoveryAttempts.md
new file mode 100644
index 000000000..df15313e8
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/maxRecoveryAttempts.md
@@ -0,0 +1,29 @@
+# maxRecoveryAttempts
+
+#### Get Signature
+
+> **get** **maxRecoveryAttempts**(): `number`
+
+Defined in: [containers/PreferencesContainer.ts:836](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L836)
+
+Maximum recovery attempts before giving up.
+
+##### Returns
+
+`number`
+
+#### Set Signature
+
+> **set** **maxRecoveryAttempts**(`value`): `void`
+
+Defined in: [containers/PreferencesContainer.ts:839](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L839)
+
+##### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `value` | `number` |
+
+##### Returns
+
+`void`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/persistDeviceSelection.md b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/persistDeviceSelection.md
new file mode 100644
index 000000000..c1f3958fa
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/persistDeviceSelection.md
@@ -0,0 +1,29 @@
+# persistDeviceSelection
+
+#### Get Signature
+
+> **get** **persistDeviceSelection**(): `boolean`
+
+Defined in: [containers/PreferencesContainer.ts:876](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L876)
+
+Whether device selections are persisted to storage.
+
+##### Returns
+
+`boolean`
+
+#### Set Signature
+
+> **set** **persistDeviceSelection**(`value`): `void`
+
+Defined in: [containers/PreferencesContainer.ts:879](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L879)
+
+##### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `value` | `boolean` |
+
+##### Returns
+
+`void`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/preferredAudioCodecs.md b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/preferredAudioCodecs.md
new file mode 100644
index 000000000..06bbb294a
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/preferredAudioCodecs.md
@@ -0,0 +1,29 @@
+# preferredAudioCodecs
+
+#### Get Signature
+
+> **get** **preferredAudioCodecs**(): `string`[]
+
+Defined in: [containers/PreferencesContainer.ts:998](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L998)
+
+Preferred audio codecs in priority order.
+
+##### Returns
+
+`string`[]
+
+#### Set Signature
+
+> **set** **preferredAudioCodecs**(`value`): `void`
+
+Defined in: [containers/PreferencesContainer.ts:1001](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L1001)
+
+##### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `value` | `string`[] |
+
+##### Returns
+
+`void`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/preferredAudioInput.md b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/preferredAudioInput.md
new file mode 100644
index 000000000..7eaa0c736
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/preferredAudioInput.md
@@ -0,0 +1,29 @@
+# preferredAudioInput
+
+#### Get Signature
+
+> **get** **preferredAudioInput**(): `MediaDeviceInfo` \| `null`
+
+Defined in: [containers/PreferencesContainer.ts:555](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L555)
+
+Preferred audio input device for new calls.
+
+##### Returns
+
+`MediaDeviceInfo` \| `null`
+
+#### Set Signature
+
+> **set** **preferredAudioInput**(`value`): `void`
+
+Defined in: [containers/PreferencesContainer.ts:558](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L558)
+
+##### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `value` | `MediaDeviceInfo` \| `null` |
+
+##### Returns
+
+`void`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/preferredAudioOutput.md b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/preferredAudioOutput.md
new file mode 100644
index 000000000..41ab1ab95
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/preferredAudioOutput.md
@@ -0,0 +1,29 @@
+# preferredAudioOutput
+
+#### Get Signature
+
+> **get** **preferredAudioOutput**(): `MediaDeviceInfo` \| `null`
+
+Defined in: [containers/PreferencesContainer.ts:563](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L563)
+
+Preferred audio output device for new calls.
+
+##### Returns
+
+`MediaDeviceInfo` \| `null`
+
+#### Set Signature
+
+> **set** **preferredAudioOutput**(`value`): `void`
+
+Defined in: [containers/PreferencesContainer.ts:566](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L566)
+
+##### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `value` | `MediaDeviceInfo` \| `null` |
+
+##### Returns
+
+`void`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/preferredVideoCodecs.md b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/preferredVideoCodecs.md
new file mode 100644
index 000000000..87aa70560
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/preferredVideoCodecs.md
@@ -0,0 +1,29 @@
+# preferredVideoCodecs
+
+#### Get Signature
+
+> **get** **preferredVideoCodecs**(): `string`[]
+
+Defined in: [containers/PreferencesContainer.ts:989](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L989)
+
+Preferred video codecs in priority order.
+
+##### Returns
+
+`string`[]
+
+#### Set Signature
+
+> **set** **preferredVideoCodecs**(`value`): `void`
+
+Defined in: [containers/PreferencesContainer.ts:992](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L992)
+
+##### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `value` | `string`[] |
+
+##### Returns
+
+`void`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/preferredVideoInput.md b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/preferredVideoInput.md
new file mode 100644
index 000000000..07b0bb845
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/preferredVideoInput.md
@@ -0,0 +1,29 @@
+# preferredVideoInput
+
+#### Get Signature
+
+> **get** **preferredVideoInput**(): `MediaDeviceInfo` \| `null`
+
+Defined in: [containers/PreferencesContainer.ts:571](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L571)
+
+Preferred video input device for new calls.
+
+##### Returns
+
+`MediaDeviceInfo` \| `null`
+
+#### Set Signature
+
+> **set** **preferredVideoInput**(`value`): `void`
+
+Defined in: [containers/PreferencesContainer.ts:574](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L574)
+
+##### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `value` | `MediaDeviceInfo` \| `null` |
+
+##### Returns
+
+`void`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/receiveAudio.md b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/receiveAudio.md
new file mode 100644
index 000000000..6f2c29bfc
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/receiveAudio.md
@@ -0,0 +1,29 @@
+# receiveAudio
+
+#### Get Signature
+
+> **get** **receiveAudio**(): `boolean`
+
+Defined in: [containers/PreferencesContainer.ts:546](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L546)
+
+Whether to receive remote audio by default.
+
+##### Returns
+
+`boolean`
+
+#### Set Signature
+
+> **set** **receiveAudio**(`value`): `void`
+
+Defined in: [containers/PreferencesContainer.ts:549](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L549)
+
+##### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `value` | `boolean` |
+
+##### Returns
+
+`void`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/receiveVideo.md b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/receiveVideo.md
new file mode 100644
index 000000000..869e3a103
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/receiveVideo.md
@@ -0,0 +1,29 @@
+# receiveVideo
+
+#### Get Signature
+
+> **get** **receiveVideo**(): `boolean`
+
+Defined in: [containers/PreferencesContainer.ts:537](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L537)
+
+Whether to receive remote video by default.
+
+##### Returns
+
+`boolean`
+
+#### Set Signature
+
+> **set** **receiveVideo**(`value`): `void`
+
+Defined in: [containers/PreferencesContainer.ts:540](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L540)
+
+##### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `value` | `boolean` |
+
+##### Returns
+
+`void`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/reconnectCallsTimeout.md b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/reconnectCallsTimeout.md
new file mode 100644
index 000000000..257cd24ce
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/reconnectCallsTimeout.md
@@ -0,0 +1,29 @@
+# reconnectCallsTimeout
+
+#### Get Signature
+
+> **get** **reconnectCallsTimeout**(): `number`
+
+Defined in: [containers/PreferencesContainer.ts:501](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L501)
+
+Timeout for reconnecting to previously attached calls, in seconds.
+
+##### Returns
+
+`number`
+
+#### Set Signature
+
+> **set** **reconnectCallsTimeout**(`seconds`): `void`
+
+Defined in: [containers/PreferencesContainer.ts:504](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L504)
+
+##### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `seconds` | `number` |
+
+##### Returns
+
+`void`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/reconnectDelayMax.md b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/reconnectDelayMax.md
new file mode 100644
index 000000000..285c5b396
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/reconnectDelayMax.md
@@ -0,0 +1,29 @@
+# reconnectDelayMax
+
+#### Get Signature
+
+> **get** **reconnectDelayMax**(): `number`
+
+Defined in: [containers/PreferencesContainer.ts:519](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L519)
+
+Maximum reconnection backoff delay in seconds.
+
+##### Returns
+
+`number`
+
+#### Set Signature
+
+> **set** **reconnectDelayMax**(`seconds`): `void`
+
+Defined in: [containers/PreferencesContainer.ts:522](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L522)
+
+##### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `seconds` | `number` |
+
+##### Returns
+
+`void`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/reconnectDelayMin.md b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/reconnectDelayMin.md
new file mode 100644
index 000000000..7b0cf6980
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/reconnectDelayMin.md
@@ -0,0 +1,29 @@
+# reconnectDelayMin
+
+#### Get Signature
+
+> **get** **reconnectDelayMin**(): `number`
+
+Defined in: [containers/PreferencesContainer.ts:510](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L510)
+
+Minimum reconnection backoff delay in seconds.
+
+##### Returns
+
+`number`
+
+#### Set Signature
+
+> **set** **reconnectDelayMin**(`seconds`): `void`
+
+Defined in: [containers/PreferencesContainer.ts:513](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L513)
+
+##### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `seconds` | `number` |
+
+##### Returns
+
+`void`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/recoveryCooldown.md b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/recoveryCooldown.md
new file mode 100644
index 000000000..efee1e760
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/recoveryCooldown.md
@@ -0,0 +1,29 @@
+# recoveryCooldown
+
+#### Get Signature
+
+> **get** **recoveryCooldown**(): `number`
+
+Defined in: [containers/PreferencesContainer.ts:809](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L809)
+
+Cooldown period between recovery attempts in seconds.
+
+##### Returns
+
+`number`
+
+#### Set Signature
+
+> **set** **recoveryCooldown**(`seconds`): `void`
+
+Defined in: [containers/PreferencesContainer.ts:812](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L812)
+
+##### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `seconds` | `number` |
+
+##### Returns
+
+`void`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/recoveryDebounceTime.md b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/recoveryDebounceTime.md
new file mode 100644
index 000000000..9a2f518bf
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/recoveryDebounceTime.md
@@ -0,0 +1,29 @@
+# recoveryDebounceTime
+
+#### Get Signature
+
+> **get** **recoveryDebounceTime**(): `number`
+
+Defined in: [containers/PreferencesContainer.ts:800](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L800)
+
+Recovery signal debounce window in seconds.
+
+##### Returns
+
+`number`
+
+#### Set Signature
+
+> **set** **recoveryDebounceTime**(`seconds`): `void`
+
+Defined in: [containers/PreferencesContainer.ts:803](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L803)
+
+##### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `seconds` | `number` |
+
+##### Returns
+
+`void`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/refreshDevicesOnVisible.md b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/refreshDevicesOnVisible.md
new file mode 100644
index 000000000..551fc9b9b
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/refreshDevicesOnVisible.md
@@ -0,0 +1,29 @@
+# refreshDevicesOnVisible
+
+#### Get Signature
+
+> **get** **refreshDevicesOnVisible**(): `boolean`
+
+Defined in: [containers/PreferencesContainer.ts:907](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L907)
+
+Whether to re-enumerate devices when the page becomes visible.
+
+##### Returns
+
+`boolean`
+
+#### Set Signature
+
+> **set** **refreshDevicesOnVisible**(`value`): `void`
+
+Defined in: [containers/PreferencesContainer.ts:910](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L910)
+
+##### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `value` | `boolean` |
+
+##### Returns
+
+`void`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/reinviteDebounceTime.md b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/reinviteDebounceTime.md
new file mode 100644
index 000000000..ad0f7e5be
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/reinviteDebounceTime.md
@@ -0,0 +1,29 @@
+# reinviteDebounceTime
+
+#### Get Signature
+
+> **get** **reinviteDebounceTime**(): `number`
+
+Defined in: [containers/PreferencesContainer.ts:769](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L769)
+
+Minimum time in ms between re-INVITE attempts.
+
+##### Returns
+
+`number`
+
+#### Set Signature
+
+> **set** **reinviteDebounceTime**(`value`): `void`
+
+Defined in: [containers/PreferencesContainer.ts:772](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L772)
+
+##### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `value` | `number` |
+
+##### Returns
+
+`void`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/reinviteMaxAttempts.md b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/reinviteMaxAttempts.md
new file mode 100644
index 000000000..8951299fb
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/reinviteMaxAttempts.md
@@ -0,0 +1,29 @@
+# reinviteMaxAttempts
+
+#### Get Signature
+
+> **get** **reinviteMaxAttempts**(): `number`
+
+Defined in: [containers/PreferencesContainer.ts:778](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L778)
+
+Maximum re-INVITE attempts per call.
+
+##### Returns
+
+`number`
+
+#### Set Signature
+
+> **set** **reinviteMaxAttempts**(`value`): `void`
+
+Defined in: [containers/PreferencesContainer.ts:781](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L781)
+
+##### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `value` | `number` |
+
+##### Returns
+
+`void`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/reinviteTimeout.md b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/reinviteTimeout.md
new file mode 100644
index 000000000..d7d63c107
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/reinviteTimeout.md
@@ -0,0 +1,29 @@
+# reinviteTimeout
+
+#### Get Signature
+
+> **get** **reinviteTimeout**(): `number`
+
+Defined in: [containers/PreferencesContainer.ts:787](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L787)
+
+Timeout in ms for a single re-INVITE attempt.
+
+##### Returns
+
+`number`
+
+#### Set Signature
+
+> **set** **reinviteTimeout**(`value`): `void`
+
+Defined in: [containers/PreferencesContainer.ts:790](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L790)
+
+##### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `value` | `number` |
+
+##### Returns
+
+`void`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/relayHost.md b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/relayHost.md
new file mode 100644
index 000000000..28e57011b
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/relayHost.md
@@ -0,0 +1,29 @@
+# relayHost
+
+#### Get Signature
+
+> **get** **relayHost**(): `string`
+
+Defined in: [containers/PreferencesContainer.ts:528](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L528)
+
+Custom relay host URL. Empty string uses the default.
+
+##### Returns
+
+`string`
+
+#### Set Signature
+
+> **set** **relayHost**(`value`): `void`
+
+Defined in: [containers/PreferencesContainer.ts:531](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L531)
+
+##### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `value` | `string` |
+
+##### Returns
+
+`void`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/relayOnly.md b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/relayOnly.md
new file mode 100644
index 000000000..a367840eb
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/relayOnly.md
@@ -0,0 +1,29 @@
+# relayOnly
+
+#### Get Signature
+
+> **get** **relayOnly**(): `boolean`
+
+Defined in: [containers/PreferencesContainer.ts:622](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L622)
+
+Whether to force TURN relay-only ICE candidates.
+
+##### Returns
+
+`boolean`
+
+#### Set Signature
+
+> **set** **relayOnly**(`value`): `void`
+
+Defined in: [containers/PreferencesContainer.ts:625](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L625)
+
+##### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `value` | `boolean` |
+
+##### Returns
+
+`void`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/statsBaselineSamples.md b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/statsBaselineSamples.md
new file mode 100644
index 000000000..f955c3ba1
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/statsBaselineSamples.md
@@ -0,0 +1,29 @@
+# statsBaselineSamples
+
+#### Get Signature
+
+> **get** **statsBaselineSamples**(): `number`
+
+Defined in: [containers/PreferencesContainer.ts:680](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L680)
+
+Number of baseline samples for stats monitoring.
+
+##### Returns
+
+`number`
+
+#### Set Signature
+
+> **set** **statsBaselineSamples**(`value`): `void`
+
+Defined in: [containers/PreferencesContainer.ts:683](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L683)
+
+##### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `value` | `number` |
+
+##### Returns
+
+`void`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/statsHistorySize.md b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/statsHistorySize.md
new file mode 100644
index 000000000..c6ff918cc
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/statsHistorySize.md
@@ -0,0 +1,29 @@
+# statsHistorySize
+
+#### Get Signature
+
+> **get** **statsHistorySize**(): `number`
+
+Defined in: [containers/PreferencesContainer.ts:725](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L725)
+
+Number of seconds of metrics history to retain.
+
+##### Returns
+
+`number`
+
+#### Set Signature
+
+> **set** **statsHistorySize**(`value`): `void`
+
+Defined in: [containers/PreferencesContainer.ts:728](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L728)
+
+##### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `value` | `number` |
+
+##### Returns
+
+`void`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/statsJitterSpikeMultiplier.md b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/statsJitterSpikeMultiplier.md
new file mode 100644
index 000000000..537075a3d
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/statsJitterSpikeMultiplier.md
@@ -0,0 +1,29 @@
+# statsJitterSpikeMultiplier
+
+#### Get Signature
+
+> **get** **statsJitterSpikeMultiplier**(): `number`
+
+Defined in: [containers/PreferencesContainer.ts:716](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L716)
+
+Multiplier for jitter spike detection relative to baseline.
+
+##### Returns
+
+`number`
+
+#### Set Signature
+
+> **set** **statsJitterSpikeMultiplier**(`value`): `void`
+
+Defined in: [containers/PreferencesContainer.ts:719](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L719)
+
+##### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `value` | `number` |
+
+##### Returns
+
+`void`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/statsNoPacketThreshold.md b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/statsNoPacketThreshold.md
new file mode 100644
index 000000000..a1737baa4
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/statsNoPacketThreshold.md
@@ -0,0 +1,29 @@
+# statsNoPacketThreshold
+
+#### Get Signature
+
+> **get** **statsNoPacketThreshold**(): `number`
+
+Defined in: [containers/PreferencesContainer.ts:689](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L689)
+
+Duration in ms with no inbound packets before a critical issue is emitted.
+
+##### Returns
+
+`number`
+
+#### Set Signature
+
+> **set** **statsNoPacketThreshold**(`value`): `void`
+
+Defined in: [containers/PreferencesContainer.ts:692](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L692)
+
+##### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `value` | `number` |
+
+##### Returns
+
+`void`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/statsPacketLossThreshold.md b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/statsPacketLossThreshold.md
new file mode 100644
index 000000000..1f2f4be36
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/statsPacketLossThreshold.md
@@ -0,0 +1,29 @@
+# statsPacketLossThreshold
+
+#### Get Signature
+
+> **get** **statsPacketLossThreshold**(): `number`
+
+Defined in: [containers/PreferencesContainer.ts:707](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L707)
+
+Packet loss fraction threshold (0-1) for issue detection.
+
+##### Returns
+
+`number`
+
+#### Set Signature
+
+> **set** **statsPacketLossThreshold**(`value`): `void`
+
+Defined in: [containers/PreferencesContainer.ts:710](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L710)
+
+##### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `value` | `number` |
+
+##### Returns
+
+`void`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/statsPollingInterval.md b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/statsPollingInterval.md
new file mode 100644
index 000000000..8326097e3
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/statsPollingInterval.md
@@ -0,0 +1,29 @@
+# statsPollingInterval
+
+#### Get Signature
+
+> **get** **statsPollingInterval**(): `number`
+
+Defined in: [containers/PreferencesContainer.ts:671](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L671)
+
+Stats polling interval in milliseconds.
+
+##### Returns
+
+`number`
+
+#### Set Signature
+
+> **set** **statsPollingInterval**(`value`): `void`
+
+Defined in: [containers/PreferencesContainer.ts:674](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L674)
+
+##### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `value` | `number` |
+
+##### Returns
+
+`void`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/statsRttSpikeMultiplier.md b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/statsRttSpikeMultiplier.md
new file mode 100644
index 000000000..78c0d2a46
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/statsRttSpikeMultiplier.md
@@ -0,0 +1,29 @@
+# statsRttSpikeMultiplier
+
+#### Get Signature
+
+> **get** **statsRttSpikeMultiplier**(): `number`
+
+Defined in: [containers/PreferencesContainer.ts:698](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L698)
+
+Multiplier for RTT spike detection relative to baseline.
+
+##### Returns
+
+`number`
+
+#### Set Signature
+
+> **set** **statsRttSpikeMultiplier**(`value`): `void`
+
+Defined in: [containers/PreferencesContainer.ts:701](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L701)
+
+##### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `value` | `number` |
+
+##### Returns
+
+`void`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/stereoAudio.md b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/stereoAudio.md
new file mode 100644
index 000000000..80115f9ee
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/stereoAudio.md
@@ -0,0 +1,29 @@
+# stereoAudio
+
+#### Get Signature
+
+> **get** **stereoAudio**(): `boolean`
+
+Defined in: [containers/PreferencesContainer.ts:945](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L945)
+
+Whether stereo Opus is enabled globally.
+
+##### Returns
+
+`boolean`
+
+#### Set Signature
+
+> **set** **stereoAudio**(`value`): `void`
+
+Defined in: [containers/PreferencesContainer.ts:948](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L948)
+
+##### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `value` | `boolean` |
+
+##### Returns
+
+`void`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/syncDevicesToActiveCalls.md b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/syncDevicesToActiveCalls.md
new file mode 100644
index 000000000..ae5b35f11
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/syncDevicesToActiveCalls.md
@@ -0,0 +1,29 @@
+# syncDevicesToActiveCalls
+
+#### Get Signature
+
+> **get** **syncDevicesToActiveCalls**(): `boolean`
+
+Defined in: [containers/PreferencesContainer.ts:885](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L885)
+
+Whether device changes are auto-applied to active calls.
+
+##### Returns
+
+`boolean`
+
+#### Set Signature
+
+> **set** **syncDevicesToActiveCalls**(`value`): `void`
+
+Defined in: [containers/PreferencesContainer.ts:888](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L888)
+
+##### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `value` | `boolean` |
+
+##### Returns
+
+`void`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/userVariables.md b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/userVariables.md
new file mode 100644
index 000000000..d476455d6
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/ClientPreferences/userVariables.md
@@ -0,0 +1,29 @@
+# userVariables
+
+#### Get Signature
+
+> **get** **userVariables**(): `Record`\<`string`, `unknown`\>
+
+Defined in: [containers/PreferencesContainer.ts:658](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L658)
+
+Custom user variables attached to calls.
+
+##### Returns
+
+`Record`\<`string`, `unknown`\>
+
+#### Set Signature
+
+> **set** **userVariables**(`value`): `void`
+
+Defined in: [containers/PreferencesContainer.ts:661](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/containers/PreferencesContainer.ts#L661)
+
+##### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `value` | `Record`\<`string`, `unknown`\> |
+
+##### Returns
+
+`void`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/CollectionFetchError.md b/fern/products/browser-sdk/pages/v4/reference/classes/CollectionFetchError.md
new file mode 100644
index 000000000..c3a4cf10d
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/CollectionFetchError.md
@@ -0,0 +1,37 @@
+# Class: CollectionFetchError
+
+Defined in: [core/errors.ts:370](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/errors.ts#L370)
+
+## Extends
+
+- `Error`
+
+## Constructors
+
+### Constructor
+
+> **new CollectionFetchError**(`operation`, `originalError`): `CollectionFetchError`
+
+Defined in: [core/errors.ts:371](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/errors.ts#L371)
+
+#### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `operation` | `string` |
+| `originalError` | `unknown` |
+
+#### Returns
+
+`CollectionFetchError`
+
+#### Overrides
+
+`Error.constructor`
+
+## Properties
+
+| Property | Modifier | Type | Defined in |
+| ------ | ------ | ------ | ------ |
+| `operation` | `public` | `string` | [core/errors.ts:372](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/errors.ts#L372) |
+| `originalError` | `public` | `unknown` | [core/errors.ts:373](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/errors.ts#L373) |
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/DPoPInitError.md b/fern/products/browser-sdk/pages/v4/reference/classes/DPoPInitError.md
new file mode 100644
index 000000000..244b611cf
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/DPoPInitError.md
@@ -0,0 +1,36 @@
+# Class: DPoPInitError
+
+Defined in: [core/errors.ts:399](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/errors.ts#L399)
+
+## Extends
+
+- `Error`
+
+## Constructors
+
+### Constructor
+
+> **new DPoPInitError**(`originalError`, `message?`): `DPoPInitError`
+
+Defined in: [core/errors.ts:400](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/errors.ts#L400)
+
+#### Parameters
+
+| Parameter | Type | Default value |
+| ------ | ------ | ------ |
+| `originalError` | `unknown` | `undefined` |
+| `message` | `string` | `'Failed to initialize DPoP key pair'` |
+
+#### Returns
+
+`DPoPInitError`
+
+#### Overrides
+
+`Error.constructor`
+
+## Properties
+
+| Property | Modifier | Type | Defined in |
+| ------ | ------ | ------ | ------ |
+| `originalError` | `public` | `unknown` | [core/errors.ts:401](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/errors.ts#L401) |
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/DeviceTokenError.md b/fern/products/browser-sdk/pages/v4/reference/classes/DeviceTokenError.md
new file mode 100644
index 000000000..16e76e52c
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/DeviceTokenError.md
@@ -0,0 +1,36 @@
+# Class: DeviceTokenError
+
+Defined in: [core/errors.ts:468](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/errors.ts#L468)
+
+## Extends
+
+- `Error`
+
+## Constructors
+
+### Constructor
+
+> **new DeviceTokenError**(`message`, `originalError?`): `DeviceTokenError`
+
+Defined in: [core/errors.ts:469](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/errors.ts#L469)
+
+#### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `message` | `string` |
+| `originalError?` | `unknown` |
+
+#### Returns
+
+`DeviceTokenError`
+
+#### Overrides
+
+`Error.constructor`
+
+## Properties
+
+| Property | Modifier | Type | Defined in |
+| ------ | ------ | ------ | ------ |
+| `originalError?` | `public` | `unknown` | [core/errors.ts:471](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/errors.ts#L471) |
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/EmbedTokenCredentialProvider/authenticate.md b/fern/products/browser-sdk/pages/v4/reference/classes/EmbedTokenCredentialProvider/authenticate.md
new file mode 100644
index 000000000..ca989969b
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/EmbedTokenCredentialProvider/authenticate.md
@@ -0,0 +1,25 @@
+# authenticate
+
+> **authenticate**(): `Promise`\<\{ `expiry_at`: `number`; `token`: `string`; \}\>
+
+Defined in: [dependencies/EmbedTokenCredentialProvider.ts:52](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/dependencies/EmbedTokenCredentialProvider.ts#L52)
+
+Obtains the initial credentials. Called once during client initialization.
+
+Implementor responsibilities:
+- Resolve with a valid [SDKCredential](../../interfaces/SDKCredential.md) on success.
+- Reject (throw) on failure — this will cause client initialization to fail.
+- When `context.fingerprint` is provided, forward it to the server-side token
+ endpoint with `scope: "sat:refresh"` to enable automatic token refresh.
+
+SDK behavior:
+- Awaits this method before establishing the WebSocket connection.
+- On rejection, propagates the error to the caller of `SignalWire()`.
+
+#### Returns
+
+`Promise`\<\{ `expiry_at`: `number`; `token`: `string`; \}\>
+
+#### Implementation of
+
+[`CredentialProvider`](../../interfaces/CredentialProvider.md).[`authenticate`](../../interfaces/CredentialProvider.md#authenticate)
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/EmbedTokenCredentialProvider/index.md b/fern/products/browser-sdk/pages/v4/reference/classes/EmbedTokenCredentialProvider/index.md
new file mode 100644
index 000000000..d2aa6dd2a
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/EmbedTokenCredentialProvider/index.md
@@ -0,0 +1,33 @@
+# Class: EmbedTokenCredentialProvider
+
+Defined in: [dependencies/EmbedTokenCredentialProvider.ts:9](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/dependencies/EmbedTokenCredentialProvider.ts#L9)
+
+Credential provider that exchanges an embed token for a SAT via the host's token endpoint.
+
+## Implements
+
+- [`CredentialProvider`](../../interfaces/CredentialProvider.md)
+
+## Constructors
+
+### Constructor
+
+> **new EmbedTokenCredentialProvider**(`host`, `embedToken`): `EmbedTokenCredentialProvider`
+
+Defined in: [dependencies/EmbedTokenCredentialProvider.ts:10](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/dependencies/EmbedTokenCredentialProvider.ts#L10)
+
+#### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `host` | `string` |
+| `embedToken` | `string` |
+
+#### Returns
+
+`EmbedTokenCredentialProvider`
+
+## Methods
+
+- [`authenticate`](./authenticate.md)
+- [`refresh`](./refresh.md)
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/EmbedTokenCredentialProvider/refresh.md b/fern/products/browser-sdk/pages/v4/reference/classes/EmbedTokenCredentialProvider/refresh.md
new file mode 100644
index 000000000..2f822885c
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/EmbedTokenCredentialProvider/refresh.md
@@ -0,0 +1,29 @@
+# refresh
+
+> **refresh**(): `Promise`\<\{ `expiry_at`: `number`; `token`: `string`; \}\>
+
+Defined in: [dependencies/EmbedTokenCredentialProvider.ts:58](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/dependencies/EmbedTokenCredentialProvider.ts#L58)
+
+Obtains fresh credentials before the current ones expire. Optional.
+
+Implementor responsibilities:
+- Resolve with a new [SDKCredential](../../interfaces/SDKCredential.md) containing an updated `token` (or `authorizationState`) and `expiry_at`.
+- Reject (throw) if refresh is not possible — the SDK will stop the refresh schedule.
+
+SDK behavior:
+- Only called when `expiry_at` was set on the previous credential.
+- Scheduled automatically before expiry; implementors do not need to manage timing.
+- On rejection, the refresh schedule stops and the session continues with the
+ current credentials until they expire.
+- When not provided and the SAT includes a `sat:refresh` scope, the SDK
+ automatically refreshes via Client Bound SAT (DPoP) without developer intervention.
+- When not provided and no refresh scope is present, the SDK uses the initial
+ credentials for the entire session lifetime.
+
+#### Returns
+
+`Promise`\<\{ `expiry_at`: `number`; `token`: `string`; \}\>
+
+#### Implementation of
+
+[`CredentialProvider`](../../interfaces/CredentialProvider.md).[`refresh`](../../interfaces/CredentialProvider.md#refresh)
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/InvalidCredentialsError.md b/fern/products/browser-sdk/pages/v4/reference/classes/InvalidCredentialsError.md
new file mode 100644
index 000000000..ac1985c98
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/InvalidCredentialsError.md
@@ -0,0 +1,36 @@
+# Class: InvalidCredentialsError
+
+Defined in: [core/errors.ts:31](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/errors.ts#L31)
+
+## Extends
+
+- `Error`
+
+## Constructors
+
+### Constructor
+
+> **new InvalidCredentialsError**(`reason?`, `options?`): `InvalidCredentialsError`
+
+Defined in: [core/errors.ts:32](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/errors.ts#L32)
+
+#### Parameters
+
+| Parameter | Type | Default value |
+| ------ | ------ | ------ |
+| `reason` | `string` | `'Invalid Credentials'` |
+| `options?` | `ErrorOptions` | `undefined` |
+
+#### Returns
+
+`InvalidCredentialsError`
+
+#### Overrides
+
+`Error.constructor`
+
+## Properties
+
+| Property | Modifier | Type | Default value | Defined in |
+| ------ | ------ | ------ | ------ | ------ |
+| `reason` | `public` | `string` | `'Invalid Credentials'` | [core/errors.ts:33](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/errors.ts#L33) |
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/MediaTrackError.md b/fern/products/browser-sdk/pages/v4/reference/classes/MediaTrackError.md
new file mode 100644
index 000000000..b5f294a84
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/MediaTrackError.md
@@ -0,0 +1,39 @@
+# Class: MediaTrackError
+
+Defined in: [core/errors.ts:382](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/errors.ts#L382)
+
+## Extends
+
+- `Error`
+
+## Constructors
+
+### Constructor
+
+> **new MediaTrackError**(`operation`, `kind`, `originalError`): `MediaTrackError`
+
+Defined in: [core/errors.ts:383](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/errors.ts#L383)
+
+#### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `operation` | `string` |
+| `kind` | `string` |
+| `originalError` | `unknown` |
+
+#### Returns
+
+`MediaTrackError`
+
+#### Overrides
+
+`Error.constructor`
+
+## Properties
+
+| Property | Modifier | Type | Defined in |
+| ------ | ------ | ------ | ------ |
+| `kind` | `public` | `string` | [core/errors.ts:385](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/errors.ts#L385) |
+| `operation` | `public` | `string` | [core/errors.ts:384](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/errors.ts#L384) |
+| `originalError` | `public` | `unknown` | [core/errors.ts:386](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/errors.ts#L386) |
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/MessageParseError.md b/fern/products/browser-sdk/pages/v4/reference/classes/MessageParseError.md
new file mode 100644
index 000000000..08fad7f2c
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/MessageParseError.md
@@ -0,0 +1,35 @@
+# Class: MessageParseError
+
+Defined in: [core/errors.ts:361](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/errors.ts#L361)
+
+## Extends
+
+- `Error`
+
+## Constructors
+
+### Constructor
+
+> **new MessageParseError**(`originalError`): `MessageParseError`
+
+Defined in: [core/errors.ts:362](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/errors.ts#L362)
+
+#### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `originalError` | `unknown` |
+
+#### Returns
+
+`MessageParseError`
+
+#### Overrides
+
+`Error.constructor`
+
+## Properties
+
+| Property | Modifier | Type | Defined in |
+| ------ | ------ | ------ | ------ |
+| `originalError` | `public` | `unknown` | [core/errors.ts:362](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/errors.ts#L362) |
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/OverconstrainedFallbackError.md b/fern/products/browser-sdk/pages/v4/reference/classes/OverconstrainedFallbackError.md
new file mode 100644
index 000000000..6fe868aba
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/OverconstrainedFallbackError.md
@@ -0,0 +1,40 @@
+# Class: OverconstrainedFallbackError
+
+Defined in: [core/errors.ts:437](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/errors.ts#L437)
+
+Error thrown when getUserMedia fails with OverconstrainedError
+and all fallback levels have been exhausted.
+
+## Extends
+
+- `Error`
+
+## Constructors
+
+### Constructor
+
+> **new OverconstrainedFallbackError**(`deviceKind`, `originalError?`): `OverconstrainedFallbackError`
+
+Defined in: [core/errors.ts:438](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/errors.ts#L438)
+
+#### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `deviceKind` | `string` |
+| `originalError?` | `unknown` |
+
+#### Returns
+
+`OverconstrainedFallbackError`
+
+#### Overrides
+
+`Error.constructor`
+
+## Properties
+
+| Property | Modifier | Type | Defined in |
+| ------ | ------ | ------ | ------ |
+| `deviceKind` | `public` | `string` | [core/errors.ts:439](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/errors.ts#L439) |
+| `originalError?` | `public` | `unknown` | [core/errors.ts:440](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/errors.ts#L440) |
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/Participant/addressId$.md b/fern/products/browser-sdk/pages/v4/reference/classes/Participant/addressId$.md
new file mode 100644
index 000000000..17bbd905a
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/Participant/addressId$.md
@@ -0,0 +1,35 @@
+# addressId$
+
+#### Get Signature
+
+> **get** **addressId$**(): `Observable`\<`string` \| `undefined`\>
+
+Defined in: [core/entities/Participant.ts:252](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Participant.ts#L252)
+
+Observable of the participant's address ID.
+
+##### Returns
+
+`Observable`\<`string` \| `undefined`\>
+
+#### Implementation of
+
+[`CallParticipant`](../../interfaces/CallParticipant.md).[`addressId$`](../../interfaces/CallParticipant.md#addressid-1)
+
+## addressId
+
+#### Get Signature
+
+> **get** **addressId**(): `string` \| `undefined`
+
+Defined in: [core/entities/Participant.ts:402](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Participant.ts#L402)
+
+Address ID of this participant, or `undefined` if not available.
+
+##### Returns
+
+`string` \| `undefined`
+
+#### Implementation of
+
+[`CallParticipant`](../../interfaces/CallParticipant.md).[`addressId`](../../interfaces/CallParticipant.md#addressid)
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/Participant/audioMuted$.md b/fern/products/browser-sdk/pages/v4/reference/classes/Participant/audioMuted$.md
new file mode 100644
index 000000000..53e214e38
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/Participant/audioMuted$.md
@@ -0,0 +1,35 @@
+# audioMuted$
+
+#### Get Signature
+
+> **get** **audioMuted$**(): `Observable`\<`boolean` \| `undefined`\>
+
+Defined in: [core/entities/Participant.ts:102](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Participant.ts#L102)
+
+Observable indicating whether the participant's audio is muted.
+
+##### Returns
+
+`Observable`\<`boolean` \| `undefined`\>
+
+#### Implementation of
+
+[`CallParticipant`](../../interfaces/CallParticipant.md).[`audioMuted$`](../../interfaces/CallParticipant.md#audiomuted-1)
+
+## audioMuted
+
+#### Get Signature
+
+> **get** **audioMuted**(): `boolean`
+
+Defined in: [core/entities/Participant.ts:327](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Participant.ts#L327)
+
+Whether the participant's audio is muted.
+
+##### Returns
+
+`boolean`
+
+#### Implementation of
+
+[`CallParticipant`](../../interfaces/CallParticipant.md).[`audioMuted`](../../interfaces/CallParticipant.md#audiomuted)
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/Participant/autoGain$.md b/fern/products/browser-sdk/pages/v4/reference/classes/Participant/autoGain$.md
new file mode 100644
index 000000000..9a6b40333
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/Participant/autoGain$.md
@@ -0,0 +1,35 @@
+# autoGain$
+
+#### Get Signature
+
+> **get** **autoGain$**(): `Observable`\<`boolean` \| `undefined`\>
+
+Defined in: [core/entities/Participant.ts:192](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Participant.ts#L192)
+
+Observable indicating whether auto-gain control is enabled.
+
+##### Returns
+
+`Observable`\<`boolean` \| `undefined`\>
+
+#### Implementation of
+
+[`CallParticipant`](../../interfaces/CallParticipant.md).[`autoGain$`](../../interfaces/CallParticipant.md#autogain-1)
+
+## autoGain
+
+#### Get Signature
+
+> **get** **autoGain**(): `boolean`
+
+Defined in: [core/entities/Participant.ts:372](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Participant.ts#L372)
+
+Whether automatic gain control is enabled.
+
+##### Returns
+
+`boolean`
+
+#### Implementation of
+
+[`CallParticipant`](../../interfaces/CallParticipant.md).[`autoGain`](../../interfaces/CallParticipant.md#autogain)
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/Participant/cachedObservable.md b/fern/products/browser-sdk/pages/v4/reference/classes/Participant/cachedObservable.md
new file mode 100644
index 000000000..4e2ba6b39
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/Participant/cachedObservable.md
@@ -0,0 +1,26 @@
+# cachedObservable
+
+> `protected` **cachedObservable**\<`T`\>(`key`, `factory`): `Observable`\<`T`\>
+
+Defined in: [behaviors/Destroyable.ts:19](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/behaviors/Destroyable.ts#L19)
+
+#### Type Parameters
+
+| Type Parameter |
+| ------ |
+| `T` |
+
+#### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `key` | `string` |
+| `factory` | () => `Observable`\<`T`\> |
+
+#### Returns
+
+`Observable`\<`T`\>
+
+#### Inherited from
+
+`Destroyable.cachedObservable`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/Participant/createBehaviorSubject.md b/fern/products/browser-sdk/pages/v4/reference/classes/Participant/createBehaviorSubject.md
new file mode 100644
index 000000000..352d48f52
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/Participant/createBehaviorSubject.md
@@ -0,0 +1,25 @@
+# createBehaviorSubject
+
+> `protected` **createBehaviorSubject**\<`T`\>(`initialValue`): `BehaviorSubject`\<`T`\>
+
+Defined in: [behaviors/Destroyable.ts:85](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/behaviors/Destroyable.ts#L85)
+
+#### Type Parameters
+
+| Type Parameter |
+| ------ |
+| `T` |
+
+#### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `initialValue` | `T` |
+
+#### Returns
+
+`BehaviorSubject`\<`T`\>
+
+#### Inherited from
+
+`Destroyable.createBehaviorSubject`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/Participant/createReplaySubject.md b/fern/products/browser-sdk/pages/v4/reference/classes/Participant/createReplaySubject.md
new file mode 100644
index 000000000..73a4e3d3d
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/Participant/createReplaySubject.md
@@ -0,0 +1,26 @@
+# createReplaySubject
+
+> `protected` **createReplaySubject**\<`T`\>(`bufferSize?`, `windowTime?`): `ReplaySubject`\<`T`\>
+
+Defined in: [behaviors/Destroyable.ts:79](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/behaviors/Destroyable.ts#L79)
+
+#### Type Parameters
+
+| Type Parameter |
+| ------ |
+| `T` |
+
+#### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `bufferSize?` | `number` |
+| `windowTime?` | `number` |
+
+#### Returns
+
+`ReplaySubject`\<`T`\>
+
+#### Inherited from
+
+`Destroyable.createReplaySubject`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/Participant/createSubject.md b/fern/products/browser-sdk/pages/v4/reference/classes/Participant/createSubject.md
new file mode 100644
index 000000000..532f32e97
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/Participant/createSubject.md
@@ -0,0 +1,19 @@
+# createSubject
+
+> `protected` **createSubject**\<`T`\>(): `Subject`\<`T`\>
+
+Defined in: [behaviors/Destroyable.ts:73](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/behaviors/Destroyable.ts#L73)
+
+#### Type Parameters
+
+| Type Parameter |
+| ------ |
+| `T` |
+
+#### Returns
+
+`Subject`\<`T`\>
+
+#### Inherited from
+
+`Destroyable.createSubject`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/Participant/deaf$.md b/fern/products/browser-sdk/pages/v4/reference/classes/Participant/deaf$.md
new file mode 100644
index 000000000..656113ed8
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/Participant/deaf$.md
@@ -0,0 +1,35 @@
+# deaf$
+
+#### Get Signature
+
+> **get** **deaf$**(): `Observable`\<`boolean` \| `undefined`\>
+
+Defined in: [core/entities/Participant.ts:122](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Participant.ts#L122)
+
+Observable indicating whether the participant is deafened.
+
+##### Returns
+
+`Observable`\<`boolean` \| `undefined`\>
+
+#### Implementation of
+
+[`CallParticipant`](../../interfaces/CallParticipant.md).[`deaf$`](../../interfaces/CallParticipant.md#deaf-1)
+
+## deaf
+
+#### Get Signature
+
+> **get** **deaf**(): `boolean`
+
+Defined in: [core/entities/Participant.ts:337](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Participant.ts#L337)
+
+Whether the participant is deafened (incoming audio muted).
+
+##### Returns
+
+`boolean`
+
+#### Implementation of
+
+[`CallParticipant`](../../interfaces/CallParticipant.md).[`deaf`](../../interfaces/CallParticipant.md#deaf)
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/Participant/deferEmission.md b/fern/products/browser-sdk/pages/v4/reference/classes/Participant/deferEmission.md
new file mode 100644
index 000000000..1b1fa66a9
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/Participant/deferEmission.md
@@ -0,0 +1,32 @@
+# deferEmission
+
+> `protected` **deferEmission**\<`T`\>(`observable`): `Observable`\<`T`\>
+
+Defined in: [behaviors/Destroyable.ts:61](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/behaviors/Destroyable.ts#L61)
+
+Wraps an observable so emissions are deferred to the microtask queue.
+
+Use ONLY for public-facing getters that expose a subject via
+`.asObservable()` without going through `cachedObservable`.
+
+Do NOT use for observables consumed internally by the SDK.
+
+#### Type Parameters
+
+| Type Parameter |
+| ------ |
+| `T` |
+
+#### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `observable` | `Observable`\<`T`\> |
+
+#### Returns
+
+`Observable`\<`T`\>
+
+#### Inherited from
+
+`Destroyable.deferEmission`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/Participant/denoise$.md b/fern/products/browser-sdk/pages/v4/reference/classes/Participant/denoise$.md
new file mode 100644
index 000000000..a8adf5bde
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/Participant/denoise$.md
@@ -0,0 +1,35 @@
+# denoise$
+
+#### Get Signature
+
+> **get** **denoise$**(): `Observable`\<`boolean` \| `undefined`\>
+
+Defined in: [core/entities/Participant.ts:222](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Participant.ts#L222)
+
+Observable indicating whether noise reduction is active.
+
+##### Returns
+
+`Observable`\<`boolean` \| `undefined`\>
+
+#### Implementation of
+
+[`CallParticipant`](../../interfaces/CallParticipant.md).[`denoise$`](../../interfaces/CallParticipant.md#denoise-1)
+
+## denoise
+
+#### Get Signature
+
+> **get** **denoise**(): `boolean`
+
+Defined in: [core/entities/Participant.ts:387](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Participant.ts#L387)
+
+Whether noise reduction (denoise) is active.
+
+##### Returns
+
+`boolean`
+
+#### Implementation of
+
+[`CallParticipant`](../../interfaces/CallParticipant.md).[`denoise`](../../interfaces/CallParticipant.md#denoise)
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/Participant/destroy.md b/fern/products/browser-sdk/pages/v4/reference/classes/Participant/destroy.md
new file mode 100644
index 000000000..7d973b987
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/Participant/destroy.md
@@ -0,0 +1,15 @@
+# destroy
+
+> **destroy**(): `void`
+
+Defined in: [core/entities/Participant.ts:591](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Participant.ts#L591)
+
+Destroys the participant, releasing all subscriptions and references.
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+`Destroyable.destroy`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/Participant/destroyed$.md b/fern/products/browser-sdk/pages/v4/reference/classes/Participant/destroyed$.md
new file mode 100644
index 000000000..63dc55fe7
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/Participant/destroyed$.md
@@ -0,0 +1,17 @@
+# destroyed$
+
+#### Get Signature
+
+> **get** **destroyed$**(): `Observable`\<`void`\>
+
+Defined in: [behaviors/Destroyable.ts:94](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/behaviors/Destroyable.ts#L94)
+
+Observable that emits when the instance is destroyed
+
+##### Returns
+
+`Observable`\<`void`\>
+
+#### Inherited from
+
+`Destroyable.destroyed$`
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/Participant/echoCancellation$.md b/fern/products/browser-sdk/pages/v4/reference/classes/Participant/echoCancellation$.md
new file mode 100644
index 000000000..8bf74e954
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/Participant/echoCancellation$.md
@@ -0,0 +1,35 @@
+# echoCancellation$
+
+#### Get Signature
+
+> **get** **echoCancellation$**(): `Observable`\<`boolean` \| `undefined`\>
+
+Defined in: [core/entities/Participant.ts:182](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Participant.ts#L182)
+
+Observable indicating whether echo cancellation is enabled.
+
+##### Returns
+
+`Observable`\<`boolean` \| `undefined`\>
+
+#### Implementation of
+
+[`CallParticipant`](../../interfaces/CallParticipant.md).[`echoCancellation$`](../../interfaces/CallParticipant.md#echocancellation-1)
+
+## echoCancellation
+
+#### Get Signature
+
+> **get** **echoCancellation**(): `boolean`
+
+Defined in: [core/entities/Participant.ts:367](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Participant.ts#L367)
+
+Whether echo cancellation is enabled.
+
+##### Returns
+
+`boolean`
+
+#### Implementation of
+
+[`CallParticipant`](../../interfaces/CallParticipant.md).[`echoCancellation`](../../interfaces/CallParticipant.md#echocancellation)
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/Participant/end.md b/fern/products/browser-sdk/pages/v4/reference/classes/Participant/end.md
new file mode 100644
index 000000000..bbc157b08
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/Participant/end.md
@@ -0,0 +1,15 @@
+# end
+
+> **end**(): `Promise`\<`void`\>
+
+Defined in: [core/entities/Participant.ts:565](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Participant.ts#L565)
+
+Ends the call for this participant.
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Implementation of
+
+[`CallParticipant`](../../interfaces/CallParticipant.md).[`end`](../../interfaces/CallParticipant.md#end)
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/Participant/handraised$.md b/fern/products/browser-sdk/pages/v4/reference/classes/Participant/handraised$.md
new file mode 100644
index 000000000..3c7784606
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/Participant/handraised$.md
@@ -0,0 +1,35 @@
+# handraised$
+
+#### Get Signature
+
+> **get** **handraised$**(): `Observable`\<`boolean` \| `undefined`\>
+
+Defined in: [core/entities/Participant.ts:82](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Participant.ts#L82)
+
+Observable indicating whether the participant has raised their hand.
+
+##### Returns
+
+`Observable`\<`boolean` \| `undefined`\>
+
+#### Implementation of
+
+[`CallParticipant`](../../interfaces/CallParticipant.md).[`handraised$`](../../interfaces/CallParticipant.md#handraised-1)
+
+## handraised
+
+#### Get Signature
+
+> **get** **handraised**(): `boolean`
+
+Defined in: [core/entities/Participant.ts:317](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Participant.ts#L317)
+
+Whether the participant has raised their hand.
+
+##### Returns
+
+`boolean`
+
+#### Implementation of
+
+[`CallParticipant`](../../interfaces/CallParticipant.md).[`handraised`](../../interfaces/CallParticipant.md#handraised)
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/Participant/index.md b/fern/products/browser-sdk/pages/v4/reference/classes/Participant/index.md
new file mode 100644
index 000000000..4950c85c4
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/Participant/index.md
@@ -0,0 +1,113 @@
+# Class: Participant
+
+Defined in: [core/entities/Participant.ts:44](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Participant.ts#L44)
+
+Represents a participant in a call.
+
+Provides observable state (audio/video mute, hand raise, volume, etc.)
+and control methods for the participant. See [SelfParticipant](SelfParticipant.md) for
+the local participant with additional device control.
+
+## Extends
+
+- `Destroyable`
+
+## Extended by
+
+- [`SelfParticipant`](SelfParticipant.md)
+
+## Implements
+
+- [`CallParticipant`](../../interfaces/CallParticipant.md)
+
+## Constructors
+
+### Constructor
+
+> **new Participant**(`id`, `executeMethod`, `deviceController`): `Participant`
+
+Defined in: [core/entities/Participant.ts:48](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Participant.ts#L48)
+
+#### Parameters
+
+| Parameter | Type |
+| ------ | ------ |
+| `id` | `string` |
+| `executeMethod` | [`ExecuteMethod`](../../type-aliases/ExecuteMethod.md) |
+| `deviceController` | [`DeviceController`](../../interfaces/DeviceController.md) |
+
+#### Returns
+
+`Participant`
+
+#### Overrides
+
+`Destroyable.constructor`
+
+## Properties
+
+| Property | Modifier | Type | Default value | Description | Inherited from | Defined in |
+| ------ | ------ | ------ | ------ | ------ | ------ | ------ |
+| `_destroyed$` | `protected` | `Subject`\<`void`\> | `undefined` | - | `Destroyable._destroyed$` | [behaviors/Destroyable.ts:8](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/behaviors/Destroyable.ts#L8) |
+| `deviceController` | `protected` | [`DeviceController`](../../interfaces/DeviceController.md) | `undefined` | - | - | [core/entities/Participant.ts:51](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Participant.ts#L51) |
+| `executeMethod` | `protected` | [`ExecuteMethod`](../../type-aliases/ExecuteMethod.md) | `undefined` | - | - | [core/entities/Participant.ts:50](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Participant.ts#L50) |
+| `id` | `readonly` | `string` | `undefined` | Unique member ID of this participant. | - | [core/entities/Participant.ts:46](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Participant.ts#L46) |
+| `subjects` | `protected` | `Subject`\<`unknown`\>[] | `[]` | - | `Destroyable.subjects` | [behaviors/Destroyable.ts:7](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/behaviors/Destroyable.ts#L7) |
+| `subscriptions` | `protected` | `Subscription`[] | `[]` | - | `Destroyable.subscriptions` | [behaviors/Destroyable.ts:6](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/behaviors/Destroyable.ts#L6) |
+
+## Accessors
+
+- [`addressId$`](./addressId$.md)
+- [`audioMuted$`](./audioMuted$.md)
+- [`autoGain$`](./autoGain$.md)
+- [`deaf$`](./deaf$.md)
+- [`denoise$`](./denoise$.md)
+- [`destroyed$`](./destroyed$.md)
+- [`echoCancellation$`](./echoCancellation$.md)
+- [`handraised$`](./handraised$.md)
+- [`inputSensitivity$`](./inputSensitivity$.md)
+- [`inputVolume$`](./inputVolume$.md)
+- [`isAudience`](./isAudience.md)
+- [`isTalking$`](./isTalking$.md)
+- [`lowbitrate$`](./lowbitrate$.md)
+- [`meta$`](./meta$.md)
+- [`name$`](./name$.md)
+- [`nodeId$`](./nodeId$.md)
+- [`noiseSuppression$`](./noiseSuppression$.md)
+- [`outputVolume$`](./outputVolume$.md)
+- [`position$`](./position$.md)
+- [`subscriberId$`](./subscriberId$.md)
+- [`type$`](./type$.md)
+- [`videoMuted$`](./videoMuted$.md)
+- [`visible$`](./visible$.md)
+
+## Methods
+
+- [`cachedObservable`](./cachedObservable.md)
+- [`createBehaviorSubject`](./createBehaviorSubject.md)
+- [`createReplaySubject`](./createReplaySubject.md)
+- [`createSubject`](./createSubject.md)
+- [`deferEmission`](./deferEmission.md)
+- [`destroy`](./destroy.md)
+- [`end`](./end.md)
+- [`mute`](./mute.md)
+- [`muteVideo`](./muteVideo.md)
+- [`publicCachedObservable`](./publicCachedObservable.md)
+- [`remove`](./remove.md)
+- [`setAudioInputSensitivity`](./setAudioInputSensitivity.md)
+- [`setAudioInputVolume`](./setAudioInputVolume.md)
+- [`setAudioOutputVolume`](./setAudioOutputVolume.md)
+- [`setMeta`](./setMeta.md)
+- [`setPosition`](./setPosition.md)
+- [`subscribeTo`](./subscribeTo.md)
+- [`toggleAudioInputAutoGain`](./toggleAudioInputAutoGain.md)
+- [`toggleDeaf`](./toggleDeaf.md)
+- [`toggleEchoCancellation`](./toggleEchoCancellation.md)
+- [`toggleHandraise`](./toggleHandraise.md)
+- [`toggleLowbitrate`](./toggleLowbitrate.md)
+- [`toggleMute`](./toggleMute.md)
+- [`toggleMuteVideo`](./toggleMuteVideo.md)
+- [`toggleNoiseSuppression`](./toggleNoiseSuppression.md)
+- [`unmute`](./unmute.md)
+- [`unmuteVideo`](./unmuteVideo.md)
+- [`updateMeta`](./updateMeta.md)
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/Participant/inputSensitivity$.md b/fern/products/browser-sdk/pages/v4/reference/classes/Participant/inputSensitivity$.md
new file mode 100644
index 000000000..66bf985c9
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/Participant/inputSensitivity$.md
@@ -0,0 +1,43 @@
+# inputSensitivity$
+
+#### Get Signature
+
+> **get** **inputSensitivity$**(): `Observable`\<`number` \| `undefined`\>
+
+Defined in: [core/entities/Participant.ts:172](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Participant.ts#L172)
+
+Observable of the **conference-only** microphone energy/gate sensitivity
+level for this member. Routes through the conferencing mix engine and has
+no effect on 1:1 WebRTC calls. Populated from `member.updated` events for
+conference members.
+
+##### See
+
+[setAudioInputSensitivity](#setaudioinputsensitivity)
+
+##### Returns
+
+`Observable`\<`number` \| `undefined`\>
+
+#### Implementation of
+
+[`CallParticipant`](../../interfaces/CallParticipant.md).[`inputSensitivity$`](../../interfaces/CallParticipant.md#inputsensitivity-1)
+
+## inputSensitivity
+
+#### Get Signature
+
+> **get** **inputSensitivity**(): `number` \| `undefined`
+
+Defined in: [core/entities/Participant.ts:362](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Participant.ts#L362)
+
+Current **conference-only** microphone sensitivity/gate level, or
+`undefined` if not set. Applies only to conference members.
+
+##### Returns
+
+`number` \| `undefined`
+
+#### Implementation of
+
+[`CallParticipant`](../../interfaces/CallParticipant.md).[`inputSensitivity`](../../interfaces/CallParticipant.md#inputsensitivity)
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/Participant/inputVolume$.md b/fern/products/browser-sdk/pages/v4/reference/classes/Participant/inputVolume$.md
new file mode 100644
index 000000000..3821c02d3
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/Participant/inputVolume$.md
@@ -0,0 +1,44 @@
+# inputVolume$
+
+#### Get Signature
+
+> **get** **inputVolume$**(): `Observable`\<`number` \| `undefined`\>
+
+Defined in: [core/entities/Participant.ts:139](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Participant.ts#L139)
+
+Observable of the participant's **server-side** microphone input volume
+as reported by the mix engine. This is gain applied on the bridged audio
+leg (FreeSWITCH channel read volume), NOT the local browser mic. For a
+local PC mic control, see Call.setLocalMicrophoneGain.
+
+##### See
+
+[setAudioInputVolume](#setaudioinputvolume)
+
+##### Returns
+
+`Observable`\<`number` \| `undefined`\>
+
+#### Implementation of
+
+[`CallParticipant`](../../interfaces/CallParticipant.md).[`inputVolume$`](../../interfaces/CallParticipant.md#inputvolume-1)
+
+## inputVolume
+
+#### Get Signature
+
+> **get** **inputVolume**(): `number` \| `undefined`
+
+Defined in: [core/entities/Participant.ts:346](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Participant.ts#L346)
+
+Current **server-side** microphone input volume as reported by the mix
+engine, or `undefined` if not set. Not the local PC mic — see
+Call.setLocalMicrophoneGain for browser-side control.
+
+##### Returns
+
+`number` \| `undefined`
+
+#### Implementation of
+
+[`CallParticipant`](../../interfaces/CallParticipant.md).[`inputVolume`](../../interfaces/CallParticipant.md#inputvolume)
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/Participant/isAudience.md b/fern/products/browser-sdk/pages/v4/reference/classes/Participant/isAudience.md
new file mode 100644
index 000000000..a121e58cb
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/Participant/isAudience.md
@@ -0,0 +1,17 @@
+# isAudience
+
+#### Get Signature
+
+> **get** **isAudience**(): `boolean`
+
+Defined in: [core/entities/Participant.ts:302](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Participant.ts#L302)
+
+Whether the participant is an audience member (view-only).
+
+##### Returns
+
+`boolean`
+
+#### Implementation of
+
+[`CallParticipant`](../../interfaces/CallParticipant.md).[`isAudience`](../../interfaces/CallParticipant.md#isaudience)
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/Participant/isTalking$.md b/fern/products/browser-sdk/pages/v4/reference/classes/Participant/isTalking$.md
new file mode 100644
index 000000000..f1f89c29d
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/Participant/isTalking$.md
@@ -0,0 +1,35 @@
+# isTalking$
+
+#### Get Signature
+
+> **get** **isTalking$**(): `Observable`\<`boolean` \| `undefined`\>
+
+Defined in: [core/entities/Participant.ts:272](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Participant.ts#L272)
+
+Observable indicating whether the participant is currently speaking.
+
+##### Returns
+
+`Observable`\<`boolean` \| `undefined`\>
+
+#### Implementation of
+
+[`CallParticipant`](../../interfaces/CallParticipant.md).[`isTalking$`](../../interfaces/CallParticipant.md#istalking-1)
+
+## isTalking
+
+#### Get Signature
+
+> **get** **isTalking**(): `boolean`
+
+Defined in: [core/entities/Participant.ts:282](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Participant.ts#L282)
+
+Whether the participant is currently speaking.
+
+##### Returns
+
+`boolean`
+
+#### Implementation of
+
+[`CallParticipant`](../../interfaces/CallParticipant.md).[`isTalking`](../../interfaces/CallParticipant.md#istalking)
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/Participant/lowbitrate$.md b/fern/products/browser-sdk/pages/v4/reference/classes/Participant/lowbitrate$.md
new file mode 100644
index 000000000..f08758af9
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/Participant/lowbitrate$.md
@@ -0,0 +1,35 @@
+# lowbitrate$
+
+#### Get Signature
+
+> **get** **lowbitrate$**(): `Observable`\<`boolean` \| `undefined`\>
+
+Defined in: [core/entities/Participant.ts:212](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Participant.ts#L212)
+
+Observable indicating whether low-bitrate mode is active.
+
+##### Returns
+
+`Observable`\<`boolean` \| `undefined`\>
+
+#### Implementation of
+
+[`CallParticipant`](../../interfaces/CallParticipant.md).[`lowbitrate$`](../../interfaces/CallParticipant.md#lowbitrate-1)
+
+## lowbitrate
+
+#### Get Signature
+
+> **get** **lowbitrate**(): `boolean`
+
+Defined in: [core/entities/Participant.ts:382](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Participant.ts#L382)
+
+Whether low-bitrate mode is active.
+
+##### Returns
+
+`boolean`
+
+#### Implementation of
+
+[`CallParticipant`](../../interfaces/CallParticipant.md).[`lowbitrate`](../../interfaces/CallParticipant.md#lowbitrate)
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/Participant/meta$.md b/fern/products/browser-sdk/pages/v4/reference/classes/Participant/meta$.md
new file mode 100644
index 000000000..6312a2c84
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/Participant/meta$.md
@@ -0,0 +1,35 @@
+# meta$
+
+#### Get Signature
+
+> **get** **meta$**(): `Observable`\<`Record`\<`string`, `unknown`\> \| `undefined`\>
+
+Defined in: [core/entities/Participant.ts:232](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Participant.ts#L232)
+
+Observable of custom metadata for this participant.
+
+##### Returns
+
+`Observable`\<`Record`\<`string`, `unknown`\> \| `undefined`\>
+
+#### Implementation of
+
+[`CallParticipant`](../../interfaces/CallParticipant.md).[`meta$`](../../interfaces/CallParticipant.md#meta-1)
+
+## meta
+
+#### Get Signature
+
+> **get** **meta**(): `Record`\<`string`, `unknown`\> \| `undefined`
+
+Defined in: [core/entities/Participant.ts:392](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Participant.ts#L392)
+
+Custom metadata for this participant, or `undefined` if not set.
+
+##### Returns
+
+`Record`\<`string`, `unknown`\> \| `undefined`
+
+#### Implementation of
+
+[`CallParticipant`](../../interfaces/CallParticipant.md).[`meta`](../../interfaces/CallParticipant.md#meta)
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/Participant/mute.md b/fern/products/browser-sdk/pages/v4/reference/classes/Participant/mute.md
new file mode 100644
index 000000000..9c095241e
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/Participant/mute.md
@@ -0,0 +1,15 @@
+# mute
+
+> **mute**(): `Promise`\<`void`\>
+
+Defined in: [core/entities/Participant.ts:429](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Participant.ts#L429)
+
+Mutes the participant's audio.
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Implementation of
+
+[`CallParticipant`](../../interfaces/CallParticipant.md).[`mute`](../../interfaces/CallParticipant.md#mute)
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/Participant/muteVideo.md b/fern/products/browser-sdk/pages/v4/reference/classes/Participant/muteVideo.md
new file mode 100644
index 000000000..47303f94d
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/Participant/muteVideo.md
@@ -0,0 +1,15 @@
+# muteVideo
+
+> **muteVideo**(): `Promise`\<`void`\>
+
+Defined in: [core/entities/Participant.ts:444](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Participant.ts#L444)
+
+Mutes the participant's video.
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Implementation of
+
+[`CallParticipant`](../../interfaces/CallParticipant.md).[`muteVideo`](../../interfaces/CallParticipant.md#mutevideo)
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/Participant/name$.md b/fern/products/browser-sdk/pages/v4/reference/classes/Participant/name$.md
new file mode 100644
index 000000000..c77891655
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/Participant/name$.md
@@ -0,0 +1,35 @@
+# name$
+
+#### Get Signature
+
+> **get** **name$**(): `Observable`\<`string` \| `undefined`\>
+
+Defined in: [core/entities/Participant.ts:62](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Participant.ts#L62)
+
+Observable of the participant's display name.
+
+##### Returns
+
+`Observable`\<`string` \| `undefined`\>
+
+#### Implementation of
+
+[`CallParticipant`](../../interfaces/CallParticipant.md).[`name$`](../../interfaces/CallParticipant.md#name-1)
+
+## name
+
+#### Get Signature
+
+> **get** **name**(): `string` \| `undefined`
+
+Defined in: [core/entities/Participant.ts:307](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Participant.ts#L307)
+
+Display name of this participant.
+
+##### Returns
+
+`string` \| `undefined`
+
+#### Implementation of
+
+[`CallParticipant`](../../interfaces/CallParticipant.md).[`name`](../../interfaces/CallParticipant.md#name)
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/Participant/nodeId$.md b/fern/products/browser-sdk/pages/v4/reference/classes/Participant/nodeId$.md
new file mode 100644
index 000000000..f6391e4bd
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/Participant/nodeId$.md
@@ -0,0 +1,35 @@
+# nodeId$
+
+#### Get Signature
+
+> **get** **nodeId$**(): `Observable`\<`string` \| `undefined`\>
+
+Defined in: [core/entities/Participant.ts:262](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Participant.ts#L262)
+
+Observable of the server node ID for this participant.
+
+##### Returns
+
+`Observable`\<`string` \| `undefined`\>
+
+#### Implementation of
+
+[`CallParticipant`](../../interfaces/CallParticipant.md).[`nodeId$`](../../interfaces/CallParticipant.md#nodeid-1)
+
+## nodeId
+
+#### Get Signature
+
+> **get** **nodeId**(): `string` \| `undefined`
+
+Defined in: [core/entities/Participant.ts:407](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Participant.ts#L407)
+
+Server node ID for this participant, or `undefined` if not available.
+
+##### Returns
+
+`string` \| `undefined`
+
+#### Implementation of
+
+[`CallParticipant`](../../interfaces/CallParticipant.md).[`nodeId`](../../interfaces/CallParticipant.md#nodeid)
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/Participant/noiseSuppression$.md b/fern/products/browser-sdk/pages/v4/reference/classes/Participant/noiseSuppression$.md
new file mode 100644
index 000000000..009f0accf
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/Participant/noiseSuppression$.md
@@ -0,0 +1,35 @@
+# noiseSuppression$
+
+#### Get Signature
+
+> **get** **noiseSuppression$**(): `Observable`\<`boolean` \| `undefined`\>
+
+Defined in: [core/entities/Participant.ts:202](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Participant.ts#L202)
+
+Observable indicating whether noise suppression is enabled.
+
+##### Returns
+
+`Observable`\<`boolean` \| `undefined`\>
+
+#### Implementation of
+
+[`CallParticipant`](../../interfaces/CallParticipant.md).[`noiseSuppression$`](../../interfaces/CallParticipant.md#noisesuppression-1)
+
+## noiseSuppression
+
+#### Get Signature
+
+> **get** **noiseSuppression**(): `boolean`
+
+Defined in: [core/entities/Participant.ts:377](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Participant.ts#L377)
+
+Whether noise suppression is enabled.
+
+##### Returns
+
+`boolean`
+
+#### Implementation of
+
+[`CallParticipant`](../../interfaces/CallParticipant.md).[`noiseSuppression`](../../interfaces/CallParticipant.md#noisesuppression)
diff --git a/fern/products/browser-sdk/pages/v4/reference/classes/Participant/outputVolume$.md b/fern/products/browser-sdk/pages/v4/reference/classes/Participant/outputVolume$.md
new file mode 100644
index 000000000..e3ad5b5ff
--- /dev/null
+++ b/fern/products/browser-sdk/pages/v4/reference/classes/Participant/outputVolume$.md
@@ -0,0 +1,42 @@
+# outputVolume$
+
+#### Get Signature
+
+> **get** **outputVolume$**(): `Observable`\<`number` \| `undefined`\>
+
+Defined in: [core/entities/Participant.ts:155](https://github.com/signalwire/browser-sdk/blob/25e5ff424d770291cfeb3801743816b995511140/packages/main/src/core/entities/Participant.ts#L155)
+
+Observable of the participant's **server-side** speaker output volume as
+reported by the mix engine (FreeSWITCH channel write volume). NOT the
+local HTML `