{ "paths": { "/calendars/{id}/subscriptions": { "get": { "tags": ["Subscriptions"], "summary": "List calendar subscriptions", "description": "Returns all iCal feed subscriptions for a calendar. Requires `calendars:read` scope.", "operationId": "listCalendarSubscriptions", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" }, "description": "Calendar ID" } ], "responses": { "200": { "description": "List of subscriptions", "content": { "application/json": { "schema": { "type": "object", "required": ["items", "page"], "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/CalendarSubscription" } }, "page": { "$ref": "#/components/schemas/PageInfo" } } } } } }, "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" } } } } } }, "post": { "tags": ["Subscriptions"], "summary": "Add a subscription", "description": "Adds an iCal feed subscription to a calendar. Fetches the feed, imports events, and creates a subscription for future syncs. Owner or editor only. Requires `calendars:write` scope.", "operationId": "addCalendarSubscription", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" }, "description": "Calendar ID" } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "required": ["url"], "properties": { "url": { "type": "string", "format": "uri", "description": "iCal feed URL (http, https, or webcal)", "example": "https://example.com/calendar.ics" }, "sync_interval_minutes": { "type": "integer", "nullable": true, "description": "Optional sync interval in minutes" } } } } } }, "responses": { "200": { "description": "Subscription added and events imported", "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" } } } }, "404": { "description": "Calendar not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/calendars/{id}/subscriptions/{subId}": { "delete": { "tags": ["Subscriptions"], "summary": "Delete a subscription", "description": "Removes an iCal feed subscription from a calendar. Owner or editor only. Requires `calendars:write` scope.", "operationId": "deleteCalendarSubscription", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" }, "description": "Calendar ID" }, { "name": "subId", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" }, "description": "Subscription ID" } ], "responses": { "200": { "description": "Subscription deleted", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/OkResponse" } } } }, "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 or subscription not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/calendars/{id}/subscriptions/{subId}/sync": { "post": { "tags": ["Subscriptions"], "summary": "Sync a subscription", "description": "Triggers an immediate sync of an iCal feed subscription. Fetches the feed and imports/updates events. Owner or editor only. Requires `calendars:write` scope.", "operationId": "syncCalendarSubscription", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" }, "description": "Calendar ID" }, { "name": "subId", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" }, "description": "Subscription ID" } ], "responses": { "200": { "description": "Sync completed", "content": { "application/json": { "schema": { "type": "object", "required": ["ok", "imported"], "properties": { "ok": { "type": "boolean", "example": true }, "imported": { "type": "object", "properties": { "events": { "type": "integer", "example": 5 } } } } } } } }, "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 or subscription not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } } } }