email:send scope.
List messages
Returns cursor-paginated message summaries for an inbox, newest first. Usecursor from the previous response to fetch the next page.
GET /api/v1/inboxes/:id/messages
Requires: email:read
Query parameters
integer
Number of messages to return. Range: 1–100. Defaults to 20.
string
Opaque pagination cursor returned as
next_cursor in the previous response.string
ISO 8601 timestamp. Returns only messages received or sent after this time.
"inbound" | "outbound"
Filter to received (
inbound) or sent (outbound) messages only.List the newest 20 messages
Read a message
Returns the full message including sanitized HTML, plain text, attachment metadata, and the mail screening verdict. Always checkscreening.verdict before acting on message content.
GET /api/v1/messages/:id
Requires: email:read
Read a single message
Response fields
string
Stable message identifier.
object
Sender address and display name.
array
List of recipient address objects.
string
Message subject line.
string
Plain-text body of the message.
string
Sanitized HTML body. External images and dangerous attributes are stripped before delivery.
array
Metadata for each attachment —
id, filename, content_type, and size. Use attachment endpoints to retrieve bytes or extracted text.object
Send a message
Queues a new outbound email from the agent’s inbox. Supply anidempotency_key so that retries do not deliver the message twice.
POST /api/v1/inboxes/:id/messages
Requires: email:send
Send a message
Request parameters
string[]
required
One or more recipient addresses. Accepts plain addresses or RFC 5322
"Name <addr>" format.string
required
Email subject line.
string
Plain-text body. Provide at least one of
text or html.string
HTML body. Rendered in email clients that support HTML; plain-text clients fall back to
text.string
Stable key for safe retries. Reuse the same key on retry; choose a new one only for a genuinely new message.
string[]
Upload IDs returned by
POST /api/v1/inboxes/:id/uploads. Maximum 10 attachments and 10 MB total.string[]
Labels to apply to the outbound thread immediately (e.g.
["campaign:launch"]).string
ID of a saved draft to remove atomically when the message is sent. The draft is deleted even if the send is deduplicated by
idempotency_key.Reply to a message
Sends a reply with correct threading headers so the conversation stays grouped.POST /api/v1/messages/:id/reply
Requires: email:send
Reply to a message
string
Plain-text reply body.
string
HTML reply body.
boolean
When
true, replies to all recipients on the original message. Defaults to false.string
Stable key for safe retries.
string[]
Upload IDs to attach to the reply.
Forward a message
Forwards a message and its stored attachments to one or more new recipients.POST /api/v1/messages/:id/forward
Requires: email:send
Forward a message
Attachments
Download attachment bytes
Returns raw attachment bytes. Save the output to a file or pipe it to a downstream process.GET /api/v1/attachments/:id
Requires: email:read
Download attachment bytes
Extract attachment text
Returns text extracted from a PDF, CSV, JSON, or HTML attachment — no download needed.GET /api/v1/attachments/:id/text
Requires: email:read
Extract attachment text
Uploads
Upload file bytes before sending so you can attach them to outbound messages, replies, or drafts.Upload a file
POST /api/v1/inboxes/:id/uploads
Requires: email:send
Upload a file for attachment
string
Name of the file as it will appear to recipients.
string
Base64-encoded file bytes.
id. Pass that ID in attachment_ids when calling the send, reply, or draft endpoints.
Delete an unused upload
DELETE /api/v1/uploads/:id
Removes an upload you no longer need. Unused uploads expire automatically after 24 hours; saved drafts retain their attached files until the draft itself is deleted.
Delete an upload
The maximum per-message attachment limit is 10 files and 10 MB total across all attachments. Sending attachments requires a paid plan — the Free Sandbox does not support outbound attachments.
Sender rules
Allow or block senders before the screening classifier runs. Managed on the inbox level — see Inboxes API for full details.POST /api/v1/inboxes/:id/sender-rules — add a ruleGET /api/v1/inboxes/:id/sender-rules — list rulesDELETE /api/v1/inboxes/:id/sender-rules/:rule_id — remove a rule
Requires: email:send