Email — Send & Manage
Send new emails, reply to and forward existing messages, delete emails, and modify properties like read status and labels.
POST
/api/access/email/messages/sendBearer TokenSend Email
Sends a new email from one of the connected provider accounts.
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
| to | Participant[] | Yes | List of recipients |
| cc | Participant[] | No | CC recipients |
| bcc | Participant[] | No | BCC recipients |
| subject | string | Yes | Email subject |
| body | string | Yes | Email body content |
| bodyType | string | No | Body content type: html (default) or text |
| importance | string | No | Priority: low, normal (default), high |
| connectionId | long | No | Provider connection to send from. If omitted, uses the first active email-capable connection |
{ "to": [ { "email": "recipient@example.com", "name": "John Doe" } ], "cc": [ { "email": "cc@example.com", "name": "CC Person" } ], "subject": "Meeting Follow-up", "body": "<p>Thanks for meeting today. Here are the action items...</p>", "bodyType": "html", "importance": "normal" } Note
Gmail returns the sent message's
emailId and threadId. Microsoft 365 returns null for both (Graph API's sendMail endpoint returns 202 Accepted with no message ID). Use connectionId to specify which provider account sends the email when the token has access to multiple providers.Error Responses
| Status | Description |
|---|---|
| 403 | Token does not allow sending emails |
Path Parameters
| Parameter | Type | Description |
|---|---|---|
| emailId | string | Provider-prefixed email ID to reply to |
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
| body | string | Yes | Reply body content |
| bodyType | string | No | Body content type: html (default) or text |
| replyAll | bool | No | Reply to all recipients (default: false) |
{ "body": "<p>Thanks, I'll review this and get back to you.</p>", "bodyType": "html", "replyAll": false } Note
Gmail automatically threads the reply using
In-Reply-To and References headers. The Re: prefix is added if not present. When replyAll is true, the original To/Cc recipients are included (excluding the sending account). Microsoft 365 uses the native /reply or /replyAll Graph API endpoint.Error Responses
| Status | Description |
|---|---|
| 403 | Token does not allow replying to emails |
POST
/api/access/email/messages/{emailId}/forwardBearer TokenForward Email
Forwards an email to specified recipients.
Path Parameters
| Parameter | Type | Description |
|---|---|---|
| emailId | string | Provider-prefixed email ID to forward |
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
| to | Participant[] | Yes | Forward recipients |
| cc | Participant[] | No | CC recipients |
| body | string | No | Optional message to prepend |
| bodyType | string | No | Body content type: html (default) or text |
{ "to": [ { "email": "colleague@example.com", "name": "Colleague" } ], "body": "FYI — see the email below." } Error Responses
| Status | Description |
|---|---|
| 403 | Token does not allow forwarding emails |
DELETE
/api/access/email/messages/{emailId}Bearer TokenDelete Email
Soft-deletes an email. The email is moved to Trash/Deleted Items and can be recovered.
Path Parameters
| Parameter | Type | Description |
|---|---|---|
| emailId | string | Provider-prefixed email ID to delete |
Response 204 No Content
(empty response body) Note
Gmail moves the email to Trash (recoverable for 30 days). Microsoft 365 moves it to the Deleted Items folder. This is a soft delete — emails are not permanently destroyed.
Error Responses
| Status | Description |
|---|---|
| 404 | Email not found or could not be deleted |
PATCH
/api/access/email/messages/{emailId}Bearer TokenModify Email
Modifies email properties such as read status and labels/categories.
Path Parameters
| Parameter | Type | Description |
|---|---|---|
| emailId | string | Provider-prefixed email ID to modify |
Request Body
| Field | Type | Required | Permission | Description |
|---|---|---|---|---|
| markAsRead | bool | No | mark_as_read | Mark as read (true) or unread (false) |
| addLabels | string[] | No | apply_labels | Labels/categories to add |
| removeLabels | string[] | No | apply_labels | Labels/categories to remove |
{ "markAsRead": true, "addLabels": ["IMPORTANT"], "removeLabels": ["UNREAD"] } Note
Each sub-operation requires its own permission flag. A token with
mark_as_read but not apply_labels can mark emails as read but cannot modify labels. Gmail uses messages/modify with label IDs. Microsoft 365 patches isRead and categories.Error Responses
| Status | Description |
|---|---|
| 404 | Email not found or could not be modified |