# Chat

## List Sessions

`ChatListPageResponse Beta.Chat.List(ChatListParams?parameters, CancellationTokencancellationToken = default)`

**get** `/api/v1/chat`

List all chat sessions for the current project.

### Parameters

- `ChatListParams parameters`

  - `string? organizationID`

  - `Long? pageSize`

  - `string? pageToken`

  - `string? projectID`

### Returns

- `class ChatListPageResponse:`

  Paginated list of chat sessions.

  - `required IReadOnlyList<ChatListResponse> Items`

    Chat sessions for the current page.

    - `required string LastUpdatedAt`

      ISO-format timestamp showing when the session was last updated.

    - `required string SessionID`

      Unique session identifier.

    - `string? GeneratedTitle`

      Auto-generated title derived from the first user message.

    - `IReadOnlyList<string>? IndexIds`

      Indexes this session is bound to. Null on unbound sessions.

    - `JobMetadata? JobMetadata`

      Token usage and status from the most recent run. Null if the session has not been run yet.

      - `Double DurationMs`

      - `string? Error`

      - `IReadOnlyList<string>? ExportConfigIds`

      - `Boolean IsError`

      - `Long? TotalInputTokens`

      - `Long? TotalOutputTokens`

      - `Long Turns`

  - `string? NextPageToken`

    Opaque token to retrieve the next page. Omitted when there are no further pages.

### Example

```csharp
ChatListParams parameters = new();

var page = await client.Beta.Chat.List(parameters);
await foreach (var item in page.Paginate())
{
    Console.WriteLine(item);
}
```

#### Response

```json
{
  "items": [
    {
      "last_updated_at": "2026-04-22T12:34:41.342245",
      "session_id": "ses-abc123",
      "generated_title": "What were the main findings in Q3?...",
      "index_ids": [
        "idx-abc123",
        "idx-def456"
      ],
      "job_metadata": {
        "duration_ms": 0,
        "error": "error",
        "export_config_ids": [
          "string"
        ],
        "is_error": true,
        "total_input_tokens": 0,
        "total_output_tokens": 0,
        "turns": 0
      }
    }
  ],
  "next_page_token": "next_page_token"
}
```

## Create Session

`ChatCreateResponse Beta.Chat.Create(ChatCreateParams?parameters, CancellationTokencancellationToken = default)`

**post** `/api/v1/chat`

Create a chat session, optionally bound to indexes (locked after the first message).

### Parameters

- `ChatCreateParams parameters`

  - `string? organizationID`

    Query param

  - `string? projectID`

    Query param

  - `IReadOnlyList<string>? indexIds`

    Body param: Indexes this session will retrieve from. Once set and the first message has been sent, the source set is locked for the session's lifetime. Leave null to create an unbound session.

### Returns

- `class ChatCreateResponse:`

  Summary of a chat session, including its title and last run metadata.

  - `required string LastUpdatedAt`

    ISO-format timestamp showing when the session was last updated.

  - `required string SessionID`

    Unique session identifier.

  - `string? GeneratedTitle`

    Auto-generated title derived from the first user message.

  - `IReadOnlyList<string>? IndexIds`

    Indexes this session is bound to. Null on unbound sessions.

  - `JobMetadata? JobMetadata`

    Token usage and status from the most recent run. Null if the session has not been run yet.

    - `Double DurationMs`

    - `string? Error`

    - `IReadOnlyList<string>? ExportConfigIds`

    - `Boolean IsError`

    - `Long? TotalInputTokens`

    - `Long? TotalOutputTokens`

    - `Long Turns`

### Example

```csharp
ChatCreateParams parameters = new();

var chat = await client.Beta.Chat.Create(parameters);

Console.WriteLine(chat);
```

#### Response

```json
{
  "last_updated_at": "2026-04-22T12:34:41.342245",
  "session_id": "ses-abc123",
  "generated_title": "What were the main findings in Q3?...",
  "index_ids": [
    "idx-abc123",
    "idx-def456"
  ],
  "job_metadata": {
    "duration_ms": 0,
    "error": "error",
    "export_config_ids": [
      "string"
    ],
    "is_error": true,
    "total_input_tokens": 0,
    "total_output_tokens": 0,
    "turns": 0
  }
}
```

## Get Full Session

`ChatRetrieveResponse Beta.Chat.Retrieve(ChatRetrieveParamsparameters, CancellationTokencancellationToken = default)`

**get** `/api/v1/chat/{session_id}`

Retrieve a full session by ID, including its event history.

### Parameters

- `ChatRetrieveParams parameters`

  - `required string sessionID`

  - `string? organizationID`

  - `string? projectID`

### Returns

