---
title: "Get a conversation"
method: GET
path: "/conversations/{conversation_id}"
tags: ["conversations"]
---

# Get a conversation

`GET /conversations/{conversation_id}`

Get a conversation's active path (the messages from a leaf back to the root) plus a lightweight tree of all nodes (id/parent\_id/role) for branch navigation. Pass leaf\_id to preview a specific branch without changing the persisted current leaf.

Required roles: All, App

## Path parameters

- `conversation_id` string, required

## Query parameters

- `leaf_id` string
- `principal_id` string

## Response `200`

Conversation detail (active path + tree)

- ConversationDetail
  - `id` string, required
  - `principal_id` string, nullable — Authorization principal this conversation belongs to (null if not set).
  - `title` string, nullable
  - `current_leaf_id` string, nullable
  - `created_at` string, date-time
  - `updated_at` string, date-time
  - `active_path` ConversationMessage[], required — Messages (with content/citations) from the leaf back to the root, in display order.
    - `id` string, required
    - `parent_id` string, nullable
    - `role` string, required — user | assistant
    - `content` string, required
    - `citations` Content[]
      - `id` string, required — Content ID
      - `text` string, required — Content chunk from the source
      - `url` string, required — Source URL of the content
      - `title` string, required — Title of the content or document
      - `timestamp` integer, required — Unix timestamp when the content was indexed
      - `file_type` 'html' | 'pdf' | 'ppt' | 'pptx' | 'pptm' | 'doc' | 'docx' | 'docm' | 'xls' | 'xlsx' | 'xlsm' | 'md' | 'txt' | 'jsonl' | 'png' | 'jpg' | 'webp' | 'heic' | 'heif' | 'wav' | 'mp3' | 'aiff' | 'aac' | 'm4a' | 'ogg' | 'flac' | 'mp4' | 'mpg' | 'mov' | 'avi' | 'flv' | 'webm' | 'wmv' | '3gp' | 'notion_page', required — The type of the source file
      - `page_number` integer, required — Page number for paginated documents like PDFs. Set to 0 for sources without page numbers
      - `source_type` 'crawl' | 'local_file' | 'google_drive' | 'github' | 'notion', required — The type of the source
      - `source_id` string — Optional source ID for the original source. For crawl content, use this value with GET /sources/{source_id}/raw to download the stored crawl file content. For local_file content, use GET /sources/{source_id} for source details.
      - `keywords` string[]
    - `filter_snapshot` object, nullable — Retrieval/filter snapshot for this turn (user messages).
    - `assistant_metadata` object, nullable — Non-streaming assistant extras captured verbatim (finish_reason, grounding web_citations / search_suggestion / web_search_queries, etc.).
    - `created_at` string, date-time
  - `tree` ConversationTreeNode[] — All nodes as a lightweight structure (id/parent_id/role/created_at, no content/citations). Use to detect sibling branches and pick a leaf to preview via the leaf_id query parameter.
    - `id` string, required
    - `parent_id` string, nullable
    - `role` string, required
    - `created_at` string, date-time

## Other responses

- `400` — Bad Request (e.g. leaf_id not in conversation)
- `401` — Unauthorized
- `404` — Not Found

---

[API](https://skmtc.net/qlonolink/apis/qaip-apis.md) · [All operations](https://skmtc.net/qlonolink/apis/qaip-apis/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/qlonolink/qaip-apis/revisions/f5f5994dfe05/schema)
