Everything an AI agent can do with the Microsoft Outlook API.

A reference guide for building AI agents: every method, how to authenticate, and the permissions each one needs.

Endpoints30
API versionv1.0
Last updated23 June 2026
Orientation

How the Microsoft Outlook API works.

The Microsoft Outlook API is how an app or AI agent works with a user's Outlook mailbox: listing and reading messages, sending and replying to mail, creating and updating calendar events, and managing contacts. Access is granted through an OAuth 2.0 token and a set of Microsoft Graph permissions that decide which mailbox a call can reach and whether it can read or write, with sending mail gated by its own permission. Outlook can also push a change notification when a message, event, or contact changes, so an agent learns of activity without polling.

30Endpoints
5Capability groups
9Read
21Write
8Permissions
Authentication
Outlook is part of Microsoft Graph, and every call carries an OAuth 2.0 bearer token from the Microsoft identity platform as 'Authorization: Bearer '. A delegated token acts on behalf of a signed-in user and reaches that user's own mailbox; an app-only token acts as the application itself, and its tenant-wide .All permissions are what let an agent reach mailboxes other than the signed-in user's. Personal Outlook.com accounts use delegated tokens only.
Permissions
Access is governed by Microsoft Graph permissions scoped to the Outlook surface. Mail uses Mail.ReadBasic and Mail.Read for reading, Mail.ReadWrite for changing drafts and folders, and a separate Mail.Send for sending, which read permissions do not grant. Calendar uses Calendars.Read and Calendars.ReadWrite, and contacts use Contacts.Read and Contacts.ReadWrite. Each permission exists in a delegated and an application form, the application form often suffixed with .All, and an app is limited to the permissions an administrator or user has consented to.
Versioning
Microsoft Graph has two named endpoints rather than dated versions. The v1.0 endpoint is the production version that this reference covers, and a beta endpoint carries early features that may change and is not supported in production. Microsoft declares a version or API deprecated at least 24 months before retiring it, and tracks changes in the Microsoft Graph changelog.
Data model
The Outlook surface of Microsoft Graph is resource-oriented JSON over HTTPS. A mailbox holds mailFolders such as Inbox and Sent Items, and each folder holds messages; a calendar holds events; and the mailbox holds contacts. Resources are addressed under /me for the signed-in user or /users/{id} for a named user, well-known folder names like inbox stand in for folder ids, and a state change can be pushed to a subscription as a change notification instead of being polled.
Connect & authenticate

Connection & authentication methods.

How an app or AI agent connects to Microsoft Outlook determines what it can reach. Outlook is part of Microsoft Graph, so a call goes through one route for making requests and one for receiving events, each governed by an access token and the permissions that token carries.

Ways to connect

Microsoft Graph REST API

Outlook mail, calendar, and contacts are reached through Microsoft Graph, a single REST API for Microsoft 365 data. A call sends and receives JSON over HTTPS, authenticates with an OAuth 2.0 bearer token from the Microsoft identity platform, and addresses Outlook data under the signed-in user at /me or a named user at /users/{id}. The production endpoint is https://graph.microsoft.com/v1.0.

Best forConnecting an app or AI agent to Microsoft Outlook.
Governed byThe access token and the Graph permissions it carries.
Docs ↗

Change notifications (webhooks)

Microsoft Graph delivers a change notification to a registered HTTPS notification URL when an Outlook message, event, or contact is created, updated, or deleted. A subscription names the resource, the changeType, and the URL, and Graph validates the URL before it starts sending. A subscription expires and must be renewed before it lapses.

Best forReceiving Outlook changes at an app or AI agent without polling.
Governed byThe read permission on the watched resource, plus the subscription's client state.
Docs ↗

Microsoft MCP Server for Enterprise (Model Context Protocol)

Microsoft's first-party MCP server at https://mcp.svc.cloud.microsoft/enterprise lets an AI agent query Microsoft Graph in natural language, with tools microsoft_graph_suggest_queries, microsoft_graph_get, and microsoft_graph_list_properties. It is in public preview, and its current scope is read-only Microsoft Entra identity and directory data, not the Outlook mail and calendar surface, which is reached through the Graph REST API. Every call honors the user's roles and granted scopes.

Best forRead-only natural-language queries over Microsoft Entra data through MCP.
Governed byThe user's roles and the scopes granted to the MCP client.
Docs ↗
Authentication

Delegated (work or school account)

A delegated token represents a signed-in user, so a call can do only what both the app's permissions and that user allow. Delegated access reaches the signed-in user's own mailbox; it cannot subscribe to or act on another user's mailbox unless that mailbox is explicitly shared or delegated.

