Microsoft Outlook

App · Email · 54 actions · 1 trigger

Send and manage email, calendars and contacts in Microsoft Outlook.

Triggers

Start a workflow when something happens in Microsoft Outlook. See how triggers work.

New Outlook email

Triggers when a new email arrives in a folder of an Outlook mailbox - the inbox unless you choose another - optionally only from one sender or domain. Runs once for each email, with its text.

Filters

Narrow which events start a run.

mailboxRequired
The mailbox to watch: a user's email address in the Microsoft 365 tenant the app was consented in.
sender
Only emails from this address, or from a whole domain written as @example.com. Leave blank for every new email.
folder
The folder to watch: a folder ID or a well-known name such as inbox, junkemail or archive. Leave blank for the inbox.

Event fields

What a run starts with. Later steps read each field with an @ reference.

message_idtext
mailboxtext
foldertext
conversation_idtext
fromtext
from_addresstext
from_nametext
totext
cctext
subjecttext
received_attext
bodytext
snippettext
has_attachmentstrue/false
is_readtrue/false
categorieslist
web_linktext

Actions

ActionWhat it does
Add attachmentAttach one or more files to an existing draft message.
Add large attachmentAttach a file between 3 MB and 150 MB to a draft using an upload session.
Cancel eventCancel a meeting you organise and send a cancellation notice to every attendee.
Copy messageCopy a message into another folder.
Create categoryAdd a category to a mailbox's master list so it can be applied to messages, events and contacts.
Create contactCreate a contact in a mailbox's Contacts folder.
Create draftCreate a draft email without sending it.
Create eventCreate a calendar event and invite attendees, optionally as a Microsoft Teams online meeting.
Create inbox ruleCreate an inbox rule that acts on incoming mail.
Create mail folderCreate a mail folder at the top level of a mailbox or inside another folder.
Create search folderCreate a virtual folder that always holds the messages matching a filter.
Delete categoryRemove a category from a mailbox's master list.
Delete contactDelete a contact from a mailbox.
Delete eventDelete a calendar event.
Delete Focused Inbox overrideRemove a Focused Inbox override from this mailbox.
Delete inbox ruleDelete an inbox rule.
Delete mail folderDelete a mail folder and everything inside it.
Delete messageDelete a message.
Find meeting timesAsk Microsoft Graph to suggest meeting times based on attendee availability.
Forward eventForward a meeting invitation to additional recipients.
Forward messageForward a message to one or more new recipients.
Get attachmentFetch one attachment, including its base64 content for file attachments.
Get contactRead a single contact.
Get eventRead a single calendar event.
Get free/busy scheduleGet free/busy availability for a set of users, distribution lists or room resources over a time range.
Get mail tipsCheck recipients before sending: whether they have an out-of-office reply on, a full mailbox, or a message size limit.
Get mailbox settingsRead a mailbox's settings: automatic replies, time zone, language, date and time format, and working hours.
Get messageRead a single message including its full body.
Get message trace detailsGet the per-hop delivery events for one traced message and recipient: where it was received, what was applied, and whether it was delivered.
List attachmentsList the attachments on a message, without their content.
List calendarsList the calendars in a mailbox.
List categoriesList the categories defined in a mailbox's master list.
List contact foldersList the contact folders in a mailbox.
List contactsList a mailbox's contacts, optionally within one contact folder or matching a search or filter.
List eventsList calendar events.
List Focused Inbox overridesList the senders pinned to Focused or Other for this mailbox.
List inbox rulesList the inbox rules defined for a mailbox.
List mail foldersList a mailbox's mail folders, or the child folders of one folder.
List message tracesTrace what Exchange Online did with messages: delivered, failed, quarantined or filtered as spam.
List messagesList messages in a mailbox, optionally limited to one folder, to unread messages, or to a search or filter expression.
List room listsList the room lists (building or floor groupings) defined in the tenant.
List roomsList bookable meeting rooms, tenant-wide or within one room list.
List usersList the mailboxes in the tenant.
Move messageMove a message to another folder.
Reply all to messageReply to every recipient of a message.
Reply to messageReply to the sender of a message.
Respond to eventAccept, tentatively accept, or decline a meeting invitation as the invitee.
Send draftSend a draft that was created earlier.
Send emailSend an email through Microsoft Outlook.
Set automatic repliesTurn out-of-office automatic replies on, off, or on for a scheduled date range.
Set Focused Inbox overrideAlways classify a sender's mail as Focused or as Other for this mailbox.
Update contactUpdate a contact.
Update eventUpdate a calendar event.
Update messageUpdate a message: mark it read or unread, change its subject, importance, categories or follow-up flag.

Add attachment

Attach one or more files to an existing draft message.

Inputs

MailboxmailboxtextRequired
The mailbox to act on: a user's email address (userPrincipalName) or Microsoft user ID. App-only access has no signed-in user, so the mailbox must be named explicitly. It has to be a mailbox in the same Microsoft 365 tenant the app registration was consented in -- an outside address such as a personal Gmail or outlook.com account is not reachable this way. The picker is populated from the directory when the app has the optional User.Read.All permission; otherwise type the address.
Message IDmessage_idtextRequired
The ID of the message.
AttachmentsattachmentslistRequired
Files to attach. Upload a file or reference a document (or list of documents) from an earlier step. Microsoft Graph limits an attachment sent in a single request to under 3 MB; use Add large attachment for a larger file.

Outputs

attachmentslist
The attachments that were created.
countnumber
Number attached.
message_idtext
Draft message ID.
Example output
{
  "attachments": [
    {
      "id": "AAMkAGI2TG93AAA=",
      "name": "q3-notes.pdf",
      "size": 84213
    }
  ],
  "count": 1,
  "message_id": "AAMkAGI2NGVhZTIyLTAzYzUt"
}

Add large attachment

Attach a file between 3 MB and 150 MB to a draft using an upload session. Use Add attachment for anything smaller. Note that Exchange Online's default message size limit is 35 MB unless an administrator has raised it.

Inputs

MailboxmailboxtextRequired
The mailbox to act on: a user's email address (userPrincipalName) or Microsoft user ID. App-only access has no signed-in user, so the mailbox must be named explicitly. It has to be a mailbox in the same Microsoft 365 tenant the app registration was consented in -- an outside address such as a personal Gmail or outlook.com account is not reachable this way. The picker is populated from the directory when the app has the optional User.Read.All permission; otherwise type the address.
Message IDmessage_idtextRequired
The ID of the message.
AttachmentattachmentlistRequired
The file to attach. Upload a file or reference a document from an earlier step.

Outputs

attachment_idtext
ID of the created attachment.
message_idtext
Draft ID.
nametext
File name.
sizenumber
Size in bytes.
Example output
{
  "attachment_id": "AAMkAGI2TG93AAB=",
  "message_id": "AAMkAGI2NGVhZTIyLTAzYzUt",
  "name": "quarterly-deck.pdf",
  "size": 18874368
}

Cancel event

Cancel a meeting you organise and send a cancellation notice to every attendee. Cancelling also removes the meeting from your own calendar, so there is no need to delete it afterwards; a Delete event step on the same ID will fail with not found.

Inputs

MailboxmailboxtextRequired
The mailbox to act on: a user's email address (userPrincipalName) or Microsoft user ID. App-only access has no signed-in user, so the mailbox must be named explicitly. It has to be a mailbox in the same Microsoft 365 tenant the app registration was consented in -- an outside address such as a personal Gmail or outlook.com account is not reachable this way. The picker is populated from the directory when the app has the optional User.Read.All permission; otherwise type the address.
Event IDevent_idtextRequired
The ID of the calendar event.
Commentcommenttext
Optional message to include.

Outputs

statustext
Operation status.
Example output
{
  "event_id": "AAMkAGViNDU3ZDI4LTZmNzMt",
  "status": "cancelled"
}

Copy message

Copy a message into another folder. The copy gets its own ID, which is returned; the original keeps its ID.

Inputs

MailboxmailboxtextRequired
The mailbox to act on: a user's email address (userPrincipalName) or Microsoft user ID. App-only access has no signed-in user, so the mailbox must be named explicitly. It has to be a mailbox in the same Microsoft 365 tenant the app registration was consented in -- an outside address such as a personal Gmail or outlook.com account is not reachable this way. The picker is populated from the directory when the app has the optional User.Read.All permission; otherwise type the address.
Message IDmessage_idtextRequired
The ID of the message.
Destination folder IDdestination_folder_idtextRequired
Destination folder. Accepts a folder ID or a well-known name: inbox, drafts, sentitems, deleteditems, junkemail or archive.

Outputs

bodyPreviewtext
First 255 characters.
fromobject
Sender recipient object.
hasAttachmentstrue/false
Attachment present.
idtext
Message ID.
isReadtrue/false
Whether it has been read.
receivedDateTimetext
ISO 8601 timestamp.
subjecttext
Message subject.
webLinktext
Open in Outlook on the web.
Example output
{
  "bodyPreview": "Here are the notes from this morning's planning session...",
  "from": {
    "emailAddress": {
      "address": "alexw@contoso.com",
      "name": "Alex Wilbur"
    }
  },
  "hasAttachments": true,
  "id": "AAMkAGI2NGVhZTIyLTAzYzUt",
  "isRead": false,
  "receivedDateTime": "2026-09-18T14:02:11Z",
  "subject": "Q3 planning notes",
  "webLink": "https://outlook.office365.com/owa/?ItemID=AAMkAGI2NGVhZTIy"
}

