All nodes/Integrations/Calendar

Patch Calendar Event

Read-modify-write patch on first VEVENT in resource.

Patch Calendar Event
Calendar storeSuccess
Error

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

Entry
Patch Calendar Event
CalDAV Config
Exit
  • Execute
  • Data
  • Execute + Data
Press “Copy nodes”, open the editor and hit Ctrl+V on the canvas.

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 VALIDATION error.

Inputs

PortWirePayloadNotes
Calendar storecalendar_storeDatadata

required

Outputs

PortWirePayloadNotes
SuccessoutputExecute + Dataexecute_dataobject
Erroron_errorExecute + Dataexecute_data

shown when expose_error_output = true

Configuration

FieldTypeDefaultDescription
CalDAV connectionconnection_idstring""

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 hrefhrefstring""

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 titlesummarystring""

Replaces SUMMARY. Empty = leave the current title untouched.

supports templates

New descriptiondescriptionstring""

Replaces DESCRIPTION. Empty = leave the current text untouched.

supports templates

New locationlocationstring""

Replaces LOCATION. Empty = leave the current location untouched.

supports templates

New startdtstartstring""

Replaces DTSTART, ISO 8601. Empty = leave the current start untouched.

supports templates

New enddtendstring""

Replaces DTEND, ISO 8601. Empty = leave the current end untouched.

supports templates

All-day eventall_daybooleanfalse

Write the new start/end as dates (VALUE=DATE) instead of times.

Advanced
ETagetagstring""

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.