Change a scheduled message
Changes the text, theme, time or attachments of the member’s pending schedule. Only the fields sent change, and the delivery kind is kept. Unlike a new schedule, a changed time is not required to be in the future, as in the legacy update. Offset timestamps name the same instant and are returned in UTC. A schedule that a delivery has claimed, another person’s, or one in a conversation the member can no longer see returns 404.
curl --request PATCH \
--url https://api.fluid.app/api/member/v2026-10/messaging/conversations/{id}/scheduled-messages/{scheduled_message_id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"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/{scheduled_message_id}"
payload = { "scheduled_at": "2030-01-15T10:00:00-05:00" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({scheduled_at: '2030-01-15T10:00:00-05:00'})
};
fetch('https://api.fluid.app/api/member/v2026-10/messaging/conversations/{id}/scheduled-messages/{scheduled_message_id}', 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/{scheduled_message_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'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/{scheduled_message_id}"
payload := strings.NewReader("{\n \"scheduled_at\": \"2030-01-15T10:00:00-05:00\"\n}")
req, _ := http.NewRequest("PATCH", 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.patch("https://api.fluid.app/api/member/v2026-10/messaging/conversations/{id}/scheduled-messages/{scheduled_message_id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\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/{scheduled_message_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"scheduled_at\": \"2030-01-15T10:00:00-05:00\"\n}"
response = http.request(request)
puts response.read_body{
"status": 200,
"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 the conversation. A change needs one the member can see; a cancel does not.
Public id of one of the member's pending scheduled messages in this conversation.
Body
1 - 10000\SAn ISO 8601 timestamp with an explicit UTC offset (Z or +05:45); one without an offset is refused. Unlike a new schedule, it may be in the past.
255Files the client has uploaded, named by URL, as the legacy schedule endpoint takes them. They are added to the schedule's saved attachments; none can be removed. The URL is not checked as an owned upload.
10Show child attributes
Show child attributes
Response
The scheduled message after the change.
One scheduled message.
curl --request PATCH \
--url https://api.fluid.app/api/member/v2026-10/messaging/conversations/{id}/scheduled-messages/{scheduled_message_id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"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/{scheduled_message_id}"
payload = { "scheduled_at": "2030-01-15T10:00:00-05:00" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({scheduled_at: '2030-01-15T10:00:00-05:00'})
};
fetch('https://api.fluid.app/api/member/v2026-10/messaging/conversations/{id}/scheduled-messages/{scheduled_message_id}', 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/{scheduled_message_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'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/{scheduled_message_id}"
payload := strings.NewReader("{\n \"scheduled_at\": \"2030-01-15T10:00:00-05:00\"\n}")
req, _ := http.NewRequest("PATCH", 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.patch("https://api.fluid.app/api/member/v2026-10/messaging/conversations/{id}/scheduled-messages/{scheduled_message_id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\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/{scheduled_message_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"scheduled_at\": \"2030-01-15T10:00:00-05:00\"\n}"
response = http.request(request)
puts response.read_body{
"status": 200,
"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"
}
}