Outlook Calendar

Put an Outlook calendar in a flow: book, move and find meetings, answer invitations and find free time with the action node, and fire a flow when an event is created, changed or cancelled with the trigger. The action node can also be handed to an AI Node as an AI toolkit.

Connect a calendar

Click Connect Outlook Calendar — in the node's credential picker or in Settings → Credentials — and sign in with Microsoft. A personal account (outlook.com, hotmail.com, live.com) and a work or school account both work. Microsoft asks you to allow HostWebhook to read, create and change the account's calendar events. One credential is one account, with all its calendars.

ℹOnly the calendar. It is its own connection: the Outlook (email) credential doesn't work here, and this one doesn't reach the mailbox. Each Microsoft 365 service is connected on its own, with its own consent.
  • Work accounts whose organization requires an administrator to approve new apps show a request screen instead: an admin approves HostWebhook once, in Microsoft Entra.
  • Revoking. Remove HostWebhook from account.microsoft.com → Privacy → Apps and services (personal) or myapps.microsoft.com (work), and the credential stops working; Reconnect it from Settings → Credentials.

The action node

Ten operations, in four groups.

GroupOperationWhat it doesCalendar
EventsCreate eventIn a calendar of yours. With attendees, Outlook sends them the invitation.writes
EventsUpdate eventOnly the fields you fill in change; attendees, if given, replace the list.writes
EventsGet eventOne event whole: when, where, who is invited and how each answered.reads
EventsFind eventsBetween two dates, earliest first — repeating events as each occurrence.reads
InvitationsRespond to invitationAccept, tentatively accept or decline, with a note if you like.writes
InvitationsCancel meetingOne you organize: it leaves your calendar and the attendees get the cancellation.notifies
InvitationsDelete eventRemoved from your calendar. Attendees are not told.deletes
AvailabilityFind free slotsThe free windows between two dates, long enough for a meeting, across one or more calendars.reads
CalendarsList calendarsWith their IDs — which one is the default and which you can edit.reads
CalendarsCreate calendarA new calendar in your account.writes

Every field takes a template: {{payload.email}} from a form, {{payload.id}} for the event that fired the Outlook Calendar trigger. Attendees are comma-separated addresses.

Picking a calendar

Wherever a calendar is asked for, you pick it from the account's own list — the default one is marked, and so are the ones shared with you that you can only read. Left empty, the default calendar is used. Refresh reloads the list after you create one in Outlook. To take it from the flow instead, choose Type an ID or a template under the list.

Dates, times and time zones

Write a date and time as 2026-10-01T09:00 — or pick it from the calendar next to the field. It is read in the node's Time zone, which starts as your workspace's; a time that already carries its offset (…-06:00, …Z) keeps it. With All day on, Starts and Ends are just dates, and Ends is the last day the event covers.

Everything the node returns comes back in that same zone, with its offset — 2026-10-01T09:00:00-06:00 — and an all-day event as its dates.

Invitations and cancelling

⚠Creating or updating an event with attendees, answering an invitation and cancelling a meeting all reach other people for real on every run — Run test included. Point the first tests at addresses of yours.

Cancel meeting is for a meeting you organize: the attendees get the cancellation, with your note. Delete event just removes it from your calendar, without telling anyone.

Finding free time

Find free slots looks at one or more calendars between two dates (up to 62 days apart) and returns the windows with nothing busy in them, at least Duration long (30 minutes by default). Events shown as free and cancelled ones don't count as busy.


AI toolkit mode

Once the calendar is connected, the node asks for a Mode. AI toolkit turns it into ten tools that an AI Node — or an MCP client, through one of your MCP servers — calls by name.

ToolArguments
create_outlook_eventcalendar_id? · subject · start · end · time_zone? · all_day? · body? · location? · attendees? · online_meeting? · …
update_outlook_eventevent_id · subject? · start? · end? · time_zone? · location? · attendees? · …
get_outlook_eventevent_id · body_format?
find_outlook_eventscalendar_id? · from? · to? · time_zone? · search? · max_results? · include_body?
respond_to_outlook_eventevent_id · response · comment? · send_response?
cancel_outlook_eventevent_id · comment?
delete_outlook_eventevent_id
find_outlook_free_slotscalendar_ids? · from · to · duration_minutes? · time_zone?
list_outlook_calendarsmax_results?
create_outlook_calendarname

