Send Message
Messages
Send Message
Send an email or LinkedIn message in an existing Unibox thread.
POST
Send Message
CLI:
On success, the response includes the saved outbound
Overview
Sends a message in an existing Unibox thread. For a new one-off email, first call Create thread, then call this endpoint withthreading_mode: "new_thread". For an existing email or LinkedIn conversation, call this endpoint on the existing thread to reply from the connected sender.
Path Parameters
| Parameter | Type | Description |
|---|---|---|
id | string | Thread ID returned by POST /api/threads or any thread listing endpoint. |
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
body_text | string | Yes | Plain-text message body. Empty strings are rejected. |
body_html | string | Optional | HTML body. For email, if omitted, Puffle derives HTML from body_text. |
subject | string | Required for new email threads unless the thread already has a subject | Email subject. Ignored by LinkedIn sends. |
account_id | string | Required for email when the thread has no sender | Email sender account ID. The account must belong to the workspace and be ready to send. |
threading_mode | "new_thread" or "reply" | Optional | Email threading behavior. Use "new_thread" for a one-off outbound email. If omitted, Puffle replies to the most recent inbound email when possible. |
cc | string | Optional | Comma-separated CC recipients for email. |
bcc | string | Optional | Comma-separated BCC recipients for email. |
attachments | array | Optional | Attachment metadata from the thread attachment upload endpoint. |
Send a One-Off Email
message and the refreshed thread. A one-off outbound email appears in Unibox with thread.inbox_state set to sent_one_off.
Error Notes
| Status | When it happens |
|---|---|
400 | body_text is missing or empty, threading_mode is invalid, or attachment metadata is invalid. |
404 | The thread does not exist or does not belong to the workspace. |
422 | The thread cannot send on the requested channel, the recipient email is missing, or the sender account is not ready. |
429 | The email provider rate-limited the send. |
500 | The message may have been sent externally but failed to save locally. If the response says the message was sent but could not be saved, do not retry; the recipient may already have received it. |
502 | The provider failed to send the message. |
AI agent notes
For a brand-new one-off email, create the thread first and send withthreading_mode: "new_thread". Do not retry a 500 response that says the message was sent but could not be saved, because the recipient may already have received it.