Create category

Add a category to a mailbox's master list so it can be applied to messages, events and contacts.

Inputs

MailboxmailboxtextRequired
The mailbox to act on: a user's email address (userPrincipalName) or Microsoft user ID. App-only access has no signed-in user, so the mailbox must be named explicitly. It has to be a mailbox in the same Microsoft 365 tenant the app registration was consented in -- an outside address such as a personal Gmail or outlook.com account is not reachable this way. The picker is populated from the directory when the app has the optional User.Read.All permission; otherwise type the address.
Display namedisplay_nametextRequired
Category name. Must be unique in the mailbox and cannot be changed afterwards.
Colorcolortext
One of Outlook's 25 preset colours ('preset0' is red, 'preset4' green, 'preset7' blue), or 'none'.

Outputs

colortext
Preset colour.
displayNametext
Category name.
idtext
Category ID.
Example output
{
  "color": "preset0",
  "displayName": "Needs follow-up",
  "id": "5a9a6aa8-b65f-4357-b1f9-60c6bf6330d8"
}

Create contact

Create a contact in a mailbox's Contacts folder.

Inputs

MailboxmailboxtextRequired
The mailbox to act on: a user's email address (userPrincipalName) or Microsoft user ID. App-only access has no signed-in user, so the mailbox must be named explicitly. It has to be a mailbox in the same Microsoft 365 tenant the app registration was consented in -- an outside address such as a personal Gmail or outlook.com account is not reachable this way. The picker is populated from the directory when the app has the optional User.Read.All permission; otherwise type the address.
Given namegiven_nametext
First name.
Surnamesurnametext
Last name.
Display namedisplay_nametext
Name the contact is shown under. Outlook may regenerate this from other fields on later updates.
Email addressesemail_addresseslist
Email addresses for the contact.
Business phonesbusiness_phoneslist
Business phone numbers.
Mobile phonemobile_phonetext
Mobile phone number.
Job titlejob_titletext
Job title.
Company namecompany_nametext
Company name.
Departmentdepartmenttext
Department.
Office locationoffice_locationtext
Office location.
Personal notespersonal_notestext
Free-text notes about the contact.
Categoriescategorieslist
Categories to assign. Each must already exist in the mailbox's category list.
Folder IDfolder_idtext
Contact folder to create in. Leave blank for the default Contacts folder.

Outputs

businessPhoneslist
Business phone numbers.
companyNametext
Company name.
displayNametext
Contact display name.
emailAddresseslist
Email addresses.
idtext
Contact ID.
jobTitletext
Job title.
Example output
{
  "businessPhones": [
    "+1 425 555 0109"
  ],
  "companyName": "Contoso",
  "displayName": "Dana Swope",
  "emailAddresses": [
    {
      "address": "danas@contoso.com",
      "name": "Dana Swope"
    }
  ],
  "id": "AAMkAGE1Mjc1YmUwLTIzZjQt",
  "jobTitle": "Operations Lead"
}

Create draft

Create a draft email without sending it. Send it later with Send draft. Set 'Reply to message' to draft a reply in that message's conversation, with the original quoted below.

Inputs

MailboxmailboxtextRequired
The mailbox to act on: a user's email address (userPrincipalName) or Microsoft user ID. App-only access has no signed-in user, so the mailbox must be named explicitly. It has to be a mailbox in the same Microsoft 365 tenant the app registration was consented in -- an outside address such as a personal Gmail or outlook.com account is not reachable this way. The picker is populated from the directory when the app has the optional User.Read.All permission; otherwise type the address.
Subjectsubjecttext
Subject of the draft. Required unless 'Reply to message' is set, when leaving it blank reuses that message's subject.
Bodybodytext
Plain text body content of the draft.
HTML bodyhtml_bodytext
Formatted (HTML) version of the body. If provided, it is used instead of the plain text body.
Tototext
Comma-separated list of recipient email addresses. A reply left blank goes to the original's sender.
CCcctext
Comma-separated list of Cc recipients.
BCCbcctext
Comma-separated list of Bcc recipients.
Importanceimportancetext
Importance of the item.One of: low, normal, high.
Attachmentsattachmentslist
Files to attach. Upload a file or reference a document (or list of documents) from an earlier step. Microsoft Graph limits an attachment sent in a single request to under 3 MB; for a larger file, create a draft and use Add large attachment.
Reply to messagereply_to_message_idtext
The ID of a message to draft a reply to. The draft is saved in that message's conversation and threads with it when sent. Leave blank for a new email.

Outputs

bodyPreviewtext
First 255 characters.
fromobject
Sender recipient object.
hasAttachmentstrue/false
Attachment present.
idtext
Message ID.
isReadtrue/false
Whether it has been read.
receivedDateTimetext
ISO 8601 timestamp.
subjecttext
Message subject.
webLinktext
Open in Outlook on the web.
Example output
{
  "bodyPreview": "Here are the notes from this morning's planning session...",
  "from": {
    "emailAddress": {
      "address": "alexw@contoso.com",
      "name": "Alex Wilbur"
    }
  },
  "hasAttachments": true,
  "id": "AAMkAGI2NGVhZTIyLTAzYzUt",
  "isDraft": true,
  "isRead": false,
  "receivedDateTime": "2026-09-18T14:02:11Z",
  "subject": "Q3 planning notes",
  "webLink": "https://outlook.office365.com/owa/?ItemID=AAMkAGI2NGVhZTIy"
}

Create event

Create a calendar event and invite attendees, optionally as a Microsoft Teams online meeting.

Inputs

MailboxmailboxtextRequired
The mailbox to act on: a user's email address (userPrincipalName) or Microsoft user ID. App-only access has no signed-in user, so the mailbox must be named explicitly. It has to be a mailbox in the same Microsoft 365 tenant the app registration was consented in -- an outside address such as a personal Gmail or outlook.com account is not reachable this way. The picker is populated from the directory when the app has the optional User.Read.All permission; otherwise type the address.
SubjectsubjecttextRequired
Title of the event.
Start date timestart_date_timedate and timeRequired
When the event starts.
End date timeend_date_timedate and timeRequired
When the event ends.
Time zonetime_zonetext
Time zone for the supplied times, in Windows or IANA format, for example 'Pacific Standard Time' or 'America/Los_Angeles'. Defaults to UTC.
Calendar IDcalendar_idtext
Calendar to create in. Leave blank for the default.
Bodybodytext
Plain text description of the event.
HTML bodyhtml_bodytext
Formatted (HTML) version of the body. If provided, it is used instead of the plain text body.
Locationlocationtext
Where the event takes place.
Attendeesattendeestext
Comma-separated addresses of required attendees.
Optional attendeesoptional_attendeestext
Comma-separated addresses of optional attendees.
Is all dayis_all_daytrue/false
All-day event. Start and end must be midnight in the same time zone.Default: false.
Is online meetingis_online_meetingtrue/false
Create a Microsoft Teams meeting and include the join link. Cannot be turned off again afterwards.Default: false.
Reminder minutes before startreminder_minutes_before_startnumber
Minutes before the start to show a reminder.At least 0.
Show asshow_astext
How the time appears to others.One of: free, tentative, busy, oof (Out of office), workingElsewhere (Working elsewhere).
Importanceimportancetext
Importance of the item.One of: low, normal, high.
Sensitivitysensitivitytext
Privacy level of the event.One of: normal, personal, private, confidential.
Categoriescategorieslist
Categories to assign. Each must already exist in the mailbox's category list.

Outputs

attendeeslist
Attendee list.
endobject
End dateTimeTimeZone.
idtext
Event ID.
locationobject
Event location.
onlineMeetingobject
Join information.
startobject
Start dateTimeTimeZone.
subjecttext
Event subject.
webLinktext
Open in Outlook on the web.
Example output
{
  "attendees": [
    {
      "emailAddress": {
        "address": "alexw@contoso.com",
        "name": "Alex Wilbur"
      },
      "type": "required"
    }
  ],
  "end": {
    "dateTime": "2026-09-22T16:00:00.0000000",
    "timeZone": "UTC"
  },
  "id": "AAMkAGViNDU3ZDI4LTZmNzMt",
  "location": {
    "displayName": "Conference room 3"
  },
  "onlineMeeting": {
    "joinUrl": "https://teams.microsoft.com/l/meetup-join/19%3a..."
  },
  "start": {
    "dateTime": "2026-09-22T15:00:00.0000000",
    "timeZone": "UTC"
  },
  "subject": "Q3 planning",
  "webLink": "https://outlook.office365.com/calendar/item/AAMkAGViNDU3ZDI4"
}

Create inbox rule

Create an inbox rule that acts on incoming mail. Supply at least one action; conditions are optional and are combined with AND.

Inputs