TokenOAuth 2.0 bearer token (delegated)
Best forActing on behalf of a signed-in user
Docs ↗

Application (app-only)

An app-only token represents the application itself with no user present, using permissions like Mail.Read or Mail.Send that an administrator consents to. App-only permissions ending in .All can reach any mailbox in the tenant, so application access is what an agent uses to watch or act on mailboxes other than the signed-in user's. Exchange application access policies can scope which mailboxes an app reaches.

TokenOAuth 2.0 bearer token (client credentials)
Best forBackground services and tenant-wide automation
Docs ↗

Delegated (personal Microsoft account)

A personal Microsoft account, such as an outlook.com mailbox, signs in through the same OAuth 2.0 flow and uses the same delegated mail, calendar, and contacts permissions as a work or school account. App-only access is not available for personal accounts.

TokenOAuth 2.0 bearer token (delegated)
Best forConsumer Outlook.com mailboxes
Docs ↗
Endpoint reference

Every Microsoft Outlook API method.

Filter by method, access, or permission, or search any path. Select a row for version detail, rate limits, the related webhook event, and the source.

MethodEndpointWhat it doesAccessPermissionVersion

Messages

List, read, create, update, and delete messages, and send, reply, reply-all, forward, move, and copy them.12

Mail.ReadBasic is the least-privileged delegated and application permission and excludes the message body; Mail.Read returns the full message. The application permission is Mail.ReadBasic.All.

Acts onmessage
Permission (capability)Mail.ReadBasic
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

A well-known folder name like inbox, drafts, or sentitems can be used in place of the folder id.

Acts onmessage
Permission (capability)Mail.ReadBasic
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Mail.Read returns the full message including the body. The application permission is Mail.Read.

Acts onmessage
Permission (capability)Mail.Read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Creating a draft does not send it; sending needs Mail.Send. The application permission is Mail.ReadWrite.

Acts onmessage
Permission (capability)Mail.ReadWrite
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Mail.Send is the only permission, delegated and application. It returns 202 Accepted, which confirms the request was accepted, not that delivery completed.

Acts onmessage
Permission (capability)Mail.Send
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitUp to 150 MB of message content per 5 minutes per mailbox.

Sends the draft and saves it to Sent Items. The application permission is Mail.Send.

Acts onmessage
Permission (capability)Mail.Send
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Sends immediately. To draft a reply for later editing, use createReply instead, which needs Mail.ReadWrite.

Acts onmessage
Permission (capability)Mail.Send
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Sends immediately to every recipient on the original message.

Acts onmessage
Permission (capability)Mail.Send
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Sends immediately. To draft a forward for later, use createForward, which needs Mail.ReadWrite.

Acts onmessage
Permission (capability)Mail.Send
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

The application permission is Mail.ReadWrite.

Acts onmessage
Permission (capability)Mail.ReadWrite
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Moving assigns the message a new id in the destination folder.

Acts onmessage
Permission (capability)Mail.ReadWrite
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

A standard delete is recoverable from Deleted Items; permanentDelete bypasses that.

Acts onmessage
Permission (capability)Mail.ReadWrite
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Mail folders

List, read, create, update, and delete mail folders such as Inbox, Drafts, and Sent Items.5

Hidden folders are excluded unless the includeHiddenFolders=true query parameter is used. The application permission is Mail.ReadBasic.All.

Acts onmailFolder
Permission (capability)Mail.ReadBasic
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

A well-known name like inbox or drafts works in place of the folder id.

Acts onmailFolder
Permission (capability)Mail.ReadBasic
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

The isHidden property can be set only at creation and cannot be changed by a later update.

Acts onmailFolder
Permission (capability)Mail.ReadWrite
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

The application permission is Mail.ReadWrite.

Acts onmailFolder
Permission (capability)Mail.ReadWrite
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Deletes the folder along with the messages it holds.

Acts onmailFolder
Permission (capability)Mail.ReadWrite
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Calendar & events

List, read, create, update, and delete calendar events, and accept, tentatively accept, or decline meeting invitations.6

Returns single instances and recurring-series masters. The application permission is Calendars.Read.

Acts onevent
Permission (capability)Calendars.Read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

The application permission is Calendars.Read.

Acts onevent
Permission (capability)Calendars.Read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Adding attendees sends them a meeting invitation. The application permission is Calendars.ReadWrite.

Acts onevent
Permission (capability)Calendars.ReadWrite
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Updating a meeting can send an update to attendees.

