Docs
Get API key
conversations

List conversations

Returns conversations the API key's user can see, ordered by created_at descending (newest first). Each list entry contains a short summary and source metadata (no source content). Call GET /conversations/{id} to fetch the full payload including source content.

GET /api/v1/conversations

Query parameters

limit
integer
Page size (max 100).
cursor
string
Cursor returned from a previous list response.
folder_id
string
Restrict to conversations in this folder. By default this includes any descendant subfolder; pass recursive=false for direct children only.
recursive
boolean
When folder_id is set, controls whether descendants are included. Default true (any depth); set false to limit to conversations whose immediate folder is folder_id.
status
"ready" · "pending" · "error" · "all"
Filter by status. Defaults to ready so that polling integrations don't see in-progress or failed conversations. Pass all to include every status.
created_after
string · date-time
Only return conversations created strictly after this timestamp. Use the created_at of the newest conversation from your previous sync as the next value. ISO 8601.
tag_id
array of string
Restrict to conversations carrying this tag. Repeat the parameter (?tag_id=a&tag_id=b) to match conversations that have any of the given tags. Get tag ids from GET /tags.
created_before
string · date-time
Only return conversations created strictly before this timestamp. ISO 8601.
updated_after
string · date-time
Only return conversations changed strictly after this timestamp (renamed, moved or re-analysed; tag changes do not count). ISO 8601. Useful for sync-style polling alongside created_after.
q
string
Case-insensitive substring match on the conversation title.
created_by_me
boolean
true returns only conversations whose recording the API key's user created; otherwise every conversation the user can see.
include_summary
boolean
Also include each conversation's summary (the same field as GET /conversations/{id}). When set, limit may be at most 25.
include_attendees
boolean
Also include attendees, the calendar invitee emails of each conversation's recording. When set, limit may be at most 25.
person_ids
array of string · uuid
Restrict to conversations containing these people. Repeat the parameter for multiple ids. Get person ids from GET /persons.
person_match
"all" · "any"
With multiple person_ids, require every person (all, the default) or at least one person (any).

Response fields

data
array of object
↳id
string
↳title
string · nullable
↳created_at
string · date-time
When the conversation was created in Klang. Use this as the next created_after value for incremental sync.
↳updated_at
string · date-time
↳status
"pending" · "ready" · "error" · nullable
Processing state. Wait for ready before reading summary or transcript content.
↳termination_reason
"not_admitted" · "verification_required" · "captcha_required" · "bot_blocked" · "spawn_rejected" · "spawn_failed" · nullable
When status is error because a meeting-bot recording was terminated before audio could be captured, this explains why. null for any other error (e.g. transcription failure) and for non-error states. - not_admitted — the bot was never let into the meeting (host didn't admit it from the lobby/waiting room within the timeout). - verification_required — the meeting platform asked the bot to complete email verification, which it can't do. - captcha_required — the meeting platform asked the bot to solve a CAPTCHA, which it can't do. - bot_blocked — the host organisation blocks meeting bots, so the bot was refused before it could join. - spawn_rejected — the meeting platform refused the bot for another reason (e.g. the meeting can't be joined). - spawn_failed — the bot couldn't be sent to the meeting.
↳folder_id
string · nullable
ID of the immediate folder containing the conversation. null for conversations at the workspace root.
↳digest
string · nullable
AI-generated short summary (≤80 characters) with the key names and topics, optimised to distinguish this conversation from similar ones. Present in both list and retrieve responses.
↳tags
array of object
Tags applied to the conversation (AI suggestions the user hasn't accepted are not included). Empty when the conversation has no tags. Use GET /tags for the full catalog including descriptions.
↳id
string
↳name
string
↳color
string · nullable
Hex colour (e.g. #2E7D32), or null if the tag has no colour.
↳summary
string · nullable
Only present when the request set include_summary=true. Same content as summary on GET /conversations/{id}.
↳attendees
array of string
Only present when the request set include_attendees=true. Calendar invitee emails of the recording, deduplicated.
↳sources
array of object
A piece of input attached to a conversation. Klang's summary and analysis are derived from the conversation's full set of sources — so this is what you read when you want to see what the AI was working from. Most conversations have a transcript as their primary source plus any extras the user attached. List responses return this minimal shape; use GET /conversations/{id} for the full version with title, added_at, content, participants, and calendar attendee emails.
↳id
string
↳type
"transcript" · "document" · "text" · "file"
What kind of input this source is. - transcript — what was said in a recorded meeting. The full speaker-labeled, time-stamped text is in content (on Source). - document — a document authored inside Klang (agendas, notes, decision logs, etc.). - text — a snippet of plain text the user pasted into the conversation. - file — an uploaded file (PDF, slide deck, Word doc). Extracted plain text is in content.
↳duration_seconds
integer · nullable
Recording length. null for non-transcript sources.
↳language
string · nullable
ISO 639-3 code (e.g. eng, swe). null for non-transcript sources.
next_cursor
string · nullable
has_more
boolean