MailboxmailboxtextRequired
The mailbox to act on: a user's email address (userPrincipalName) or Microsoft user ID. App-only access has no signed-in user, so the mailbox must be named explicitly. It has to be a mailbox in the same Microsoft 365 tenant the app registration was consented in -- an outside address such as a personal Gmail or outlook.com account is not reachable this way. The picker is populated from the directory when the app has the optional User.Read.All permission; otherwise type the address.
Display namedisplay_nametextRequired
Name for the rule.
Sequencesequencenumber
Order this rule runs in, relative to other rules.At least 1. Default: 1.
Is enabledis_enabledtrue/false
Whether the rule is active once created.Default: true.
Sender containssender_containslist
Match when the sender contains any of these strings.
Subject containssubject_containslist
Match when the subject contains any of these strings.
Body containsbody_containslist
Match when the body contains any of these strings.
Move to folder IDmove_to_folder_idtext
Move matching messages to this folder.
Forward toforward_totext
Comma-separated addresses to forward matches to.
Mark as readmark_as_readtrue/false
Mark matching messages as read.Default: false.
Mark importancemark_importancetext
Set the importance of matching messages.One of: low, normal, high.
Delete messagedelete_messagetrue/false
Move matching messages to Deleted Items.Default: false.
Stop processing rulesstop_processing_rulestrue/false
Stop evaluating later rules once this one matches.Default: false.

Outputs

actionsobject
Rule actions.
conditionsobject
Rule conditions.
displayNametext
Rule name.
idtext
Rule ID.
isEnabledtrue/false
Active state.
Example output
{
  "actions": {
    "moveToFolder": "AAMkAGI2AAAAAEMkAAB="
  },
  "conditions": {
    "subjectContains": [
      "invoice"
    ]
  },
  "displayName": "Invoices to Finance",
  "id": "AQAAAJ5dZqA=",
  "isEnabled": true
}

Create mail folder

Create a mail folder at the top level of a mailbox or inside another folder. The name must be unique among the folders beside it; a duplicate fails with folder exists.

Inputs

MailboxmailboxtextRequired
The mailbox to act on: a user's email address (userPrincipalName) or Microsoft user ID. App-only access has no signed-in user, so the mailbox must be named explicitly. It has to be a mailbox in the same Microsoft 365 tenant the app registration was consented in -- an outside address such as a personal Gmail or outlook.com account is not reachable this way. The picker is populated from the directory when the app has the optional User.Read.All permission; otherwise type the address.
Display namedisplay_nametextRequired
Name for the new folder.
Parent folder IDparent_folder_idtext
Create the folder inside this one. Leave blank to create it at the top level.

Outputs

displayNametext
Folder name.
idtext
Folder ID.
parentFolderIdtext
Parent folder ID.
Example output
{
  "displayName": "Invoices",
  "id": "AAMkAGI2AAAAAEMkAAB=",
  "parentFolderId": "AAMkAGI2AAAAAEMkAAA="
}

Create search folder

Create a virtual folder that always holds the messages matching a filter. Exchange Online deletes a search folder after 45 days of no use and caps how many can exist per source folder, so treat one as a cache you can recreate rather than as durable storage.

Inputs

MailboxmailboxtextRequired
The mailbox to act on: a user's email address (userPrincipalName) or Microsoft user ID. App-only access has no signed-in user, so the mailbox must be named explicitly. It has to be a mailbox in the same Microsoft 365 tenant the app registration was consented in -- an outside address such as a personal Gmail or outlook.com account is not reachable this way. The picker is populated from the directory when the app has the optional User.Read.All permission; otherwise type the address.
Display namedisplay_nametextRequired
Name for the search folder.
Filter queryfilter_querytextRequired
OData $filter that selects the messages, for example "contains(subject, 'invoice')".
Source folder IDSsource_folder_idslist
Folders to search. Defaults to the inbox. Accepts well-known names.
Include nested foldersinclude_nested_folderstrue/false
Search child folders of each source folder too.Default: true.
Parent folder IDparent_folder_idtext
Where the folder is created. Defaults to 'searchfolders', which is where Outlook for Windows shows them.

Outputs

displayNametext
Folder name.
filterQuerytext
The filter the folder applies.
idtext
Folder ID.
sourceFolderIdslist
Folders being searched.
Example output
{
  "displayName": "Unread invoices",
  "filterQuery": "contains(subject, 'invoice')",
  "id": "AAMkAGI2AAAAAEMkAAC=",
  "sourceFolderIds": [
    "inbox"
  ]
}

Delete category

Remove a category from a mailbox's master list.

Inputs

MailboxmailboxtextRequired
The mailbox to act on: a user's email address (userPrincipalName) or Microsoft user ID. App-only access has no signed-in user, so the mailbox must be named explicitly. It has to be a mailbox in the same Microsoft 365 tenant the app registration was consented in -- an outside address such as a personal Gmail or outlook.com account is not reachable this way. The picker is populated from the directory when the app has the optional User.Read.All permission; otherwise type the address.
Category IDcategory_idtextRequired
The ID of the category, from List categories.

Outputs

statustext
Operation status.
Example output
{
  "category_id": "5a9a6aa8-b65f-4357-b1f9-60c6bf6330d8",
  "status": "deleted"
}

Delete contact

Delete a contact from a mailbox.

Inputs

MailboxmailboxtextRequired
The mailbox to act on: a user's email address (userPrincipalName) or Microsoft user ID. App-only access has no signed-in user, so the mailbox must be named explicitly. It has to be a mailbox in the same Microsoft 365 tenant the app registration was consented in -- an outside address such as a personal Gmail or outlook.com account is not reachable this way. The picker is populated from the directory when the app has the optional User.Read.All permission; otherwise type the address.
Contact IDcontact_idtextRequired
The ID of the contact.

Outputs

statustext
Operation status.
Example output
{
  "contact_id": "AAMkAGE1Mjc1YmUwLTIzZjQt",
  "status": "deleted"
}

Delete event

Delete a calendar event. For a meeting you organise, use Cancel event instead so attendees are notified. After a meeting is cancelled it stays on each attendee's calendar, marked cancelled, until deleted: use this on the attendee's mailbox, with the event ID from their calendar, to clear it.

Inputs

MailboxmailboxtextRequired
The mailbox to act on: a user's email address (userPrincipalName) or Microsoft user ID. App-only access has no signed-in user, so the mailbox must be named explicitly. It has to be a mailbox in the same Microsoft 365 tenant the app registration was consented in -- an outside address such as a personal Gmail or outlook.com account is not reachable this way. The picker is populated from the directory when the app has the optional User.Read.All permission; otherwise type the address.
Event IDevent_idtextRequired
The ID of the calendar event.

Outputs

statustext
Operation status.
Example output
{
  "event_id": "AAMkAGViNDU3ZDI4LTZmNzMt",
  "status": "deleted"
}

Delete Focused Inbox override

Remove a Focused Inbox override from this mailbox.

Inputs

MailboxmailboxtextRequired
The mailbox to act on: a user's email address (userPrincipalName) or Microsoft user ID. App-only access has no signed-in user, so the mailbox must be named explicitly. It has to be a mailbox in the same Microsoft 365 tenant the app registration was consented in -- an outside address such as a personal Gmail or outlook.com account is not reachable this way. The picker is populated from the directory when the app has the optional User.Read.All permission; otherwise type the address.
Override IDoverride_idtextRequired
The ID of the override, from List Focused Inbox overrides.

Outputs

statustext
Operation status.
Example output
{
  "override_id": "98f5bdef-576a-404d-a2ea-07a3cf11a9b9",
  "status": "deleted"
}

Delete inbox rule

Delete an inbox rule.

Inputs

MailboxmailboxtextRequired
The mailbox to act on: a user's email address (userPrincipalName) or Microsoft user ID. App-only access has no signed-in user, so the mailbox must be named explicitly. It has to be a mailbox in the same Microsoft 365 tenant the app registration was consented in -- an outside address such as a personal Gmail or outlook.com account is not reachable this way. The picker is populated from the directory when the app has the optional User.Read.All permission; otherwise type the address.
Rule IDrule_idtextRequired
The ID of the rule, from List inbox rules.

Outputs

statustext
Operation status.
Example output
{
  "rule_id": "AQAAAJ5dZqA=",
  "status": "deleted"
}

Delete mail folder

Delete a mail folder and everything inside it.

Inputs

MailboxmailboxtextRequired
The mailbox to act on: a user's email address (userPrincipalName) or Microsoft user ID. App-only access has no signed-in user, so the mailbox must be named explicitly. It has to be a mailbox in the same Microsoft 365 tenant the app registration was consented in -- an outside address such as a personal Gmail or outlook.com account is not reachable this way. The picker is populated from the directory when the app has the optional User.Read.All permission; otherwise type the address.
Folder IDfolder_idtextRequired
The folder to delete.

Outputs

statustext
Operation status.
Example output
{
  "folder_id": "AAMkAGI2AAAAAEMkAAB=",
  "status": "deleted"
}

Delete message

Delete a message. It goes to the mailbox's hidden Recoverable Items, not the Deleted Items folder: users can restore it with Recover deleted items in Outlook until the retention period ends (14 days by default). To put a message in Deleted Items instead, use Move message with the destination deleteditems.

Inputs

MailboxmailboxtextRequired
The mailbox to act on: a user's email address (userPrincipalName) or Microsoft user ID. App-only access has no signed-in user, so the mailbox must be named explicitly. It has to be a mailbox in the same Microsoft 365 tenant the app registration was consented in -- an outside address such as a personal Gmail or outlook.com account is not reachable this way. The picker is populated from the directory when the app has the optional User.Read.All permission; otherwise type the address.
Message IDmessage_idtextRequired
The ID of the message.

Outputs

statustext
Operation status.
Example output
{
  "message_id": "AAMkAGI2NGVhZTIyLTAzYzUt",
  "status": "deleted"
}

Find meeting times

