Messaging conversations
React to a message
Adds one emoji to a message in a conversation you are in, as yourself, or as the bot X-Fluid-Bot-Id names while its run acting for you is open. Reacting again with the same emoji changes nothing. A reaction sends nothing to anyone, so a bot’s reactions are outside its reply limit. Needs messaging.update.
POST
/
api
/
company
/
v2026-10
/
messaging
/
messages
/
{message_id}
/
reactions
React to a message
curl --request POST \
--url https://api.fluid.app/api/company/v2026-10/messaging/messages/{message_id}/reactions \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"emoji": "👍"
}'import requests
url = "https://api.fluid.app/api/company/v2026-10/messaging/messages/{message_id}/reactions"
payload = { "emoji": "👍" }
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({emoji: '👍'})
};
fetch('https://api.fluid.app/api/company/v2026-10/messaging/messages/{message_id}/reactions', 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/company/v2026-10/messaging/messages/{message_id}/reactions",
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([
'emoji' => '👍'
]),
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/company/v2026-10/messaging/messages/{message_id}/reactions"
payload := strings.NewReader("{\n \"emoji\": \"👍\"\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/company/v2026-10/messaging/messages/{message_id}/reactions")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"emoji\": \"👍\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/company/v2026-10/messaging/messages/{message_id}/reactions")
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 \"emoji\": \"👍\"\n}"
response = http.request(request)
puts response.read_body{
"reaction": {
"message_id": "0199a1b2-c3d4-7e5f-8a9b-0c1d2e3f4a93",
"emojis": [
"👍"
]
},
"status": 200,
"meta": {
"request_uuid": "0199a1b2-c3d4-7e5f-8a9b-0c1d2e3f4a90",
"timestamp": "2026-11-09T09:31:00Z"
}
}{}{
"error": {
"message": "<string>",
"details": {}
},
"status": 123,
"meta": {
"request_uuid": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"error": {
"message": "<string>",
"details": {}
},
"status": 123,
"meta": {
"request_uuid": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"error": {
"message": "<string>",
"details": {}
},
"status": 123,
"meta": {
"request_uuid": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"error": {
"message": "<string>",
"details": {}
},
"status": 123,
"meta": {
"request_uuid": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}Authorizations
The session token of an admin of your company.
Headers
A bot you own or steward, or one whose run is acting for you (a mention run acts for whoever mentioned the bot), to act as it while that run is open. Opening a conversation or changing who is in one is refused with 403 bot_not_allowed, and an id that names no such bot with 403 unknown_bot.
Path Parameters
The message's id (uuid; a numeric id is still accepted).
Body
application/json
One emoji.
Required string length:
1 - 32⌘I
React to a message
curl --request POST \
--url https://api.fluid.app/api/company/v2026-10/messaging/messages/{message_id}/reactions \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"emoji": "👍"
}'import requests
url = "https://api.fluid.app/api/company/v2026-10/messaging/messages/{message_id}/reactions"
payload = { "emoji": "👍" }
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({emoji: '👍'})
};
fetch('https://api.fluid.app/api/company/v2026-10/messaging/messages/{message_id}/reactions', 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/company/v2026-10/messaging/messages/{message_id}/reactions",
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([
'emoji' => '👍'
]),
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/company/v2026-10/messaging/messages/{message_id}/reactions"
payload := strings.NewReader("{\n \"emoji\": \"👍\"\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/company/v2026-10/messaging/messages/{message_id}/reactions")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"emoji\": \"👍\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/company/v2026-10/messaging/messages/{message_id}/reactions")
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 \"emoji\": \"👍\"\n}"
response = http.request(request)
puts response.read_body{
"reaction": {
"message_id": "0199a1b2-c3d4-7e5f-8a9b-0c1d2e3f4a93",
"emojis": [
"👍"
]
},
"status": 200,
"meta": {
"request_uuid": "0199a1b2-c3d4-7e5f-8a9b-0c1d2e3f4a90",
"timestamp": "2026-11-09T09:31:00Z"
}
}{}{
"error": {
"message": "<string>",
"details": {}
},
"status": 123,
"meta": {
"request_uuid": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"error": {
"message": "<string>",
"details": {}
},
"status": 123,
"meta": {
"request_uuid": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"error": {
"message": "<string>",
"details": {}
},
"status": 123,
"meta": {
"request_uuid": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"error": {
"message": "<string>",
"details": {}
},
"status": 123,
"meta": {
"request_uuid": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}