write_public_calendar_events
Behavior, inputs, outputs and permissions for write_public_calendar_events.
Reviewed · 2026-10-06 / Ridian
This reference is generated from the published tool contract.
Behavior and boundaries
Section titled “Behavior and boundaries”Creates, replaces or deletes up to 100 events in one subscription calendar. upserts replace an event with the same external_id completely; deletes remove events by external_id. Results are per item; one invalid item does not stop the others. Content is public. Subscribers see changes on their next fetch (Google can take up to 24 hours).
Permissions
Section titled “Permissions”Granted scopes, accounts, calendars and visibility rules limit access. Workspace administrators do not automatically gain access to other users’ accounts.
public_calendars:write
{ "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "calendar_id": { "type": "string", "minLength": 1, "maxLength": 64, "description": "Calendar id from list_public_calendars." }, "upserts": { "maxItems": 100, "type": "array", "items": { "type": "object", "properties": { "external_id": { "type": "string", "pattern": "^[A-Za-z0-9._:-]{1,128}$", "description": "Your stable id for the event: 1–128 letters, digits and . _ : -. Writing the same id again replaces the event." }, "event": { "type": "object", "properties": { "title": { "type": "string", "minLength": 1, "maxLength": 255 }, "start": { "type": "string", "description": "Local \"2027-01-16T10:00\" in the event zone, an ISO timestamp with offset, or a date \"2027-01-16\" for all-day events." }, "end": { "description": "Exclusive date for all-day events; otherwise like start. Default: calendar default length.", "type": "string" }, "timezone": { "type": "string", "maxLength": 64 }, "all_day": { "type": "boolean" }, "location": { "type": "string", "maxLength": 500 }, "url": { "description": "https link shown in the event.", "type": "string", "maxLength": 2000 }, "description": { "type": "string", "maxLength": 65536 }, "status": { "type": "string", "enum": [ "confirmed", "tentative", "cancelled" ] }, "show_as": { "type": "string", "enum": [ "free", "busy" ] }, "categories": { "maxItems": 10, "type": "array", "items": { "type": "string", "minLength": 1, "maxLength": 50 } }, "alarms": { "description": "Reminders in minutes before start.", "maxItems": 3, "type": "array", "items": { "type": "integer", "minimum": 0, "maximum": 40320 } }, "recurrence": { "type": "object", "properties": { "rules": { "minItems": 1, "maxItems": 5, "type": "array", "items": { "type": "string", "maxLength": 500 }, "description": "RRULEs such as \"FREQ=WEEKLY;BYDAY=TH;COUNT=6\". DAILY to YEARLY only." }, "except_dates": { "maxItems": 1000, "type": "array", "items": { "type": "string" } } }, "required": [ "rules" ], "additionalProperties": false } }, "required": [ "title", "start" ], "additionalProperties": {} } }, "required": [ "external_id", "event" ], "additionalProperties": false } }, "deletes": { "maxItems": 100, "type": "array", "items": { "type": "string", "pattern": "^[A-Za-z0-9._:-]{1,128}$", "description": "Your stable id for the event: 1–128 letters, digits and . _ : -. Writing the same id again replaces the event." } } }, "required": [ "calendar_id" ], "additionalProperties": false}Output
Section titled “Output”{ "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "results": { "type": "array", "items": { "type": "object", "properties": { "external_id": { "type": "string" }, "status": { "type": "number" }, "changed": { "type": "boolean" }, "deleted": { "type": "boolean" }, "error": { "type": "object", "properties": { "code": { "type": "string" }, "detail": { "type": "string" } }, "required": [ "code" ], "additionalProperties": {} } }, "required": [ "external_id", "status" ], "additionalProperties": false } } }, "required": [ "results" ], "additionalProperties": false}Errors and retries
Section titled “Errors and retries”Check the tool result for errors. Do not blindly retry writes after a timeout. Check the current resource or send status first.