All nodes/Integrations/Calendar
Patch Calendar Event
Read-modify-write patch on first VEVENT in resource.
Type in the graph: calendar_patch_event
Exec
An error branch can be enabled (expose_error_output) to handle failures on their own path.
Ports can be split into separate execution and data handles.
Try it
Minimal working workflow
- Execute
- Data
- Execute + Data
Pick your own connection or knowledge base first — the graph carries REPLACE_ME.
When to use it
Changes selected fields of an existing event and leaves the rest alone. This is the right node for “push it back an hour”, “change the room”, “add a line to the description”. Replacing the object outright is Put Calendar Event.
How it works
The node reads the resource, edits its first VEVENT and writes it back — all in one step. Filled
fields replace values; blank ones leave them untouched. At least one field must be filled, or the
node stops with a VALIDATION code without contacting the server.
A blank ETag means “read the current one and write against that”: last write wins. A supplied ETag
turns a collision into a 412 refusal (error_code PRECONDITION_FAILED) instead of a silent
overwrite of somebody else’s edit.
The write bumps the event’s SEQUENCE counter by one — that is how clients learn the meeting was
updated. The output carries href, ics (the merged document) and etag, the new one; the token
you passed in is void afterwards.
Common mistakes
- A blank field clears nothing. Blank means “leave it”. Removing a description or a location takes a full rewrite through Put Calendar Event.
- Only the first VEVENT is edited. Modified occurrences of a recurring series living in the same resource stay as they were.
- “All-day event” on its own changes nothing. The flag decides how a new start and end are written. With neither of them filled, the node rewrites the event unchanged — only SEQUENCE grows.
- A second run with the old ETag. The first succeeds and issues a new token; the second, still
carrying the old one, fails on 412. In a chain of two edits use
{{ nodes.<patch>.output.etag }}. - A task cannot be patched here. The node looks for a VEVENT in the resource; on a VTODO it
stops with a
VALIDATIONerror.
Inputs
| Port | Wire | Payload | Notes |
|---|---|---|---|
Calendar storecalendar_store | Datadata | — | required |
Outputs
| Port | Wire | Payload | Notes |
|---|---|---|---|
Successoutput | Execute + Dataexecute_data | object | |
Erroron_error | Execute + Dataexecute_data | — | shown when expose_error_output = true |
Configuration
| Field | Type | Default | Description |
|---|---|---|---|
CalDAV connectionconnection_id | string | "" | Saved workspace CalDAV connection, so a simple calendar graph does not need a separate CalDAV Config node. A node wired to the 'calendar_store' port wins over this field. connection: caldavoverridden by port: calendar_store |
Event hrefhref | string | "" | Path or absolute URL of the calendar object, exactly as returned by Calendar Query or Calendar Multiget ({{ nodes.<query>.output.events[0].href }}). A relative path is resolved against the connection's base URL. Example: /remote.php/dav/calendars/user/personal/9f1c-1234.ics supports templates |
New titlesummary | string | "" | Replaces SUMMARY. Empty = leave the current title untouched. supports templates |
New descriptiondescription | string | "" | Replaces DESCRIPTION. Empty = leave the current text untouched. supports templates |
New locationlocation | string | "" | Replaces LOCATION. Empty = leave the current location untouched. supports templates |
New startdtstart | string | "" | Replaces DTSTART, ISO 8601. Empty = leave the current start untouched. supports templates |
New enddtend | string | "" | Replaces DTEND, ISO 8601. Empty = leave the current end untouched. supports templates |
All-day eventall_day | boolean | false | Write the new start/end as dates (VALUE=DATE) instead of times. |
| Advanced | |||
ETagetag | string | "" | Optimistic-concurrency token. Empty = read the current one first and write against that (last-write-wins). Supply it to make the update fail with 412 (error_code=PRECONDITION_FAILED) if someone edited the event meanwhile. The node returns the NEW etag. supports templates |
Shared fields
Every node has these three — the platform adds them, not the node author.
expose_error_output— When enabled, show an execution output to connect nodes that run if this step fails.split_ports_in— Show separate execution and data input handles instead of one combined port.split_ports_out— Show separate execution and data output handles instead of one combined port.