Scheduled messages
Create a scheduled message
Schedule a message to be sent at a future time in a conversation. Any existing draft messages by the sender in this conversation are removed on creation.
POST
/
api
/
v1
/
messaging
/
conversations
/
{conversation_id}
/
scheduled_messages
Create a scheduled message
curl --request POST \
--url https://api.fluid.app/api/v1/messaging/conversations/{conversation_id}/scheduled_messages \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"scheduled_message": {
"body": "Team meeting in the conference room at 9 sharp. Bring your Q3 sales numbers.",
"scheduled_at": "2026-09-21T13:00:00Z",
"type": "DirectMessage"
}
}
'import requests
url = "https://api.fluid.app/api/v1/messaging/conversations/{conversation_id}/scheduled_messages"
payload = { "scheduled_message": {
"body": "Team meeting in the conference room at 9 sharp. Bring your Q3 sales numbers.",
"scheduled_at": "2026-09-21T13:00:00Z",
"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({
scheduled_message: {
body: JSON.stringify('Team meeting in the conference room at 9 sharp. Bring your Q3 sales numbers.'),
scheduled_at: '2026-09-21T13:00:00Z',
type: 'DirectMessage'
}
})
};
fetch('https://api.fluid.app/api/v1/messaging/conversations/{conversation_id}/scheduled_messages', 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}/scheduled_messages",
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([
'scheduled_message' => [
'body' => 'Team meeting in the conference room at 9 sharp. Bring your Q3 sales numbers.',
'scheduled_at' => '2026-09-21T13:00:00Z',
'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}/scheduled_messages"
payload := strings.NewReader("{\n \"scheduled_message\": {\n \"body\": \"Team meeting in the conference room at 9 sharp. Bring your Q3 sales numbers.\",\n \"scheduled_at\": \"2026-09-21T13:00:00Z\",\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}/scheduled_messages")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"scheduled_message\": {\n \"body\": \"Team meeting in the conference room at 9 sharp. Bring your Q3 sales numbers.\",\n \"scheduled_at\": \"2026-09-21T13:00:00Z\",\n \"type\": \"DirectMessage\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/v1/messaging/conversations/{conversation_id}/scheduled_messages")
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 \"scheduled_message\": {\n \"body\": \"Team meeting in the conference room at 9 sharp. Bring your Q3 sales numbers.\",\n \"scheduled_at\": \"2026-09-21T13:00:00Z\",\n \"type\": \"DirectMessage\"\n }\n}"
response = http.request(request)
puts response.read_body{
"attachments": [],
"body": "Team meeting in the conference room at 9 sharp. Bring your Q3 sales numbers.",
"conversation_id": 7731,
"created_at": "2026-09-16T17:45:00Z",
"deleted_at": null,
"edited_at": null,
"emoji_only_count": 0,
"id": 90488,
"mentioned_recipients": [],
"metadata": null,
"pinned": false,
"reaction": null,
"reaction_stats": null,
"replied_to_message": null,
"scheduled_at": "2026-09-21T13:00:00Z",
"seen_by": [],
"seen_by_count": 0,
"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-16T17:45:00Z",
"status": "queued",
"type": "DirectMessage",
"updated_at": "2026-09-16T17:45:00Z"
}{
"message": "<string>"
}Authorizations
Bearer token authentication
Path Parameters
Body
application/json
Show child attributes
Show child attributes
Response
Success
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
The message type the scheduled message is sent as (for example DirectMessage), or null when none was given.
⌘I
Create a scheduled message
curl --request POST \
--url https://api.fluid.app/api/v1/messaging/conversations/{conversation_id}/scheduled_messages \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"scheduled_message": {
"body": "Team meeting in the conference room at 9 sharp. Bring your Q3 sales numbers.",
"scheduled_at": "2026-09-21T13:00:00Z",
"type": "DirectMessage"
}
}
'import requests
url = "https://api.fluid.app/api/v1/messaging/conversations/{conversation_id}/scheduled_messages"
payload = { "scheduled_message": {
"body": "Team meeting in the conference room at 9 sharp. Bring your Q3 sales numbers.",
"scheduled_at": "2026-09-21T13:00:00Z",
"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({
scheduled_message: {
body: JSON.stringify('Team meeting in the conference room at 9 sharp. Bring your Q3 sales numbers.'),
scheduled_at: '2026-09-21T13:00:00Z',
type: 'DirectMessage'
}
})
};
fetch('https://api.fluid.app/api/v1/messaging/conversations/{conversation_id}/scheduled_messages', 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}/scheduled_messages",
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([
'scheduled_message' => [
'body' => 'Team meeting in the conference room at 9 sharp. Bring your Q3 sales numbers.',
'scheduled_at' => '2026-09-21T13:00:00Z',
'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}/scheduled_messages"
payload := strings.NewReader("{\n \"scheduled_message\": {\n \"body\": \"Team meeting in the conference room at 9 sharp. Bring your Q3 sales numbers.\",\n \"scheduled_at\": \"2026-09-21T13:00:00Z\",\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}/scheduled_messages")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"scheduled_message\": {\n \"body\": \"Team meeting in the conference room at 9 sharp. Bring your Q3 sales numbers.\",\n \"scheduled_at\": \"2026-09-21T13:00:00Z\",\n \"type\": \"DirectMessage\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/v1/messaging/conversations/{conversation_id}/scheduled_messages")
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 \"scheduled_message\": {\n \"body\": \"Team meeting in the conference room at 9 sharp. Bring your Q3 sales numbers.\",\n \"scheduled_at\": \"2026-09-21T13:00:00Z\",\n \"type\": \"DirectMessage\"\n }\n}"
response = http.request(request)
puts response.read_body{
"attachments": [],
"body": "Team meeting in the conference room at 9 sharp. Bring your Q3 sales numbers.",
"conversation_id": 7731,
"created_at": "2026-09-16T17:45:00Z",
"deleted_at": null,
"edited_at": null,
"emoji_only_count": 0,
"id": 90488,
"mentioned_recipients": [],
"metadata": null,
"pinned": false,
"reaction": null,
"reaction_stats": null,
"replied_to_message": null,
"scheduled_at": "2026-09-21T13:00:00Z",
"seen_by": [],
"seen_by_count": 0,
"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-16T17:45:00Z",
"status": "queued",
"type": "DirectMessage",
"updated_at": "2026-09-16T17:45:00Z"
}{
"message": "<string>"
}