Skip to main content
POST
Forward a message to somebody else

Authorizations

X-API-Key
string
header
required

Path Parameters

thread_id
string<uuid>
required
message_id
string<uuid>
required

Body

application/x-www-form-urlencoded
to
string
required
Required string length: 1 - 2000
mailbox_id
string<uuid> | null
note
string
default:""
Maximum string length: 100000

Response

Successful Response

attachments
AttachmentReadSchema · object[]
required
body_text
string
required
bounce_severity
enum<string> | null
required

Hard vs soft severity of a BOUNCE message.

Only HARD marks the contact bounced (the Bounced condition, the enrolment analytics bounce rate, the per-message outcome). SOFT still fills the Bounces view and never looks like a reply, but the address may still be reachable, so the cadence is left alone.

Available options:
hard,
soft
channel
enum<string>
required

This message's own channel. Threads merge channels, so the reader captions each message by what it actually is: a LinkedIn DM involves no email addresses.

Available options:
email,
linkedin
direction
enum<string>
required
Available options:
outbound,
inbound
from_address
string
required
id
string<uuid>
required
mailbox_id
string<uuid> | null
required
message_class
enum<string> | null
required

What a message turned out to be; NULL on an ordinary message of ours.

REPLY stops the cadence; BOUNCE (a DSN) marks the contact bounced and never looks like a reply; OUT_OF_OFFICE never stops anything and defers the cadence to the stated return when one is parsed; AUTOMATED is a machine writing back (a ticketing auto-ack, a mailing list, a no-reply robot), and like OUT_OF_OFFICE it never stops a cadence, because nobody read the mail. The first four are inbound. FORWARD is ours, outbound: a message of the thread passed on to somebody else (service.forward_message). Nothing was said to the contact, so it is never an answer to them: it does not move a conversation out of the Inbox, count as replied, or end a done mark.

Available options:
reply,
bounce,
out_of_office,
automated,
forward
send_state
enum<string>
required

Whether a message has actually left.

Only meaningful on LinkedIn. An email row is written after the provider accepted it, so it is SENT the moment it exists; a LinkedIn reply is written when it is QUEUED, and cannot become SENT until the customer's own browser has delivered it. Showing the two the same way would have the product assert a delivery it has no evidence for.

Available options:
sent,
queued,
failed
sent_at
string<date-time>
required
subject
string
required
thread_id
string<uuid>
required
to_address
string
required
authentication_result
string | null

The receiving mail server's verdict on whether a message really came from the sender's domain, by DMARC or SPF: pass, fail, none when the server gave no verdict, or unknown when its verdict was neither. The agent only answers an email on its own when it passed. Null when no verdict was recorded, such as on LinkedIn messages and on messages sent from Oneprofile.

body_html
string | null

The sender's raw HTML part; sanitise before rendering.

sent_by_kind
enum<string> | null

Who sent an outbound message: person when someone in your workspace wrote or approved it, system when the agent sent it on its own with nobody approving it. Null on messages you received, and on outbound messages where this was not recorded, such as sequence steps and mail sent straight from the mailbox.

Available options:
person,
system
sequence_id
string<uuid> | null

The sequence this message was sent from, when it came from one.

step_id
string<uuid> | null

Which step sent this message, carried per-message (not just on the thread) because a contact re-enrolled in a different sequence keeps their earlier messages' own sequence/step, distinct from the thread's current one.