List the calendar sources in a workspace
Returns every calendar the caller can see, including connected provider calendars and database-backed record sources, with each source's sync state. Requires the `workspace:read` permission; for user principals the native Snoze calendar is materialized on first call so it is always offered. Sources the caller has no item access to are omitted rather than erroring.
Authorization
apiKey Workspace API key created in Workspace settings → API keys. Scopes on the key bound what it can read and write.
In: header
Path Parameters
Response Body
application/json
application/json
application/json
curl -X GET "https://example.com/v1/workspaces/string/calendar/sources"{ "data": [ { "id": "string", "workspaceId": "string", "kind": "native", "name": "string", "color": "string", "enabledByDefault": true, "writable": true, "syncState": "current", "calendarId": "string", "connectionId": "string", "provider": "google_workspace", "databaseId": "string", "startFieldId": "string", "endFieldId": "string", "allDay": true, "isSystemField": true, "lastSyncedAt": "string" } ]}{ "_tag": "ApiNotFound", "error": "not_found", "message": "That item does not exist, or this key cannot see it.", "status": 404}{ "_tag": "ApiNotFound", "error": "not_found", "message": "That item does not exist, or this key cannot see it.", "status": 404}Apply a batch of canvas operations
Applies an ordered batch of insert, update, and delete element operations in one transaction and returns the affected elements with the new workspace version. Requires `canvas:write` on the surface. Batches are capped at 500 operations, and non-UUID element ids, unknown element types, and malformed order indexes are rejected as validation errors.
List calendar occurrences in a date range
Expands recurring events into individual occurrences between `from` and `to` across the caller's accessible sources, refreshing database-backed events first, and returns them with per-source sync health. Requires `workspace:read`. Narrow the result with `sourceIds`, `statuses` (both comma-separated), and a `search` substring on the title; ranges must be positive and no longer than two years or the request is rejected as a validation error.