UpdateCalendarEvent
Update an existing calendar event.
Starter documentation. Features and account details may differ from this deployment.
UpdateCalendarEvent
Update an existing calendar event.
A meeting on more than one of the user's inboxes is one ListCalendarEvents entry per inbox. Before changing its details, guests or guest permissions, ask the user which inbox's copy to change, then pass that copy's inbox. Never choose between the user's inboxes yourself, whatever they look like: a test, secondary or unfamiliar address is still the user's own inbox. Skip the question only when the user already named the inbox, when only one copy's viewerCan allows the change (use it and say why), or when adding guests to a meeting the user organizes from one of the inboxes (add them from that copy and say why). Reminders may go to one copy and an rsvp to the copy where the user is a guest, naming the inbox in your reply. Without inbox the tool refuses, lists each copy and gives the question to ask. One call changes one copy, so an edit on one copy and an rsvp on another take two calls.
Only the supplied fields change; omitted fields keep their current values. The change is written to the calendar provider immediately and attendees are notified of it, so confirm details with the user first. Get the eventId from ListCalendarEvents.
scope picks how much of a recurring series changes and is always required: "this_event" edits one occurrence (pass the occurrence's recurrenceId from ListCalendarEvents) and leaves the rest of the series alone; "all" edits the series itself — with time that MOVES EVERY OCCURRENCE, so never use "all" to reschedule a single occurrence. Non-recurring events use "all". There is no this-and-following update: end the series with DeleteCalendarEvent's "this_and_following" and create a new event instead.
Passing attendees replaces the full attendee list — include everyone who should remain, not just additions. That holds when viewerCan.removeGuests from ListCalendarEvents is true (the user organizes the event, or the organizer lets guests modify it). When it is false, the list may only grow: pass the current attendees plus the additions; the additions are invited without touching anyone else, and dropping any guest fails. Adding guests then needs viewerCan.inviteGuests; otherwise the organizer doesn't let guests invite others or hides the guest list, or the event is an Outlook meeting the user doesn't organize. An empty string for description or location clears it. Fails on events from calendars the user cannot edit.
A guest without modify rights (viewerCan.editDetails false while viewerCan.rsvp is true) may only change their own reminders, add guests where viewerCan.inviteGuests allows it, and answer with rsvp; changing the title, time, description, location, recurrence or conference fails because the organizer doesn't let guests change the event.
rsvp sets the user's own response to an invitation and is independent of the field edits — it can be the only thing this call changes. It applies at the same scope as the rest of the call and answers as the connected inbox the event's copy belongs to, so it only works when that inbox is an attendee.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
eventId | string | Yes | The event's id, from ListCalendarEvents or CreateCalendarEvent. |
calendarId | string | No | The calendarId of the copy to update, from the copies of its ListCalendarEvents entry, for an event synced from more than one calendar. Omit to update the event's primary copy. |
inbox | string | No | The inbox of the copy this call changes, from its ListCalendarEvents entry. Required when the meeting is on more than one of the user's inboxes and the call changes anything but reminders or rsvp: the tool refuses without it and lists each copy. It must be the inbox holding the copy eventId names. |
scope | "all" | "this_event" | Yes | How much of a recurring series an update applies to. |
recurrenceId | string | No | The recurrenceId of the targeted occurrence, from its ListCalendarEvents entry. Required for "this_event"; omit for "all". |
title | string | No | Replacement title. Omit to keep the current title. |
description | string | No | Replacement event body/description. An empty string clears it; omit to keep the current one. |
location | string | No | Replacement location label. An empty string clears it; omit to keep the current one. |
time | EventTimeInput | No | Replacement time: a timed span with kind "timed" (startsAt, endsAt, optional timeZone) or whole days with kind "allDay" (startDate, exclusive endDate). Omit to keep the current time. |
attendees | AttendeeInput[] | No | Replacement attendee list — replaces all current attendees, so include everyone who should remain. When viewerCan.removeGuests is false, it may only add to the current list. Omit to leave attendees unchanged. |
recurrenceLines | string[] | No | Replacement RFC 5545 recurrence lines. An empty list makes the event one-off; omit to keep the current recurrence. Only valid with scope "all". |
conference | "provider_default" | "microsoft_teams" | "google_meet" | "remove" | No | Change the event's video conference: "provider_default" uses the calendar's supported provider; "google_meet" or "microsoft_teams" selects one explicitly. "remove" detaches the conference only where supported. Check ListCalendars capabilities first. Omit to preserve the current conference. |
reminders | EventRemindersInput | No | Replacement notification reminders. useDefault: true follows the calendar's own defaults; otherwise overrides replaces the whole list with entries of method "popup" (a Mosaic notification) or "email" and minutes before the start — an empty list silences the event. Omit to keep the current reminders. |
rsvp | "accepted" | "declined" | "tentative" | No | Set the user's own response to the invitation: "accepted", "declined", or "tentative". Omit to leave their response alone. |
outOfOffice | OutOfOfficeInput | No | Adjust out-of-office decline behavior; only valid on an event that is already out of office (its event type cannot be changed). Replaces the whole block: set autoDeclineMode ("decline_none", "decline_all", or "decline_new_only") and optionally declineMessage. Omit to leave it untouched. |
guestPolicy | GuestPolicy | No | Replace what guests may do: canModify (change the event; implies canInviteOthers), canInviteOthers and canSeeOtherGuests, all three required. Only the organizer of a Google event may set it (viewerCan.setGuestPolicy), and only with scope "all": it belongs to the whole series. Outlook events have none. Omit to leave it untouched. |