Acts onevent
Permission (capability)Calendars.ReadWrite
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Deleting a meeting the user organizes cancels it for attendees.

Acts onevent
Permission (capability)Calendars.ReadWrite
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Companion actions decline and tentativelyAccept respond the other ways. Applies to user calendars only.

Acts onevent
Permission (capability)Calendars.ReadWrite
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Contacts

List, read, create, update, and delete the contacts in a user's mailbox.5

The application permission is Contacts.Read.

Acts oncontact
Permission (capability)Contacts.Read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

The application permission is Contacts.Read.

Acts oncontact
Permission (capability)Contacts.Read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

The application permission is Contacts.ReadWrite.

Acts oncontact
Permission (capability)Contacts.ReadWrite
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Include displayName in an update to preserve a value that would otherwise be regenerated.

Acts oncontact
Permission (capability)Contacts.ReadWrite
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

The application permission is Contacts.ReadWrite.

Acts oncontact
Permission (capability)Contacts.ReadWrite
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Change notifications

Create and delete subscriptions that push change notifications for Outlook messages, events, and contacts.2

The permission matches the resource being watched: Mail.Read for messages, Calendars.Read for events, Contacts.Read for contacts. A subscription has an expiry and must be renewed.

Acts onsubscription
Permission (capability)Mail.Read
VersionAvailable since the API’s base version
Webhook eventoutlook-changed
Rate limitStandard limits apply

Stops delivery to the notification URL registered on the subscription.

Acts onsubscription
Permission (capability)Mail.Read
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply
No endpoints match those filters.
Webhooks

Webhook events.

Microsoft Graph can notify an app or AI agent when an Outlook message, event, or contact is created, updated, or deleted, instead of the app polling for changes. A subscription registers a notification URL, and Graph posts a change notification to it when the chosen change happens.

EventWhat it signalsTriggered by
created / updated / deletedFires when an Outlook message, event, or contact is created, updated, or deleted, for whichever changeType the subscription requested. Microsoft Graph posts a change notification to the subscription's notification URL, identifying the resource and the change./subscriptions
No events match that search.
Rate limits & pagination

Rate limits, pagination & request size.

Microsoft Graph limits how fast and how much an app or AI agent can call Outlook, through a per-mailbox request budget for each application and a separate cap on how many requests run at once against one mailbox.

Request rate

The Outlook service applies its limits to each combination of application and mailbox, so a budget belongs to one app accessing one user's or group's mailbox, and going over for one mailbox does not affect the app's access to another. An application is allowed up to 10,000 requests every 10 minutes per mailbox, and no more than 4 requests can run at once against a single mailbox. These are fixed service limits and are not raised on request. Microsoft Graph signals throttling with HTTP 429 and a Retry-After header in seconds, on top of which Exchange Online applies its own delivery and sending limits to mail that is sent.

Pagination

Collection responses are paged. A list of messages defaults to 10 items and can be raised up to 1,000 with $top. When more results remain, the response includes an @odata.nextLink URL, which should be followed exactly as returned to get the next page rather than rebuilding it by hand, since it encodes server-side paging state. Outlook resources also support delta query to track only what changed since a previous call.

Request size

A single message can have at most 500 recipients across the To, Cc, and Bcc fields, and an event at most 500 attendees. Sending mail is held to 150 MB of message content per 5 minutes per mailbox. A request that returns a large page of full message bodies can hit a gateway timeout, so $select is used to return only the needed properties.

Errors

Status codes & error handling.

The status codes an agent should handle, and what to do about each.

StatusCodeMeaningWhat to do
400badRequestThe request is malformed or incorrect, such as an invalid body or query, or invalid base64 MIME content on a send.Read the error code and message, correct the request, and resend. The request is not retryable as-is.
401InvalidAuthenticationTokenRequired authentication information is missing or the access token is invalid or expired.Acquire a fresh token from the Microsoft identity platform and send it in the Authorization header.
403accessDeniedAccess is denied. The token lacks the required permission or the user lacks a needed license, or a conditional access policy blocked the call.Grant the missing Graph permission and consent to it, then confirm the user has access to the mailbox.
404itemNotFoundThe requested resource does not exist, or the token cannot see it.Confirm the path and id, and that the token has access to the mailbox and resource.
429TooManyRequestsThe app has been throttled for exceeding a per-mailbox or service limit. The response carries a Retry-After header.Wait the number of seconds in the Retry-After header before retrying, and reduce the request rate.
503serviceUnavailableThe service is temporarily unavailable for maintenance or is overloaded.Retry after the delay in the Retry-After header, or use exponential backoff if none is present.
Versioning & freshness

