{ "paths": { "/calendars/{id}/export.ics": { "get": { "tags": ["ICS"], "summary": "Export calendar as ICS", "description": "Exports all events from a calendar in ICS (iCalendar) format with full RFC 5545 support including reminders (VALARM), attendees, all-day events, and recurrence rules. Requires `calendars:read` scope.", "operationId": "exportCalendarICS", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" }, "description": "Calendar ID" } ], "responses": { "200": { "description": "ICS calendar file", "content": { "text/calendar": { "schema": { "type": "string" } } } }, "401": { "description": "Not authenticated", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Insufficient scope or permission", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Calendar not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/calendars/import": { "post": { "tags": ["ICS"], "summary": "Import an ICS file", "description": "Imports events from an ICS file into a specified calendar. Supports VALARM (reminders), ATTENDEE, TZID, VALUE=DATE (all-day events), and RRULE. The file is sent as multipart form data. Requires `calendars:write` scope.", "operationId": "importCalendarICS", "requestBody": { "required": true, "content": { "multipart/form-data": { "schema": { "type": "object", "required": ["calendar_id", "file"], "properties": { "calendar_id": { "type": "string", "format": "uuid", "description": "Target calendar ID" }, "file": { "type": "string", "format": "binary", "description": "ICS file to import" } } } } } }, "responses": { "200": { "description": "Import successful", "content": { "application/json": { "schema": { "type": "object", "required": ["ok", "imported"], "properties": { "ok": { "type": "boolean", "example": true }, "imported": { "type": "object", "properties": { "events": { "type": "integer", "example": 12 } } } } } } } }, "400": { "description": "Validation error or invalid ICS", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "401": { "description": "Not authenticated", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Insufficient scope or permission", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/calendars/import-url": { "post": { "tags": ["ICS"], "summary": "Import from iCal URL", "description": "Fetches an iCal feed from the given URL and imports all events into the specified calendar. Supports http, https, and webcal protocols. Requires `calendars:write` scope.", "operationId": "importCalendarFromURL", "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "required": ["calendar_id", "url"], "properties": { "calendar_id": { "type": "string", "format": "uuid", "description": "Target calendar ID" }, "url": { "type": "string", "format": "uri", "description": "iCal feed URL (http, https, or webcal)", "example": "https://example.com/calendar.ics" } } } } } }, "responses": { "200": { "description": "Import successful", "content": { "application/json": { "schema": { "type": "object", "required": ["ok", "imported", "source"], "properties": { "ok": { "type": "boolean", "example": true }, "imported": { "type": "object", "properties": { "events": { "type": "integer", "example": 12 } } }, "source": { "type": "string", "format": "uri", "description": "The URL that was imported" } } } } } }, "400": { "description": "Validation error, unreachable URL, or invalid ICS", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "401": { "description": "Not authenticated", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "403": { "description": "Insufficient scope or permission", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/cal/{token}/feed.ics": { "get": { "tags": ["ICS"], "summary": "Public iCal feed", "description": "Returns a public iCal feed for a calendar that has been marked as public. No authentication required. This URL can be used to subscribe to the calendar in Google Calendar, Apple Calendar, Outlook, etc. The `ical_url` is returned in the Calendar object when `is_public` is true.", "operationId": "publicCalendarFeed", "parameters": [ { "name": "token", "in": "path", "required": true, "schema": { "type": "string" }, "description": "Public calendar token (from the calendar's ical_url)" } ], "responses": { "200": { "description": "ICS calendar feed", "content": { "text/calendar": { "schema": { "type": "string" } } } }, "404": { "description": "Calendar not found or not public", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "security": [] } } } }