Integrations
Outlook Calendar
An Outlook Calendar integration connects one person's Microsoft 365 calendar to Mobius. Agents can list what is on it, book a meeting, move or cancel one, and ask when a group of people is free. When something on that calendar changes, Mobius records a source event that a routine or trigger can react to.
Use it when the work involves meetings: an agent that books the follow-up call a support thread asked for, one that posts tomorrow's schedule every evening, or one that watches for a cancelled customer meeting and tells the account owner.
Mobius uses one Microsoft app registration for every Microsoft provider, so a person's calendar connection and their Outlook mailbox connection share the same underlying grant. Disconnecting one does not revoke the other.
Capability map
| Capability | Value |
|---|---|
| Provider ID | outlook_calendar |
| Auth kind | oauth2_user |
| Connect flow | Microsoft sign-in (user grant) |
| Actions | Yes |
| Events | Yes |
| Webhook delivery | Yes |
| Live status | Yes |
Connect Outlook Calendar
| Surface | Support |
|---|---|
| App | Open Library > Integrations, choose Outlook Calendar, then sign in and pick the work account whose calendar you want. |
| CLI | The mobius CLI does not connect Outlook Calendar integrations yet. Use the app or API. |
| API | Call POST /v1/integrations/providers/outlook_calendar/connect with an empty JSON body, then send the person to the returned Microsoft URL. |
A calendar belongs to the person who connected it, not to the whole organization. Connecting a second account adds a second connection rather than replacing the first, and reconnecting refreshes the connection that account already has. Mobius matches on the account's directory object ID, so someone who changes their name or email address keeps the connection they had.
Microsoft always shows the account chooser, even when the browser is already signed in to a work account. Pick deliberately: the account you choose is the one every action runs as.
On connect, Mobius creates a change subscription for that account's default calendar and records where the calendar stood, so a later outage has a point to catch up from. Microsoft expires these subscriptions on a schedule of its own, and a lapsed one cannot be extended, only replaced. Mobius therefore renews each one with hours to spare rather than at the last moment.
Your Microsoft administrator may need to approve Mobius first
Calendar read and write access is not one of the permissions a Microsoft 365 tenant hands out on an individual's say-so. In a tenant configured the default way, the first person to connect sees a message telling them to ask an administrator, and nobody can connect until an administrator approves Mobius once for the whole tenant. That approval is a one-time step, and after it every person connects on their own.
Permissions
Mobius requests Calendars.ReadWrite, which covers reading events, writing
them, and the change subscription. It also requests User.Read to learn the
account's name and address for display.
Free/busy answers are limited to what the connected account can already see. Asking about a colleague whose calendar is not shared returns that person's row with an error on it rather than failing the whole lookup, so a request covering five people still answers for the four it can read.
Events
outlook_calendar.event.changedOne event covers the whole life of a calendar entry. Microsoft says which of
the three things happened, and the payload carries it as change_type:
change_type | Sent when |
|---|---|
created | An event was added to the watched calendar. |
updated | An existing event changed, including being cancelled by its organizer. |
deleted | An event was removed from the calendar. |
A created or updated payload carries the event's subject, start, end,
location, organizer, attendees, free/busy marking, join URL, web link, and
timestamps. A deleted payload carries only the calendar and the event ID,
because the event no longer exists to read.
Filter on change_type when a routine cares about one kind of change. A
routine that welcomes new bookings wants created; one that alerts on
cancellations wants updated with is_cancelled true, plus deleted.
Actions
outlook_calendar.event.create
outlook_calendar.event.delete
outlook_calendar.event.get
outlook_calendar.event.list
outlook_calendar.event.update
outlook_calendar.freebusy.queryEvery action works on the account's default calendar unless the input names a
calendar_id, in which case it works on that calendar if the account can see
it.
outlook_calendar.event.update changes only the fields it is given. Sending
just a new subject leaves the times, attendees, and body exactly as they
were.
outlook_calendar.event.delete is marked destructive because deleting an event
the connected account organizes cancels it for everyone who was invited.
outlook_calendar.event.list returns each occurrence of a recurring meeting
when the input gives both time_min and time_max. Without both bounds it
returns the series itself as a single entry, which is rarely what you want for
"what is on my calendar next week". Narrow the results further with an OData
filter such as showAs eq 'busy'.
Times come back in UTC. When writing an event you can supply either a full
RFC 3339 timestamp such as 2026-09-10T14:00:00Z, which Mobius converts, or a
local time plus a zone name such as America/New_York.
Creating or editing a recurring series is not supported yet. Actions work on single events and on individual occurrences of a series.
Troubleshooting
The live status says the subscription expired
Microsoft expires calendar subscriptions on a fixed schedule. Mobius renews each one before that happens, but a deployment outage or an unreachable callback URL can let one lapse. The renewal runner recreates it on its next pass, and reconnecting does it immediately.
A meeting changed but no event was recorded
Microsoft sends a notification carrying the event's ID, and Mobius then fetches the event itself. If the event was deleted in the moment between those two steps, there is nothing to fetch and nothing is recorded. Recurring series are another case: an edit to one occurrence reports that occurrence, not the whole series.
Nothing arrived while Mobius was down
After a delivery gap Mobius replays the events that changed since its last recorded point, so created and updated events catch up on the next sync. An event that was deleted entirely inside the gap is the exception: it is gone from the calendar, so nothing lists it and no event is recorded for it.
Free/busy came back empty for someone
An empty answer with no error means the calendar was readable and genuinely free. An answer with an error on that row means the connected account cannot see that calendar, which is a sharing setting in Microsoft 365 rather than something Mobius can change. If every row comes back with a permission error, the tenant restricts free/busy sharing across the board and an administrator has to relax it.
Disconnecting did not sign the account out of Microsoft
That is deliberate. Every Mobius Microsoft integration shares one grant per person, so revoking it here would also break that person's Outlook mailbox connection. Disconnecting removes the subscription and the stored credential; revoking the grant itself is done in Microsoft's own account settings.
Next
- Inspect event payloads from the event catalog.
- See how connections are shared and owned in integrations.
- Add approval pauses with interactions.