---
title: Keep Alive
url: https://docs.kaltura.com/docs/conversational-agents/agentic-avatars-sdk/control-api-keep-alive
---

## Keep Alive

Keep the current session alive.

### Endpoint

```
POST /v1/avatar-session/:sessionId/keep-alive
```

### Authentication

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

### Path Parameters

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

### Request Body

Empty body (`{}`).

### Response

#### Success (200)

```json
{
  "success": true
}
```

#### Error Responses

- `400` - Bad request
- `401` - Unauthorized
- `404` - Not found
- `410` - Gone (session ended)
- `500` - Server error

### Examples

#### cURL

```bash
curl -X POST https://api.avatar.us.kaltura.ai/v1/avatar-session/session-123/keep-alive \
  -H "Authorization: Bearer $TOKEN"
```

#### JavaScript (fetch)

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

### Usage Notes

#### When to Call

Send keep-alive requests **every 10 seconds** to prevent session timeout.

#### Automatic Keep-Alive

If using the Client SDK's `createSession()` method, keep-alive is sent automatically.

#### Manual Keep-Alive

If you're not using the Client SDK, implement manual keep-alive:

```javascript
// Start keep-alive interval
const keepAliveInterval = setInterval(async () => {
  try {
    await fetch(
      `https://api.avatar.us.kaltura.ai/v1/avatar-session/${sessionId}/keep-alive`,
      {
        method: 'POST',
        headers: {
          Authorization: `Bearer ${token}`,
        },
      }
    );
    console.log('Keep-alive sent');
  } catch (error) {
    console.error('Keep-alive failed:', error);
    clearInterval(keepAliveInterval);
  }
}, 10000); // Every 10 seconds

// Stop when session ends
function cleanup() {
  clearInterval(keepAliveInterval);
}
```

### Complete Example

```javascript
class SessionManager {
  constructor(sessionId, token, baseUrl) {
    this.sessionId = sessionId;
    this.token = token;
    this.baseUrl = baseUrl;
    this.keepAliveInterval = null;
  }

  startKeepAlive() {
    this.keepAliveInterval = setInterval(async () => {
      try {
        const response = await fetch(
          `${this.baseUrl}/${this.sessionId}/keep-alive`,
          {
            method: 'POST',
            headers: {
              Authorization: `Bearer ${this.token}`,
            },
          }
        );

        if (!response.ok) {
          throw new Error('Keep-alive failed');
        }

        console.log('Keep-alive: session active');
      } catch (error) {
        console.error('Keep-alive error:', error);
        this.stopKeepAlive();
      }
    }, 10000);
  }

  stopKeepAlive() {
    if (this.keepAliveInterval) {
      clearInterval(this.keepAliveInterval);
      this.keepAliveInterval = null;
    }
  }
}

// Usage
const manager = new SessionManager(sessionId, token, baseUrl);
manager.startKeepAlive();

// Stop when done
manager.stopKeepAlive();
```

### Next Steps

- **[End Session](/docs/conversational-agents/agentic-avatars-sdk/control-api-end-session)** - End the session when done
- **[API Examples](/docs/conversational-agents/agentic-avatars-sdk/control-api-examples)** - See complete examples
