Scheduled messages
Deliver a scheduled message now
Make an owned scheduled message due now. The sender job normally sends it within seconds, and the scheduled-message cron recovers it if that immediate enqueue is lost.
POST
/
api
/
v1
/
messaging
/
conversations
/
{conversation_id}
/
scheduled_messages
/
{id}
/
deliver
Deliver a scheduled message now
curl --request POST \
--url https://api.fluid.app/api/v1/messaging/conversations/{conversation_id}/scheduled_messages/{id}/deliver \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.fluid.app/api/v1/messaging/conversations/{conversation_id}/scheduled_messages/{id}/deliver"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.fluid.app/api/v1/messaging/conversations/{conversation_id}/scheduled_messages/{id}/deliver', 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/{id}/deliver",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.fluid.app/api/v1/messaging/conversations/{conversation_id}/scheduled_messages/{id}/deliver"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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/{id}/deliver")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/v1/messaging/conversations/{conversation_id}/scheduled_messages/{id}/deliver")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
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,
"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
},
"scheduled_at": "2026-09-16T17:44:59Z",
"sent_at": null,
"status": "queued",
"type": "DirectMessage",
"updated_at": "2026-09-16T17:45:00Z"
}{
"message": "<string>"
}{
"message": "<string>",
"success": true
}{
"message": "<string>",
"success": true
}{
"message": "<string>",
"success": true
}Authorizations
Bearer token authentication
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
Deliver a scheduled message now
curl --request POST \
--url https://api.fluid.app/api/v1/messaging/conversations/{conversation_id}/scheduled_messages/{id}/deliver \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.fluid.app/api/v1/messaging/conversations/{conversation_id}/scheduled_messages/{id}/deliver"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.fluid.app/api/v1/messaging/conversations/{conversation_id}/scheduled_messages/{id}/deliver', 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/{id}/deliver",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.fluid.app/api/v1/messaging/conversations/{conversation_id}/scheduled_messages/{id}/deliver"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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/{id}/deliver")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/v1/messaging/conversations/{conversation_id}/scheduled_messages/{id}/deliver")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
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,
"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
},
"scheduled_at": "2026-09-16T17:44:59Z",
"sent_at": null,
"status": "queued",
"type": "DirectMessage",
"updated_at": "2026-09-16T17:45:00Z"
}{
"message": "<string>"
}{
"message": "<string>",
"success": true
}{
"message": "<string>",
"success": true
}{
"message": "<string>",
"success": true
}