Ask Microsoft Graph to suggest meeting times based on attendee availability.

Inputs

MailboxmailboxtextRequired
The mailbox to act on: a user's email address (userPrincipalName) or Microsoft user ID. App-only access has no signed-in user, so the mailbox must be named explicitly. It has to be a mailbox in the same Microsoft 365 tenant the app registration was consented in -- an outside address such as a personal Gmail or outlook.com account is not reachable this way. The picker is populated from the directory when the app has the optional User.Read.All permission; otherwise type the address.
AttendeesattendeeslistRequired
Addresses of the people who need to attend.
Meeting duration minutesmeeting_duration_minutesnumber
How long the meeting needs to be, in minutes.At least 1. Default: 30.
Start date timestart_date_timedate and time
Earliest time to consider. Pair with an end time.
End date timeend_date_timedate and time
Latest time to consider. Pair with a start time.
Time zonetime_zonetext
Time zone for the supplied times, in Windows or IANA format, for example 'Pacific Standard Time' or 'America/Los_Angeles'. Defaults to UTC.
Max candidatesmax_candidatesnumber
Maximum number of suggestions to return.From 1 to 100. Default: 10.
Minimum attendee percentageminimum_attendee_percentagenumber
Minimum percentage of attendees that must be free for a time to be suggested.From 0 to 100.

Outputs

emptySuggestionsReasontext
Why no times were suggested, when empty.
meetingTimeSuggestionslist
Suggested slots, most confident first.
Example output
{
  "meetingTimeSuggestions": [
    {
      "confidence": 100.0,
      "meetingTimeSlot": {
        "end": {
          "dateTime": "2026-09-23T15:30:00.0000000",
          "timeZone": "UTC"
        },
        "start": {
          "dateTime": "2026-09-23T15:00:00.0000000",
          "timeZone": "UTC"
        }
      },
      "organizerAvailability": "free"
    }
  ]
}

Forward event

Forward a meeting invitation to additional recipients.

Inputs

MailboxmailboxtextRequired
The mailbox to act on: a user's email address (userPrincipalName) or Microsoft user ID. App-only access has no signed-in user, so the mailbox must be named explicitly. It has to be a mailbox in the same Microsoft 365 tenant the app registration was consented in -- an outside address such as a personal Gmail or outlook.com account is not reachable this way. The picker is populated from the directory when the app has the optional User.Read.All permission; otherwise type the address.
Event IDevent_idtextRequired
The ID of the calendar event.
TototextRequired
Comma-separated list of recipient email addresses.
Commentcommenttext
Optional message to include.

Outputs

statustext
Operation status.
Example output
{
  "event_id": "AAMkAGViNDU3ZDI4LTZmNzMt",
  "status": "forwarded"
}

Forward message

Forward a message to one or more new recipients. Success means Exchange accepted the message, not that it was delivered: a delivery failure arrives later as a bounce in the sender's inbox, and List message traces shows what happened.

Inputs

MailboxmailboxtextRequired
The mailbox to act on: a user's email address (userPrincipalName) or Microsoft user ID. App-only access has no signed-in user, so the mailbox must be named explicitly. It has to be a mailbox in the same Microsoft 365 tenant the app registration was consented in -- an outside address such as a personal Gmail or outlook.com account is not reachable this way. The picker is populated from the directory when the app has the optional User.Read.All permission; otherwise type the address.
Message IDmessage_idtextRequired
The ID of the message.
TototextRequired
Comma-separated list of recipient email addresses.
Commentcommenttext
Optional message to include.

Outputs

statustext
Operation status.
Example output
{
  "message_id": "AAMkAGI2NGVhZTIyLTAzYzUt",
  "status": "sent"
}

Get attachment

Fetch one attachment, including its base64 content for file attachments. Item and reference attachments return metadata only.

Inputs

MailboxmailboxtextRequired
The mailbox to act on: a user's email address (userPrincipalName) or Microsoft user ID. App-only access has no signed-in user, so the mailbox must be named explicitly. It has to be a mailbox in the same Microsoft 365 tenant the app registration was consented in -- an outside address such as a personal Gmail or outlook.com account is not reachable this way. The picker is populated from the directory when the app has the optional User.Read.All permission; otherwise type the address.
Message IDmessage_idtextRequired
The ID of the message.
Attachment IDattachment_idtextRequired
The ID of the attachment, from List attachments.

Outputs

attachment_typetext
fileAttachment, itemAttachment or referenceAttachment.
content_bytestext
Base64 content, for file attachments only.
content_typetext
MIME type.
idtext
Attachment ID.
is_inlinetrue/false
Inline flag.
nametext
File name.
sizenumber
Size in bytes.
Example output
{
  "attachment_type": "fileAttachment",
  "content_bytes": "JVBERi0xLjQKJeLjz9MK",
  "content_type": "application/pdf",
  "id": "AAMkAGI2TG93AAA=",
  "is_inline": false,
  "name": "q3-notes.pdf",
  "size": 84213
}

Get contact

Read a single contact.

Inputs

MailboxmailboxtextRequired
The mailbox to act on: a user's email address (userPrincipalName) or Microsoft user ID. App-only access has no signed-in user, so the mailbox must be named explicitly. It has to be a mailbox in the same Microsoft 365 tenant the app registration was consented in -- an outside address such as a personal Gmail or outlook.com account is not reachable this way. The picker is populated from the directory when the app has the optional User.Read.All permission; otherwise type the address.
Contact IDcontact_idtextRequired
The ID of the contact.

Outputs

businessPhoneslist
Business phone numbers.
companyNametext
Company name.
displayNametext
Contact display name.
emailAddresseslist
Email addresses.
idtext
Contact ID.
jobTitletext
Job title.
Example output
{
  "businessPhones": [
    "+1 425 555 0109"
  ],
  "companyName": "Contoso",
  "displayName": "Dana Swope",
  "emailAddresses": [
    {
      "address": "danas@contoso.com",
      "name": "Dana Swope"
    }
  ],
  "id": "AAMkAGE1Mjc1YmUwLTIzZjQt",
  "jobTitle": "Operations Lead"
}

Get event

Read a single calendar event.

Inputs

MailboxmailboxtextRequired
The mailbox to act on: a user's email address (userPrincipalName) or Microsoft user ID. App-only access has no signed-in user, so the mailbox must be named explicitly. It has to be a mailbox in the same Microsoft 365 tenant the app registration was consented in -- an outside address such as a personal Gmail or outlook.com account is not reachable this way. The picker is populated from the directory when the app has the optional User.Read.All permission; otherwise type the address.
Event IDevent_idtextRequired
The ID of the calendar event.
Time zonetime_zonetext
Time zone for the supplied times, in Windows or IANA format, for example 'Pacific Standard Time' or 'America/Los_Angeles'. Defaults to UTC.

Outputs

attendeeslist
Attendee list.
endobject
End dateTimeTimeZone.
idtext
Event ID.
locationobject
Event location.
onlineMeetingobject
Join information.
startobject
Start dateTimeTimeZone.
subjecttext
Event subject.
webLinktext
Open in Outlook on the web.
Example output
{
  "attendees": [
    {
      "emailAddress": {
        "address": "alexw@contoso.com",
        "name": "Alex Wilbur"
      },
      "type": "required"
    }
  ],
  "end": {
    "dateTime": "2026-09-22T16:00:00.0000000",
    "timeZone": "UTC"
  },
  "id": "AAMkAGViNDU3ZDI4LTZmNzMt",
  "location": {
    "displayName": "Conference room 3"
  },
  "onlineMeeting": {
    "joinUrl": "https://teams.microsoft.com/l/meetup-join/19%3a..."
  },
  "start": {
    "dateTime": "2026-09-22T15:00:00.0000000",
    "timeZone": "UTC"
  },
  "subject": "Q3 planning",
  "webLink": "https://outlook.office365.com/calendar/item/AAMkAGViNDU3ZDI4"
}

Get free/busy schedule

Get free/busy availability for a set of users, distribution lists or room resources over a time range.

Inputs

MailboxmailboxtextRequired
The mailbox to act on: a user's email address (userPrincipalName) or Microsoft user ID. App-only access has no signed-in user, so the mailbox must be named explicitly. It has to be a mailbox in the same Microsoft 365 tenant the app registration was consented in -- an outside address such as a personal Gmail or outlook.com account is not reachable this way. The picker is populated from the directory when the app has the optional User.Read.All permission; otherwise type the address.
SchedulesscheduleslistRequired
Addresses to check availability for.
Start date timestart_date_timedate and timeRequired
Start of the window to check.
End date timeend_date_timedate and timeRequired
End of the window to check.
Time zonetime_zonetext
Time zone for the supplied times, in Windows or IANA format, for example 'Pacific Standard Time' or 'America/Los_Angeles'. Defaults to UTC.
Availability view intervalavailability_view_intervalnumber
Size of each availability slot, in minutes.From 5 to 1440. Default: 30.

Outputs

countnumber
Number returned.
scheduleslist
Availability per requested address.
Example output
{
  "count": 1,
  "schedules": [
    {
      "availabilityView": "000022000000",
      "scheduleId": "alexw@contoso.com",
      "scheduleItems": [
        {
          "end": {
            "dateTime": "2026-09-22T16:00:00.0000000",
            "timeZone": "UTC"
          },
          "start": {
            "dateTime": "2026-09-22T15:00:00.0000000",
            "timeZone": "UTC"
          },
          "status": "busy",
          "subject": "Q3 planning"
        }
      ]
    }
  ]
}

