Available tools
Every connection gets the read tools below, each wrapping an endpoint of the v1 REST API and scoped to the connected workspace. List conversations or notes, then open the item you want. Notes are private to the connected user, including when that user is a workspace administrator. Connections granted write access also get the write tools.
list-conversations GET /api/v1/conversations List conversations (transcribed meetings and notebooks), newest first. Returns metadata, a one-line digest and the source list, not the AI summary or transcript content. Use get-conversation to read content.
| limit | number | Max items, 1–100. Defaults to 25. |
| cursor | string | Pagination cursor from a previous response. |
| q | string | Case-insensitive match on the title. For what was said, use search-conversations. |
| folder_id | string | Restrict to a single folder. |
| tag_id | string | Restrict to conversations carrying this tag. |
| recursive | boolean | Include sub-folders. Defaults to true. With folder_id omitted, false lists only top-level folders. |
| status | enum | ready, pending, error, or all. Defaults to ready. |
| created_after | string | ISO 8601 timestamp lower bound. |
| created_before | string | ISO 8601 timestamp upper bound. |
| updated_after | string | Only conversations renamed, moved or re-analysed after this ISO 8601 timestamp (tag changes do not count). Useful for sync-style polling. |
| created_by_me | boolean | Only conversations the current user created. |
| include_summary | boolean | Also return each conversation's AI summary. Caps limit at 25. |
| include_attendees | boolean | Also return the calendar attendee emails of each conversation. Caps limit at 25. |
get-conversation GET /api/v1/conversations/{id} Retrieve one conversation in full: its AI summary, structured key points per topic, linked todos, tags, related conversations (other recordings of the same recurring meeting, plus links the user accepted), and every source the user can view. Each source carries its text when it could be extracted (transcripts as speaker turns, documents as markdown) and participants when known. Also opens analysis reports found by search-conversations.
| id required | string | Conversation id, from list-conversations. |
| include_content | boolean | false omits source text. Defaults to true. |
| from_seconds | number | Only transcript turns ending at or after this offset. |
| to_seconds | number | Only transcript turns starting at or before this offset. |
get-document GET /api/v1/documents/{id} Retrieve a document created in Klang, by a user or by the AI, as markdown. Opens document hits from search-conversations and document sources seen on a conversation.
| id required | string | Document id, from search-conversations or a conversation source. |
list-folders GET /api/v1/folders List folders the current user can see. Folder ids can be passed as the folder_id filter on list-conversations.
| limit | number | Max items, 1–100. |
| cursor | string | Pagination cursor from a previous response. |
| folder_id | string | Restrict to a single parent folder. |
| recursive | boolean | Include sub-folders. |
get-folder GET /api/v1/folders/{id} Retrieve one folder: name, parent, description and whether it is shared with the whole workspace. Labels a folder_id seen on a conversation without paging list-folders.
| id required | string | Folder id. |
list-tags GET /api/v1/tags The workspace's tags with ids, colors and how many conversations each is applied to. Pass a tag id as tag_id to list-conversations.
No parameters.
list-todos GET /api/v1/todos The current user's todos, newest first. Defaults to open todos.
| limit | number | Max items, 1–100. Defaults to 25. |
| cursor | string | Pagination cursor from a previous response. |
| status | enum | open, done, dismissed or all. Defaults to open. |
| due_before | string | Only todos due before this ISO 8601 date. |
| due_after | string | Only todos due on or after this ISO 8601 date. |
| conversation_id | string | Only the user's todos from this conversation. |
search-conversations GET /api/search/global Full-text search across transcripts, conversation summaries, documents and files. Transcript hits carry the offset in seconds where the text was said. The query supports "exact phrases", @name (speaker), @domain.com or person@domain.com (attendee) and >2026-01-01 / <2026-02-01 date bounds. Analysis hits open with get-conversation, document hits with get-document. Returns enabled=false when content search is off for the workspace.
| q required | string | Search text and operators, up to 1,000 characters. |
| types | enum[] | transcript, conversation, document, file. Defaults to all. |
| folder_id | string | Restrict to this folder and its sub-folders. |
| tag_id | string | Restrict to conversations carrying this tag. |
| created_after | string | Only content created on or after this date (YYYY-MM-DD). |
| created_before | string | Only content created before this date (YYYY-MM-DD). |
| limit | number | Max results, 1–100. Defaults to every verified hit. |
get-recording-url POST /api/hls-token Time-limited links (1 hour) to a conversation's recording as HLS playlists: audio, and video when there is one. They play in any HLS-capable player and can be saved with ffmpeg. Pro or Enterprise plan; at most 30 links per day per user.
| conversation_id required | string | Conversation id. |
list-calendar-events GET /api/user/calendar-sync/upcoming-meetings The next 7 days of events from the user's connected calendar, with meeting link, attendees and will_join (whether the Klang recorder is set to join). Events that already have a recording carry its conversation id and status.
No parameters.
list-schedules GET /api/notebook-schedules The user's scheduled analyses with cadence, sources, destinations, last/next run and the analyses each has produced. Needs a Pro or Enterprise plan; on other plans the tool returns a plan_upgrade_required error with an upgrade link.
No parameters.
get-schedule GET /api/notebook-schedules/{id} One scheduled analysis with its prompt, source and target folders and every produced analysis.
| id required | string | Schedule id. |
list-automations GET /api/automations The user's automations with destination, status, conditions and latest run.
No parameters.
get-automation GET /api/automations/{id} One automation with its full configuration and latest run.
| id required | string | Automation id. |
list-automation-runs GET /api/automations/{id}/runs Runs of one automation, newest first, with status, conversation, delivered url (when the destination has one) and error code.
| id required | string | Automation id. |
| limit | number | 1–100, default 10. |
| offset | number | Pagination offset. |
| failed_only | boolean | Only failed or terminated runs. |
list-automation-destinations GET /api/automations/destinations Where automations and scheduled analyses can deliver: only the listed slugs are usable in the workspace. Each entry says whether its integration is connected and gives a config_example for destination_config. Creating with an unconnected destination returns a connect_url the user can open to connect it.
No parameters.
get-me GET /api/v1/me Return the user (id, email, name, language, workspace role) and workspace (id, name, plan) the connection is bound to. Useful for confirming the account and whether plan-gated tools apply.
No parameters.
list-members GET /api/v1/members Active members of the workspace with id, email, name and role. Resolves a person's name to an email for attendee search or to an id for todo assignees. Pass q with part of the email (which usually contains the name) rather than paging everyone.
| q | string | Case-insensitive match on the email address. |
| limit | number | Max items, 1–25. Defaults to 25. |
| cursor | string | Pagination cursor from a previous response. |
list-notes GET /api/v1/notes List your private dictated or typed notes, newest first, with titles and previews. The same notes are available in Klang web and desktop.
| limit | number | Page size, 1–100. Defaults to 25. |
| cursor | string | next_cursor from a previous response. |
search-notes GET /api/v1/notes/search Search your note titles, original text and AI-transformed text. Results contain verified snippets labeled original or transformed. Search can lag recent saves and returns enabled=false when workspace content search is disabled.
| q required | string | Search text, up to 1,000 characters. Supports quoted phrases and date filters. |
get-note GET /api/v1/notes/{id} Read a private note by stable ID. Returns the original and current AI result separately, with revision metadata and transformation_stale when the original has changed.
| id required | string | Note UUID from list-notes or search-notes. |
Write tools
Only present when the connection has write access: keep Create and edit access ticked on the OAuth consent screen, or when creating an API key (both are on by default). Existing connections stay read-only until reconnected. Every write runs under the connected user's own permissions, so a tool fails with a permission error wherever the user could not do the same thing in Klang. Tools for plan-gated features (scheduled analyses, automations, integrations) are always listed; on a plan without the feature they return a plan_upgrade_required error with an upgrade link so the assistant can explain what is possible.
update-todo Change a todo's title, details or due date, or set its status to done, dismissed or open.
| id required | string | Todo id from list-todos. |
| title | string | New title. |
| details | string | New details. |
| due_date | string | ISO 8601 date, or null to clear. |
| status | enum | open, done or dismissed. |
| assignee_id | string | Reassign to this member (id from list-members). |
delete-todo Permanently delete a todo.
| id required | string | Todo id from list-todos. |
create-todos Create one or more todos (up to 50) for the connected user, optionally linked to a conversation. Entries are created independently; the response lists created todos and failed entries.
| todos required | object[] | Entries with title, details, due_date, conversation_id and assignee_id (defaults to the connected user). |
update-conversation Rename a conversation and/or move it to another folder. Needs edit access to the conversation and both folders.
| id required | string | Conversation id. |
| title | string | New title. |
| folder_id | string | Destination folder id from list-folders. |
tag-conversation Add and/or remove workspace tags on a conversation. Returns the tags applied afterwards.
| id required | string | Conversation id. |
| add_tag_ids | string[] | Tag ids to apply. |
| remove_tag_ids | string[] | Tag ids to remove. |
create-tag Create a workspace tag. Workspace admins only.
| name required | string | Tag name, unique in the workspace. |
| color | string | Hex color such as #3B82F6. |
| description | string | What the tag is for. |
update-tag Rename a tag or change its color or description. Workspace admins only.
| id required | string | Tag id from list-tags. |
| name | string | New name. |
| color | string | Hex color. |
| description | string | New description. |
create-folder Create a folder inside an existing one, or a new top-level project folder when parent_folder_id is omitted. Top-level folders are private to the connected user unless shared is true.
| name required | string | Folder name. |
| parent_folder_id | string | Parent folder id from list-folders. |
| description | string | Folder description. |
| shared | boolean | Top-level folders only. true lets everyone in the workspace edit it. Defaults to false. |
update-folder Rename a folder, change its description, move it under another folder, or change whether the whole workspace can edit it (top-level folders only, needs folder admin). Only passed fields change. A folder cannot be moved to the top level; create a new top-level folder and move its conversations there instead.
| id required | string | Folder id from list-folders. |
| name | string | New name. |
| description | string | New description. |
| parent_folder_id | string | Move under this folder. |
| shared | boolean | true lets everyone in the workspace edit it; false restricts it to members. |
delete-folder Delete a folder that contains no conversations, documents, files or subfolders. System folders and folders with content are refused.
| id required | string | Folder id from list-folders. |
upload-recording Create a conversation from an audio/video file Klang fetches itself: a public https link (presigned S3, Dropbox or Drive direct download, cloud-recording link) or a YouTube URL. Returns the conversation id with status pending; poll get-conversation until it is ready.
| url required | string | Direct https link to the media file, or a YouTube URL. |
| name | string | Conversation title. Required unless the url is a YouTube link. |
| folder_id | string | Destination folder. Defaults to your personal folder. |
| language | string | Spoken language as ISO 639-3 (swe, eng, …). Defaults to auto-detect. |
create-upload Prepare an upload of a local audio/video file. Returns a single-use URL, valid for 15 minutes, that accepts one multipart/form-data POST with the file in a field named file, plus a ready curl command. The POST responds with the new conversation id.
| name required | string | Conversation title. |
| folder_id | string | Destination folder. Defaults to your personal folder. |
| language | string | Spoken language as ISO 639-3. Defaults to auto-detect. |
create-meeting-bot POST /api/v1/bots Send the Klang recorder bot to a Google Meet, Microsoft Teams or Zoom meeting and create the conversation it records into.
| meeting_url required | string | Meeting link. |
| name required | string | Conversation title. |
| folder_id | string | Destination folder. |
| language | string | Spoken language as ISO 639-3. Defaults to auto-detect. |
create-schedule POST /api/notebook-schedules Create a scheduled analysis that runs a prompt over new conversations in the given folders and/or tags and delivers the result. Pro or Enterprise plan.
| name required | string | Schedule name. |
| prompt required | string | What the analysis should produce. |
| frequency | enum | manual, daily, weekdays or weekly. Defaults to daily. |
| time | string | Local time HH:MM. Defaults to 09:00. |
| weekday | number | For weekly: 0 (Sunday) to 6. Defaults to 1. |
| timezone | string | IANA timezone. Defaults to Europe/Stockholm. |
| source_folder_ids | string[] | Folders to draw conversations from (recursive). |
| source_tag_ids | string[] | Tags to draw conversations from. |
| target_folder_id | string | Where produced analyses go. Defaults to the personal folder. |
| destinations | object[] | [{ slug, config }] deliveries; see list-automation-destinations. |
update-schedule PUT /api/notebook-schedules/{id} Change any field of a scheduled analysis or pause/resume it with status. Only passed fields change; takes the same fields as create-schedule.
| id required | string | Schedule id. |
| status | enum | active or paused. |
delete-schedule DELETE /api/notebook-schedules/{id} Delete a scheduled analysis. Produced analyses are kept.
| id required | string | Schedule id. |
run-schedule POST /api/notebook-schedules/{id}/run Start a run now, optionally over a specific period. Returns immediately; poll get-schedule.
| id required | string | Schedule id. |
| start_date | string | ISO 8601 start of the period. |
| end_date | string | ISO 8601 end, default now. |
create-automation POST /api/automations Create an automation that delivers a report for every new conversation matching the conditions. The response includes which recent conversations the conditions match. If the destination needs an integration that is not connected, the error carries a connect_url the user can open. Pro or Enterprise plan.
| destination required | string | Destination slug. |
| destination_config | object | Per-destination config; see list-automation-destinations. |
| content | object | parts (summary, details, todos, custom), instruction, include_transcript. |
| conditions | object | operator plus rules; no rules matches every conversation. |
| scope | enum | user (default) or workspace. |
| name | string | Defaults to the destination name. |
update-automation PATCH /api/automations/{id} Change name, destination_config, content, conditions or scope, or set status to active, paused or disabled. Same fields as create-automation; the destination cannot change. Returns the recent matches when conditions or scope change.
| id required | string | Automation id. |
| status | enum | active, paused or disabled. |
delete-automation DELETE /api/automations/{id} Delete an automation and its run history.
| id required | string | Automation id. |
test-automation POST /api/automations/{id}/test Run an automation once on a specific conversation, ignoring its conditions, and deliver for real. Returns the delivered report text and link. Limited to 10 per hour; test runs show in list-automation-runs but not as latest_run.
| id required | string | Automation id. |
| conversation_id required | string | Conversation to run it on. |
set-bot-attendance POST /api/user/calendar-sync/toggle-meeting Turn the Klang recorder on or off for an upcoming calendar event from list-calendar-events. Idempotent: setting the state it already has is a no-op.
| calendar_event_id required | string | Event id from list-calendar-events. |
| enabled required | boolean | true = the recorder will join. |
| whole_series | boolean | Apply to every occurrence of a recurring meeting. Defaults to this occurrence only. |