English
Calendar — create an event
Creates an event in Google Calendar. A retry of the step creates no duplicate: the id derives from the step.
This node creates an event in a Google Calendar: a meeting confirmed by email, a deadline extracted from a document, a callback slot. It can invite attendees, and by default it does not email them.
It needs the Google Calendar access of a Google account, shown as the Calendar capability in Connections. See Google. The event is created with the account of the member running the workflow.
To offer free slots before booking one, use Calendar — find free slots. For an Outlook calendar, use Create an Outlook event.
At a glance
- Type:
google_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: Google (capability
calendar) - Inputs:
main - Outputs:
main
Connection
This node needs a Google connection with the calendar capability granted.
Parameters
credential
Google account — The account holding Google Calendar access. Connect it once in Connections; the workflow always runs with the account of the member running it.
- Type: Connection (
credential) - Required: Yes
- Default:
""(empty)
calendar
Calendar — Left empty, the account’s primary calendar.
- Type: Remote resource (
resourceLocator) - Required: No
- Default:
{"mode":"id","value":"primary","label":"Agenda principal"} - Ways to choose: pick from a list, type an ID, paste a URL (
calendar) - Listed with the connection in:
credential
title
Title
- Type: Text (
string) - Required: Yes
- Default:
""(empty) - 500 characters at most
- Example:
Project call — {{ email.from.name }} - Expressions:
{{ }}accepted
allDay
All day — On, "Start" and "End" are dates (2026-04-12) and the end is exclusive, as Google expects.
- Type: Yes / no (
boolean) - Required: No
- Default:
false
start
Start — ISO 8601 instant (2026-04-12T14:00:00), or a bare date for an all-day event. Accepts {{ }} expressions: {{ data.extract_1.date }}.
- Type: Text (
string) - Required: Yes
- Default:
""(empty) - 60 characters at most
- Example:
2026-04-12T14:00:00 - Expressions:
{{ }}accepted
end
End
- Type: Text (
string) - Required: Yes
- Default:
""(empty) - 60 characters at most
- Expressions:
{{ }}accepted
timeZone
Time zone — IANA identifier (Europe/Paris, America/Montreal).
- Type: Text (
string) - Required: No
- Default:
Europe/Paris - 100 characters at most
- Shown when:
allDayis nottrue - Expressions:
{{ }}accepted
location
Location
- Type: Text (
string) - Required: No
- Default:
""(empty) - 500 characters at most
- Example:
Video call - Expressions:
{{ }}accepted
description
Description
- Type: Long text (
text) - Required: No
- Default:
""(empty) - 10000 characters at most
- Expressions:
{{ }}accepted
attendees
Attendees — One address per row. Accepts {{ }} expressions: {{ email.from.email }}.
- Type: List of items (
collection) - Required: No
- Default:
[] - At most 30 items
- Each item has:
email— Address- Type: Text (
string) - Required: No
- Default:
""(empty) - 320 characters at most
- Type: Text (
sendUpdates
Notify attendees
- Type: One choice (
options) - Required: Yes
- Default:
none - Options:
none— No: The event shows up in their calendar with no invitation email.all— Yes, send invitations: Google sends the invitation email to every attendee.
- Shown when:
attendeeshas at least1
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, htmlLink?, start, end }. The event created, or found again on a replay.idis the Google Calendar event id,htmlLinkthe link that opens it in Google Calendar,startandendthe bounds as Google recorded them (a date for an all-day event).{{ data.<step>.event.htmlLink }}—string. The Google Calendar link of the event, to quote in a reply. Absent in a test run.{{ data.<step>.created }}—boolean.truewhen the event was created by this attempt,falsewhen a replay found the event created by an earlier attempt of the same step.{{ data.<step>.simulated }}—boolean.truein a test run: nothing was created, the id starts withsimulated-andstart/endrepeat the values entered.{{ data.<step>.summary }}—string. A readable sentence giving the event title, its start and the number of attendees.
Example
A client confirms a meeting by email; an Extract step named Extract reads the agreed date and time. The node is named Book meeting:
calendar: (id mode) primary
title: Project call — {{ email.from.name }}
allDay: false
start: {{ data.extract.start }}
end: {{ data.extract.end }}
timeZone: Europe/Paris
location: Video call
attendees:
- email: {{ email.from.email }}
sendUpdates: noneWith start resolving to 2026-04-14T14:00:00 and end to 2026-04-14T15:00:00, the step data reads:
json
{
"event": {
"id": "k3v9q0m1…",
"htmlLink": "https://www.google.com/calendar/event?eid=…",
"start": "2026-04-14T14:00:00+02:00",
"end": "2026-04-14T15:00:00+02:00"
},
"created": true,
"simulated": false
}The client is on the event but receives no invitation email, because Notify attendees is set to No.
Tips
- No duplicate on replay. The event id is derived from the step. If the step is replayed after an incident, Google answers that this id already exists, and the node returns the existing event with
created: falseinstead of creating a second one. Two different runs (two emails) create two events, as expected. - Invitations. Notify attendees appears once there is at least one attendee and defaults to No: the event shows up in the attendees' calendars without an invitation email. Choose Yes, send invitations to have Google email every attendee.
- Dates and times. Without All day, Start and End are ISO 8601 date-times (
2026-04-14T14:00:00) read in the Time zone field (IANA name,Europe/Parisby default). With All day, they are dates (2026-04-14) and the end is exclusive, as Google expects: a one-day event on 14 April ends on2026-04-15. The Time zone field is hidden for all-day events. - Calendar. Left as is, the account's primary calendar (
primary). The list only offers calendars the account can write to. You can also type a calendar id or paste a Google Calendar URL that carries the calendar in itscidorsrcparameter. - Attendees. Up to 30 addresses, one per row; duplicates are dropped. An entry that is not an email address (for instance an expression that did not resolve) fails the step with
node_invalid_paramrather than silently inviting nobody. Title, Start or End resolving to empty also fails withnode_invalid_param. - Test runs. In test runs nothing is created and nobody is notified: the step returns an id starting with
simulated-, nohtmlLink, andstart/endas entered. - Errors.
credential.capability_missing: Google Calendar is not connected for the member running the workflow.google.insufficient_permissionsorgoogle.auth_failed: reconnect the account.google.not_found: the calendar does not exist or the account cannot see it.google.rejected: Google refused the event (for instance an unreadable date).google.bad_locator: the pasted calendar value cannot be read.google.unavailableis retried automatically. See Error handling.