Get mail tips

Check recipients before sending: whether they have an out-of-office reply on, a full mailbox, or a message size limit.

Inputs

MailboxmailboxtextRequired
The mailbox to act on: a user's email address (userPrincipalName) or Microsoft user ID. App-only access has no signed-in user, so the mailbox must be named explicitly. It has to be a mailbox in the same Microsoft 365 tenant the app registration was consented in -- an outside address such as a personal Gmail or outlook.com account is not reachable this way. The picker is populated from the directory when the app has the optional User.Read.All permission; otherwise type the address.
Email addressesemail_addresseslistRequired
Recipient addresses to check.
Mail tips optionsmail_tips_optionslist
Which tips to request. Defaults to automatic replies and mailbox full status.One or more of: automaticReplies (Automatic replies), mailboxFullStatus (Mailbox full), maxMessageSize (Max message size), deliveryRestriction (Delivery restriction), recipientScope (Recipient scope), moderationStatus (Moderation status), totalMemberCount (Total members), externalMemberCount (External members), customMailTip (Custom mail tip).

Outputs

countnumber
Number returned.
mail_tipslist
One entry per requested address.
Example output
{
  "count": 1,
  "mail_tips": [
    {
      "automaticReplies": {
        "message": "I am on vacation right now."
      },
      "emailAddress": {
        "address": "danas@contoso.com",
        "name": ""
      },
      "mailboxFull": false
    }
  ]
}

Get mailbox settings

Read a mailbox's settings: automatic replies, time zone, language, date and time format, and working hours.

Inputs

MailboxmailboxtextRequired
The mailbox to act on: a user's email address (userPrincipalName) or Microsoft user ID. App-only access has no signed-in user, so the mailbox must be named explicitly. It has to be a mailbox in the same Microsoft 365 tenant the app registration was consented in -- an outside address such as a personal Gmail or outlook.com account is not reachable this way. The picker is populated from the directory when the app has the optional User.Read.All permission; otherwise type the address.

Outputs

automaticRepliesSettingobject
Out-of-office configuration.
languageobject
Locale information.
timeZonetext
Mailbox time zone.
workingHoursobject
Working days and hours.
Example output
{
  "automaticRepliesSetting": {
    "externalAudience": "none",
    "status": "disabled"
  },
  "language": {
    "displayName": "English (United States)",
    "locale": "en-US"
  },
  "timeZone": "Pacific Standard Time",
  "workingHours": {
    "daysOfWeek": [
      "monday",
      "tuesday",
      "wednesday",
      "thursday",
      "friday"
    ],
    "endTime": "17:00:00.0000000",
    "startTime": "09:00:00.0000000"
  }
}

Get message

Read a single message including its full body.

Inputs

MailboxmailboxtextRequired
The mailbox to act on: a user's email address (userPrincipalName) or Microsoft user ID. App-only access has no signed-in user, so the mailbox must be named explicitly. It has to be a mailbox in the same Microsoft 365 tenant the app registration was consented in -- an outside address such as a personal Gmail or outlook.com account is not reachable this way. The picker is populated from the directory when the app has the optional User.Read.All permission; otherwise type the address.
Message IDmessage_idtextRequired
The ID of the message.
Body formatbody_formattext
Convert the body to this format. Leave blank to keep the stored format.One of: text (Plain text), html.

Outputs

bodyPreviewtext
First 255 characters.
fromobject
Sender recipient object.
hasAttachmentstrue/false
Attachment present.
idtext
Message ID.
isReadtrue/false
Whether it has been read.
receivedDateTimetext
ISO 8601 timestamp.
subjecttext
Message subject.
webLinktext
Open in Outlook on the web.
Example output
{
  "bodyPreview": "Here are the notes from this morning's planning session...",
  "from": {
    "emailAddress": {
      "address": "alexw@contoso.com",
      "name": "Alex Wilbur"
    }
  },
  "hasAttachments": true,
  "id": "AAMkAGI2NGVhZTIyLTAzYzUt",
  "isRead": false,
  "receivedDateTime": "2026-09-18T14:02:11Z",
  "subject": "Q3 planning notes",
  "webLink": "https://outlook.office365.com/owa/?ItemID=AAMkAGI2NGVhZTIy"
}

Get message trace details

Get the per-hop delivery events for one traced message and recipient: where it was received, what was applied, and whether it was delivered. Needs the same permission and service principal as List message traces.

Inputs

Message trace IDmessage_trace_idtextRequired
The trace ID, from List message traces.
Recipient addressrecipient_addresstextRequired
The recipient whose delivery path to show, from the trace's recipient address in List message traces.

Outputs

countnumber
Number returned.
eventslist
Delivery events in order.
Example output
{
  "count": 2,
  "events": [
    {
      "action": "",
      "dateTime": "2026-09-17T10:30:05Z",
      "description": "Message received by: MN2PR00MB0670.namprd00.prod.outlook.com",
      "event": "Receive"
    },
    {
      "action": "",
      "dateTime": "2026-09-17T10:30:10Z",
      "description": "The message was successfully delivered.",
      "event": "Deliver"
    }
  ]
}

List attachments

List the attachments on a message, without their content.

Inputs

MailboxmailboxtextRequired
The mailbox to act on: a user's email address (userPrincipalName) or Microsoft user ID. App-only access has no signed-in user, so the mailbox must be named explicitly. It has to be a mailbox in the same Microsoft 365 tenant the app registration was consented in -- an outside address such as a personal Gmail or outlook.com account is not reachable this way. The picker is populated from the directory when the app has the optional User.Read.All permission; otherwise type the address.
Message IDmessage_idtextRequired
The ID of the message.

Outputs

attachmentslist
Attachment metadata.
countnumber
Number returned.
Example output
{
  "attachments": [
    {
      "contentType": "application/pdf",
      "id": "AAMkAGI2TG93AAA=",
      "isInline": false,
      "name": "q3-notes.pdf",
      "size": 84213
    }
  ],
  "count": 1
}

List calendars

List the calendars in a mailbox.

Inputs

MailboxmailboxtextRequired
The mailbox to act on: a user's email address (userPrincipalName) or Microsoft user ID. App-only access has no signed-in user, so the mailbox must be named explicitly. It has to be a mailbox in the same Microsoft 365 tenant the app registration was consented in -- an outside address such as a personal Gmail or outlook.com account is not reachable this way. The picker is populated from the directory when the app has the optional User.Read.All permission; otherwise type the address.
Limitlimitnumber
Maximum number of results to return (1-500).From 1 to 500. Default: 25.

Outputs

calendarslist
The mailbox's calendars.
countnumber
Number returned.
Example output
{
  "calendars": [
    {
      "canEdit": true,
      "id": "AAMkAGViNDU3AAAuAAA=",
      "isDefaultCalendar": true,
      "name": "Calendar"
    }
  ],
  "count": 1
}

List categories

List the categories defined in a mailbox's master list.

Inputs

MailboxmailboxtextRequired
The mailbox to act on: a user's email address (userPrincipalName) or Microsoft user ID. App-only access has no signed-in user, so the mailbox must be named explicitly. It has to be a mailbox in the same Microsoft 365 tenant the app registration was consented in -- an outside address such as a personal Gmail or outlook.com account is not reachable this way. The picker is populated from the directory when the app has the optional User.Read.All permission; otherwise type the address.

Outputs

categorieslist
The mailbox's categories.
countnumber
Number returned.
Example output
{
  "categories": [
    {
      "color": "preset0",
      "displayName": "Needs follow-up",
      "id": "5a9a6aa8-b65f-4357-b1f9-60c6bf6330d8"
    }
  ],
  "count": 1
}

List contact folders

List the contact folders in a mailbox.

Inputs

MailboxmailboxtextRequired
The mailbox to act on: a user's email address (userPrincipalName) or Microsoft user ID. App-only access has no signed-in user, so the mailbox must be named explicitly. It has to be a mailbox in the same Microsoft 365 tenant the app registration was consented in -- an outside address such as a personal Gmail or outlook.com account is not reachable this way. The picker is populated from the directory when the app has the optional User.Read.All permission; otherwise type the address.
Limitlimitnumber
Maximum number of results to return (1-500).From 1 to 500. Default: 25.

Outputs

countnumber
Number returned.
folderslist
The contact folders.
Example output
{
  "count": 1,
  "folders": [
    {
      "displayName": "Suppliers",
      "id": "AAMkAGE1Mjc1AAAuAAA="
    }
  ]
}

List contacts

List a mailbox's contacts, optionally within one contact folder or matching a search or filter.

Inputs

MailboxmailboxtextRequired
The mailbox to act on: a user's email address (userPrincipalName) or Microsoft user ID. App-only access has no signed-in user, so the mailbox must be named explicitly. It has to be a mailbox in the same Microsoft 365 tenant the app registration was consented in -- an outside address such as a personal Gmail or outlook.com account is not reachable this way. The picker is populated from the directory when the app has the optional User.Read.All permission; otherwise type the address.
Folder IDfolder_idtext
Contact folder to read. Leave blank for the default Contacts folder.
Searchsearchtext
Free-text search across the contact. Microsoft Graph cannot combine a search with a filter.
Filter queryfilter_querytext
OData $filter expression, for example "companyName eq 'Contoso'". With a filter, the limit applies before the results are sorted by name, so you get the first matches Exchange returns, sorted, rather than the alphabetically first matches.
Limitlimitnumber
Maximum number of results to return (1-500).From 1 to 500. Default: 25.

