curl --request POST \
--url http://localhost:3000/message/{message_id}/forward \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/json' \
--data '
{
"phone": "6289685024051@s.whatsapp.net",
"scheduled_at": "2026-10-01T09:00:00+07:00",
"timezone": "Asia/Jakarta",
"recurrence": "once",
"weekdays": [
1,
3,
5
],
"day_of_month": 15,
"end_at": "2026-12-31T23:59:59+07:00",
"occurrence_limit": 10,
"duration": 0,
"force_reupload": false
}
'import requests
url = "http://localhost:3000/message/{message_id}/forward"
payload = {
"phone": "6289685024051@s.whatsapp.net",
"scheduled_at": "2026-10-01T09:00:00+07:00",
"timezone": "Asia/Jakarta",
"recurrence": "once",
"weekdays": [1, 3, 5],
"day_of_month": 15,
"end_at": "2026-12-31T23:59:59+07:00",
"occurrence_limit": 10,
"duration": 0,
"force_reupload": False
}
headers = {
"Authorization": "Basic <encoded-value>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Basic <encoded-value>', 'Content-Type': 'application/json'},
body: JSON.stringify({
phone: '6289685024051@s.whatsapp.net',
scheduled_at: '2026-10-01T09:00:00+07:00',
timezone: 'Asia/Jakarta',
recurrence: 'once',
weekdays: [1, 3, 5],
day_of_month: 15,
end_at: '2026-12-31T23:59:59+07:00',
occurrence_limit: 10,
duration: 0,
force_reupload: false
})
};
fetch('http://localhost:3000/message/{message_id}/forward', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_PORT => "3000",
CURLOPT_URL => "http://localhost:3000/message/{message_id}/forward",
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([
'phone' => '6289685024051@s.whatsapp.net',
'scheduled_at' => '2026-10-01T09:00:00+07:00',
'timezone' => 'Asia/Jakarta',
'recurrence' => 'once',
'weekdays' => [
1,
3,
5
],
'day_of_month' => 15,
'end_at' => '2026-12-31T23:59:59+07:00',
'occurrence_limit' => 10,
'duration' => 0,
'force_reupload' => false
]),
CURLOPT_HTTPHEADER => [
"Authorization: Basic <encoded-value>",
"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 := "http://localhost:3000/message/{message_id}/forward"
payload := strings.NewReader("{\n \"phone\": \"6289685024051@s.whatsapp.net\",\n \"scheduled_at\": \"2026-10-01T09:00:00+07:00\",\n \"timezone\": \"Asia/Jakarta\",\n \"recurrence\": \"once\",\n \"weekdays\": [\n 1,\n 3,\n 5\n ],\n \"day_of_month\": 15,\n \"end_at\": \"2026-12-31T23:59:59+07:00\",\n \"occurrence_limit\": 10,\n \"duration\": 0,\n \"force_reupload\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Basic <encoded-value>")
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("http://localhost:3000/message/{message_id}/forward")
.header("Authorization", "Basic <encoded-value>")
.header("Content-Type", "application/json")
.body("{\n \"phone\": \"6289685024051@s.whatsapp.net\",\n \"scheduled_at\": \"2026-10-01T09:00:00+07:00\",\n \"timezone\": \"Asia/Jakarta\",\n \"recurrence\": \"once\",\n \"weekdays\": [\n 1,\n 3,\n 5\n ],\n \"day_of_month\": 15,\n \"end_at\": \"2026-12-31T23:59:59+07:00\",\n \"occurrence_limit\": 10,\n \"duration\": 0,\n \"force_reupload\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("http://localhost:3000/message/{message_id}/forward")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Basic <encoded-value>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"phone\": \"6289685024051@s.whatsapp.net\",\n \"scheduled_at\": \"2026-10-01T09:00:00+07:00\",\n \"timezone\": \"Asia/Jakarta\",\n \"recurrence\": \"once\",\n \"weekdays\": [\n 1,\n 3,\n 5\n ],\n \"day_of_month\": 15,\n \"end_at\": \"2026-12-31T23:59:59+07:00\",\n \"occurrence_limit\": 10,\n \"duration\": 0,\n \"force_reupload\": false\n}"
response = http.request(request)
puts response.read_body{
"code": "SUCCESS",
"message": "Success",
"results": {
"message_id": "3EB0B430B6F8F1D0E053AC120E0A9E5C",
"status": "<feature> success ....",
"schedule_id": "0b5c3a8e-7f5d-4d6f-9d1e-2f8c1a7b9e10",
"scheduled_at": "2026-10-01T02:00:00Z",
"next_run_at": "2026-10-01T02:00:00Z"
}
}{
"code": 400,
"message": "field cannot be blank",
"results": null
}{
"code": "INTERNAL_SERVER_ERROR",
"message": "you are not loggin",
"results": null
}Forward Message
Forward a message that exists in local chat storage to another chat by message ID. Text and standard media types (image, video, video note, audio, document, sticker) are supported. Media references are reused when possible; stale refs trigger an automatic re-upload fallback.
curl --request POST \
--url http://localhost:3000/message/{message_id}/forward \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/json' \
--data '
{
"phone": "6289685024051@s.whatsapp.net",
"scheduled_at": "2026-10-01T09:00:00+07:00",
"timezone": "Asia/Jakarta",
"recurrence": "once",
"weekdays": [
1,
3,
5
],
"day_of_month": 15,
"end_at": "2026-12-31T23:59:59+07:00",
"occurrence_limit": 10,
"duration": 0,
"force_reupload": false
}
'import requests
url = "http://localhost:3000/message/{message_id}/forward"
payload = {
"phone": "6289685024051@s.whatsapp.net",
"scheduled_at": "2026-10-01T09:00:00+07:00",
"timezone": "Asia/Jakarta",
"recurrence": "once",
"weekdays": [1, 3, 5],
"day_of_month": 15,
"end_at": "2026-12-31T23:59:59+07:00",
"occurrence_limit": 10,
"duration": 0,
"force_reupload": False
}
headers = {
"Authorization": "Basic <encoded-value>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Basic <encoded-value>', 'Content-Type': 'application/json'},
body: JSON.stringify({
phone: '6289685024051@s.whatsapp.net',
scheduled_at: '2026-10-01T09:00:00+07:00',
timezone: 'Asia/Jakarta',
recurrence: 'once',
weekdays: [1, 3, 5],
day_of_month: 15,
end_at: '2026-12-31T23:59:59+07:00',
occurrence_limit: 10,
duration: 0,
force_reupload: false
})
};
fetch('http://localhost:3000/message/{message_id}/forward', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_PORT => "3000",
CURLOPT_URL => "http://localhost:3000/message/{message_id}/forward",
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([
'phone' => '6289685024051@s.whatsapp.net',
'scheduled_at' => '2026-10-01T09:00:00+07:00',
'timezone' => 'Asia/Jakarta',
'recurrence' => 'once',
'weekdays' => [
1,
3,
5
],
'day_of_month' => 15,
'end_at' => '2026-12-31T23:59:59+07:00',
'occurrence_limit' => 10,
'duration' => 0,
'force_reupload' => false
]),
CURLOPT_HTTPHEADER => [
"Authorization: Basic <encoded-value>",
"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 := "http://localhost:3000/message/{message_id}/forward"
payload := strings.NewReader("{\n \"phone\": \"6289685024051@s.whatsapp.net\",\n \"scheduled_at\": \"2026-10-01T09:00:00+07:00\",\n \"timezone\": \"Asia/Jakarta\",\n \"recurrence\": \"once\",\n \"weekdays\": [\n 1,\n 3,\n 5\n ],\n \"day_of_month\": 15,\n \"end_at\": \"2026-12-31T23:59:59+07:00\",\n \"occurrence_limit\": 10,\n \"duration\": 0,\n \"force_reupload\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Basic <encoded-value>")
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("http://localhost:3000/message/{message_id}/forward")
.header("Authorization", "Basic <encoded-value>")
.header("Content-Type", "application/json")
.body("{\n \"phone\": \"6289685024051@s.whatsapp.net\",\n \"scheduled_at\": \"2026-10-01T09:00:00+07:00\",\n \"timezone\": \"Asia/Jakarta\",\n \"recurrence\": \"once\",\n \"weekdays\": [\n 1,\n 3,\n 5\n ],\n \"day_of_month\": 15,\n \"end_at\": \"2026-12-31T23:59:59+07:00\",\n \"occurrence_limit\": 10,\n \"duration\": 0,\n \"force_reupload\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("http://localhost:3000/message/{message_id}/forward")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Basic <encoded-value>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"phone\": \"6289685024051@s.whatsapp.net\",\n \"scheduled_at\": \"2026-10-01T09:00:00+07:00\",\n \"timezone\": \"Asia/Jakarta\",\n \"recurrence\": \"once\",\n \"weekdays\": [\n 1,\n 3,\n 5\n ],\n \"day_of_month\": 15,\n \"end_at\": \"2026-12-31T23:59:59+07:00\",\n \"occurrence_limit\": 10,\n \"duration\": 0,\n \"force_reupload\": false\n}"
response = http.request(request)
puts response.read_body{
"code": "SUCCESS",
"message": "Success",
"results": {
"message_id": "3EB0B430B6F8F1D0E053AC120E0A9E5C",
"status": "<feature> success ....",
"schedule_id": "0b5c3a8e-7f5d-4d6f-9d1e-2f8c1a7b9e10",
"scheduled_at": "2026-10-01T02:00:00Z",
"next_run_at": "2026-10-01T02:00:00Z"
}
}{
"code": 400,
"message": "field cannot be blank",
"results": null
}{
"code": "INTERNAL_SERVER_ERROR",
"message": "you are not loggin",
"results": null
}Authorizations
Basic authentication header of the form Basic <encoded-value>, where <encoded-value> is the base64-encoded string username:password.
Headers
Device identifier for multi-device support. Required when multiple devices are registered.
If only one device is registered, it will be used as the default.
Can also be provided as device_id query parameter.
"my-device-id"
Path Parameters
Source message ID from chat storage
Body
Optional fields that schedule the message instead of sending it now. Set
scheduled_at to schedule; without it the message is sent immediately.
A background worker sends it at the scheduled time, retrying while the
device is offline or not logged in. Uploaded media is stored on the
server until the schedule finishes.
In multipart/form-data bodies, send weekdays as a repeated field
(weekdays=1, weekdays=3).
Destination phone number or group JID
"6289685024051@s.whatsapp.net"
RFC3339 time of the first send. Must be in the future. The first send always happens at this time, even if it falls outside weekdays or day_of_month; those set the repeats that follow.
"2026-10-01T09:00:00+07:00"
IANA timezone used to compute recurring runs. Required when scheduled_at is set.
"Asia/Jakarta"
How often to repeat the send
once, daily, weekly, monthly Days to send on, 0=Sunday through 6=Saturday. Required when recurrence is weekly.
0 <= x <= 6[1, 3, 5]
Day of the month to send on, clamped to the month's last day. Required when recurrence is monthly.
1 <= x <= 3115
Recurring only. No sends happen after this time; must be after scheduled_at.
"2026-12-31T23:59:59+07:00"
Recurring only. Stop after this many sends.
x >= 110
Optional disappearing message duration override (0, 86400, 604800, 7776000)
0
Skip media reference reuse and re-upload media before sending
false
