Docs
Get API key
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.