> ## Documentation Index
> Fetch the complete documentation index at: https://learn.nexudus.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Update AiChannelSession

> Update an existing AiChannelSession record.

Updates an existing AiChannelSession record. You must include the `Id` of the record to update along with all required fields.

## Authentication

> [!NOTE]
>
> This endpoint requires OAuth2 authentication. Include a valid bearer token in the `Authorization` header.
> The authenticated user must be a full unrestricted administrator or have the **`AiChannelSession-Edit`** role.

## Enums

> [accordion] eAiEscalationStatus — EscalationStatus values
>
> | Value | Name |
> | - | - |
> | 1 | Pending |
> | 2 | Active |
> | 3 | Resolved |

## Request Body

### Required Fields

**Id** `integer` *required*

The Id of the AiChannelSession record to update.

**BusinessId** `integer` *required*

ID of the location that owns this conversation. Set from the location the inbound message arrived at, or from the location whose agent started the outreach..

**Channel** `string` *required*

Channel the conversation runs on, stored as text: Chat for the web widget, Email, WhatsApp or Voice for inbound contact; proactive outreach also writes CoworkerMessage and HelpDesk. Determines how ExternalIdentifier is interpreted..

**ExternalIdentifier** `string` *required*

How the outside contact is addressed on this channel: an email address for Email, a phone number for WhatsApp and Voice. It is how a conversation is matched to an incoming reply, and how dormant non-member leads are followed up..

**EscalationStatus** `integer` *required*

How far this conversation has been handed over to a person: None while the AI is handling it alone; Pending once the AI escalates and a help desk ticket is waiting; Active once someone comments on that ticket or an operator takes the thread; Resolved when the ticket is closed..

### Optional Fields

**CoworkerId** `integer`

ID of the customer this conversation is with. Empty when the contact is not a member yet, in which case ExternalIdentifier holds their email address or phone number..

**ChatSession** `string`

GUID that groups the conversation’s messages. Every OpenAiChatMessage in this conversation carries the same value, so it is the key to reading the transcript..

**ExternalThreadId** `string`

Threading key from the channel provider — the email In-Reply-To/References header, or the WhatsApp conversation ID — used to attach later replies to this same conversation..

**LastActivityUtc** `string`

UTC time of the most recent message in either direction. Drives conversation ordering, session expiry, and the dormant-lead follow-up agent..

**Subject** `string`

Conversation subject, taken from the first email or inferred from the opening messages. On the Email channel a different subject from the same address starts a new conversation rather than continuing this one..

## Code Examples

```bash cURL theme={null}
curl -X PUT \
  "https://spaces.nexudus.com/api/sys/aichannelsessions" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "BusinessId": 0,
    "Channel": "",
    "ExternalIdentifier": "",
    "EscalationStatus": 0,
    "Id": 87654321
}'
```

```javascript JavaScript theme={null}
const response = await fetch(
  'https://spaces.nexudus.com/api/sys/aichannelsessions',
  {
    method: 'PUT',
    headers: {
      'Authorization': 'Bearer YOUR_TOKEN',
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      BusinessId: 0,
      Channel: '',
      ExternalIdentifier: '',
      EscalationStatus: 0,
      Id: 87654321
    })
  }
);

const data = await response.json();
```

```python Python theme={null}
import requests

response = requests.put(
    'https://spaces.nexudus.com/api/sys/aichannelsessions',
    headers={
        'Authorization': 'Bearer YOUR_TOKEN',
        'Content-Type': 'application/json'
    },
    json={
        'BusinessId': 0,
        'Channel': '',
        'ExternalIdentifier': '',
        'EscalationStatus': 0,
        'Id': 87654321
    }
)

data = response.json()
```

## Response

### 200

**Status** `integer`

HTTP status code. `200` on success.

**Message** `string`

A human-readable message confirming the update.

**Value** `object`

Contains the `Id` of the updated record.

**WasSuccessful** `boolean`

`true` if the aichannelsession was updated successfully.

**Errors** `array`

`null` on success.

```json Example Response theme={null}
{
  "Status": 200,
  "Message": "AiChannelSession was successfully updated.",
  "Value": {
    "Id": 87654321
  },
  "OpenInDialog": false,
  "OpenInWindow": false,
  "RedirectURL": null,
  "JavaScript": null,
  "UpdatedOn": "2025-01-15T10:30:00Z",
  "UpdatedBy": "admin@example.com",
  "Errors": null,
  "WasSuccessful": true
}
```

### 400

**Message** `string`

A summary of the validation error(s), in the format `PropertyName: error message`.

**Value** `any`

`null` on validation failure.

**Errors** `object[]`

Array of validation errors.

**AttemptedValue** `any`

The value that was submitted for the field, or `null` if missing.

**Message** `string`

The validation error message.

**PropertyName** `string`

The name of the property that failed validation.

**WasSuccessful** `boolean`

`false` when the request fails validation.

```json Example Response theme={null}
{
  "Message": "Channel: is a required field",
  "Value": null,
  "Errors": [
    {
      "AttemptedValue": null,
      "Message": "is a required field",
      "PropertyName": "Channel"
    }
  ],
  "WasSuccessful": false
}
```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.