attendees are given, standard iMIP invitations go out to each of them; omit the field (or pass an empty array) to create a personal event — a block of your own time such as a focus block or a travel buffer — with no invitations sent. Pass start/end as dates for an all-day event — a day off, a vacation. Pass recurrence to create a repeating series in the same call, and reminderMinutesBefore to be reminded before it starts.
Parameters
string
required
Event title. 1–200 characters.
string
required
Start datetime, ISO 8601, e.g.
2026-07-14T10:00:00+02:00 — or a date, e.g. 2026-10-03, for an all-day event. For a series, the first occurrence.string
required
End datetime, ISO 8601. Must be after
start. For an all-day event a date, and exclusive (RFC 5545): the day after the last day. A day off on October 3 is start: "2026-10-03", end: "2026-10-04". start and end must both be dates or both be date-times.integer
Adds one reminder that fires this many minutes before the start (0 to 40,320, which is four weeks). For an all-day event the start is midnight, so
900 fires at 09:00 the day before. Omit for no reminder.string[]
Up to 50 attendee email addresses. Each receives an invitation. Omit — or pass
[] — for a personal event with no invitations.string
default:"all"
all (default) sends invitations to the attendees; none writes the event without inviting anyone — useful when an invitation has already been sent out of band. Irrelevant without attendees.string
A CalDAV URL from
list_calendars. Defaults to the user’s default calendar.string
Event description, up to 5,000 characters.
string
Event location, up to 500 characters.
string | object
Turns the event into a repeating series; omit for a one-off event. Two forms:Structured object:
Raw RRULE string: a single-line iCalendar RRULE starting with
FREQ=, up to 1,000 characters, e.g. FREQ=WEEKLY;BYDAY=TH or FREQ=DAILY;COUNT=10. UNTIL may be a date (UNTIL=20261231) or a UTC date-time (UNTIL=20261231T000000Z). Either way it is converted to match the event, as RFC 5545 requires: a date on an all-day series, and on a timed series a UTC date-time, where a date means the end of that day in the event’s time zone. Raw rules are only lightly validated — malformed rules surface as server errors.Example
Call
Result
Call
Result
Call
Result
uid — it identifies the event for updates, deletion, and RSVPs. To invite people to an event created without attendees, pass addedAttendees to update_calendar_event later.
Errors
Event end must be after its start. Nothing was created.An all-day event's `end` is exclusive …— an all-dayendon or before itsstart. The message names the rightend.Pass `start` and `end` both as dates … or both as date-times …— a date mixed with a date-time.No calendar available to create the event in.— the user has no calendar and none was specified.Calendar not found: <url>— thecalendarUrldidn’t resolve.Provide at most one of `until` or `count`, not both.— conflicting series bounds.