---
{
  "id": "platform.calendar.recurring-and-instances",
  "topic": "calendar",
  "title": "Calendar recurring series and instances",
  "locale": "en",
  "version": "2026-08-12",
  "summary": "Calendar recurrence uses a bounded RRULE subset, stable instance IDs, and distinct this, thisAndFuture, and all mutation semantics.",
  "content": "Set `rrule` only when creating an event. Supported frequencies are DAILY, WEEKLY, MONTHLY, and YEARLY; supported components are FREQ, INTERVAL, COUNT, BYDAY, BYMONTHDAY, BYSETPOS, BYMONTH, and UNTIL. Components such as BYHOUR or WKST return `invalid_arguments`. The update action does not expose `rrule`. DST and local wall-clock expansion belong to the RRULE engine; never invent a five-field cron expression.\n\nAn occurrence is addressed as `<parentUUID>_<YYYYMMDDTHHMMSSZ>`, where the timestamp is its original UTC start. List/get results expose `isRecurringInstance`, `recurringEventId`, `originalStart`, and `instanceId`. Supplying an instance-form event ID or `updateScope` selects the recurring path. `this` and `thisAndFuture` require an instance ID; `all` may use the parent UUID. If an instance call omits scope, add the intended scope and retry.\n\nUpdate `this` adds an EXDATE to the parent and creates an exception row with its own UUID. Update `thisAndFuture` truncates the old parent with UNTIL and creates a new series; use the new series ID afterward. Update `all` changes the parent for the whole series. Delete `this` adds an EXDATE, delete `thisAndFuture` truncates UNTIL, and delete `all` soft-deletes the parent and series rows. An exception with no reminder override inherits the parent reminders.\n",
  "aliases": [
    "recurring calendar event",
    "recurring instance",
    "RRULE",
    "instanceId",
    "updateScope",
    "deleteScope",
    "this and future",
    "recurring series"
  ],
  "tags": [
    "calendar",
    "rrule",
    "recurrence"
  ],
  "relatedActions": [
    "arinova.calendar.list_events",
    "arinova.calendar.get_event",
    "arinova.calendar.create_event",
    "arinova.calendar.update_event",
    "arinova.calendar.delete_event"
  ],
  "relatedActionPrefixes": [],
  "url": "https://docs.arinova.ai/en/kb/calendar/recurring-and-instances/"
}
---

Set `rrule` only when creating an event. Supported frequencies are DAILY, WEEKLY, MONTHLY, and YEARLY; supported components are FREQ, INTERVAL, COUNT, BYDAY, BYMONTHDAY, BYSETPOS, BYMONTH, and UNTIL. Components such as BYHOUR or WKST return `invalid_arguments`. The update action does not expose `rrule`. DST and local wall-clock expansion belong to the RRULE engine; never invent a five-field cron expression.

An occurrence is addressed as `<parentUUID>_<YYYYMMDDTHHMMSSZ>`, where the timestamp is its original UTC start. List/get results expose `isRecurringInstance`, `recurringEventId`, `originalStart`, and `instanceId`. Supplying an instance-form event ID or `updateScope` selects the recurring path. `this` and `thisAndFuture` require an instance ID; `all` may use the parent UUID. If an instance call omits scope, add the intended scope and retry.

Update `this` adds an EXDATE to the parent and creates an exception row with its own UUID. Update `thisAndFuture` truncates the old parent with UNTIL and creates a new series; use the new series ID afterward. Update `all` changes the parent for the whole series. Delete `this` adds an EXDATE, delete `thisAndFuture` truncates UNTIL, and delete `all` soft-deletes the parent and series rows. An exception with no reminder override inherits the parent reminders.
