curl --request PUT \
--url https://api.nuvia.ai/v1/conversations/{id}/assign-user \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"userId": "<string>",
"isToolCall": false,
"preserveWhoAnswering": false,
"rejectInactiveUser": true,
"webhookEventId": "<string>"
}
'import requests
url = "https://api.nuvia.ai/v1/conversations/{id}/assign-user"
payload = {
"userId": "<string>",
"isToolCall": False,
"preserveWhoAnswering": False,
"rejectInactiveUser": True,
"webhookEventId": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
userId: '<string>',
isToolCall: false,
preserveWhoAnswering: false,
rejectInactiveUser: true,
webhookEventId: '<string>'
})
};
fetch('https://api.nuvia.ai/v1/conversations/{id}/assign-user', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.nuvia.ai/v1/conversations/{id}/assign-user",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'userId' => '<string>',
'isToolCall' => false,
'preserveWhoAnswering' => false,
'rejectInactiveUser' => true,
'webhookEventId' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.nuvia.ai/v1/conversations/{id}/assign-user"
payload := strings.NewReader("{\n \"userId\": \"<string>\",\n \"isToolCall\": false,\n \"preserveWhoAnswering\": false,\n \"rejectInactiveUser\": true,\n \"webhookEventId\": \"<string>\"\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://api.nuvia.ai/v1/conversations/{id}/assign-user")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"userId\": \"<string>\",\n \"isToolCall\": false,\n \"preserveWhoAnswering\": false,\n \"rejectInactiveUser\": true,\n \"webhookEventId\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.nuvia.ai/v1/conversations/{id}/assign-user")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"userId\": \"<string>\",\n \"isToolCall\": false,\n \"preserveWhoAnswering\": false,\n \"rejectInactiveUser\": true,\n \"webhookEventId\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"last_activity_at": "<unknown>",
"status": "OPEN",
"who_answering": "AGENT",
"contact": "<unknown>",
"inbox": "<unknown>",
"company": "<unknown>",
"_id": "<string>",
"additional_attributes": "<unknown>",
"agent_last_activity_at": "<unknown>",
"contact_last_activity_at": "<unknown>",
"allow_send_messages_at": "<unknown>",
"priority": 4,
"agent": "<unknown>",
"current_step": "<unknown>",
"user": "<unknown>",
"requires_attention": {
"type": "HUMAN_HANDOFF",
"requested_at": "<unknown>"
},
"referral": "<unknown>",
"createdAt": "<unknown>",
"updatedAt": "<unknown>",
"resolved_count": 123
}Assign user to conversation
Assigns a user (support agent) to a specific conversation
curl --request PUT \
--url https://api.nuvia.ai/v1/conversations/{id}/assign-user \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"userId": "<string>",
"isToolCall": false,
"preserveWhoAnswering": false,
"rejectInactiveUser": true,
"webhookEventId": "<string>"
}
'import requests
url = "https://api.nuvia.ai/v1/conversations/{id}/assign-user"
payload = {
"userId": "<string>",
"isToolCall": False,
"preserveWhoAnswering": False,
"rejectInactiveUser": True,
"webhookEventId": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
userId: '<string>',
isToolCall: false,
preserveWhoAnswering: false,
rejectInactiveUser: true,
webhookEventId: '<string>'
})
};
fetch('https://api.nuvia.ai/v1/conversations/{id}/assign-user', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.nuvia.ai/v1/conversations/{id}/assign-user",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'userId' => '<string>',
'isToolCall' => false,
'preserveWhoAnswering' => false,
'rejectInactiveUser' => true,
'webhookEventId' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.nuvia.ai/v1/conversations/{id}/assign-user"
payload := strings.NewReader("{\n \"userId\": \"<string>\",\n \"isToolCall\": false,\n \"preserveWhoAnswering\": false,\n \"rejectInactiveUser\": true,\n \"webhookEventId\": \"<string>\"\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://api.nuvia.ai/v1/conversations/{id}/assign-user")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"userId\": \"<string>\",\n \"isToolCall\": false,\n \"preserveWhoAnswering\": false,\n \"rejectInactiveUser\": true,\n \"webhookEventId\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.nuvia.ai/v1/conversations/{id}/assign-user")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"userId\": \"<string>\",\n \"isToolCall\": false,\n \"preserveWhoAnswering\": false,\n \"rejectInactiveUser\": true,\n \"webhookEventId\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"last_activity_at": "<unknown>",
"status": "OPEN",
"who_answering": "AGENT",
"contact": "<unknown>",
"inbox": "<unknown>",
"company": "<unknown>",
"_id": "<string>",
"additional_attributes": "<unknown>",
"agent_last_activity_at": "<unknown>",
"contact_last_activity_at": "<unknown>",
"allow_send_messages_at": "<unknown>",
"priority": 4,
"agent": "<unknown>",
"current_step": "<unknown>",
"user": "<unknown>",
"requires_attention": {
"type": "HUMAN_HANDOFF",
"requested_at": "<unknown>"
},
"referral": "<unknown>",
"createdAt": "<unknown>",
"updatedAt": "<unknown>",
"resolved_count": 123
}Authorizations
Token JWT de autenticação
Headers
Target company identifier. Required only for global API keys (type=global). Ignored for company API keys and human users.
Path Parameters
Conversation ID
Body
ID of the user (attendant) to assign
Whether it's a tool call
If true, keeps the current who_answering (does not force HUMAN). Used in HubSpot owner synchronization.
Assignment origin. Purely an observability field, propagated only to logs.
ai_tool_assign_user, ai_tool_assign_team, ai_tool_distribute_owner, ai_tool_assign_linked_user, webhook_hubspot_owner_sync, campaign_step_config, campaign_list_owner_reconcile, ui_user, ui_admin, user_offboard_reassign, manual_template_send, internal If true, assigning to a user who is not ACTIVE returns an error instead of ignoring the assignment. Enabled only on the operator route, where someone is available to read the message; every automatic path (tool, CRM webhook, campaign) uses the default false.
eventId of the HubSpot webhook when the assignment is triggered via WebhookOwnerSyncService. Propagated only for logs.
Response
User assigned successfully
Date of the last activity
Conversation status
OPEN, RESOLVED Who is responding (AGENT/HUMAN)
AGENT, HUMAN, UNASSIGNED Conversation's contact
Conversation's inbox
Conversation's company
Conversation ID
Additional conversation attributes
Date of the agent's last activity
Date of the contact's last activity
Date allowed to send messages
Conversation priority
4, 3, 2, 1 Agent assigned to the conversation
Current step of the agent's flow
User assigned to the conversation
Attention required
Show child attributes
Show child attributes
Conversation referral data
Conversation creation date
Conversation update date
Number of resolved conversations for the contact (only when grouped)