Outputs

contactslist
The matching contacts.
countnumber
Number returned.
Example output
{
  "contacts": [
    {
      "businessPhones": [
        "+1 425 555 0109"
      ],
      "companyName": "Contoso",
      "displayName": "Dana Swope",
      "emailAddresses": [
        {
          "address": "danas@contoso.com",
          "name": "Dana Swope"
        }
      ],
      "id": "AAMkAGE1Mjc1YmUwLTIzZjQt",
      "jobTitle": "Operations Lead"
    }
  ],
  "count": 1
}

List events

List calendar events. Supplying a start and end returns the calendar view, which expands recurring series into individual occurrences; without a range, a recurring series appears once as its master.

Inputs

MailboxmailboxtextRequired
The mailbox to act on: a user's email address (userPrincipalName) or Microsoft user ID. App-only access has no signed-in user, so the mailbox must be named explicitly. It has to be a mailbox in the same Microsoft 365 tenant the app registration was consented in -- an outside address such as a personal Gmail or outlook.com account is not reachable this way. The picker is populated from the directory when the app has the optional User.Read.All permission; otherwise type the address.
Calendar IDcalendar_idtext
Calendar to read. Leave blank for the default calendar.
Start date timestart_date_timedate and time
Start of the time range. Must be paired with an end.
End date timeend_date_timedate and time
End of the time range. Must be paired with a start.
Time zonetime_zonetext
Time zone for the supplied times, in Windows or IANA format, for example 'Pacific Standard Time' or 'America/Los_Angeles'. Defaults to UTC.
Filter queryfilter_querytext
OData $filter expression, for example "isCancelled eq false".
Limitlimitnumber
Maximum number of results to return (1-500).From 1 to 500. Default: 25.

Outputs

countnumber
Number returned.
eventslist
The matching events.
Example output
{
  "count": 1,
  "events": [
    {
      "attendees": [
        {
          "emailAddress": {
            "address": "alexw@contoso.com",
            "name": "Alex Wilbur"
          },
          "type": "required"
        }
      ],
      "end": {
        "dateTime": "2026-09-22T16:00:00.0000000",
        "timeZone": "UTC"
      },
      "id": "AAMkAGViNDU3ZDI4LTZmNzMt",
      "location": {
        "displayName": "Conference room 3"
      },
      "onlineMeeting": {
        "joinUrl": "https://teams.microsoft.com/l/meetup-join/19%3a..."
      },
      "start": {
        "dateTime": "2026-09-22T15:00:00.0000000",
        "timeZone": "UTC"
      },
      "subject": "Q3 planning",
      "webLink": "https://outlook.office365.com/calendar/item/AAMkAGViNDU3ZDI4"
    }
  ]
}

List Focused Inbox overrides

List the senders pinned to Focused or Other for this mailbox.

Inputs

MailboxmailboxtextRequired
The mailbox to act on: a user's email address (userPrincipalName) or Microsoft user ID. App-only access has no signed-in user, so the mailbox must be named explicitly. It has to be a mailbox in the same Microsoft 365 tenant the app registration was consented in -- an outside address such as a personal Gmail or outlook.com account is not reachable this way. The picker is populated from the directory when the app has the optional User.Read.All permission; otherwise type the address.

Outputs

countnumber
Number returned.
overrideslist
The mailbox's overrides.
Example output
{
  "count": 1,
  "overrides": [
    {
      "classifyAs": "focused",
      "id": "98f5bdef-576a-404d-a2ea-07a3cf11a9b9",
      "senderEmailAddress": {
        "address": "samanthab@contoso.com",
        "name": "Samantha Booth"
      }
    }
  ]
}

List inbox rules

List the inbox rules defined for a mailbox.

Inputs

MailboxmailboxtextRequired
The mailbox to act on: a user's email address (userPrincipalName) or Microsoft user ID. App-only access has no signed-in user, so the mailbox must be named explicitly. It has to be a mailbox in the same Microsoft 365 tenant the app registration was consented in -- an outside address such as a personal Gmail or outlook.com account is not reachable this way. The picker is populated from the directory when the app has the optional User.Read.All permission; otherwise type the address.

Outputs

countnumber
Number returned.
ruleslist
The inbox rules.
Example output
{
  "count": 1,
  "rules": [
    {
      "actions": {
        "moveToFolder": "AAMkAGI2AAAAAEMkAAB="
      },
      "conditions": {
        "subjectContains": [
          "invoice"
        ]
      },
      "displayName": "Invoices to Finance",
      "id": "AQAAAJ5dZqA=",
      "isEnabled": true,
      "sequence": 1
    }
  ]
}

List mail folders

List a mailbox's mail folders, or the child folders of one folder.

Inputs

MailboxmailboxtextRequired
The mailbox to act on: a user's email address (userPrincipalName) or Microsoft user ID. App-only access has no signed-in user, so the mailbox must be named explicitly. It has to be a mailbox in the same Microsoft 365 tenant the app registration was consented in -- an outside address such as a personal Gmail or outlook.com account is not reachable this way. The picker is populated from the directory when the app has the optional User.Read.All permission; otherwise type the address.
Parent folder IDparent_folder_idtext
List the children of this folder instead of the top level. Leave blank for top-level folders.
Include hiddeninclude_hiddentrue/false
Include folders marked hidden.Default: false.
Limitlimitnumber
Maximum number of results to return (1-500).From 1 to 500. Default: 25.

Outputs

countnumber
Number returned.
folderslist
The mail folders.
Example output
{
  "count": 1,
  "folders": [
    {
      "displayName": "Inbox",
      "id": "AAMkAGI2AAAAAEMkAAA=",
      "totalItemCount": 412,
      "unreadItemCount": 7
    }
  ]
}

List message traces

Trace what Exchange Online did with messages: delivered, failed, quarantined or filtered as spam. Tenant-wide rather than per-mailbox. Requires the optional ExchangeMessageTrace.Read.All permission and a service principal an administrator must provision. Throttled to 100 requests per 5 minutes, and available only in the global service. A newly sent message can take a few minutes to appear. For up to several hours after the service principal is created, calls can fail with service principal not found while it propagates.

Inputs

Sender addresssender_addresstext
Only messages from this address.
Recipient addressrecipient_addresstext
Only messages to this address.
Subject containssubject_containstext
Only messages whose subject contains this text.
Statusstatustext
Only messages with this delivery status.One of: delivered, pending, failed, quarantined, filteredAsSpam (Filtered as spam), expanded, gettingStatus (Getting status).
Start date timestart_date_timedate and time
Start of the window. Must be paired with an end, span at most 10 days, and start no more than 90 days ago.
End date timeend_date_timedate and time
End of the window. Must be paired with a start.
Limitlimitnumber
Maximum number of results to return (1-500).From 1 to 500. Default: 25.

Outputs

countnumber
Number returned.
traceslist
The matching message traces.
Example output
{
  "count": 1,
  "traces": [
    {
      "id": "4451a062-48cb-e80d-e8c0-196330437ae6",
      "receivedDateTime": "2026-09-17T10:30:00Z",
      "recipientAddress": "danas@contoso.com",
      "senderAddress": "alexw@contoso.com",
      "status": "delivered",
      "subject": "Quarterly Report"
    }
  ]
}

List messages

List messages in a mailbox, optionally limited to one folder, to unread messages, or to a search or filter expression. Results come back newest first.

Inputs

MailboxmailboxtextRequired
The mailbox to act on: a user's email address (userPrincipalName) or Microsoft user ID. App-only access has no signed-in user, so the mailbox must be named explicitly. It has to be a mailbox in the same Microsoft 365 tenant the app registration was consented in -- an outside address such as a personal Gmail or outlook.com account is not reachable this way. The picker is populated from the directory when the app has the optional User.Read.All permission; otherwise type the address.
Folder IDfolder_idtext
Folder to read from. Accepts a folder ID or a well-known name: inbox, drafts, sentitems, deleteditems, junkemail or archive. Leave blank to search the whole mailbox.
Searchsearchtext
Free-text search across the message. Microsoft Graph cannot combine a search with a filter or with 'unread only'.
Filter queryfilter_querytext
OData $filter expression, for example "importance eq 'high'". Results are still sorted newest first, so the filter needs no $orderby.
Unread onlyunread_onlytrue/false
Return only unread messages.Default: false.
Limitlimitnumber
Maximum number of results to return (1-500).From 1 to 500. Default: 25.

Outputs

countnumber
Number of messages returned.
messageslist
The matching messages.
Example output
{
  "count": 1,
  "messages": [
    {
      "bodyPreview": "Here are the notes from this morning's planning session...",
      "from": {
        "emailAddress": {
          "address": "alexw@contoso.com",
          "name": "Alex Wilbur"
        }
      },
      "hasAttachments": true,
      "id": "AAMkAGI2NGVhZTIyLTAzYzUt",
      "isRead": false,
      "receivedDateTime": "2026-09-18T14:02:11Z",
      "subject": "Q3 planning notes",
      "webLink": "https://outlook.office365.com/owa/?ItemID=AAMkAGI2NGVhZTIy"
    }
  ]
}

List room lists

