Write events
write_eventsCreate, update (edit), move/reschedule, shift, reflect, or manage a block's checklist — bulk/batch, one or many in a single call. Pass ops, an array where each item has an op (create | update | move | shift | reflect | checklist) plus that op's fields; a single edit is just a 1-item array. Times are 24-hour HH:MM; for an event crossing midnight set endNextDay=true. reflect records how a PAST planned event actually went (kept | skipped | changed | added, with an optional actual time) — it never renames or re-times the plan; target one occurrence of a recurring event by its seriesId@YYYY-MM-DD id. checklist manages a block's microtasks: pass items to set/replace the ordered list (a template edit — whole series, or one occurrence with scope 'this'), or check/uncheck (by item id or exact text) to tick them off for a single occurrence; the current microtasks + each one's done state come back on a get_schedule read as the event's checklist. For a recurring event choose a scope: 'all' (default), 'future', or 'this' (the last two need occurrenceDate). To re-time an existing event use move (new start/date, duration kept) or shift (relative nudge by byMinutes); use update only to also rename, re-kind, re-area, or resize (change end). If you know the duration but not a conflict-free time (or only a rough window), use schedule instead of a create. By default the whole batch is atomic: if ANY op fails validation (e.g. a conflict), nothing is written and the failing ops are returned as errors — fix and resend. Pass partial: true for best-effort (apply what's valid). Ops apply in order as one transaction and are checked against each other: two creates can't double-book a slot, and an earlier move frees a slot a later op can reuse. Target each event id at most once per batch. Reference an area/activity type by id or by areaName/activityTypeName; create new ones first with manage_categories. If the user has a Google Calendar connected, creating or editing a calendar-linked event (or one created under their default sync calendar) also pushes the change to Google — the same as editing on the dial; don't edit an event get_schedule/find_event marked readOnly (it's from a calendar the user doesn't own and the change would silently revert). To remove events or clear a day use delete_events. The response reports applied, failed, skipped (validated but not written because the atomic batch was rejected), and per-op results (each with its 0-based index).
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| ops | Yes | ||
| render | No | When the user is looking at their reassign dial, set true to repaint it with the updated day in this same call. Otherwise the change reaches an open dial only if the host forwards this result. | |
| concise | No | Drop the human-readable `suggestedFollowup` prose from the response (the structured `undoToken` is still returned). Saves tokens. | |
| partial | No | Best-effort mode: apply the ops that succeed and report the rest as errors, instead of the default all-or-nothing. |