- `class ChatRetrieveResponse:`

  Full chat session including its complete event history.

  - `required IReadOnlyList<Event> Events`

    Ordered list of events that make up the conversation history.

    - `class Stop:`

      - `required string? Error`

      - `required Boolean IsError`

      - `required Usage Usage`

        - `Double DurationMs`

        - `Long? TotalInputTokens`

        - `Long? TotalOutputTokens`

        - `Long Turns`

      - `Type Type`

        - `"stop"Stop`

    - `class TextDelta:`

      - `required string Content`

      - `Type Type`

        - `"text_delta"TextDelta`

    - `class Text:`

      - `required string Content`

      - `Type Type`

        - `"text"Text`

    - `class ThinkingDelta:`

      - `required string Content`

      - `Type Type`

        - `"thinking_delta"ThinkingDelta`

    - `class Thinking:`

      - `required string Content`

      - `Type Type`

        - `"thinking"Thinking`

    - `class ToolCall:`

      - `required IReadOnlyDictionary<string, JsonElement> Arguments`

      - `required string CallID`

      - `required string Name`

      - `Type Type`

        - `"tool_call"ToolCall`

    - `class ToolResult:`

      - `required string CallID`

      - `required string Name`

      - `required JsonElement Result`

      - `ImageAttachment? ImageAttachment`

        Coordinates for lazily resolving a page screenshot presigned URL.

        - `required string AttachmentName`

        - `required string SourceID`

      - `Type Type`

        - `"tool_result"ToolResult`

    - `class UserInput:`

      - `required string Content`

      - `Type Type`

        - `"user_input"UserInput`

  - `required string LastUpdatedAt`

    ISO-format timestamp showing when the session was last updated.

  - `required string SessionID`

    Unique session identifier.

  - `string? GeneratedTitle`

    Auto-generated title derived from the first user message.

  - `IReadOnlyList<string>? IndexIds`

    Indexes this session is bound to. Null on unbound sessions.

  - `JobMetadata? JobMetadata`

    Token usage and status from the most recent run. Null if the session has not been run yet.

    - `Double DurationMs`

    - `string? Error`

    - `IReadOnlyList<string>? ExportConfigIds`

    - `Boolean IsError`

    - `Long? TotalInputTokens`

    - `Long? TotalOutputTokens`

    - `Long Turns`

### Example

```csharp
ChatRetrieveParams parameters = new() { SessionID = "session_id" };

var chat = await client.Beta.Chat.Retrieve(parameters);

Console.WriteLine(chat);
```

#### Response

```json
{
  "events": [
    {
      "error": "error",
      "is_error": true,
      "usage": {
        "duration_ms": 0,
        "total_input_tokens": 0,
        "total_output_tokens": 0,
        "turns": 0
      },
      "type": "stop"
    }
  ],
  "last_updated_at": "2026-04-22T12:34:41.342245",
  "session_id": "ses-abc123",
  "generated_title": "What were the main findings in Q3?...",
  "index_ids": [
    "idx-abc123",
    "idx-def456"
  ],
  "job_metadata": {
    "duration_ms": 0,
    "error": "error",
    "export_config_ids": [
      "string"
    ],
    "is_error": true,
    "total_input_tokens": 0,
    "total_output_tokens": 0,
    "turns": 0
  }
}
```

## Delete Session

`Beta.Chat.Delete(ChatDeleteParamsparameters, CancellationTokencancellationToken = default)`

**delete** `/api/v1/chat/{session_id}`

Delete a session.

### Parameters

- `ChatDeleteParams parameters`

  - `required string sessionID`

  - `string? organizationID`

  - `string? projectID`

### Example

```csharp
ChatDeleteParams parameters = new() { SessionID = "session_id" };

await client.Beta.Chat.Delete(parameters);
```

## Get Session Summary

`ChatGetSummaryResponse Beta.Chat.GetSummary(ChatGetSummaryParamsparameters, CancellationTokencancellationToken = default)`

**get** `/api/v1/chat/{session_id}/summary`

Retrieve a session summary by ID.

### Parameters

- `ChatGetSummaryParams parameters`

  - `required string sessionID`

  - `string? organizationID`

  - `string? projectID`

### Returns

- `class ChatGetSummaryResponse:`

  Summary of a chat session, including its title and last run metadata.

  - `required string LastUpdatedAt`

    ISO-format timestamp showing when the session was last updated.

  - `required string SessionID`

    Unique session identifier.

  - `string? GeneratedTitle`

    Auto-generated title derived from the first user message.

  - `IReadOnlyList<string>? IndexIds`

    Indexes this session is bound to. Null on unbound sessions.

  - `JobMetadata? JobMetadata`

    Token usage and status from the most recent run. Null if the session has not been run yet.

    - `Double DurationMs`

    - `string? Error`

    - `IReadOnlyList<string>? ExportConfigIds`

    - `Boolean IsError`

    - `Long? TotalInputTokens`

    - `Long? TotalOutputTokens`

    - `Long Turns`

### Example

```csharp
ChatGetSummaryParams parameters = new() { SessionID = "session_id" };

var response = await client.Beta.Chat.GetSummary(parameters);

Console.WriteLine(response);
```

#### Response

```json
{
  "last_updated_at": "2026-04-22T12:34:41.342245",
  "session_id": "ses-abc123",
  "generated_title": "What were the main findings in Q3?...",
  "index_ids": [
    "idx-abc123",
    "idx-def456"
  ],
  "job_metadata": {
    "duration_ms": 0,
    "error": "error",
    "export_config_ids": [
      "string"
    ],
    "is_error": true,
    "total_input_tokens": 0,
    "total_output_tokens": 0,
    "turns": 0
  }
}
```

## Stream Messages

`JsonElement Beta.Chat.Stream(ChatStreamParamsparameters, CancellationTokencancellationToken = default)`

**post** `/api/v1/chat/{session_id}/messages/stream`

Stream agent events for a chat turn as Server-Sent Events.

### Parameters

- `ChatStreamParams parameters`

  - `required string sessionID`

    Path param

  - `required IReadOnlyList<string> indexIds`

    Body param: Indexes to retrieve data from.

  - `required string prompt`

    Body param: User message for this chat turn.

  - `string? organizationID`

    Query param

  - `string? projectID`

    Query param

### Example

```csharp
ChatStreamParams parameters = new()
{
    SessionID = "session_id",
    IndexIds =
    [
        "idx-abc123", "idx-def456"
    ],
    Prompt = "What were the main findings in Q3?",
};

var response = await client.Beta.Chat.Stream(parameters);

Console.WriteLine(response);
```

#### Response

```json
{}
```