List the room lists (building or floor groupings) defined in the tenant. Requires the optional Place.Read.All application permission.

Inputs

Limitlimitnumber
Maximum number of results to return (1-500).From 1 to 500. Default: 25.

Outputs

countnumber
Number returned.
room_listslist
The tenant's room lists.
Example output
{
  "count": 1,
  "room_lists": [
    {
      "displayName": "Building 2 rooms",
      "emailAddress": "building2rooms@contoso.com",
      "id": "3162F1E1-C4C0-604B-51D8-91DA78989EB1"
    }
  ]
}

List rooms

List bookable meeting rooms, tenant-wide or within one room list. Requires the optional Place.Read.All application permission. A room is a mailbox, so pair this with Get free/busy schedule to check availability and Create event to book one.

Inputs

Room listroom_listtext
SMTP address of a room list to search within. Leave blank for every room in the tenant.
Limitlimitnumber
Maximum number of results to return (1-500).From 1 to 500. Default: 25.

Outputs

countnumber
Number returned.
roomslist
The matching rooms.
Example output
{
  "count": 1,
  "rooms": [
    {
      "building": "Building 2",
      "capacity": 8,
      "displayName": "Conf Room Rainier",
      "emailAddress": "rainier@contoso.com",
      "floorNumber": 3,
      "id": "3162F1E1-C4C0-604B-51D8-91DA78989EB2"
    }
  ]
}

List users

List the mailboxes in the tenant. Requires the optional User.Read.All application permission; it is also what populates the mailbox picker on every other action.

Inputs

Searchsearchtext
Match against display name. Cannot be combined with a filter.
Filter queryfilter_querytext
OData $filter expression, for example "department eq 'Finance'".
Limitlimitnumber
Maximum number of results to return (1-500).From 1 to 500. Default: 25.

Outputs

countnumber
Number returned.
userslist
The matching users.
Example output
{
  "count": 1,
  "users": [
    {
      "department": "Operations",
      "displayName": "Alex Wilbur",
      "id": "8ae6f565-0d7f-4ead-853e-7db94c912a1f",
      "jobTitle": "Operations Lead",
      "mail": "alexw@contoso.com",
      "userPrincipalName": "alexw@contoso.com"
    }
  ]
}

Move message

Move a message to another folder. Microsoft Graph assigns the moved copy a new ID, which is returned.

Inputs

MailboxmailboxtextRequired
The mailbox to act on: a user's email address (userPrincipalName) or Microsoft user ID. App-only access has no signed-in user, so the mailbox must be named explicitly. It has to be a mailbox in the same Microsoft 365 tenant the app registration was consented in -- an outside address such as a personal Gmail or outlook.com account is not reachable this way. The picker is populated from the directory when the app has the optional User.Read.All permission; otherwise type the address.
Message IDmessage_idtextRequired
The ID of the message.
Destination folder IDdestination_folder_idtextRequired
Destination folder. Accepts a folder ID or a well-known name: inbox, drafts, sentitems, deleteditems, junkemail or archive.

Outputs

bodyPreviewtext
First 255 characters.
fromobject
Sender recipient object.
hasAttachmentstrue/false
Attachment present.
idtext
Message ID.
isReadtrue/false
Whether it has been read.
receivedDateTimetext
ISO 8601 timestamp.
subjecttext
Message subject.
webLinktext
Open in Outlook on the web.
Example output
{
  "bodyPreview": "Here are the notes from this morning's planning session...",
  "from": {
    "emailAddress": {
      "address": "alexw@contoso.com",
      "name": "Alex Wilbur"
    }
  },
  "hasAttachments": true,
  "id": "AAMkAGI2NGVhZTIyLTAzYzUt",
  "isRead": false,
  "receivedDateTime": "2026-09-18T14:02:11Z",
  "subject": "Q3 planning notes",
  "webLink": "https://outlook.office365.com/owa/?ItemID=AAMkAGI2NGVhZTIy"
}

Reply all to message

Reply to every recipient of a message. Success means Exchange accepted the message, not that it was delivered: a delivery failure arrives later as a bounce in the sender's inbox, and List message traces shows what happened.

Inputs

MailboxmailboxtextRequired
The mailbox to act on: a user's email address (userPrincipalName) or Microsoft user ID. App-only access has no signed-in user, so the mailbox must be named explicitly. It has to be a mailbox in the same Microsoft 365 tenant the app registration was consented in -- an outside address such as a personal Gmail or outlook.com account is not reachable this way. The picker is populated from the directory when the app has the optional User.Read.All permission; otherwise type the address.
Message IDmessage_idtextRequired
The ID of the message.
Commentcommenttext
Plain text to add above the quoted message.
HTML bodyhtml_bodytext
Formatted (HTML) version of the body. If provided, it is used instead of the plain text body.

Outputs

statustext
Operation status.
Example output
{
  "message_id": "AAMkAGI2NGVhZTIyLTAzYzUt",
  "status": "sent"
}

Reply to message

Reply to the sender of a message. The reply is saved in Sent Items. Success means Exchange accepted the message, not that it was delivered: a delivery failure arrives later as a bounce in the sender's inbox, and List message traces shows what happened.

Inputs

MailboxmailboxtextRequired
The mailbox to act on: a user's email address (userPrincipalName) or Microsoft user ID. App-only access has no signed-in user, so the mailbox must be named explicitly. It has to be a mailbox in the same Microsoft 365 tenant the app registration was consented in -- an outside address such as a personal Gmail or outlook.com account is not reachable this way. The picker is populated from the directory when the app has the optional User.Read.All permission; otherwise type the address.
Message IDmessage_idtextRequired
The ID of the message.
Commentcommenttext
Plain text to add above the quoted message.
HTML bodyhtml_bodytext
Formatted (HTML) version of the body. If provided, it is used instead of the plain text body.

Outputs

statustext
Operation status.
Example output
{
  "message_id": "AAMkAGI2NGVhZTIyLTAzYzUt",
  "status": "sent"
}

Respond to event

Accept, tentatively accept, or decline a meeting invitation as the invitee. The mailbox is the invitee's, and the event ID must come from their own calendar (List events on that mailbox); the organiser's ID for the same meeting will not work. A cancelled meeting cannot be responded to.

Inputs

MailboxmailboxtextRequired
The mailbox to act on: a user's email address (userPrincipalName) or Microsoft user ID. App-only access has no signed-in user, so the mailbox must be named explicitly. It has to be a mailbox in the same Microsoft 365 tenant the app registration was consented in -- an outside address such as a personal Gmail or outlook.com account is not reachable this way. The picker is populated from the directory when the app has the optional User.Read.All permission; otherwise type the address.
Event IDevent_idtextRequired
The ID of the calendar event.
ResponseresponsetextRequired
How to respond to the invitation.One of: accept, tentativelyAccept (Tentative), decline.
Commentcommenttext
Optional message to include.
Send responsesend_responsetrue/false
Send the reply to the organiser.Default: true.

Outputs

statustext
Operation status.
Example output
{
  "event_id": "AAMkAGViNDU3ZDI4LTZmNzMt",
  "status": "accept"
}

Send draft

Send a draft that was created earlier. The sent message gets a new ID in Sent Items, so the draft's ID stops working. Success means Exchange accepted the message, not that it was delivered: a delivery failure arrives later as a bounce in the sender's inbox, and List message traces shows what happened.

Inputs

MailboxmailboxtextRequired
The mailbox to act on: a user's email address (userPrincipalName) or Microsoft user ID. App-only access has no signed-in user, so the mailbox must be named explicitly. It has to be a mailbox in the same Microsoft 365 tenant the app registration was consented in -- an outside address such as a personal Gmail or outlook.com account is not reachable this way. The picker is populated from the directory when the app has the optional User.Read.All permission; otherwise type the address.
Message IDmessage_idtextRequired
The ID of the message.

Outputs

statustext
Operation status.
Example output
{
  "message_id": "AAMkAGI2NGVhZTIyLTAzYzUt",
  "status": "sent"
}

Send email

Send an email through Microsoft Outlook. Success means Exchange accepted the message, not that it was delivered: a delivery failure arrives later as a bounce in the sender's inbox, and List message traces shows what happened.

Inputs

SendersendertextRequired
The sender's email address or Microsoft sign-in name. Like the mailbox on other actions, it has to be a mailbox in the Microsoft 365 tenant the app was consented in.
TototextRequired
Comma-separated list of recipient email addresses.
SubjectsubjecttextRequired
Subject of the email.
BodybodytextRequired
Plain text body content of the email.
HTML bodyhtml_bodytext
Formatted (HTML) version of the email body. If provided, it is used instead of the plain text body.
Attachmentsattachmentslist
Files to attach. Upload a file or reference a document (or list of documents) from an earlier step. Microsoft Graph limits an attachment sent in a single request to under 3 MB; for a larger file, create a draft and use Add large attachment.
CCcctext
Comma-separated list of Cc recipients.
BCCbcctext
Comma-separated list of Bcc recipients.
Reply toreply_totext
Comma-separated addresses that replies should go to.
Importanceimportancetext
Importance of the item.One of: low, normal, high.
Save to sent itemssave_to_sent_itemstrue/false
Save a copy in the sender's Sent Items folder.Default: true.

Outputs

statustext
Send status.
Example output
{
  "status": "success"
}

Set automatic replies

Turn out-of-office automatic replies on, off, or on for a scheduled date range.

