Schedule a message
Schedules a message of text, attachments or both for later, to be sent as the conversation’s delivery kind (an email or SMS for a contact conversation, direct otherwise). Scheduling clears the member’s own draft in the conversation. It needs the same standing as sending a premium message: a membership without it, or a conversation it can no longer post to, returns 403.
curl --request POST \
--url https://api.fluid.app/api/member/v2026-10/messaging/conversations/{id}/scheduled-messages \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"text": "Doors open at nine.",
"scheduled_at": "2030-01-15T10:00:00-05:00"
}
'import requests
url = "https://api.fluid.app/api/member/v2026-10/messaging/conversations/{id}/scheduled-messages"
payload = {
"text": "Doors open at nine.",
"scheduled_at": "2030-01-15T10:00:00-05:00"
}
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({text: 'Doors open at nine.', scheduled_at: '2030-01-15T10:00:00-05:00'})
};
fetch('https://api.fluid.app/api/member/v2026-10/messaging/conversations/{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/member/v2026-10/messaging/conversations/{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([
'text' => 'Doors open at nine.',
'scheduled_at' => '2030-01-15T10:00:00-05:00'
]),
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/member/v2026-10/messaging/conversations/{id}/scheduled-messages"
payload := strings.NewReader("{\n \"text\": \"Doors open at nine.\",\n \"scheduled_at\": \"2030-01-15T10:00:00-05:00\"\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/member/v2026-10/messaging/conversations/{id}/scheduled-messages")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"text\": \"Doors open at nine.\",\n \"scheduled_at\": \"2030-01-15T10:00:00-05:00\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/member/v2026-10/messaging/conversations/{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 \"text\": \"Doors open at nine.\",\n \"scheduled_at\": \"2030-01-15T10:00:00-05:00\"\n}"
response = http.request(request)
puts response.read_body{
"status": 201,
"data": {
"id": "0199a1b2-c3d4-7e5f-8a9b-0c1d2e3f4a80",
"conversation_id": "0199a1b2-c3d4-7e5f-8a9b-0c1d2e3f4a5b",
"text": "Doors open at nine.",
"theme": null,
"scheduled_at": "2030-01-15T15:00:00Z",
"attachments": [],
"created_at": "2026-10-01T15:01:59Z",
"updated_at": "2026-10-01T15:01:59Z"
},
"meta": {
"request_uuid": "01a0f4fe-de00-75b3-8d8a-b74b0cde8b07",
"timestamp": "2026-10-01T15:04:05Z"
}
}{
"status": 123,
"error": {
"message": "<string>",
"details": {}
},
"meta": {
"request_uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"status": 123,
"error": {
"message": "<string>",
"details": {}
},
"meta": {
"request_uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"status": 123,
"error": {
"message": "<string>",
"details": {}
},
"meta": {
"request_uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"status": 123,
"error": {
"message": "<string>",
"details": {}
},
"meta": {
"request_uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"timestamp": "2023-11-07T05:31:56Z"
}
}Authorizations
A member credential in the Authorization: Bearer header: a member
session JWT, a portal JWT whose login is linked to a membership in
that company, or a member token. The credential alone
identifies the member and company.
Path Parameters
Public id of a conversation the member can see.
Body
- Option 1
- Option 2
Required unless the schedule has attachments; it may not be blank.
1 - 10000\SA future ISO 8601 timestamp with an explicit UTC offset (Z or +05:45); one without an offset is refused.
255Files the client has uploaded, named by URL, as the legacy schedule endpoint takes them. The URL is not checked as an owned upload.
10Show child attributes
Show child attributes
Response
The scheduled message.
One scheduled message.
curl --request POST \
--url https://api.fluid.app/api/member/v2026-10/messaging/conversations/{id}/scheduled-messages \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"text": "Doors open at nine.",
"scheduled_at": "2030-01-15T10:00:00-05:00"
}
'import requests
url = "https://api.fluid.app/api/member/v2026-10/messaging/conversations/{id}/scheduled-messages"
payload = {
"text": "Doors open at nine.",
"scheduled_at": "2030-01-15T10:00:00-05:00"
}
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({text: 'Doors open at nine.', scheduled_at: '2030-01-15T10:00:00-05:00'})
};
fetch('https://api.fluid.app/api/member/v2026-10/messaging/conversations/{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/member/v2026-10/messaging/conversations/{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([
'text' => 'Doors open at nine.',
'scheduled_at' => '2030-01-15T10:00:00-05:00'
]),
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/member/v2026-10/messaging/conversations/{id}/scheduled-messages"
payload := strings.NewReader("{\n \"text\": \"Doors open at nine.\",\n \"scheduled_at\": \"2030-01-15T10:00:00-05:00\"\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/member/v2026-10/messaging/conversations/{id}/scheduled-messages")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"text\": \"Doors open at nine.\",\n \"scheduled_at\": \"2030-01-15T10:00:00-05:00\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/member/v2026-10/messaging/conversations/{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 \"text\": \"Doors open at nine.\",\n \"scheduled_at\": \"2030-01-15T10:00:00-05:00\"\n}"
response = http.request(request)
puts response.read_body{
"status": 201,
"data": {
"id": "0199a1b2-c3d4-7e5f-8a9b-0c1d2e3f4a80",
"conversation_id": "0199a1b2-c3d4-7e5f-8a9b-0c1d2e3f4a5b",
"text": "Doors open at nine.",
"theme": null,
"scheduled_at": "2030-01-15T15:00:00Z",
"attachments": [],
"created_at": "2026-10-01T15:01:59Z",
"updated_at": "2026-10-01T15:01:59Z"
},
"meta": {
"request_uuid": "01a0f4fe-de00-75b3-8d8a-b74b0cde8b07",
"timestamp": "2026-10-01T15:04:05Z"
}
}{
"status": 123,
"error": {
"message": "<string>",
"details": {}
},
"meta": {
"request_uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"status": 123,
"error": {
"message": "<string>",
"details": {}
},
"meta": {
"request_uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"status": 123,
"error": {
"message": "<string>",
"details": {}
},
"meta": {
"request_uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"status": 123,
"error": {
"message": "<string>",
"details": {}
},
"meta": {
"request_uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"timestamp": "2023-11-07T05:31:56Z"
}
}