Update a conversation
Rename a conversation, change its description, or add participants. Callable by a signed-in company admin or rep whose role includes the messaging update permission, on an open or initiated conversation you belong to.
additional_recipient_params adds participants to a group conversation only, identified by receivable_id and receivable_type; participants who previously left are re-added. auto_add_recipients is applied only for company admins. The announcement channel can be renamed only by a root admin. Participants are notified of a rename and of newly added members.
curl --request PUT \
--url https://api.fluid.app/api/v1/messaging/conversations/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"conversation": {
"name": "Scranton Sales Team",
"description": "Daily numbers and client follow-ups for the Scranton branch",
"additional_recipient_params": [
{
"receivable_id": 7864,
"receivable_type": "UserCompany"
}
]
}
}
'import requests
url = "https://api.fluid.app/api/v1/messaging/conversations/{id}"
payload = { "conversation": {
"name": "Scranton Sales Team",
"description": "Daily numbers and client follow-ups for the Scranton branch",
"additional_recipient_params": [
{
"receivable_id": 7864,
"receivable_type": "UserCompany"
}
]
} }
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({
conversation: {
name: 'Scranton Sales Team',
description: 'Daily numbers and client follow-ups for the Scranton branch',
additional_recipient_params: [{receivable_id: 7864, receivable_type: 'UserCompany'}]
}
})
};
fetch('https://api.fluid.app/api/v1/messaging/conversations/{id}', 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.fluid.app/api/v1/messaging/conversations/{id}",
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([
'conversation' => [
'name' => 'Scranton Sales Team',
'description' => 'Daily numbers and client follow-ups for the Scranton branch',
'additional_recipient_params' => [
[
'receivable_id' => 7864,
'receivable_type' => 'UserCompany'
]
]
]
]),
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.fluid.app/api/v1/messaging/conversations/{id}"
payload := strings.NewReader("{\n \"conversation\": {\n \"name\": \"Scranton Sales Team\",\n \"description\": \"Daily numbers and client follow-ups for the Scranton branch\",\n \"additional_recipient_params\": [\n {\n \"receivable_id\": 7864,\n \"receivable_type\": \"UserCompany\"\n }\n ]\n }\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.fluid.app/api/v1/messaging/conversations/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"conversation\": {\n \"name\": \"Scranton Sales Team\",\n \"description\": \"Daily numbers and client follow-ups for the Scranton branch\",\n \"additional_recipient_params\": [\n {\n \"receivable_id\": 7864,\n \"receivable_type\": \"UserCompany\"\n }\n ]\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/v1/messaging/conversations/{id}")
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 \"conversation\": {\n \"name\": \"Scranton Sales Team\",\n \"description\": \"Daily numbers and client follow-ups for the Scranton branch\",\n \"additional_recipient_params\": [\n {\n \"receivable_id\": 7864,\n \"receivable_type\": \"UserCompany\"\n }\n ]\n }\n}"
response = http.request(request)
puts response.read_body{
"id": 90412,
"type": "GroupConversation",
"kind": "group",
"name": "Scranton Sales Team",
"description": "Daily numbers and client follow-ups for the Scranton branch",
"status": "open",
"conversation_type": "internal",
"broadcasting": null,
"auto_add_recipients": null,
"announcing": false,
"avatar_background_color": null,
"avatar_emoji": null,
"avatar_url": null,
"image_url": null,
"created_at": "2026-09-14T15:42:07Z",
"pinned_messages_count": 1,
"total_recipients": 5,
"unread": true,
"pinned": false,
"muted": false,
"unread_messages_count": 3,
"scheduled_messages_count": 0,
"email_enabled?": false,
"sms_enabled?": false,
"messaging_enabled?": true,
"draft_message": null,
"recipients": [
{
"id": 48102,
"receivable_id": 7731,
"receivable_type": "UserCompany",
"first_name": "Michael",
"last_name": "Scott",
"status": "active",
"last_online": "2026-09-30T15:40:12Z",
"avatar_background": "#4F46E5",
"avatar_url": null,
"image_url": null,
"country_name": "United States",
"pro_user": true,
"blocked": false,
"left_conversation_at": null,
"discarded_at": null
},
{
"id": 48211,
"receivable_id": 7802,
"receivable_type": "UserCompany",
"first_name": "Dwight",
"last_name": "Schrute",
"status": "active",
"last_online": "2026-09-30T14:58:03Z",
"avatar_background": "#0EA5E9",
"avatar_url": null,
"image_url": null,
"country_name": "United States",
"pro_user": true,
"blocked": false,
"left_conversation_at": null,
"discarded_at": null
},
{
"id": 48307,
"receivable_id": 7859,
"receivable_type": "UserCompany",
"first_name": "Jim",
"last_name": "Halpert",
"status": "active",
"last_online": "2026-09-30T09:17:31Z",
"avatar_background": "#F59E0B",
"avatar_url": null,
"image_url": null,
"country_name": "United States",
"pro_user": false,
"blocked": false,
"left_conversation_at": null,
"discarded_at": null
},
{
"id": 48362,
"receivable_id": 7871,
"receivable_type": "UserCompany",
"first_name": "Stanley",
"last_name": "Hudson",
"status": "active",
"last_online": "2026-09-28T17:00:00Z",
"avatar_background": "#10B981",
"avatar_url": null,
"image_url": null,
"country_name": "United States",
"pro_user": false,
"blocked": false,
"left_conversation_at": null,
"discarded_at": null
},
{
"id": 48355,
"receivable_id": 7864,
"receivable_type": "UserCompany",
"first_name": "Pam",
"last_name": "Beesly",
"status": "active",
"last_online": "2026-09-29T21:03:55Z",
"avatar_background": "#EC4899",
"avatar_url": null,
"image_url": null,
"country_name": "United States",
"pro_user": false,
"blocked": false,
"left_conversation_at": null,
"discarded_at": null
}
],
"creator": {
"id": 48102,
"first_name": "Michael",
"last_name": "Scott",
"avatar_background": "#4F46E5",
"image_url": null,
"pro_user": true,
"blocked": false,
"blocker": false,
"discarded_at": null
}
}{
"message": "<string>"
}Authorizations
Bearer token authentication
Path Parameters
Body
Show child attributes
Show child attributes
Response
The updated conversation.
A conversation as seen by the acting recipient. Per-recipient fields such as unread, pinned, and muted describe that recipient's view of the conversation. recipients lists at most six active participants; total_recipients is the full count.
The conversation type, for example GroupConversation.
The short conversation kind (direct, group, channel, or downline), or null for SMS, email, and bot conversations.
One of initiated, open, archived, or closed. A new conversation stays initiated until its first message.
internal for conversations between company members, external for conversations with contacts.
Whether the acting recipient can post in the conversation.
The acting recipient's unsent draft in this conversation, or null.
Show child attributes
Show child attributes
The recipient who created a conversation.
Show child attributes
Show child attributes
curl --request PUT \
--url https://api.fluid.app/api/v1/messaging/conversations/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"conversation": {
"name": "Scranton Sales Team",
"description": "Daily numbers and client follow-ups for the Scranton branch",
"additional_recipient_params": [
{
"receivable_id": 7864,
"receivable_type": "UserCompany"
}
]
}
}
'import requests
url = "https://api.fluid.app/api/v1/messaging/conversations/{id}"
payload = { "conversation": {
"name": "Scranton Sales Team",
"description": "Daily numbers and client follow-ups for the Scranton branch",
"additional_recipient_params": [
{
"receivable_id": 7864,
"receivable_type": "UserCompany"
}
]
} }
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({
conversation: {
name: 'Scranton Sales Team',
description: 'Daily numbers and client follow-ups for the Scranton branch',
additional_recipient_params: [{receivable_id: 7864, receivable_type: 'UserCompany'}]
}
})
};
fetch('https://api.fluid.app/api/v1/messaging/conversations/{id}', 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.fluid.app/api/v1/messaging/conversations/{id}",
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([
'conversation' => [
'name' => 'Scranton Sales Team',
'description' => 'Daily numbers and client follow-ups for the Scranton branch',
'additional_recipient_params' => [
[
'receivable_id' => 7864,
'receivable_type' => 'UserCompany'
]
]
]
]),
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.fluid.app/api/v1/messaging/conversations/{id}"
payload := strings.NewReader("{\n \"conversation\": {\n \"name\": \"Scranton Sales Team\",\n \"description\": \"Daily numbers and client follow-ups for the Scranton branch\",\n \"additional_recipient_params\": [\n {\n \"receivable_id\": 7864,\n \"receivable_type\": \"UserCompany\"\n }\n ]\n }\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.fluid.app/api/v1/messaging/conversations/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"conversation\": {\n \"name\": \"Scranton Sales Team\",\n \"description\": \"Daily numbers and client follow-ups for the Scranton branch\",\n \"additional_recipient_params\": [\n {\n \"receivable_id\": 7864,\n \"receivable_type\": \"UserCompany\"\n }\n ]\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/v1/messaging/conversations/{id}")
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 \"conversation\": {\n \"name\": \"Scranton Sales Team\",\n \"description\": \"Daily numbers and client follow-ups for the Scranton branch\",\n \"additional_recipient_params\": [\n {\n \"receivable_id\": 7864,\n \"receivable_type\": \"UserCompany\"\n }\n ]\n }\n}"
response = http.request(request)
puts response.read_body{
"id": 90412,
"type": "GroupConversation",
"kind": "group",
"name": "Scranton Sales Team",
"description": "Daily numbers and client follow-ups for the Scranton branch",
"status": "open",
"conversation_type": "internal",
"broadcasting": null,
"auto_add_recipients": null,
"announcing": false,
"avatar_background_color": null,
"avatar_emoji": null,
"avatar_url": null,
"image_url": null,
"created_at": "2026-09-14T15:42:07Z",
"pinned_messages_count": 1,
"total_recipients": 5,
"unread": true,
"pinned": false,
"muted": false,
"unread_messages_count": 3,
"scheduled_messages_count": 0,
"email_enabled?": false,
"sms_enabled?": false,
"messaging_enabled?": true,
"draft_message": null,
"recipients": [
{
"id": 48102,
"receivable_id": 7731,
"receivable_type": "UserCompany",
"first_name": "Michael",
"last_name": "Scott",
"status": "active",
"last_online": "2026-09-30T15:40:12Z",
"avatar_background": "#4F46E5",
"avatar_url": null,
"image_url": null,
"country_name": "United States",
"pro_user": true,
"blocked": false,
"left_conversation_at": null,
"discarded_at": null
},
{
"id": 48211,
"receivable_id": 7802,
"receivable_type": "UserCompany",
"first_name": "Dwight",
"last_name": "Schrute",
"status": "active",
"last_online": "2026-09-30T14:58:03Z",
"avatar_background": "#0EA5E9",
"avatar_url": null,
"image_url": null,
"country_name": "United States",
"pro_user": true,
"blocked": false,
"left_conversation_at": null,
"discarded_at": null
},
{
"id": 48307,
"receivable_id": 7859,
"receivable_type": "UserCompany",
"first_name": "Jim",
"last_name": "Halpert",
"status": "active",
"last_online": "2026-09-30T09:17:31Z",
"avatar_background": "#F59E0B",
"avatar_url": null,
"image_url": null,
"country_name": "United States",
"pro_user": false,
"blocked": false,
"left_conversation_at": null,
"discarded_at": null
},
{
"id": 48362,
"receivable_id": 7871,
"receivable_type": "UserCompany",
"first_name": "Stanley",
"last_name": "Hudson",
"status": "active",
"last_online": "2026-09-28T17:00:00Z",
"avatar_background": "#10B981",
"avatar_url": null,
"image_url": null,
"country_name": "United States",
"pro_user": false,
"blocked": false,
"left_conversation_at": null,
"discarded_at": null
},
{
"id": 48355,
"receivable_id": 7864,
"receivable_type": "UserCompany",
"first_name": "Pam",
"last_name": "Beesly",
"status": "active",
"last_online": "2026-09-29T21:03:55Z",
"avatar_background": "#EC4899",
"avatar_url": null,
"image_url": null,
"country_name": "United States",
"pro_user": false,
"blocked": false,
"left_conversation_at": null,
"discarded_at": null
}
],
"creator": {
"id": 48102,
"first_name": "Michael",
"last_name": "Scott",
"avatar_background": "#4F46E5",
"image_url": null,
"pro_user": true,
"blocked": false,
"blocker": false,
"discarded_at": null
}
}{
"message": "<string>"
}