What you control

  • Cancelling and deleting start blocked. Unblock cancel_outlook_event or delete_outlook_event in the node's tool list if the agent should have them. Any other tool can be blocked the same way — creating events, for an agent that should only read the agenda.
  • Times. A time the model writes without an offset is read in the workspace time zone, and results come back in it.
  • Characters per call sent to the model. 20,000 by default. Lists that don't fit are cut whole events at a time, with a notes field saying how many were left out.

Testing a tool

⚠Only a tool call picks the tool. In AI toolkit mode, only an AI Node, an MCP client or a voice agent chooses which tool the node runs. Run Test, a flow or a webhook run the operation saved on the node: an operation in their payload that names another tool is refused.
✦To try a tool, call it from an AI Node or from an MCP client. Its arguments look like this:
jsonA tool call
{ "operation": "find_outlook_free_slots", "from": "2026-10-01T09:00", "to": "2026-10-03T18:00", "duration_minutes": 45 }
⚠A node in toolkit mode is not part of the pipeline. Events arriving through connections made before you switched are refused — the node only runs the tool it is asked for.

The trigger

Pick an Outlook Calendar credential, then what fires it and the calendar to watch, from the account's list:

  • Event created — a new event, or an invitation that arrives.
  • Event updated — its time, place, attendees, their answers, its description… A change you can't see, like dismissing a reminder, doesn't fire it.
  • Event cancelled or deleted — a meeting its organizer cancelled, or an event removed from the calendar.
  • Any change — all three.

Optionally, only events whose subject contains something (upper or lower case).

Activating subscribes to the account with Microsoft. Each notification carries a secret that belongs to this trigger, and HostWebhook checks it before reading anything; events from the account's other calendars are ignored without being read. Each state of an event is delivered once, even when Microsoft sends several notifications for it. Deactivating deletes the subscription.

ℹMicrosoft's subscriptions expire after at most seven days. HostWebhook asks for three and renews them on its own every night. If Microsoft removes one or reports that notifications were missed, HostWebhook creates a new one and delivers the events that changed in between — without repeating any. Events deleted in that window can't be recovered.

What the trigger sends downstream

The same event the action node's Get event returns, with what changed and the calendar in front — a flow reads {{payload.start}} the same way from either. Times are in the workspace time zone:

{
  "event": "created",
  "service": "outlook_calendar",
  "deleted": false,
  "calendarId": "AAMkAGI2…",
  "calendar": "Calendar",
  "id": "AAMkAGI2TG93AAABEgAQAAk=",
  "subject": "Interview — Sam Rivera",
  "start": "2026-10-01T09:00:00-06:00",
  "end": "2026-10-01T09:45:00-06:00",
  "isAllDay": false,
  "timeZone": "America/Mexico_City",
  "location": "Room 4B",
  "organizer": { "name": "Ana García", "address": "ana@example.com" },
  "attendees": [
    { "name": "Sam Rivera", "address": "sam@example.com", "type": "required", "response": "accepted" }
  ],
  "isCancelled": false,
  "isOnlineMeeting": true,
  "onlineMeetingUrl": "https://teams.microsoft.com/l/meetup-join/…",
  "preview": "Second-round interview for the backend role.",
  "body": "<html>…</html>",
  "webLink": "https://outlook.live.com/owa/?itemid=…"
}

A deleted event arrives as cancelled with deleted: true. Microsoft only tells its ID, so the subject and times are the ones HostWebhook last knew — it remembers the calendar's upcoming events from the moment you activate, and every event it sees change. An event deleted before HostWebhook ever saw it isn't reported.

Answer it, move it or cancel it with the action node using {{payload.id}}.

Trying it out

The trigger's Test push reads the latest changed events of the calendar, applies your filters, and shows them exactly as a delivery will arrive — without running the flow. To see a real one, activate the trigger and create an event in that calendar: Microsoft usually notifies within seconds.


Good to know

Busy or throttled

Microsoft limits how fast one account can be called. When it answers that it is busy, the node waits the time it asks for (up to ten seconds) and tries once more before giving up with Microsoft's message.

Repeating events

Find events returns each occurrence of a repeating event on its own, with the series' ID in seriesMasterId. Updating, cancelling or deleting the series' ID changes the whole series; an occurrence's ID, just that one.