Microsoft
Outlook mail, Outlook calendar, and OneDrive and Excel, connected with one Microsoft sign-in.
- Website
- microsoft.com
- Connects by
- Signing in with Microsoft
- Category
- Spreadsheets and databases, Email, Calendars and meetings, Files and docs, Chat, Projects and tasks, Developer tools
- Services
- 14
- Tools
- 9,499
| Service | Key | Website | Base URL |
|---|---|---|---|
| OneDrive and Excel | onedrive | onedrive.live.com | https://graph.microsoft.com/v1.0 |
| Outlook | outlook | outlook.com | https://graph.microsoft.com/v1.0 |
| Microsoft Bookings | microsoft-bookings | microsoft.com | https://graph.microsoft.com/v1.0 |
| Outlook calendar | outlook-calendar | outlook.com | https://graph.microsoft.com/v1.0 |
| OneNote | onenote | onenote.com | https://graph.microsoft.com/v1.0 |
| SharePoint | sharepoint | sharepoint.com | https://graph.microsoft.com/v1.0 |
| Microsoft Teams | teams | teams.microsoft.com | https://graph.microsoft.com/v1.0 |
| Microsoft 365 Education | microsoft-365-education | microsoft.com | https://graph.microsoft.com/v1.0 |
| Microsoft Planner | microsoft-planner | microsoft.com | https://graph.microsoft.com/v1.0 |
| Microsoft To Do | microsoft-todo | to-do.office.com | https://graph.microsoft.com/v1.0 |
| Microsoft 365 admin | microsoft-365-admin | microsoft.com | https://graph.microsoft.com/v1.0 |
| Microsoft Defender XDR | microsoft-defender | microsoft.com | https://graph.microsoft.com/v1.0 |
| Microsoft Entra ID | microsoft-entra | microsoft.com | https://graph.microsoft.com/v1.0 |
| Microsoft Intune | intune | microsoft.com | https://graph.microsoft.com/v1.0 |
Connecting
Your client presses Connect, signs in with a work, school or personal Microsoft account, and accepts the permissions for every service you asked for on one screen.
Microsoft also asks for two basic permissions: User.Read, to sign your client in and read their profile, and offline_access, so access can be renewed without them signing in again.
curl https://api.operate.as/v1/me/clients \ -H "Authorization: Bearer $OPERATE_AS_API_KEY"[ { "id": "6f1c2a7e-...", "name": "Miller Dental", "services": [ "onedrive", "outlook", "microsoft-bookings", "outlook-calendar", "onenote", "sharepoint", "teams", "microsoft-365-education", "microsoft-planner", "microsoft-todo", "microsoft-365-admin", "microsoft-defender", "microsoft-entra", "intune" ] }]Good to know
An admin may need to approve the app
In a company's Microsoft 365, an admin decides whether people can approve apps themselves. If that's turned off or limited, Microsoft tells your client they need an admin's approval, and they can't finish connecting. Their IT admin either grants consent for the whole organization, or approves your client's request if the company uses Microsoft's admin consent workflow. Then your client connects again from their link.
Any kind of Microsoft account
Your client can sign in with a work or school account from their organization's Microsoft 365, or a personal account such as Outlook.com.
One address, many services
Every Microsoft service uses Microsoft Graph, https://graph.microsoft.com/v1.0. The service key in your request decides which service you're calling, and so which permissions and API key scopes apply.
Each call carries access with only that service's permissions, so Microsoft itself enforces the boundary. An outlook call can read the client's mail, but Microsoft refuses it if it tries to reach their files or notes. A call to a service your client didn't approve on Microsoft's screen gets 409 with … hasn't approved …: send them their link to connect again.
A few paths reach another service's data. A call to one of them, whether from a tool or a pass-through request, needs a key that can use both services, and carries both services' permissions:
| Through | Also needs |
|---|---|
A SharePoint site's onenote, by path or $expand | onenote |
A Teams channel's filesFolder | sharepoint |
OneDrive reaches the client's own drive, /me/drive. Use sharepoint for document libraries.
Permissions
OneDrive and Excel
| What the client reads | Permission it asks for |
|---|---|
| See, add and edit your files and workbooks | Files.ReadWrite |
Outlook
| What the client reads | Permission it asks for |
|---|---|
| Read and organise your email | Mail.ReadWrite |
| Send email as you | Mail.Send |
| See, add and change your contacts | Contacts.ReadWrite |
Microsoft Bookings
| What the client reads | Permission it asks for |
|---|---|
| See and change your booking pages, services, staff and appointments | Bookings.ReadWrite.All |
Outlook calendar
| What the client reads | Permission it asks for |
|---|---|
| See, add and change your calendar events | Calendars.ReadWrite |
| See your organization's rooms and buildings | Place.Read.All |
OneNote
| What the client reads | Permission it asks for |
|---|---|
| See, add and change your notebooks | Notes.ReadWrite |
SharePoint
| What the client reads | Permission it asks for |
|---|---|
| See and edit files and lists in the sites you can open | Sites.ReadWrite.All |
Microsoft Teams
| What the client reads | Permission it asks for |
|---|---|
| See the teams you're in | Team.ReadBasic.All |
| See the channels in those teams | Channel.ReadBasic.All |
| Post messages to channels | ChannelMessage.Send |
| Read and send your chat messages | Chat.ReadWrite |
| See and schedule your Teams meetings | OnlineMeetings.ReadWrite |
| See transcripts of your Teams meetings | OnlineMeetingTranscript.Read.All |
| See recordings of your Teams meetings | OnlineMeetingRecording.Read.All |
Microsoft 365 Education
| What the client reads | Permission it asks for |
|---|---|
| See your classes and schools | EduRoster.ReadBasic |
| See and change your assignments and submissions | EduAssignments.ReadWrite |
Microsoft Planner
| What the client reads | Permission it asks for |
|---|---|
| See, add and change your plans and their tasks | Tasks.ReadWrite |
Microsoft To Do
| What the client reads | Permission it asks for |
|---|---|
| See, add and change your tasks | Tasks.ReadWrite |
Microsoft 365 admin
| What the client reads | Permission it asks for |
|---|---|
| See your organization's Microsoft 365 usage reports | Reports.Read.All |
| See Microsoft 365 service health | ServiceHealth.Read.All |
| See Microsoft 365 message center posts | ServiceMessage.Read.All |
| Create and manage your connections | ExternalConnection.ReadWrite.OwnedBy |
| Add and change items in your connections | ExternalItem.ReadWrite.OwnedBy |
| See your organization's printers | Printer.Read.All |
| See and send your print jobs | PrintJob.ReadWrite |
Microsoft Defender XDR
| What the client reads | Permission it asks for |
|---|---|
| See your organization's security alerts | SecurityAlert.Read.All |
| See your organization's security incidents | SecurityIncident.Read.All |
| See your organization's secure scores and security events | SecurityEvents.Read.All |
Microsoft Entra ID
| What the client reads | Permission it asks for |
|---|---|
| See the people in your organization | User.Read.All |
| See your organization's groups and their members | Group.Read.All |
| See your directory's roles and licenses | Directory.Read.All |
| See and change your organization's app registrations | Application.ReadWrite.All |
| See your organization's sign-in and audit logs | AuditLog.Read.All |
| See your organization's sign-in policies | Policy.Read.All |
| Change your Conditional Access policies | Policy.ReadWrite.ConditionalAccess |
| See and run your access reviews | AccessReview.ReadWrite.All |
| See and change your access packages | EntitlementManagement.ReadWrite.All |
| See and dismiss risky users | IdentityRiskyUser.ReadWrite.All |
| See risk detections | IdentityRiskEvent.Read.All |
Microsoft Intune
| What the client reads | Permission it asks for |
|---|---|
| See your organization's managed devices | DeviceManagementManagedDevices.Read.All |
| See your device compliance and configuration policies | DeviceManagementConfiguration.Read.All |
Tools
OneDrive and Excel
Install OneDrive and Excel's typed package for your language:
pip install operate-as-onedriveonedrive.drives_create_itemscurl -X POST https://api.operate.as/v1/actions/onedrive.drives_create_items \ -H "Authorization: Bearer $OPERATE_AS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "clientId": "6f1c2a7e-...", "input": {} }'Every input, with its JSON Schema: GET /v1/actions/onedrive.drives_create_items
{ "status": 200, "data": { "…": "the service's own response" }, "encoding": "json"}Outlook
Install Outlook's typed package for your language:
pip install operate-as-outlookoutlook.send_emailcurl -X POST https://api.operate.as/v1/actions/outlook.send_email \ -H "Authorization: Bearer $OPERATE_AS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "clientId": "6f1c2a7e-...", "input": { "to": "<to>", "subject": "<subject>", "body": "<body>" } }'| Input | Type | What it is |
|---|---|---|
torequired | string | Who to send it to |
subjectrequired | string | Subject |
bodyrequired | string | Text |
{ "status": 200, "data": { "…": "the service's own response" }, "encoding": "json"}Microsoft Bookings
Install Microsoft Bookings's typed package for your language:
pip install operate-as-microsoft-bookingsmicrosoft-bookings.get_count_appointments_205acurl -X POST https://api.operate.as/v1/actions/microsoft-bookings.get_count_appointments_205a \ -H "Authorization: Bearer $OPERATE_AS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "clientId": "6f1c2a7e-...", "input": { "booking_business_id": "<booking_business_id>" } }'Shows the required inputs. Every input, with its JSON Schema: GET /v1/actions/microsoft-bookings.get_count_appointments_205a
{ "status": 200, "data": { "…": "the service's own response" }, "encoding": "json"}Outlook calendar
Install Outlook calendar's typed package for your language:
pip install operate-as-outlook-calendaroutlook-calendar.get_count_attachments_1985curl -X POST https://api.operate.as/v1/actions/outlook-calendar.get_count_attachments_1985 \ -H "Authorization: Bearer $OPERATE_AS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "clientId": "6f1c2a7e-...", "input": { "event_id": "<event_id>" } }'Shows the required inputs. Every input, with its JSON Schema: GET /v1/actions/outlook-calendar.get_count_attachments_1985
{ "status": 200, "data": { "…": "the service's own response" }, "encoding": "json"}OneNote
Install OneNote's typed package for your language:
pip install operate-as-onenoteonenote.get_count_notebooks_6c1acurl -X POST https://api.operate.as/v1/actions/onenote.get_count_notebooks_6c1a \ -H "Authorization: Bearer $OPERATE_AS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "clientId": "6f1c2a7e-...", "input": {} }'Every input, with its JSON Schema: GET /v1/actions/onenote.get_count_notebooks_6c1a
{ "status": 200, "data": { "…": "the service's own response" }, "encoding": "json"}SharePoint
Install SharePoint's typed package for your language:
pip install operate-as-sharepointsharepoint.get_count_base_types_6b07curl -X POST https://api.operate.as/v1/actions/sharepoint.get_count_base_types_6b07 \ -H "Authorization: Bearer $OPERATE_AS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "clientId": "6f1c2a7e-...", "input": { "site_id": "<site_id>", "content_type_id": "<content_type_id>" } }'Shows the required inputs. Every input, with its JSON Schema: GET /v1/actions/sharepoint.get_count_base_types_6b07
{ "status": 200, "data": { "…": "the service's own response" }, "encoding": "json"}Microsoft Teams
Install Microsoft Teams's typed package for your language:
pip install operate-as-teamsteams.chats_chat_create_chatcurl -X POST https://api.operate.as/v1/actions/teams.chats_chat_create_chat \ -H "Authorization: Bearer $OPERATE_AS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "clientId": "6f1c2a7e-...", "input": {} }'Every input, with its JSON Schema: GET /v1/actions/teams.chats_chat_create_chat
{ "status": 200, "data": { "…": "the service's own response" }, "encoding": "json"}Microsoft 365 Education
Install Microsoft 365 Education's typed package for your language:
pip install operate-as-microsoft-365-educationmicrosoft-365-education.education_classes_assignments_create_catcurl -X POST https://api.operate.as/v1/actions/microsoft-365-education.education_classes_assignments_create_cat \ -H "Authorization: Bearer $OPERATE_AS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "clientId": "6f1c2a7e-...", "input": { "education_class_id": "<education_class_id>", "education_assignment_id": "<education_assignment_id>" } }'Shows the required inputs. Every input, with its JSON Schema: GET /v1/actions/microsoft-365-education.education_classes_assignments_create_cat
{ "status": 200, "data": { "…": "the service's own response" }, "encoding": "json"}Microsoft Planner
Install Microsoft Planner's typed package for your language:
pip install operate-as-microsoft-plannermicrosoft-planner.get_count_buckets_240acurl -X POST https://api.operate.as/v1/actions/microsoft-planner.get_count_buckets_240a \ -H "Authorization: Bearer $OPERATE_AS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "clientId": "6f1c2a7e-...", "input": { "planner_plan_id": "<planner_plan_id>" } }'Shows the required inputs. Every input, with its JSON Schema: GET /v1/actions/microsoft-planner.get_count_buckets_240a
{ "status": 200, "data": { "…": "the service's own response" }, "encoding": "json"}Microsoft To Do
Install Microsoft To Do's typed package for your language:
pip install operate-as-microsoft-todomicrosoft-todo.get_count_attachment_sessions_958acurl -X POST https://api.operate.as/v1/actions/microsoft-todo.get_count_attachment_sessions_958a \ -H "Authorization: Bearer $OPERATE_AS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "clientId": "6f1c2a7e-...", "input": { "todo_task_list_id": "<todo_task_list_id>", "todo_task_id": "<todo_task_id>" } }'Shows the required inputs. Every input, with its JSON Schema: GET /v1/actions/microsoft-todo.get_count_attachment_sessions_958a
{ "status": 200, "data": { "…": "the service's own response" }, "encoding": "json"}Microsoft 365 admin
Install Microsoft 365 admin's typed package for your language:
pip install operate-as-microsoft-365-adminmicrosoft-365-admin.admin_admin_get_admincurl -X POST https://api.operate.as/v1/actions/microsoft-365-admin.admin_admin_get_admin \ -H "Authorization: Bearer $OPERATE_AS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "clientId": "6f1c2a7e-...", "input": {} }'Every input, with its JSON Schema: GET /v1/actions/microsoft-365-admin.admin_admin_get_admin
{ "status": 200, "data": { "…": "the service's own response" }, "encoding": "json"}Microsoft Defender XDR
Install Microsoft Defender XDR's typed package for your language:
pip install operate-as-microsoft-defendermicrosoft-defender.get_count_additional_sources_f0d1curl -X POST https://api.operate.as/v1/actions/microsoft-defender.get_count_additional_sources_f0d1 \ -H "Authorization: Bearer $OPERATE_AS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "clientId": "6f1c2a7e-...", "input": { "ediscovery_case_id": "<ediscovery_case_id>", "ediscovery_search_id": "<ediscovery_search_id>" } }'Shows the required inputs. Every input, with its JSON Schema: GET /v1/actions/microsoft-defender.get_count_additional_sources_f0d1
{ "status": 200, "data": { "…": "the service's own response" }, "encoding": "json"}Microsoft Entra ID
Install Microsoft Entra ID's typed package for your language:
pip install operate-as-microsoft-entramicrosoft-entra.applications_application_add_keycurl -X POST https://api.operate.as/v1/actions/microsoft-entra.applications_application_add_key \ -H "Authorization: Bearer $OPERATE_AS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "clientId": "6f1c2a7e-...", "input": { "application_id": "<application_id>" } }'Shows the required inputs. Every input, with its JSON Schema: GET /v1/actions/microsoft-entra.applications_application_add_key
{ "status": 200, "data": { "…": "the service's own response" }, "encoding": "json"}Microsoft Intune
Install Microsoft Intune's typed package for your language:
pip install operate-as-intuneintune.device_management_apple_push_notification_certificate_dowcurl -X POST https://api.operate.as/v1/actions/intune.device_management_apple_push_notification_certificate_dow \ -H "Authorization: Bearer $OPERATE_AS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "clientId": "6f1c2a7e-...", "input": {} }'Every input, with its JSON Schema: GET /v1/actions/intune.device_management_apple_push_notification_certificate_dow
{ "status": 200, "data": { "…": "the service's own response" }, "encoding": "json"}Pass-through
Paths continue from https://graph.microsoft.com/v1.0. me is the signed-in client.
See Pass-through requests for the full request and response format.
GET /v1/clients/{clientId}/outlook/me/messages?$top=10
GET /v1/clients/{clientId}/outlook-calendar/me/events?$top=10
GET /v1/clients/{clientId}/onedrive/me/drive/root/childrenGET /v1/clients/{clientId}/outlook/me/messages?$top=10
Authorization: Bearer oa_...When access ends
| How long access lasts | 60 to 90 minutes at a time. Operate As renews it before it runs out and checks every connection daily. |
| Renewal | The renewal key stops working after 90 days unused. Daily renewal keeps it in use. |
| What ends it | Your client removes the app from their account or their organization's app list, or an admin revokes their sessions or resets their password. |
| When it's removed | Microsoft has no way for an app to cancel its own access, so we delete our copy. Your client removes the app in their Microsoft account's app permissions. |
See Keeping access alive and Removing access.
HTTP/1.1 409 ConflictContent-Type: application/json{ "detail": "Miller Dental's Microsoft access ended. Send them their link to reconnect."}{ "id": "evt_3f9a1c…", "type": "connection.expired", "createdAt": "2026-10-16T08:00:00+00:00", "data": { "clientId": "6f1c2a7e-...", "clientName": "Miller Dental", "provider": "microsoft", "services": [ "onedrive", "outlook", "microsoft-bookings", "outlook-calendar", "onenote", "sharepoint", "teams", "microsoft-365-education", "microsoft-planner", "microsoft-todo", "microsoft-365-admin", "microsoft-defender", "microsoft-entra", "intune" ], "reconnectUrl": "https://…" }}