Conversations
Forward Conversation Message
Email a copy of one message to another address
POST
/
api
/
v1
/
conversations
/
{conversationId}
/
messages
/
{messageId}
/
forward
Forward Conversation Message
curl --request POST \
--url https://api.sequenzy.com/api/v1/conversations/{conversationId}/messages/{messageId}/forward \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"to": "<string>",
"senderProfileId": "<string>"
}
'import requests
url = "https://api.sequenzy.com/api/v1/conversations/{conversationId}/messages/{messageId}/forward"
payload = {
"to": "<string>",
"senderProfileId": "<string>"
}
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({to: '<string>', senderProfileId: '<string>'})
};
fetch('https://api.sequenzy.com/api/v1/conversations/{conversationId}/messages/{messageId}/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_URL => "https://api.sequenzy.com/api/v1/conversations/{conversationId}/messages/{messageId}/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([
'to' => '<string>',
'senderProfileId' => '<string>'
]),
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.sequenzy.com/api/v1/conversations/{conversationId}/messages/{messageId}/forward"
payload := strings.NewReader("{\n \"to\": \"<string>\",\n \"senderProfileId\": \"<string>\"\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.sequenzy.com/api/v1/conversations/{conversationId}/messages/{messageId}/forward")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"to\": \"<string>\",\n \"senderProfileId\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sequenzy.com/api/v1/conversations/{conversationId}/messages/{messageId}/forward")
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 \"to\": \"<string>\",\n \"senderProfileId\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"forward": {
"id": "msg_fwd123",
"conversationId": "conv_abc123",
"messageId": "msg_abc123",
"to": "sales@example.com",
"deliveryStatus": "pending",
"createdAt": "2026-09-30T10:00:00.000Z"
}
}
{
"error": "Provide one valid email address to forward to.",
"code": "invalid_recipient"
}
{
"error": "Only received and sent emails can be forwarded; notes stay internal.",
"code": "message_not_forwardable"
}
{
"success": false,
"error": "Unauthorized"
}
{
"error": "Message not found in this conversation",
"code": "message_not_found"
}
Email a copy of one received (
inbound) or sent (outbound) message to another address, such as a teammate. Stored attachments are included up to 15 MB in total; files that are not stored, cannot be read, or do not fit are left out and listed in the forwarded email. Notes and system messages cannot be forwarded.
The forward is recorded in the conversation as a system message (“Forwarded to …”) whose deliveryStatus moves from pending to sent, or to failed if it cannot be sent. It does not change the conversation’s status, unread state or last activity, and the recipient’s replies are not tracked in the conversation. Each request sends a new forward, so retrying a successful request sends another copy. A forward counts toward your sending usage and triggers the email.sent webhook, like other sent email. Replies from the recipient are not added to the conversation.
Requires the conversations:write scope.
Request
string
required
Conversation ID.
string
required
ID of the message to forward, from Get Conversation.
string
required
One email address to forward the message to.
string
Sender profile to forward from. Its sending domain must be verified. When
omitted, the company default sender is used. List profiles with List Sender
Profiles.
curl -X POST "https://api.sequenzy.com/api/v1/conversations/conv_abc123/messages/msg_abc123/forward" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"to": "sales@example.com"}'
Responses
{
"success": true,
"forward": {
"id": "msg_fwd123",
"conversationId": "conv_abc123",
"messageId": "msg_abc123",
"to": "sales@example.com",
"deliveryStatus": "pending",
"createdAt": "2026-09-30T10:00:00.000Z"
}
}
{
"error": "Provide one valid email address to forward to.",
"code": "invalid_recipient"
}
{
"error": "Only received and sent emails can be forwarded; notes stay internal.",
"code": "message_not_forwardable"
}
{
"success": false,
"error": "Unauthorized"
}
{
"error": "Message not found in this conversation",
"code": "message_not_found"
}
⌘I
Forward Conversation Message
curl --request POST \
--url https://api.sequenzy.com/api/v1/conversations/{conversationId}/messages/{messageId}/forward \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"to": "<string>",
"senderProfileId": "<string>"
}
'import requests
url = "https://api.sequenzy.com/api/v1/conversations/{conversationId}/messages/{messageId}/forward"
payload = {
"to": "<string>",
"senderProfileId": "<string>"
}
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({to: '<string>', senderProfileId: '<string>'})
};
fetch('https://api.sequenzy.com/api/v1/conversations/{conversationId}/messages/{messageId}/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_URL => "https://api.sequenzy.com/api/v1/conversations/{conversationId}/messages/{messageId}/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([
'to' => '<string>',
'senderProfileId' => '<string>'
]),
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.sequenzy.com/api/v1/conversations/{conversationId}/messages/{messageId}/forward"
payload := strings.NewReader("{\n \"to\": \"<string>\",\n \"senderProfileId\": \"<string>\"\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.sequenzy.com/api/v1/conversations/{conversationId}/messages/{messageId}/forward")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"to\": \"<string>\",\n \"senderProfileId\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sequenzy.com/api/v1/conversations/{conversationId}/messages/{messageId}/forward")
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 \"to\": \"<string>\",\n \"senderProfileId\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"forward": {
"id": "msg_fwd123",
"conversationId": "conv_abc123",
"messageId": "msg_abc123",
"to": "sales@example.com",
"deliveryStatus": "pending",
"createdAt": "2026-09-30T10:00:00.000Z"
}
}
{
"error": "Provide one valid email address to forward to.",
"code": "invalid_recipient"
}
{
"error": "Only received and sent emails can be forwarded; notes stay internal.",
"code": "message_not_forwardable"
}
{
"success": false,
"error": "Unauthorized"
}
{
"error": "Message not found in this conversation",
"code": "message_not_found"
}