Messages
Reply to a message
Create a reply to an existing message
POST
/
api
/
v1
/
messaging
/
conversations
/
{conversation_id}
/
messages
/
{message_id}
/
reply
Reply to a message
curl --request POST \
--url https://api.fluid.app/api/v1/messaging/conversations/{conversation_id}/messages/{message_id}/reply \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"message": {
"body": "On it. Pam is printing the packing slips now.",
"type": "DirectMessage"
}
}
'import requests
url = "https://api.fluid.app/api/v1/messaging/conversations/{conversation_id}/messages/{message_id}/reply"
payload = { "message": {
"body": "On it. Pam is printing the packing slips now.",
"type": "DirectMessage"
} }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
message: {
body: JSON.stringify('On it. Pam is printing the packing slips now.'),
type: 'DirectMessage'
}
})
};
fetch('https://api.fluid.app/api/v1/messaging/conversations/{conversation_id}/messages/{message_id}/reply', 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/{conversation_id}/messages/{message_id}/reply",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'message' => [
'body' => 'On it. Pam is printing the packing slips now.',
'type' => 'DirectMessage'
]
]),
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/{conversation_id}/messages/{message_id}/reply"
payload := strings.NewReader("{\n \"message\": {\n \"body\": \"On it. Pam is printing the packing slips now.\",\n \"type\": \"DirectMessage\"\n }\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.fluid.app/api/v1/messaging/conversations/{conversation_id}/messages/{message_id}/reply")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"message\": {\n \"body\": \"On it. Pam is printing the packing slips now.\",\n \"type\": \"DirectMessage\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/v1/messaging/conversations/{conversation_id}/messages/{message_id}/reply")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"message\": {\n \"body\": \"On it. Pam is printing the packing slips now.\",\n \"type\": \"DirectMessage\"\n }\n}"
response = http.request(request)
puts response.read_body{
"attachments": [],
"body": "On it. Pam is printing the packing slips now.",
"conversation_id": 7731,
"created_at": "2026-09-15T14:02:19Z",
"deleted_at": null,
"edited_at": null,
"emoji_only_count": 0,
"id": 90463,
"mentioned_recipients": [],
"metadata": {
"client_message_id": null
},
"pinned": false,
"reaction": null,
"reaction_stats": null,
"replied_to_message": {
"attachments": [],
"body": "Reminder: the Scranton branch ships the 20lb copy paper order to Holly Flax on Thursday.",
"conversation_id": 7731,
"created_at": "2026-09-14T15:02:11Z",
"deleted_at": null,
"edited_at": null,
"emoji_only_count": 0,
"id": 90412,
"mentioned_recipients": [],
"metadata": {
"client_message_id": null
},
"pinned": false,
"reaction": null,
"reaction_stats": {
"👍": 2
},
"replied_to_message": null,
"seen_by": [
{
"avatar_background": "0EA5E9",
"first_name": "Jim",
"id": 48218,
"image_url": "https://cdn.fluid.app/avatars/dunder-mifflin/jim-halpert.jpg",
"last_name": "Halpert",
"seen_at": "2026-09-14T15:04:37Z"
},
{
"avatar_background": "EC4899",
"first_name": "Pam",
"id": 48219,
"image_url": "https://cdn.fluid.app/avatars/dunder-mifflin/pam-beesly.jpg",
"last_name": "Beesly",
"seen_at": "2026-09-14T15:06:02Z"
}
],
"seen_by_count": 2,
"sender_recipient": {
"avatar_background": "4F46E5",
"blocked": false,
"blocker": false,
"discarded_at": null,
"first_name": "Dwight",
"id": 48217,
"image_url": "https://cdn.fluid.app/avatars/dunder-mifflin/dwight-schrute.jpg",
"last_name": "Schrute",
"pro_user": false
},
"sent_at": "2026-09-14T15:02:11Z",
"status": "sent",
"type": "DirectMessage",
"updated_at": "2026-09-14T15:07:45Z"
},
"seen_by": [],
"seen_by_count": 0,
"sender_recipient": {
"avatar_background": "0EA5E9",
"blocked": false,
"blocker": false,
"discarded_at": null,
"first_name": "Jim",
"id": 48218,
"image_url": "https://cdn.fluid.app/avatars/dunder-mifflin/jim-halpert.jpg",
"last_name": "Halpert",
"pro_user": false
},
"sent_at": "2026-09-15T14:02:19Z",
"status": "sent",
"type": "DirectMessage",
"updated_at": "2026-09-15T14:02:19Z"
}{
"message": "<string>"
}Authorizations
Bearer token authentication
Response
Success
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Any valid JSON value for provider, integration, theme, metadata, or other dynamic payloads whose keys are not fixed by the API contract.
Any valid JSON value for provider, integration, theme, metadata, or other dynamic payloads whose keys are not fixed by the API contract.
Any valid JSON value for provider, integration, theme, metadata, or other dynamic payloads whose keys are not fixed by the API contract.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
⌘I
Reply to a message
curl --request POST \
--url https://api.fluid.app/api/v1/messaging/conversations/{conversation_id}/messages/{message_id}/reply \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"message": {
"body": "On it. Pam is printing the packing slips now.",
"type": "DirectMessage"
}
}
'import requests
url = "https://api.fluid.app/api/v1/messaging/conversations/{conversation_id}/messages/{message_id}/reply"
payload = { "message": {
"body": "On it. Pam is printing the packing slips now.",
"type": "DirectMessage"
} }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
message: {
body: JSON.stringify('On it. Pam is printing the packing slips now.'),
type: 'DirectMessage'
}
})
};
fetch('https://api.fluid.app/api/v1/messaging/conversations/{conversation_id}/messages/{message_id}/reply', 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/{conversation_id}/messages/{message_id}/reply",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'message' => [
'body' => 'On it. Pam is printing the packing slips now.',
'type' => 'DirectMessage'
]
]),
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/{conversation_id}/messages/{message_id}/reply"
payload := strings.NewReader("{\n \"message\": {\n \"body\": \"On it. Pam is printing the packing slips now.\",\n \"type\": \"DirectMessage\"\n }\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.fluid.app/api/v1/messaging/conversations/{conversation_id}/messages/{message_id}/reply")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"message\": {\n \"body\": \"On it. Pam is printing the packing slips now.\",\n \"type\": \"DirectMessage\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/v1/messaging/conversations/{conversation_id}/messages/{message_id}/reply")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"message\": {\n \"body\": \"On it. Pam is printing the packing slips now.\",\n \"type\": \"DirectMessage\"\n }\n}"
response = http.request(request)
puts response.read_body{
"attachments": [],
"body": "On it. Pam is printing the packing slips now.",
"conversation_id": 7731,
"created_at": "2026-09-15T14:02:19Z",
"deleted_at": null,
"edited_at": null,
"emoji_only_count": 0,
"id": 90463,
"mentioned_recipients": [],
"metadata": {
"client_message_id": null
},
"pinned": false,
"reaction": null,
"reaction_stats": null,
"replied_to_message": {
"attachments": [],
"body": "Reminder: the Scranton branch ships the 20lb copy paper order to Holly Flax on Thursday.",
"conversation_id": 7731,
"created_at": "2026-09-14T15:02:11Z",
"deleted_at": null,
"edited_at": null,
"emoji_only_count": 0,
"id": 90412,
"mentioned_recipients": [],
"metadata": {
"client_message_id": null
},
"pinned": false,
"reaction": null,
"reaction_stats": {
"👍": 2
},
"replied_to_message": null,
"seen_by": [
{
"avatar_background": "0EA5E9",
"first_name": "Jim",
"id": 48218,
"image_url": "https://cdn.fluid.app/avatars/dunder-mifflin/jim-halpert.jpg",
"last_name": "Halpert",
"seen_at": "2026-09-14T15:04:37Z"
},
{
"avatar_background": "EC4899",
"first_name": "Pam",
"id": 48219,
"image_url": "https://cdn.fluid.app/avatars/dunder-mifflin/pam-beesly.jpg",
"last_name": "Beesly",
"seen_at": "2026-09-14T15:06:02Z"
}
],
"seen_by_count": 2,
"sender_recipient": {
"avatar_background": "4F46E5",
"blocked": false,
"blocker": false,
"discarded_at": null,
"first_name": "Dwight",
"id": 48217,
"image_url": "https://cdn.fluid.app/avatars/dunder-mifflin/dwight-schrute.jpg",
"last_name": "Schrute",
"pro_user": false
},
"sent_at": "2026-09-14T15:02:11Z",
"status": "sent",
"type": "DirectMessage",
"updated_at": "2026-09-14T15:07:45Z"
},
"seen_by": [],
"seen_by_count": 0,
"sender_recipient": {
"avatar_background": "0EA5E9",
"blocked": false,
"blocker": false,
"discarded_at": null,
"first_name": "Jim",
"id": 48218,
"image_url": "https://cdn.fluid.app/avatars/dunder-mifflin/jim-halpert.jpg",
"last_name": "Halpert",
"pro_user": false
},
"sent_at": "2026-09-15T14:02:19Z",
"status": "sent",
"type": "DirectMessage",
"updated_at": "2026-09-15T14:02:19Z"
}{
"message": "<string>"
}