Version history.

Microsoft Graph has two named endpoints. The v1.0 endpoint is the production version covered here, and a separate beta endpoint carries early features that are not supported for production use.

Version history

What changed, and when

Latest versionv1.0
v1.0Current version
Microsoft Graph v1.0 (current production endpoint)

The v1.0 endpoint at https://graph.microsoft.com/v1.0 is the generally available, production-ready version of Microsoft Graph, including the Outlook mail, calendar, and contacts APIs. Microsoft Graph uses two named endpoints, v1.0 and beta, rather than dated versions; new features generally debut in beta and are promoted into v1.0 when ready. A version or API is declared deprecated at least 24 months before it is retired.

What changed
  • Outlook mail, calendar, and contacts available as generally available Microsoft Graph resources
  • Change notifications supported for messages, events, and contacts through subscriptions
  • Delta query supported to track incremental changes to Outlook resources
beta
Microsoft Graph beta endpoint

The beta endpoint at https://graph.microsoft.com/beta carries APIs and features that are in development. Breaking changes and deprecations can happen on beta without notice, and Microsoft does not support its use in production. Outlook features that are still previewing appear here before any promotion to v1.0.

What changed
  • Early and preview Outlook features land here before v1.0
  • Breaking changes can be introduced without notice
  • Not supported for production use

A deprecated version or method is supported for at least 24 months after the deprecation is announced.

Microsoft Graph changelog ↗
Questions

Microsoft Outlook API, answered.

Is the Outlook API a separate API, or part of Microsoft Graph?+
Outlook mail, calendar, and contacts are reached through Microsoft Graph, the single API for Microsoft 365 data, under the message, mailFolder, event, and contact resources. The older standalone Outlook REST API has been consolidated into Microsoft Graph, so new integrations call Graph at the v1.0 endpoint. The resource shapes and most operations are the same, addressed under /me or /users/{id}.
What's the difference between delegated and application permissions?+
A delegated permission lets the app act on behalf of a signed-in user, so it reaches that user's own mailbox and is limited to what both the app and the user can do. An application permission lets the app act as itself with no user present, and its tenant-wide forms ending in .All can reach any mailbox, which is how an agent watches or acts on mailboxes other than the signed-in user's. Application access is consented to by an administrator and can be narrowed with Exchange application access policies.
Which permission does an agent need to send mail?+
Sending mail needs Mail.Send, which is a separate permission from the read and read-write mail permissions. Mail.Read and Mail.ReadWrite let an agent read messages and edit drafts and folders, but neither one can send. The sendMail call returns 202 Accepted, which confirms the request was accepted for delivery, not that the message has been delivered.
How does an agent receive Outlook changes without polling?+
Microsoft Graph change notifications push an event to a registered HTTPS URL when a message, event, or contact is created, updated, or deleted. An agent creates a subscription naming the resource, the changeType, and the notification URL, and Graph validates the URL before sending. A subscription has a limited lifetime and must be renewed before it expires, and delta query is available to catch up on changes between notifications.
What are the rate limits for Outlook through Microsoft Graph?+
The Outlook service limits each combination of application and mailbox to 10,000 requests every 10 minutes, with no more than 4 requests running at once against a single mailbox. Exceeding the limit for one mailbox does not affect access to another. When throttled, Graph returns HTTP 429 with a Retry-After header giving the seconds to wait, and Exchange Online applies its own limits to mail that is sent.
Does Microsoft have an official MCP server for Outlook?+
Microsoft offers a first-party MCP server, the Microsoft MCP Server for Enterprise, which lets an AI agent query Microsoft Graph in natural language. It is in public preview and its current scope is read-only Microsoft Entra identity and directory data, not Outlook mail and calendar, so Outlook work goes through the Graph REST API. Several non-Microsoft MCP servers wrap the Graph Outlook endpoints, but those are not first-party.
Related

More communication API guides for agents

What is Bollard AI?

Control what every AI agent can do in Microsoft Outlook.

Bollard AI sits between a team's AI agents and Microsoft Outlook. Grant each agent exactly the access it needs, read or write, resource by resource, and every call is checked and logged.

  • Set read, write, or full access per agent, never a shared Microsoft account.
  • Denied by default, so an agent reaches only what has been explicitly allowed.
  • Every call recorded in plain English: who, what, where, and the decision.
Microsoft Outlook
Inbox Agent
Read inbox messages ResourceOffReadFull use
Send mail ActionOffReadFull use
Calendar events ResourceOffReadFull use
Per-agent access, set in Bollard AI, not in Microsoft Outlook