Skip to content

Create an Outlook event ​

Puts an appointment into your Outlook calendar. Invitations are sent only if you ask.

This node creates an event in the Outlook calendar of the member running the workflow: a meeting confirmed by email, a deadline, a callback. Invitations are only sent when you ask for them.

It needs the calendar access of a Microsoft account, shown as the Calendar capability in Connections. See Microsoft.

To offer free slots first, use Find an Outlook slot: its slots are in the exact format this node expects. For Google Calendar, use Calendar — create an event.

At a glance ​

  • Type: outlook_calendar.create_event · version 1
  • Category: Actions
  • Kind: Step — one stage of a run
  • Effect: Writes outside (external_write) — writes outside Mankomail; described instead of performed during a test run
  • Needs a carrier email: No
  • Connection: Microsoft (capability calendar)
  • Inputs: main
  • Outputs: main

Connection ​

This node needs a Microsoft connection with the calendar capability granted.

Parameters ​

credential ​

Microsoft account — The account whose calendar is used. Connect it from Connections; the token is resolved by the server.

  • Type: Connection (credential)
  • Required: No
  • Default: "" (empty)

calendar ​

Calendar — Left empty: your default calendar.

  • Type: Remote resource (resourceLocator)
  • Required: No
  • Default: {"mode":"id","value":""}
  • Ways to choose: pick from a list, type an ID (outlook.calendar)
  • Listed with the connection in: credential

title ​

Title

  • Type: Text (string)
  • Required: Yes
  • Default: "" (empty)
  • 255 characters at most
  • Example: Project sync — {{ email.from.name }}
  • Expressions: {{ }} accepted

start ​

Start — ISO date and time, without zone: 2026-04-02T14:00:00. Accepts {{ }} expressions — {{ data.find_free_1.slots.0.start }} plugs straight into the slot search.

  • Type: Text (string)
  • Required: Yes
  • Default: "" (empty)
  • 64 characters at most
  • Example: 2026-04-02T14:00:00
  • Expressions: {{ }} accepted

end ​

End — Same format as the start. For an all-day event, set both dates to midnight.

  • Type: Text (string)
  • Required: Yes
  • Default: "" (empty)
  • 64 characters at most
  • Example: 2026-04-02T15:00:00
  • Expressions: {{ }} accepted

allDay ​

All day — Graph then requires midnight boundaries — the service refuses the event rather than rounding behind your back.

  • Type: Yes / no (boolean)
  • Required: No
  • Default: false

timeZone ​

Time zone — IANA name (Europe/Paris, America/Montreal). It is what gives the typed hours their meaning.

  • Type: Text (string)
  • Required: No
  • Default: Europe/Paris
  • 80 characters at most
  • Expressions: {{ }} accepted

body ​

Description — The event body. Accepts {{ }} expressions.

  • Type: Long text (text)
  • Required: No
  • Default: "" (empty)
  • 20000 characters at most
  • Expressions: {{ }} accepted

location ​

Location

  • Type: Text (string)
  • Required: No
  • Default: "" (empty)
  • 255 characters at most
  • Example: Video call, North room…
  • Expressions: {{ }} accepted

attendees ​

Attendees — Comma-separated addresses. {{ email.from.email }} invites the email sender.

  • Type: Text (string)
  • Required: No
  • Default: "" (empty)
  • 2000 characters at most
  • Example: {{ email.from.email }}
  • Expressions: {{ }} accepted

sendInvitations ​

Send invitations — Off, the event lands in your calendar with no email sent. On, Outlook notifies the attendees.

  • Type: Yes / no (boolean)
  • Required: No
  • Default: false
  • Shown when: attendees is filled in

Outputs ​

  • main

Data produced ​

What this node adds to the run data, and how to read it in an expression. <step> stands for the step key: the node name turned into an identifier (see Data and expressions).

  • {{ data.<step>.event }} — object { id, webLink, start, end, timeZone }. The event created, or found again on a replay. id is the Outlook event id, webLink the link that opens it in Outlook on the web, start and end the bounds as Outlook recorded them, timeZone their time zone.
  • {{ data.<step>.event.webLink }} — string. The Outlook link of the event. Empty in a test run.
  • {{ data.<step>.reused }} — boolean. true when a replay found the event created by an earlier attempt of the same step: nothing was created again.
  • {{ data.<step>.invited }} — number. The number of attendees Outlook was asked to invite. 0 when Send invitations is off or there is no attendee.
  • {{ data.<step>.summary }} — string. A readable sentence giving the event title and start, and whether invitations were sent.

Example ​

After Find an Outlook slot (named Slots) and the client's reply, the node, named Book call, books the first slot:

calendar: (id mode) (empty: default calendar)
title: Project sync — {{ email.from.name }}
start: {{ data.slots.first.start }}
end: {{ data.slots.first.end }}
allDay: false
timeZone: Europe/Paris
location: Video call
attendees: {{ email.from.email }}
sendInvitations: true

The step data reads:

json
{
  "event": {
    "id": "AAMkAGI2…",
    "webLink": "https://outlook.office365.com/owa/?itemid=AAMkAGI2…",
    "start": "2026-04-14T10:00:00.0000000",
    "end": "2026-04-14T10:30:00.0000000",
    "timeZone": "Europe/Paris"
  },
  "reused": false,
  "invited": 1
}

Tips ​

  • Invitations are off by default. Send invitations appears once Attendees is filled in and defaults to off. Outlook emails attendees as soon as they are on an event, so when the option is off the node does not add them as attendees: the event is created in your calendar only, and a line listing their addresses is added to its description. Turn the option on to have Outlook invite them.
  • No duplicate on replay. The node writes a hidden marker on the event and looks for it before creating, so a replay of the step returns the existing event with reused: true. Some tenants refuse that lookup; there, a replay can create a second event.
  • Dates and time zone. Start and End are ISO date-times without zone (2026-04-14T14:00:00), read in the Time zone field (IANA name, Europe/Paris by default). An unknown time zone fails with microsoft.rejected.
  • All day. With All day on, Start and End must both be at midnight in the time zone (for one day: 2026-04-14T00:00:00 to 2026-04-15T00:00:00). Any other time fails with microsoft.rejected rather than being rounded.
  • Attendees. Comma-separated addresses. An entry that is not an email address (for instance an expression that did not resolve) fails with node_invalid_param. Title, Start or End resolving to empty also fails with node_invalid_param.
  • Calendar. Left empty, the member's default calendar. Pick another one from the list (read-only calendars are not offered) or type its id. There is no URL mode for this field.
  • Test runs. In test runs nothing is created and nobody is invited: the event returned has an id starting with simulated:, an empty webLink, and the start and end as entered.
  • Errors. credential.capability_missing: the Outlook calendar is not connected for the member running the workflow. microsoft.access_denied or microsoft.auth_failed: reconnect the account. microsoft.not_found: the calendar no longer exists. microsoft.unavailable is retried automatically. See Error handling.