All nodes/Integrations/Calendar

Calendar Query

REPORT calendar-query for VEVENT or VTODO in a time range.

Calendar Query
Calendar storeSuccess
Error

Type in the graph: calendar_query

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
Calendar Query
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

Almost every calendar graph starts here: the other nodes work by event href, and this is the node that produces one. When the addresses are already known, fetch the bodies in a single request with Calendar Multiget. When all you need are busy intervals, with no titles or attendees, use Calendar Free/Busy.

How it works

The node queries one collection over a time range. Start and end are required, in ISO 8601 (2026-07-01T00:00:00Z); a value without a time zone is read as UTC, the end must be after the start, and the range may not exceed 366 days. The fields are templates, so the bounds are usually computed further up the graph.

A blank “Calendar collection URL” means the default calendar of the connection. “Component type” decides what to look for — events (VEVENT) or tasks (VTODO) — one of the two per run.

The output carries component and events: an array of records with href, etag, uid, summary, dtstart, dtend, all_day, timezone, rrule, rdates, exdates, recurrence_id, status, sequence and last_modified. In a template: {{ nodes.<id>.output.events[0].href }}.

Common mistakes

  • An end given as a plain date cuts off the last day. 2026-07-31 reads as midnight, so events on 31 July fall outside the range. Write 2026-07-31T23:59:59Z.
  • A recurring event is one record. The node does not expand a series into occurrences: the rule sits in rrule, and dtstart/dtend describe the resource’s first component. The full document, overrides included, comes from Get Calendar Event.
  • Beyond 500 events the list is truncated silently. There is no error — narrow the range or split it into chunks.
  • A range longer than 366 days. The node stops with a VALIDATION code before sending the request.
  • An empty result is a success. The node finishes with events: []; branch on “found / not found” with an If / Else node, not with the error output.

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

Calendar collection URLcalendar_urlstring""

Collection URL to work with, e.g. https://cloud.example/remote.php/dav/calendars/user/personal/. Leave empty to use the default calendar URL of the connected CalDAV connection; discover URLs with the List Calendars node.

supports templates

Range starttime_startstring""

Start of the range, ISO 8601, inclusive. Example: 2026-07-01T00:00:00Z (a naive value is read as UTC).

supports templates

Range endtime_endstring""

End of the range, ISO 8601. Must be after the start; the range may not exceed 366 days. Example: 2026-07-31T23:59:59Z

supports templates

Component typecomponentstringVEVENT

What to look for: calendar events (VEVENT) or tasks (VTODO).

Options: VEVENT — Events (VEVENT), VTODO — Tasks (VTODO)

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.