conversations
Retrieve a conversation
Returns the full conversation: metadata, the AI summary, and every
attached source with its content rendered as text. Also serves an
analysis report (a notebook produced by a scheduled analysis, with no
recording): its status is null and its sources are the documents it
produced.
GET
/api/v1/conversations/{id} Path parameters
| idREQUIRED string | The conversation ID. |
Query parameters
| include_content boolean | false omits source text: every source's content is null.
Use it when only the summary, key points, todos or related
conversations are needed.
|
| from_seconds number | Only include transcript turns that end at or after this offset in seconds. Other source types are unaffected. |
| to_seconds number | Only include transcript turns that start at or before this
offset in seconds. Must be greater than from_seconds.
|
Response fields
| 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 | User-facing summary of the conversation: a short overview, then any topical sections and key principles as markdown bullets. |
| key_points array of object | The AI key points grouped by topic. Empty until the analysis has run. Older analyses without topics appear as one entry with a null topic. |
| ↳topic string · nullable | |
| ↳points array of string | |
| todos array of object | Todos linked to this conversation (AI suggestions excluded). |
| ↳id string | |
| ↳title string · nullable | |
| ↳details string · nullable | |
| ↳status "open" · "done" · "dismissed" | Todo state. open = still to do, done = completed,
dismissed = discarded by the user.
|
| ↳due_date string · date · nullable | Due date if one was set, otherwise null. |
| ↳created_at string · date-time | |
| ↳completed_at string · date-time · nullable | When the todo was marked done; null unless status is done. |
| ↳conversation_id string · nullable | The conversation this todo belongs to, or null for a personal todo not tied to any conversation. |
| ↳assignee_id string · nullable | User id of the person the todo is assigned to; resolve it with
GET /members.
|
| ↳source "manual" · "ai" | Whether the user wrote the todo (manual) or the AI extracted it (ai). |
| related array of object | Other recordings of the same recurring meeting, plus conversations the user has linked to this one (accepted relations only; AI suggestions the user has not confirmed are excluded). Empty when the workspace has relations disabled. |
| ↳id string | |
| ↳title string · nullable | |
| ↳created_at string · date-time | |
| ↳relation_type string · nullable | series for another recording of the same recurring meeting, ai when the link was suggested by Klang and accepted by the user, manual when the user created it. |
| ↳explanation string · nullable | One-sentence rationale for the link. |
| ↳digest string · nullable | The related conversation's short AI digest. |
| 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.
Returned only by GET /conversations/{id}; list endpoints return
the lighter SourceLite shape instead.
|
| ↳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.
- 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.
|
| ↳title string · nullable | |
| ↳added_at string · date-time · nullable | |
| ↳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. |
| ↳meeting_url string · nullable | Join URL of the video meeting the transcript was recorded from
(Google Meet, Microsoft Teams, Zoom). null for transcripts
from uploaded files and for non-transcript sources.
|
| ↳attendees array of string · email | Email addresses from the meeting's calendar attendee list.
Empty for meetings without calendar attendee data and for
non-transcript sources. This can differ from participants,
which contains speakers detected in the transcript.
|
| ↳content string · nullable | Plain-text rendering of the source. For transcripts this is
a speaker-labeled, time-stamped flat string. May be null if
content extraction failed for an uploaded file.
|
| ↳participants array of object | Speakers detected on the transcript. Empty array for
non-transcript sources. Returns the speaker label as stored — a
real name if the user has labeled the speaker in Klang, or a
raw label like Speaker 1 / Talare 1 if not.
|
| ↳name string | The speaker's name if labeled in Klang, otherwise the raw speaker label (e.g. Speaker 1). |
| ↳person_id string · uuid | Stable speaker-profile id. Omitted when the participant is not linked to a named person. |