Update conversation
Update an existing conversation. Assignment Rules: assignees must belong to the same workspace as the API key. Chat conversations can be assigned to users, left unassigned, or only to the conversation's original chat agent. Email conversations can be assigned to users, left unassigned, or only to the workspace's active email agent.
Update an existing conversation. Assignment Rules: assignees must belong to the same workspace as the API key. Chat conversations can be assigned to users, left unassigned, or only to the conversation's original chat agent. Email conversations can be assigned to users, left unassigned, or only to the workspace's active email agent.
PUT https://api.weav.com/v1/conversations/{id}
Requires a token with the external-api:write ability.
Path parameters
idstringrequiredConversation UUID
Format: uuid.
Body
subjectstring | nullMaximum length: 500.
statusstring | nullOne of: open, closed.
prioritystring | nullOne of: low, normal, high, urgent.
assignee_idstring | nullID of user or agent to assign conversation to. Set to null to unassign. Must belong to the same workspace. For chat, agent assignments are limited to the conversation's original chat agent. For email, only the active email agent can be assigned as agent.
Format: uuid.
assignee_typestring | nullType of assignee. Defaults to 'user' if assignee_id is provided and assignee_type is omitted.
One of: user, agent.
Request
curl --request PUT \
--url 'https://api.weav.com/v1/conversations/{id}' \
--header "Authorization: Bearer ${WEAV_API_TOKEN}" \
--header 'Content-Type: application/json' \
--data '{
"assignee_id": "550e8400-e29b-41d4-a716-446655440000"
}'
const body = {
"assignee_id": "550e8400-e29b-41d4-a716-446655440000"
};
const response = await fetch("https://api.weav.com/v1/conversations/{id}", {
method: "PUT",
headers: {
Authorization: `Bearer ${process.env.WEAV_API_TOKEN}`,
'Content-Type': 'application/json'
},
body: JSON.stringify(body)
});
console.log(await response.json());
import os
import requests
headers = {"Authorization": f"Bearer {os.environ['WEAV_API_TOKEN']}"}
body = {"assignee_id": "550e8400-e29b-41d4-a716-446655440000"}
response = requests.put("https://api.weav.com/v1/conversations/{id}", headers=headers, json=body)
print(response.json())
use GuzzleHttp\Client;
$client = new Client();
$response = $client->request('PUT', 'https://api.weav.com/v1/conversations/{id}', [
'headers' => ['Authorization' => 'Bearer '.getenv('WEAV_API_TOKEN')],
'json' => array (
'assignee_id' => '550e8400-e29b-41d4-a716-446655440000',
),
]);
echo $response->getBody();
Response
{
"id": "9b2f6c1e-3d4a-4f5b-8c7d-1e2f3a4b5c6d",
"channel": "email",
"customer_id": "9b2f6c1e-3d4a-4f5b-8c7d-1e2f3a4b5c6d",
"subject": "string",
"status": "open",
"priority": "low",
"assignee_id": "9b2f6c1e-3d4a-4f5b-8c7d-1e2f3a4b5c6d",
"assignee_type": "user",
"closed_at": "2026-01-01T00:00:00Z",
"first_response_at": "2026-01-01T00:00:00Z",
"last_message_at": "2026-01-01T00:00:00Z",
"is_spam": false,
"spam_score": 0,
"created_at": "2026-01-01T00:00:00Z",
"updated_at": "2026-01-01T00:00:00Z"
}
{
"error": "Error message",
"code": "ERROR_CODE",
"errors": {}
}
{
"error": "Error message",
"code": "ERROR_CODE",
"errors": {}
}
{
"error": "Error message",
"code": "ERROR_CODE",
"errors": {}
}
Response fields
idstringFormat: uuid.
channelstringOne of: email, chat.
customer_idstringFormat: uuid.
subjectstring | nullstatusstringOne of: open, closed.
prioritystringOne of: low, normal, high, urgent.
assignee_idstring | nullID of the assigned user or agent. Assignees must belong to the same workspace. Chat conversations can only use the original chat agent when assigning an agent. Email conversations can only use the active email agent when assigning an agent.
Format: uuid.
assignee_typestring | nullType of assignee: 'user' for users or 'agent' for AI agents.
One of: user, agent.
closed_atstring | nullFormat: date-time.
first_response_atstring | nullFormat: date-time.
last_message_atstring | nullFormat: date-time.
is_spambooleanspam_scorenumber | nullcreated_atstring | nullFormat: date-time.
updated_atstring | nullFormat: date-time.
