---
title: Initialize Client
url: https://docs.kaltura.com/docs/conversational-agents/agentic-avatars-sdk/control-api-init-client
---

## Initialize Client

Initialize the avatar client to get WebRTC configuration.

### Endpoint

```
POST /v1/avatar-session/:sessionId/init-client
```

### Authentication

**Header:** `Authorization: Bearer {token}`

The token is received from [create-session](/docs/conversational-agents/agentic-avatars-sdk/control-api-create-session).

### Path Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `sessionId` | string | Yes | Session ID from create-session |

### Request Body

Empty body (`{}`).

### Response

#### Success (200)

```json
{
  "success": true,
  "whepUrl": "string",
  "turn": {
    "url": "string",
    "credential": "string",
    "username": "string"
  }
}
```

| Field | Type | Description |
|-------|------|-------------|
| `success` | boolean | Always `true` on success |
| `whepUrl` | string | WebRTC WHEP endpoint URL for media streaming |
| `turn` | object | TURN server configuration for WebRTC |
| `turn.url` | string | TURN server URL |
| `turn.credential` | string | Credential for TURN server authentication |
| `turn.username` | string | Username for TURN server authentication |

#### Error Responses

**401 Unauthorized**

```json
{
  "success": false,
  "error": "Invalid or expired token"
}
```

**404 Not Found**

```json
{
  "success": false,
  "error": "Session not found"
}
```

**410 Gone**

```json
{
  "success": false,
  "error": "Session ended"
}
```

### Examples

#### cURL

```bash
curl -X POST https://api.avatar.us.kaltura.ai/v1/avatar-session/session-123/init-client \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
```

#### JavaScript (fetch)

```javascript
const response = await fetch(`https://api.avatar.us.kaltura.ai/v1/avatar-session/${sessionId}/init-client`, {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${token}`,
  },
});

const data = await response.json();
console.log('WHEP URL:', data.whepUrl);
console.log('TURN config:', data.turn);
```

### Usage Notes

#### When to Call

Call this endpoint immediately after creating a session and before displaying the avatar.

#### What It Returns

- **whepUrl**: Use this to establish WebRTC connection for video streaming
- **turn**: TURN server credentials for NAT traversal

#### WebRTC Configuration

Use the returned configuration with the Client SDK:

```javascript
import { AvatarRTCSDK } from '@unisphere/models-sdk-js';

const rtcSDK = new AvatarRTCSDK({
  whepUrl: data.whepUrl,
  iceServers: [
    {
      urls: [
        `turn:${data.turn.url}:80?transport=udp`,
        `turn:${data.turn.url}:443?transport=udp`,
        `turn:${data.turn.url}:80?transport=tcp`,
      ],
      username: data.turn.username,
      credential: data.turn.credential,
    },
  ],
});

await rtcSDK.connect();
```

#### Client SDK Automatic

If using the Client SDK's `createSession()` method, this endpoint is called automatically.

### Next Steps

- **[Say Text](/docs/conversational-agents/agentic-avatars-sdk/control-api-say-text)** - Make the avatar speak
- **[Keep Alive](/docs/conversational-agents/agentic-avatars-sdk/control-api-keep-alive)** - Maintain the session
