Microsoft Outlook / Graph Mail
Canonical tools, triggers, auth, schemas, and mock behavior for Microsoft Outlook / Graph Mail.
Run a valid microsoft-outlook.add_email_label call through the same SDK surface used by every toolkit.
Minimal tool call
import { Eyeball } from "@eyeball/sdk";
const eyeball = new Eyeball({
apiKey: process.env.EYEBALL_API_KEY!,
baseUrl: process.env.EYEBALL_EXECUTOR_URL!,
});
const output = await eyeball.tools.run(
"microsoft-outlook.add_email_label",
{
"messageId": "example_messageId",
"labelId": "example_labelId",
"operation": "add"
},
{ userId: "demo_user",
idempotencyKey: "docs:microsoft-outlook.add_email_label:demo-1" },
);
console.log(output);The model receives canonical output. Your application retains the execution envelope through tools.execute or the execution APIs when it needs IDs, status, versions, and latency.
Supported canonical tools
| Tool | Purpose | Execution | Effect | Version |
|---|---|---|---|---|
microsoft-outlook.add_email_label | Apply a label, category, or destination folder to an existing email message. Use this to organize mail without changing its content; repeating the same operation has no additional effect. | sync or async | mutation | 1.0.0 |
microsoft-outlook.create_draft | Create an unsent email draft in the connected mailbox. Use this when a person or later workflow should review or send the content; this does not deliver a message to recipients. | sync or async | mutation | 1.1.0 |
microsoft-outlook.get_email | Retrieve one email message with normalized headers, body, labels, and attachment metadata. Use this after obtaining a message identifier; it does not download attachment content. | sync or async | read | 1.0.0 |
microsoft-outlook.list_emails | List email messages from a mailbox, folder, or label with portable filters and pagination. Use this to browse messages; use search_emails when a provider query expression is the primary selector. | sync or async | read | 1.0.0 |
microsoft-outlook.list_threads | List email conversation threads and their latest state with portable filters and pagination. Use this when conversation grouping is more useful than individual message rows. | sync or async | read | 1.0.0 |
microsoft-outlook.reply_to_email | Reply within an existing email message or conversation thread. Use this instead of send_email when preserving reply headers and thread context matters; verify reply-all recipients before sending. | sync or async | mutation | 1.1.0 |
microsoft-outlook.search_emails | Search mailbox content using a provider-supported query expression and return normalized email summaries. Use this for full-text or provider query syntax; query portability depends on the connected provider. | sync or async | read | 1.0.0 |
microsoft-outlook.send_email | Send a new email from the connected email account. Use this for a new conversation, not a reply to an existing message or thread. This sends content to external recipients; verify recipients, subject, and body first. | sync or async | mutation | 1.1.0 |
Only the rows above are implemented. A capability tool omitted by this manifest returns not_supported; eyeball never synthesizes provider parity.
Supported canonical triggers
This manifest does not implement a canonical trigger.
Input and output schemas
microsoft-outlook.add_email_label
Input schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "urn:eyeball:email:add_email_label:1.0.0:microsoft-outlook",
"type": "object",
"description": "Target email and label, category, or folder operation to apply.",
"additionalProperties": false,
"required": [
"messageId",
"labelId"
],
"properties": {
"messageId": {
"type": "string",
"description": "Provider identifier of the email message to update.",
"minLength": 1
},
"labelId": {
"type": "string",
"description": "Provider identifier or exact name of the label, category, or folder.",
"minLength": 1
},
"operation": {
"type": "string",
"description": "Whether to add a label/category or move the email to a folder.",
"enum": [
"add",
"move"
],
"default": "add"
}
}
}Output schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "urn:eyeball:email:add_email_label:output:1.0.0:microsoft-outlook",
"type": "object",
"description": "Result of applying the requested mailbox organization operation.",
"additionalProperties": false,
"required": [
"messageId",
"labelId",
"applied"
],
"properties": {
"messageId": {
"type": "string",
"description": "Provider identifier of the updated email message.",
"minLength": 1
},
"labelId": {
"type": "string",
"description": "Provider identifier or name of the applied label, category, or folder.",
"minLength": 1
},
"applied": {
"type": "boolean",
"description": "Whether the requested organization state is now in effect."
}
}
}microsoft-outlook.create_draft
Input schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "urn:eyeball:email:create_draft:1.1.0:microsoft-outlook",
"type": "object",
"description": "Recipients, content, and staged attachments to save as an email draft.",
"additionalProperties": false,
"required": [
"body"
],
"properties": {
"to": {
"type": "array",
"description": "Primary recipient email addresses saved on the draft.",
"items": {
"type": "string",
"format": "email",
"description": "A syntactically valid email address."
}
},
"cc": {
"type": "array",
"description": "Carbon-copy recipient email addresses saved on the draft.",
"items": {
"type": "string",
"format": "email",
"description": "A syntactically valid email address."
}
},
"bcc": {
"type": "array",
"description": "Blind-carbon-copy recipient email addresses saved on the draft.",
"items": {
"type": "string",
"format": "email",
"description": "A syntactically valid email address."
}
},
"subject": {
"type": "string",
"description": "Subject line saved on the draft.",
"maxLength": 998
},
"body": {
"type": "string",
"description": "Complete body in the format selected by bodyFormat.",
"minLength": 1
},
"bodyFormat": {
"type": "string",
"description": "Serialization format of the body content.",
"enum": [
"text",
"html"
],
"default": "text"
},
"replyTo": {
"type": "string",
"format": "email",
"description": "Address recipients should use if the draft is later sent and replied to."
},
"attachments": {
"type": "array",
"description": "Previously staged Eyeball files to attach.",
"maxItems": 25,
"items": {
"description": "A staged file reference that the provider can attach.",
"anyOf": [
{
"type": "object",
"description": "Preferred staged-file reference shape.",
"additionalProperties": false,
"required": [
"fileId"
],
"properties": {
"fileId": {
"type": "string",
"description": "Eyeball file_* identifier returned by POST /v1/files.",
"pattern": "^file_[A-Za-z0-9][A-Za-z0-9_-]{0,127}$"
},
"name": {
"type": "string",
"description": "Optional recipient-visible name overriding staged metadata.",
"minLength": 1
},
"mimeType": {
"type": "string",
"description": "Optional MIME type overriding staged metadata for delivery.",
"minLength": 1
}
}
},
{
"type": "object",
"description": "Deprecated 1.0 staged-file reference retained for compatibility.",
"additionalProperties": false,
"required": [
"fileId",
"fileName"
],
"properties": {
"fileId": {
"type": "string",
"description": "Eyeball identifier of the previously staged file.",
"minLength": 1
},
"fileName": {
"type": "string",
"description": "Deprecated recipient-visible name; use name in new calls.",
"minLength": 1
},
"contentType": {
"type": "string",
"description": "Deprecated MIME type; use mimeType in new calls.",
"minLength": 1
}
}
}
]
}
}
}
}Output schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "urn:eyeball:email:create_draft:output:1.1.0:microsoft-outlook",
"type": "object",
"description": "Provider identifiers for the newly created unsent draft.",
"additionalProperties": false,
"required": [
"draftId"
],
"properties": {
"draftId": {
"type": "string",
"description": "Provider identifier of the created draft resource.",
"minLength": 1
},
"messageId": {
"type": "string",
"description": "Provider message identifier associated with the draft when available.",
"minLength": 1
},
"threadId": {
"type": "string",
"description": "Provider identifier of the conversation thread when available.",
"minLength": 1
}
}
}microsoft-outlook.get_email
Input schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "urn:eyeball:email:get_email:1.0.0:microsoft-outlook",
"type": "object",
"description": "Identifier and content-selection options for one email.",
"additionalProperties": false,
"required": [
"messageId"
],
"properties": {
"messageId": {
"type": "string",
"description": "Provider identifier of the email message to retrieve.",
"minLength": 1
},
"includeBody": {
"type": "boolean",
"description": "Whether to include the normalized message body in the response.",
"default": true
},
"includeAttachmentMetadata": {
"type": "boolean",
"description": "Whether to include attachment identifiers and metadata.",
"default": true
}
}
}Output schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "urn:eyeball:email:get_email:output:1.0.0:microsoft-outlook",
"type": "object",
"description": "Normalized content and metadata for one email message.",
"additionalProperties": false,
"required": [
"messageId",
"from",
"to",
"subject",
"receivedAt"
],
"properties": {
"messageId": {
"type": "string",
"description": "Provider identifier of the email message.",
"minLength": 1
},
"threadId": {
"type": "string",
"description": "Provider identifier of the containing conversation thread.",
"minLength": 1
},
"from": {
"type": "string",
"format": "email",
"description": "Sender email address."
},
"to": {
"type": "array",
"description": "Primary recipient email addresses.",
"items": {
"type": "string",
"format": "email",
"description": "A syntactically valid email address."
}
},
"cc": {
"type": "array",
"description": "Carbon-copy recipient email addresses.",
"items": {
"type": "string",
"format": "email",
"description": "A syntactically valid email address."
}
},
"bcc": {
"type": "array",
"description": "Blind-carbon-copy recipient email addresses visible to the connection.",
"items": {
"type": "string",
"format": "email",
"description": "A syntactically valid email address."
}
},
"subject": {
"type": "string",
"description": "Email subject exactly as stored by the provider."
},
"sentAt": {
"type": "string",
"format": "date-time",
"description": "RFC 3339 timestamp supplied by the sender or provider."
},
"receivedAt": {
"type": "string",
"format": "date-time",
"description": "RFC 3339 timestamp when the mailbox received the email."
},
"body": {
"type": "object",
"description": "Normalized email body when includeBody is true and content is available.",
"additionalProperties": false,
"required": [
"format",
"content"
],
"properties": {
"format": {
"type": "string",
"description": "Serialization format of the returned body.",
"enum": [
"text",
"html"
]
},
"content": {
"type": "string",
"description": "Complete normalized email body content."
}
}
},
"headers": {
"type": "array",
"description": "Ordered message headers exposed by the provider.",
"items": {
"type": "object",
"description": "One email header name and value.",
"additionalProperties": false,
"required": [
"name",
"value"
],
"properties": {
"name": {
"type": "string",
"description": "Case-preserving email header name.",
"minLength": 1
},
"value": {
"type": "string",
"description": "Unfolded email header value."
}
}
}
},
"attachments": {
"type": "array",
"description": "Metadata for files attached to the email; file content is not included.",
"items": {
"type": "object",
"description": "Metadata identifying one email attachment.",
"additionalProperties": false,
"required": [
"attachmentId",
"fileName"
],
"properties": {
"attachmentId": {
"type": "string",
"description": "Provider-stable identifier for the attachment.",
"minLength": 1
},
"fileName": {
"type": "string",
"description": "Original attachment file name.",
"minLength": 1
},
"contentType": {
"type": "string",
"description": "MIME content type reported for the attachment.",
"minLength": 1
},
"sizeBytes": {
"type": "integer",
"description": "Attachment size in bytes when reported by the provider.",
"minimum": 0
}
}
}
},
"labelIds": {
"type": "array",
"description": "Provider label, category, or folder identifiers on the email.",
"items": {
"type": "string",
"description": "Provider identifier of an applied label, category, or folder.",
"minLength": 1
}
},
"draft": {
"type": "boolean",
"description": "Whether the retrieved message is an unsent draft."
}
}
}microsoft-outlook.list_emails
Input schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "urn:eyeball:email:list_emails:1.0.0:microsoft-outlook",
"type": "object",
"description": "Mailbox location, filters, and pagination for listing email messages.",
"additionalProperties": false,
"properties": {
"mailboxId": {
"type": "string",
"description": "Mailbox identifier; omit to use the connected account's default mailbox.",
"minLength": 1
},
"folderId": {
"type": "string",
"description": "Folder identifier used to restrict the mailbox listing.",
"minLength": 1
},
"labelIds": {
"type": "array",
"description": "Labels or categories every returned email should have.",
"items": {
"type": "string",
"description": "Provider label or category identifier.",
"minLength": 1
}
},
"from": {
"type": "string",
"format": "email",
"description": "Return only emails from this sender address."
},
"to": {
"type": "string",
"format": "email",
"description": "Return only emails addressed to this recipient."
},
"subject": {
"type": "string",
"description": "Case-insensitive subject text to match.",
"minLength": 1
},
"receivedAfter": {
"type": "string",
"format": "date-time",
"description": "Return emails received at or after this RFC 3339 timestamp."
},
"receivedBefore": {
"type": "string",
"format": "date-time",
"description": "Return emails received before this RFC 3339 timestamp."
},
"unreadOnly": {
"type": "boolean",
"description": "When true, return only unread emails.",
"default": false
},
"hasAttachments": {
"type": "boolean",
"description": "When supplied, filter by whether an email has attachments."
},
"pageSize": {
"type": "integer",
"description": "Maximum number of emails to return in one page.",
"minimum": 1,
"maximum": 100,
"default": 50
},
"pageToken": {
"type": "string",
"description": "Opaque continuation token from a previous email page.",
"minLength": 1
}
}
}Output schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "urn:eyeball:email:list_emails:output:1.0.0:microsoft-outlook",
"type": "object",
"description": "One page of email summaries and an optional continuation token.",
"additionalProperties": false,
"required": [
"emails"
],
"properties": {
"emails": {
"type": "array",
"description": "Email summaries in provider-defined mailbox order.",
"items": {
"type": "object",
"description": "Compact mailbox metadata for one email message.",
"additionalProperties": false,
"required": [
"messageId",
"from",
"to",
"subject",
"receivedAt",
"unread",
"hasAttachments"
],
"properties": {
"messageId": {
"type": "string",
"description": "Provider identifier of the email message.",
"minLength": 1
},
"threadId": {
"type": "string",
"description": "Provider identifier of the containing conversation thread.",
"minLength": 1
},
"from": {
"type": "string",
"format": "email",
"description": "Sender email address."
},
"to": {
"type": "array",
"description": "Primary recipient email addresses.",
"items": {
"type": "string",
"format": "email",
"description": "A syntactically valid email address."
}
},
"subject": {
"type": "string",
"description": "Email subject exactly as stored by the provider."
},
"snippet": {
"type": "string",
"description": "Short provider-generated preview of the email body."
},
"receivedAt": {
"type": "string",
"format": "date-time",
"description": "RFC 3339 timestamp when the mailbox received the email."
},
"unread": {
"type": "boolean",
"description": "Whether the email is currently marked unread."
},
"hasAttachments": {
"type": "boolean",
"description": "Whether the email includes at least one attachment."
},
"labelIds": {
"type": "array",
"description": "Provider label, category, or folder identifiers on the email.",
"items": {
"type": "string",
"description": "Provider identifier of an applied label, category, or folder.",
"minLength": 1
}
}
}
}
},
"nextPageToken": {
"type": "string",
"description": "Opaque token to request the next page of emails; absent when the result is complete.",
"minLength": 1
}
}
}microsoft-outlook.list_threads
Input schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "urn:eyeball:email:list_threads:1.0.0:microsoft-outlook",
"type": "object",
"description": "Mailbox filters and pagination for listing conversation threads.",
"additionalProperties": false,
"properties": {
"mailboxId": {
"type": "string",
"description": "Mailbox identifier; omit to use the connected account's default mailbox.",
"minLength": 1
},
"labelIds": {
"type": "array",
"description": "Labels or categories every returned thread should have.",
"items": {
"type": "string",
"description": "Provider label or category identifier.",
"minLength": 1
}
},
"participantAddresses": {
"type": "array",
"description": "Return threads containing at least one of these participant addresses.",
"items": {
"type": "string",
"format": "email",
"description": "A syntactically valid email address."
}
},
"receivedAfter": {
"type": "string",
"format": "date-time",
"description": "Return threads updated at or after this RFC 3339 timestamp."
},
"receivedBefore": {
"type": "string",
"format": "date-time",
"description": "Return threads updated before this RFC 3339 timestamp."
},
"unreadOnly": {
"type": "boolean",
"description": "When true, return only threads containing unread messages.",
"default": false
},
"pageSize": {
"type": "integer",
"description": "Maximum number of threads to return in one page.",
"minimum": 1,
"maximum": 100,
"default": 50
},
"pageToken": {
"type": "string",
"description": "Opaque continuation token from a previous thread page.",
"minLength": 1
}
}
}Output schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "urn:eyeball:email:list_threads:output:1.0.0:microsoft-outlook",
"type": "object",
"description": "One page of normalized conversation threads and an optional continuation token.",
"additionalProperties": false,
"required": [
"threads"
],
"properties": {
"threads": {
"type": "array",
"description": "Conversation threads in provider-defined mailbox order.",
"items": {
"type": "object",
"description": "Summary and latest state for one email conversation thread.",
"additionalProperties": false,
"required": [
"threadId",
"participantAddresses",
"messageCount",
"latestMessageAt",
"unread"
],
"properties": {
"threadId": {
"type": "string",
"description": "Provider identifier of the conversation thread.",
"minLength": 1
},
"subject": {
"type": "string",
"description": "Most representative or latest subject for the thread."
},
"participantAddresses": {
"type": "array",
"description": "Distinct email addresses participating in the thread.",
"items": {
"type": "string",
"format": "email",
"description": "A syntactically valid email address."
}
},
"messageCount": {
"type": "integer",
"description": "Number of messages currently in the thread.",
"minimum": 1
},
"latestMessageAt": {
"type": "string",
"format": "date-time",
"description": "RFC 3339 timestamp of the latest message in the thread."
},
"snippet": {
"type": "string",
"description": "Short provider-generated preview of the latest thread content."
},
"unread": {
"type": "boolean",
"description": "Whether the thread contains at least one unread message."
}
}
}
},
"nextPageToken": {
"type": "string",
"description": "Opaque token to request the next page of threads; absent when the result is complete.",
"minLength": 1
}
}
}microsoft-outlook.reply_to_email
Input schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "urn:eyeball:email:reply_to_email:1.1.0:microsoft-outlook",
"type": "object",
"description": "Target message, reply content, recipient behavior, and staged attachments.",
"additionalProperties": false,
"required": [
"messageId",
"body"
],
"properties": {
"messageId": {
"type": "string",
"description": "Provider identifier of the email being replied to.",
"minLength": 1
},
"body": {
"type": "string",
"description": "Complete body in the format selected by bodyFormat.",
"minLength": 1
},
"bodyFormat": {
"type": "string",
"description": "Serialization format of the body content.",
"enum": [
"text",
"html"
],
"default": "text"
},
"replyAll": {
"type": "boolean",
"description": "When true, include the original sender and recipients supported by the provider.",
"default": false
},
"to": {
"type": "array",
"description": "Explicit primary reply recipients, overriding provider-derived recipients.",
"items": {
"type": "string",
"format": "email",
"description": "A syntactically valid email address."
}
},
"cc": {
"type": "array",
"description": "Explicit carbon-copy reply recipients.",
"items": {
"type": "string",
"format": "email",
"description": "A syntactically valid email address."
}
},
"bcc": {
"type": "array",
"description": "Explicit blind-carbon-copy reply recipients.",
"items": {
"type": "string",
"format": "email",
"description": "A syntactically valid email address."
}
},
"attachments": {
"type": "array",
"description": "Previously staged Eyeball files to attach.",
"maxItems": 25,
"items": {
"description": "A staged file reference that the provider can attach.",
"anyOf": [
{
"type": "object",
"description": "Preferred staged-file reference shape.",
"additionalProperties": false,
"required": [
"fileId"
],
"properties": {
"fileId": {
"type": "string",
"description": "Eyeball file_* identifier returned by POST /v1/files.",
"pattern": "^file_[A-Za-z0-9][A-Za-z0-9_-]{0,127}$"
},
"name": {
"type": "string",
"description": "Optional recipient-visible name overriding staged metadata.",
"minLength": 1
},
"mimeType": {
"type": "string",
"description": "Optional MIME type overriding staged metadata for delivery.",
"minLength": 1
}
}
},
{
"type": "object",
"description": "Deprecated 1.0 staged-file reference retained for compatibility.",
"additionalProperties": false,
"required": [
"fileId",
"fileName"
],
"properties": {
"fileId": {
"type": "string",
"description": "Eyeball identifier of the previously staged file.",
"minLength": 1
},
"fileName": {
"type": "string",
"description": "Deprecated recipient-visible name; use name in new calls.",
"minLength": 1
},
"contentType": {
"type": "string",
"description": "Deprecated MIME type; use mimeType in new calls.",
"minLength": 1
}
}
}
]
}
}
}
}Output schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "urn:eyeball:email:reply_to_email:output:1.1.0:microsoft-outlook",
"type": "object",
"description": "Identifiers and accepted recipients for the sent reply.",
"additionalProperties": false,
"required": [
"messageId",
"acceptedRecipients"
],
"properties": {
"messageId": {
"type": "string",
"description": "Provider identifier of the created email message.",
"minLength": 1
},
"threadId": {
"type": "string",
"description": "Provider identifier of the conversation thread when available.",
"minLength": 1
},
"acceptedRecipients": {
"type": "array",
"description": "Recipient addresses accepted by the provider for delivery.",
"items": {
"type": "string",
"format": "email",
"description": "A syntactically valid email address."
}
}
}
}microsoft-outlook.search_emails
Input schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "urn:eyeball:email:search_emails:1.0.0:microsoft-outlook",
"type": "object",
"description": "Mailbox query and pagination for an email search.",
"additionalProperties": false,
"required": [
"query"
],
"properties": {
"query": {
"type": "string",
"description": "Provider-supported mailbox search expression or full-text query.",
"minLength": 1
},
"mailboxId": {
"type": "string",
"description": "Mailbox identifier; omit to search the connected account's default mailbox.",
"minLength": 1
},
"folderId": {
"type": "string",
"description": "Folder identifier used to restrict the search when supported.",
"minLength": 1
},
"pageSize": {
"type": "integer",
"description": "Maximum number of email search results to return in one page.",
"minimum": 1,
"maximum": 100,
"default": 50
},
"pageToken": {
"type": "string",
"description": "Opaque continuation token from a previous email search result page.",
"minLength": 1
}
}
}Output schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "urn:eyeball:email:search_emails:output:1.0.0:microsoft-outlook",
"type": "object",
"description": "One page of matching email summaries and an optional continuation token.",
"additionalProperties": false,
"required": [
"emails"
],
"properties": {
"emails": {
"type": "array",
"description": "Email summaries matching the provider query.",
"items": {
"type": "object",
"description": "Compact mailbox metadata for one email message.",
"additionalProperties": false,
"required": [
"messageId",
"from",
"to",
"subject",
"receivedAt",
"unread",
"hasAttachments"
],
"properties": {
"messageId": {
"type": "string",
"description": "Provider identifier of the email message.",
"minLength": 1
},
"threadId": {
"type": "string",
"description": "Provider identifier of the containing conversation thread.",
"minLength": 1
},
"from": {
"type": "string",
"format": "email",
"description": "Sender email address."
},
"to": {
"type": "array",
"description": "Primary recipient email addresses.",
"items": {
"type": "string",
"format": "email",
"description": "A syntactically valid email address."
}
},
"subject": {
"type": "string",
"description": "Email subject exactly as stored by the provider."
},
"snippet": {
"type": "string",
"description": "Short provider-generated preview of the email body."
},
"receivedAt": {
"type": "string",
"format": "date-time",
"description": "RFC 3339 timestamp when the mailbox received the email."
},
"unread": {
"type": "boolean",
"description": "Whether the email is currently marked unread."
},
"hasAttachments": {
"type": "boolean",
"description": "Whether the email includes at least one attachment."
},
"labelIds": {
"type": "array",
"description": "Provider label, category, or folder identifiers on the email.",
"items": {
"type": "string",
"description": "Provider identifier of an applied label, category, or folder.",
"minLength": 1
}
}
}
}
},
"nextPageToken": {
"type": "string",
"description": "Opaque token to request the next page of email search results; absent when the result is complete.",
"minLength": 1
}
}
}microsoft-outlook.send_email
Input schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "urn:eyeball:email:send_email:1.1.0:microsoft-outlook",
"type": "object",
"description": "Recipients, content, and staged attachments for a new email.",
"additionalProperties": false,
"required": [
"to",
"subject",
"body"
],
"properties": {
"to": {
"type": "array",
"description": "Primary recipient email addresses.",
"items": {
"type": "string",
"format": "email",
"description": "A syntactically valid email address."
},
"minItems": 1
},
"cc": {
"type": "array",
"description": "Carbon-copy recipient email addresses.",
"items": {
"type": "string",
"format": "email",
"description": "A syntactically valid email address."
}
},
"bcc": {
"type": "array",
"description": "Blind-carbon-copy recipient email addresses.",
"items": {
"type": "string",
"format": "email",
"description": "A syntactically valid email address."
}
},
"subject": {
"type": "string",
"description": "Subject line shown to recipients.",
"minLength": 1,
"maxLength": 998
},
"body": {
"type": "string",
"description": "Complete body in the format selected by bodyFormat.",
"minLength": 1
},
"bodyFormat": {
"type": "string",
"description": "Serialization format of the body content.",
"enum": [
"text",
"html"
],
"default": "text"
},
"replyTo": {
"type": "string",
"format": "email",
"description": "Address recipients should use when replying instead of the sender."
},
"attachments": {
"type": "array",
"description": "Previously staged Eyeball files to attach.",
"maxItems": 25,
"items": {
"description": "A staged file reference that the provider can attach.",
"anyOf": [
{
"type": "object",
"description": "Preferred staged-file reference shape.",
"additionalProperties": false,
"required": [
"fileId"
],
"properties": {
"fileId": {
"type": "string",
"description": "Eyeball file_* identifier returned by POST /v1/files.",
"pattern": "^file_[A-Za-z0-9][A-Za-z0-9_-]{0,127}$"
},
"name": {
"type": "string",
"description": "Optional recipient-visible name overriding staged metadata.",
"minLength": 1
},
"mimeType": {
"type": "string",
"description": "Optional MIME type overriding staged metadata for delivery.",
"minLength": 1
}
}
},
{
"type": "object",
"description": "Deprecated 1.0 staged-file reference retained for compatibility.",
"additionalProperties": false,
"required": [
"fileId",
"fileName"
],
"properties": {
"fileId": {
"type": "string",
"description": "Eyeball identifier of the previously staged file.",
"minLength": 1
},
"fileName": {
"type": "string",
"description": "Deprecated recipient-visible name; use name in new calls.",
"minLength": 1
},
"contentType": {
"type": "string",
"description": "Deprecated MIME type; use mimeType in new calls.",
"minLength": 1
}
}
}
]
}
}
}
}Output schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "urn:eyeball:email:send_email:output:1.1.0:microsoft-outlook",
"type": "object",
"description": "Identifiers and accepted recipients for the newly sent email.",
"additionalProperties": false,
"required": [
"messageId",
"acceptedRecipients"
],
"properties": {
"messageId": {
"type": "string",
"description": "Provider identifier of the created email message.",
"minLength": 1
},
"threadId": {
"type": "string",
"description": "Provider identifier of the conversation thread when available.",
"minLength": 1
},
"acceptedRecipients": {
"type": "array",
"description": "Recipient addresses accepted by the provider for delivery.",
"items": {
"type": "string",
"format": "email",
"description": "A syntactically valid email address."
}
}
}
}Authentication
| Property | Value |
|---|---|
| Auth class | oauth2 |
| Required scopes | https://graph.microsoft.com/Mail.Readhttps://graph.microsoft.com/Mail.ReadWritehttps://graph.microsoft.com/Mail.Send |
| Optional scopes | https://graph.microsoft.com/Mail.Readhttps://graph.microsoft.com/Mail.ReadWritehttps://graph.microsoft.com/Mail.Send |
| Credential fields | None |
Credentials are resolved inside the executor by CredentialProvider. They never belong in tool input, x_provider, model context, logs, or execution output.
Provider-specific extensions
This manifest declares no provider-specific schema extensions. Use only canonical fields.
Provider differences may appear only under x_provider.microsoft-outlook and only when the schema above declares them.
Sync and async behavior
All tools are synchronous by nature, but callers may choose mode: "async" to queue them.
Mutations require a stable Idempotency-Key. The TypeScript SDK accepts it as idempotencyKey; it is never part of the JSON request body.
REST example
curl "$EYEBALL_EXECUTOR_URL/v1/execute" \
-H "Authorization: Bearer $EYEBALL_API_KEY" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: docs:microsoft-outlook.add_email_label:demo-1' \
--data '{"tool":"microsoft-outlook.add_email_label","userId":"demo_user","input":{"messageId":"example_messageId","labelId":"example_labelId","operation":"add"},"mode":"sync"}'Mock support
Point EYEBALL_EXECUTOR_URL at a mock-configured executor to run through the real catalog, validation, credential seam, adapter, normalized errors, and execution records with no Microsoft Outlook / Graph Mail account. Mock selection changes the executor endpoint and trusted provider base-URL configuration, never the execute request.
Limitations
- This page describes the manifest's explicit P0 subset, not every operation offered by the provider.
- Provider account policy, consent UI, quota details, and current wire compatibility still require a real-provider certification pass.
- Fields outside the canonical schemas and declared
x_providerextensions are rejected.
Versions
| Contract | Version |
|---|---|
| Runtime catalog | 1.1 |
| Manifest catalog | 1.0 |
| Manifest schema | 1.0 |
| Source | activepieces-bridge |
| Tier | P0 |
| Capabilities | email |
Next
Use Testing with mocks to exercise this toolkit before connecting a live provider account.