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

CapabilityValue
Provider IDoutlook_calendar
Auth kindoauth2_user
Connect flowMicrosoft sign-in (user grant)
ActionsYes
EventsYes
Webhook deliveryYes
Live statusYes

Connect Outlook Calendar

SurfaceSupport
AppOpen Library > Integrations, choose Outlook Calendar, then sign in and pick the work account whose calendar you want.
CLIThe mobius CLI does not connect Outlook Calendar integrations yet. Use the app or API.
APICall 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.changed

One 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_typeSent when
createdAn event was added to the watched calendar.
updatedAn existing event changed, including being cancelled by its organizer.
deletedAn 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.query

Every 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