Inputs

MailboxmailboxtextRequired
The mailbox to act on: a user's email address (userPrincipalName) or Microsoft user ID. App-only access has no signed-in user, so the mailbox must be named explicitly. It has to be a mailbox in the same Microsoft 365 tenant the app registration was consented in -- an outside address such as a personal Gmail or outlook.com account is not reachable this way. The picker is populated from the directory when the app has the optional User.Read.All permission; otherwise type the address.
StatusstatustextRequired
Whether automatic replies are off, always on, or scheduled.One of: disabled (Off), alwaysEnabled (Always on), scheduled.
Internal reply messageinternal_reply_messagetext
Reply sent to people inside the organisation.
External reply messageexternal_reply_messagetext
Reply sent to people outside the organisation.
External audienceexternal_audiencetext
Who outside the organisation receives a reply.One of: none (Nobody), contactsOnly (Contacts only), all (Everyone).
Scheduled startscheduled_startdate and time
Start of the scheduled window. Required when status is 'scheduled'.
Scheduled endscheduled_enddate and time
End of the scheduled window. Required when status is 'scheduled'.
Time zonetime_zonetext
Time zone for the supplied times, in Windows or IANA format, for example 'Pacific Standard Time' or 'America/Los_Angeles'. Defaults to UTC.

Outputs

automaticRepliesSettingobject
The updated out-of-office configuration.
Example output
{
  "automaticRepliesSetting": {
    "externalAudience": "all",
    "externalReplyMessage": "I am out of the office until Monday.",
    "internalReplyMessage": "I am out of the office until Monday.",
    "scheduledEndDateTime": {
      "dateTime": "2026-09-28T17:00:00.0000000",
      "timeZone": "UTC"
    },
    "scheduledStartDateTime": {
      "dateTime": "2026-09-21T09:00:00.0000000",
      "timeZone": "UTC"
    },
    "status": "scheduled"
  }
}

Set Focused Inbox override

Always classify a sender's mail as Focused or as Other for this mailbox.

Inputs

MailboxmailboxtextRequired
The mailbox to act on: a user's email address (userPrincipalName) or Microsoft user ID. App-only access has no signed-in user, so the mailbox must be named explicitly. It has to be a mailbox in the same Microsoft 365 tenant the app registration was consented in -- an outside address such as a personal Gmail or outlook.com account is not reachable this way. The picker is populated from the directory when the app has the optional User.Read.All permission; otherwise type the address.
Sender addresssender_addresstextRequired
The sender the override applies to.
Classify asclassify_astextRequired
Where this sender's mail should land.One of: focused, other.
Sender namesender_nametext
Display name for the sender. Optional.

Outputs

classifyAstext
focused or other.
idtext
Override ID.
senderEmailAddressobject
The sender the rule applies to.
Example output
{
  "classifyAs": "focused",
  "id": "98f5bdef-576a-404d-a2ea-07a3cf11a9b9",
  "senderEmailAddress": {
    "address": "samanthab@contoso.com",
    "name": "Samantha Booth"
  }
}

Update contact

Update a contact. Only the fields you supply change.

Inputs

MailboxmailboxtextRequired
The mailbox to act on: a user's email address (userPrincipalName) or Microsoft user ID. App-only access has no signed-in user, so the mailbox must be named explicitly. It has to be a mailbox in the same Microsoft 365 tenant the app registration was consented in -- an outside address such as a personal Gmail or outlook.com account is not reachable this way. The picker is populated from the directory when the app has the optional User.Read.All permission; otherwise type the address.
Contact IDcontact_idtextRequired
The ID of the contact.
Given namegiven_nametext
First name.
Surnamesurnametext
Last name.
Display namedisplay_nametext
Name the contact is shown under. Include it whenever you update other fields, or Outlook may regenerate it.
Email addressesemail_addresseslist
Replaces the contact's email addresses.
Business phonesbusiness_phoneslist
Replaces the contact's business phone numbers.
Mobile phonemobile_phonetext
Mobile phone number.
Job titlejob_titletext
Job title.
Company namecompany_nametext
Company name.
Departmentdepartmenttext
Department.
Office locationoffice_locationtext
Office location.
Personal notespersonal_notestext
Free-text notes about the contact.
Categoriescategorieslist
Categories to assign. Each must already exist in the mailbox's category list.

Outputs

businessPhoneslist
Business phone numbers.
companyNametext
Company name.
displayNametext
Contact display name.
emailAddresseslist
Email addresses.
idtext
Contact ID.
jobTitletext
Job title.
Example output
{
  "businessPhones": [
    "+1 425 555 0109"
  ],
  "companyName": "Contoso",
  "displayName": "Dana Swope",
  "emailAddresses": [
    {
      "address": "danas@contoso.com",
      "name": "Dana Swope"
    }
  ],
  "id": "AAMkAGE1Mjc1YmUwLTIzZjQt",
  "jobTitle": "Operations Lead"
}

Update event

Update a calendar event. Only the fields you supply change.

Inputs

MailboxmailboxtextRequired
The mailbox to act on: a user's email address (userPrincipalName) or Microsoft user ID. App-only access has no signed-in user, so the mailbox must be named explicitly. It has to be a mailbox in the same Microsoft 365 tenant the app registration was consented in -- an outside address such as a personal Gmail or outlook.com account is not reachable this way. The picker is populated from the directory when the app has the optional User.Read.All permission; otherwise type the address.
Event IDevent_idtextRequired
The ID of the calendar event.
Subjectsubjecttext
New title for the event.
Start date timestart_date_timedate and time
New start time.
End date timeend_date_timedate and time
New end time.
Time zonetime_zonetext
Time zone for the supplied times, in Windows or IANA format, for example 'Pacific Standard Time' or 'America/Los_Angeles'. Defaults to UTC.
Bodybodytext
New plain text description.
HTML bodyhtml_bodytext
Formatted (HTML) version of the body. If provided, it is used instead of the plain text body.
Locationlocationtext
New location.
Attendeesattendeestext
Comma-separated attendee addresses. Replaces the whole attendee list.
Is all dayis_all_daytrue/false
Whether the event lasts all day.
Show asshow_astext
How the time appears to others.One of: free, tentative, busy, oof (Out of office), workingElsewhere (Working elsewhere).
Importanceimportancetext
Importance of the item.One of: low, normal, high.
Categoriescategorieslist
Categories to assign. Each must already exist in the mailbox's category list.

Outputs

attendeeslist
Attendee list.
endobject
End dateTimeTimeZone.
idtext
Event ID.
locationobject
Event location.
onlineMeetingobject
Join information.
startobject
Start dateTimeTimeZone.
subjecttext
Event subject.
webLinktext
Open in Outlook on the web.
Example output
{
  "attendees": [
    {
      "emailAddress": {
        "address": "alexw@contoso.com",
        "name": "Alex Wilbur"
      },
      "type": "required"
    }
  ],
  "end": {
    "dateTime": "2026-09-22T16:00:00.0000000",
    "timeZone": "UTC"
  },
  "id": "AAMkAGViNDU3ZDI4LTZmNzMt",
  "location": {
    "displayName": "Conference room 3"
  },
  "onlineMeeting": {
    "joinUrl": "https://teams.microsoft.com/l/meetup-join/19%3a..."
  },
  "start": {
    "dateTime": "2026-09-22T15:00:00.0000000",
    "timeZone": "UTC"
  },
  "subject": "Q3 planning",
  "webLink": "https://outlook.office365.com/calendar/item/AAMkAGViNDU3ZDI4"
}

Update message

Update a message: mark it read or unread, change its subject, importance, categories or follow-up flag.

Inputs

MailboxmailboxtextRequired
The mailbox to act on: a user's email address (userPrincipalName) or Microsoft user ID. App-only access has no signed-in user, so the mailbox must be named explicitly. It has to be a mailbox in the same Microsoft 365 tenant the app registration was consented in -- an outside address such as a personal Gmail or outlook.com account is not reachable this way. The picker is populated from the directory when the app has the optional User.Read.All permission; otherwise type the address.
Message IDmessage_idtextRequired
The ID of the message.
Is readis_readtrue/false
Mark the message as read (true) or unread (false).
Subjectsubjecttext
New subject for the message.
Importanceimportancetext
Importance of the item.One of: low, normal, high.
Categoriescategorieslist
Categories to assign. Each must already exist in the mailbox's category list.
Flag statusflag_statustext
Follow-up flag state.One of: notFlagged (Not flagged), flagged, complete.

Outputs

bodyPreviewtext
First 255 characters.
fromobject
Sender recipient object.
hasAttachmentstrue/false
Attachment present.
idtext
Message ID.
isReadtrue/false
Whether it has been read.
receivedDateTimetext
ISO 8601 timestamp.
subjecttext
Message subject.
webLinktext
Open in Outlook on the web.
Example output
{
  "bodyPreview": "Here are the notes from this morning's planning session...",
  "from": {
    "emailAddress": {
      "address": "alexw@contoso.com",
      "name": "Alex Wilbur"
    }
  },
  "hasAttachments": true,
  "id": "AAMkAGI2NGVhZTIyLTAzYzUt",
  "isRead": true,
  "receivedDateTime": "2026-09-18T14:02:11Z",
  "subject": "Q3 planning notes",
  "webLink": "https://outlook.office365.com/owa/?ItemID=AAMkAGI2NGVhZTIy"
}

On this page