Update Event
Update an existing Google Calendar event. Supports partial updates, full replacement, recurring events, attendee management, and all event properties.
Overview
The Update Event tool allows you to modify existing events in your Google Calendar. It supports:
- Partial updates - Update only specific fields while keeping others unchanged
- Full replacement - Completely replace an event's properties
- Recurring event updates - Update single instances, future instances, or entire series
- Attendee management - Replace all attendees, or incrementally add/remove specific ones
- Time changes - Reschedule events or change their duration
- Format conversion - Convert between timed and all-day events
This tool works with any calendar you have write access to and must be used by the event organizer.
Prerequisites
- A connected Google Account with OAuth authentication
- Google Calendar API enabled in your Google Cloud project
- Setup Guide
- Event organizer permissions (only organizers can update events)
Usage
Update Event Title
Change the summary/title of an event:
{
"tool": "google_calendar_Update_Event",
"arguments": {
"event_id": "abc123xyz",
"summary": "Updated Team Meeting"
}
}
Reschedule Event (Change Time)
Move an event to a different time:
{
"tool": "google_calendar_Update_Event",
"arguments": {
"event_id": "abc123xyz",
"start_time": "2024-01-20T15:00:00",
"end_time": "2024-01-20T16:00:00",
"timezone": "America/Los_Angeles",
"send_notifications": true
}
}
Change Only Start Time (Preserve Duration)
If you only specify start_time without end_time, the tool preserves the original event duration:
{
"tool": "google_calendar_Update_Event",
"arguments": {
"event_id": "abc123xyz",
"start_time": "2024-01-20T10:00:00"
}
}
Update Location
Change where an event takes place:
{
"tool": "google_calendar_Update_Event",
"arguments": {
"event_id": "abc123xyz",
"location": "Building C, Room 305"
}
}
Update Description
Add or change event notes:
{
"tool": "google_calendar_Update_Event",
"arguments": {
"event_id": "abc123xyz",
"description": "Updated agenda:\n1. Q4 Review\n2. Budget Discussion\n3. Next Steps"
}
}
Replace All Attendees
Replace the entire attendee list:
{
"tool": "google_calendar_Update_Event",
"arguments": {
"event_id": "abc123xyz",
"attendees": ["alice@example.com", "bob@example.com", "charlie@example.com"],
"send_notifications": true
}
}
Add Attendees (Keep Existing)
Add new attendees without removing existing ones:
{
"tool": "google_calendar_Update_Event",
"arguments": {
"event_id": "abc123xyz",
"add_attendees": ["diane@example.com", "eve@example.com"],
"send_notifications": true
}
}
Remove Attendees (Keep Remaining)
Remove specific attendees while keeping others:
{
"tool": "google_calendar_Update_Event",
"arguments": {
"event_id": "abc123xyz",
"remove_attendees": ["bob@example.com"],
"send_notifications": true
}
}
Convert Timed Event to All-Day
Change a timed event to an all-day event:
{
"tool": "google_calendar_Update_Event",
"arguments": {
"event_id": "abc123xyz",
"all_day_date": "2024-01-20"
}
}
Convert All-Day Event to Timed
Change an all-day event to a specific time:
{
"tool": "google_calendar_Update_Event",
"arguments": {
"event_id": "abc123xyz",
"start_time": "2024-01-20T14:00:00",
"end_time": "2024-01-20T15:30:00",
"timezone": "America/New_York"
}
}
Add Recurrence to Existing Event
Make a single event recurring:
{
"tool": "google_calendar_Update_Event",
"arguments": {
"event_id": "abc123xyz",
"recurrence_type": "weekly",
"recurrence_count": 10
}
}
Update Recurrence Pattern
Change how an event repeats:
{
"tool": "google_calendar_Update_Event",
"arguments": {
"event_id": "abc123xyz",
"recurrence_type": "weekly",
"recurrence_days": ["Monday", "Wednesday", "Friday"],
"recurrence_end_date": "2024-12-31"
}
}
Remove Recurrence from Event
Convert a recurring event to a single event:
{
"tool": "google_calendar_Update_Event",
"arguments": {
"event_id": "abc123xyz",
"clear_recurrence": true
}
}
Update Single Instance of Recurring Event
Update just one occurrence:
{
"tool": "google_calendar_Update_Event",
"arguments": {
"event_id": "abc123xyz_20240120T100000Z",
"start_time": "2024-01-20T11:00:00",
"recurring_event_update_scope": "this_instance"
}
}
Update All Instances of Recurring Event
Update the entire series:
{
"tool": "google_calendar_Update_Event",
"arguments": {
"event_id": "abc123xyz_20240120T100000Z",
"location": "New Building",
"recurring_event_update_scope": "all_instances"
}
}
Change Event Visibility
Make an event private:
{
"tool": "google_calendar_Update_Event",
"arguments": {
"event_id": "abc123xyz",
"visibility": "private"
}
}
Mark Event as Free (Non-blocking)
Change event to not block calendar time:
{
"tool": "google_calendar_Update_Event",
"arguments": {
"event_id": "abc123xyz",
"transparency": "transparent"
}
}
Multiple Updates at Once
Update several properties in one call:
{
"tool": "google_calendar_Update_Event",
"arguments": {
"event_id": "abc123xyz",
"summary": "Rescheduled Team Meeting",
"start_time": "2024-01-22T10:00:00",
"end_time": "2024-01-22T11:30:00",
"location": "Virtual - Zoom",
"add_attendees": ["newmember@example.com"],
"send_notifications": true
}
}
Input Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
event_id | string | Yes | - | Event identifier. Get from Get Events tool. |
calendar_id | string | No | "primary" | Target calendar ID |
| Update Mode | ||||
update_mode | string | No | "partial" | "partial" (update only specified fields) or "full" (replace entire event) |
| Event Details | ||||
summary | string | No | - | Event title/name |
description | string | No | - | Event description/notes |
location | string | No | - | Event location |
| Timing (Timed Events) | ||||
start_time | string | No | - | Start datetime (ISO 8601) |
end_time | string | No | - | End datetime (ISO 8601) |
timezone | string | No | - | IANA timezone (e.g., "America/Los_Angeles") |
| Timing (All-Day Events) | ||||
all_day_date | string | No | - | Start date (YYYY-MM-DD) |
all_day_end_date | string | No | - | End date (YYYY-MM-DD, inclusive) |
| Attendees (Replace) | ||||
attendees | array | No | - | Replace all attendees with this list |
| Attendees (Incremental) | ||||
add_attendees | array | No | - | Add these attendees (keep existing) |
remove_attendees | array | No | - | Remove these attendees (keep remaining) |
send_notifications | boolean | No | true | Send update emails to attendees |
| Recurrence | ||||
recurrence_type | string | No | - | "daily", "weekly", "monthly", "yearly" |
recurrence_interval | integer | No | 1 | Every N periods |
recurrence_days | array | No | - | Days for weekly (e.g., ["Monday", "Friday"]) |
recurrence_count | integer | No | - | Number of occurrences |
recurrence_end_date | string | No | - | End date (YYYY-MM-DD) |
clear_recurrence | boolean | No | false | Remove recurrence rules |
| Recurring Event Scope | ||||
recurring_event_update_scope | string | No | - | "this_instance", "this_and_future", or "all_instances" |
| Visibility & Status | ||||
visibility | string | No | - | "default", "public", "private", "confidential" |
transparency | string | No | - | "opaque" (busy) or "transparent" (free) |
Parameter Constraints
- Cannot use both
start_timeandall_day_datein same request - Cannot use both
attendeesandadd_attendees/remove_attendees - Cannot use both
recurrence_typeandclear_recurrence - Cannot use both
recurrence_countandrecurrence_end_date recurring_event_update_scopeonly applies to recurring events
Response Format
Success Response
{
"success": true,
"message": "Event updated successfully",
"event_id": "abc123xyz",
"html_link": "https://www.google.com/calendar/event?eid=abc123xyz",
"updated_fields": ["summary", "start", "end", "location"],
"previous_values": {
"summary": "Old Team Meeting",
"start_time": "2024-01-15T10:00:00-08:00",
"location": "Conference Room A"
},
"is_recurring": false,
"update_scope": null,
"event": {
"id": "abc123xyz",
"calendar_id": "primary",
"status": "confirmed",
"summary": "Updated Team Meeting",
"description": "Weekly sync",
"location": "Conference Room B",
"start": "2024-01-20T15:00:00-08:00",
"end": "2024-01-20T16:00:00-08:00",
"start_datetime": "2024-01-20T15:00:00-08:00",
"end_datetime": "2024-01-20T16:00:00-08:00",
"start_timezone": "America/Los_Angeles",
"end_timezone": "America/Los_Angeles",
"all_day": false,
"attendees": [
{
"email": "alice@example.com",
"response_status": "accepted"
}
],
"attendees_count": 1,
"html_link": "https://www.google.com/calendar/event?eid=abc123xyz",
"visibility": "default",
"transparency": "opaque"
}
}
Response Fields
| Field | Type | Description |
|---|---|---|
success | boolean | Whether update succeeded |
message | string | Success message |
event_id | string | Updated event ID |
html_link | string | Link to view event in Google Calendar |
updated_fields | array | List of fields that were modified |
previous_values | object | Original values of changed fields |
is_recurring | boolean | Whether event is part of recurring series |
update_scope | string | Scope of update for recurring events |
recurring_event_id | string | Master event ID (if instance) |
event | object | Complete updated event details |
Error Handling
Event Not Found
Error:
{
"error": "Event not found with ID 'abc123xyz' in calendar 'primary'..."
}
Solution:
- Verify event_id using Get Events tool
- Check that event hasn't been deleted
- Ensure you're using the correct calendar_id
No Fields to Update
Error:
{
"error": "No fields to update. Specify at least one field to update..."
}
Solution: Provide at least one field to modify (summary, start_time, location, etc.)
Permission Denied
Error:
{
"error": "Insufficient permissions to update this event..."
}
Solution:
- Only event organizers can update events
- Ensure you have write access to the calendar
- Cannot update events in read-only calendars
Cannot Mix Attendee Parameters
Error:
{
"error": "Cannot use 'attendees' with 'add_attendees' or 'remove_attendees'..."
}
Solution: Use either:
attendeesto replace all attendees, ORadd_attendees/remove_attendeesfor incremental changes
Cannot Mix Timed and All-Day
Error:
{
"error": "Cannot specify both 'start_time' and 'all_day_date'..."
}
Solution: Update with either timed fields (start_time) OR all-day fields (all_day_date), not both.
Invalid Recurring Scope
Error:
{
"error": "Cannot specify recurring_event_update_scope for non-recurring events..."
}
Solution: Only use recurring_event_update_scope when updating recurring events.
Calendar API Not Enabled
Error:
{
"error": "Google Calendar API is not enabled in your Google Cloud project..."
}
Solution: Follow Setup Guide to enable the API.
Update Modes
Partial Update (Default)
Only updates fields you specify. All other fields remain unchanged.
{
"update_mode": "partial",
"summary": "New Title"
}
Best for: Making targeted changes without affecting other properties.
Full Update
Replaces the entire event. Requires summary and timing information.
{
"update_mode": "full",
"summary": "Complete Replacement",
"start_time": "2024-01-20T10:00:00",
"end_time": "2024-01-20T11:00:00"
}
Best for: Complete event replacement or when you want to ensure no unexpected fields remain.
Recurring Event Updates
Update Scope Options
| Scope | Description | Use Case |
|---|---|---|
this_instance | Update only this occurrence | Change time for one meeting |
this_and_future | Update this and all future occurrences | Change location starting now |
all_instances | Update entire series | Change title of all meetings |
Recurring Event Examples
Update title for all instances:
{
"event_id": "recurring_master_id",
"summary": "New Series Title",
"recurring_event_update_scope": "all_instances"
}
Reschedule one instance:
{
"event_id": "instance_id_20240120T100000Z",
"start_time": "2024-01-20T15:00:00",
"recurring_event_update_scope": "this_instance"
}
Change location for remaining meetings:
{
"event_id": "instance_id_20240120T100000Z",
"location": "New Room",
"recurring_event_update_scope": "this_and_future"
}
Limitations
-
Organizer Only - Only the event organizer can update events. Attendees cannot make changes.
-
No Partial Attendee Updates - When using
attendeesparameter, you replace the entire list. Useadd_attendees/remove_attendeesfor incremental changes. -
Recurring Complexity - "this_and_future" updates can be complex. The tool may fall back to updating only the instance.
-
No Custom Reminders - Cannot update reminder settings through this tool.
-
No Attachment Management - Cannot add/remove file attachments.
-
No Color Selection - Cannot change event color.
-
OAuth Only - Requires Google Account with OAuth (App Passwords don't support Calendar API).
-
Read Calendar ID - Cannot move events between calendars by updating calendar_id.
Tips
-
Get Event ID First - Use Get Events tool to find the correct event_id before updating.
-
Partial Updates - Default
update_mode: "partial"is safer. Only changes fields you specify. -
Attendee Management - Use
add_attendees/remove_attendeesto avoid accidentally removing attendees. -
Preserve Duration - If you only specify
start_time, the tool keeps the original event duration. -
Notifications Default -
send_notificationsdefaults totrue. Set tofalsefor silent updates. -
Previous Values - Response includes
previous_valuesto see what changed. -
Recurring Events - Always specify
recurring_event_update_scopewhen updating recurring events to be explicit about what you're changing. -
Timezone Handling - When updating times without timezone info, they're interpreted in the calendar's timezone. Include timezone offset or use
timezoneparameter for clarity. -
Multiple Changes - You can update multiple fields in one call for efficiency.
-
Test with Non-Important Events - When learning recurring event updates, test on non-critical events first.
Related Tools
- List Calendars - Get calendar IDs
- Get Events - Find event IDs to update
- Create Event - Create new events
- Delete Event - Remove events
Billing
Cost: 1 credit per execution
Fixed cost regardless of whether updating single instance or entire recurring series.