---
title: "Get Chat Session"
method: GET
path: "/api/v1/chat/sessions/{session_id}"
tags: ["Chat"]
---

# Get Chat Session

`GET /api/v1/chat/sessions/{session_id}`

## Request

- Base URL: `https://api.gemina.co` (the document declares no server; this is the origin it was published from)
- URL: `https://api.gemina.co/api/v1/chat/sessions/{session_id}`
- Auth: one of:
  - API key in header `X-API-Key`
  - OAuth 2 (password, token URL `token`)

Read one conversation's transcript.

Messages come back in turn order, user before assistant within a turn.
404 for unknown, foreign and purged sessions alike — a purged stub is
readable only with ``with_purged``, and then carries no messages.

## Path parameters

- `session_id` string, uuid, required

## Query parameters

- `skip` integer: Number of messages to skip
- `limit` integer: Number of messages to retrieve
- `with_purged` boolean: Allow reading a purged session stub

## Response `200`

Successful Response

- ChatTranscriptOutDTO
  - `servedAt` string, date-time
  - `servedAtTimestamp` number
  - `createdAt` string, date-time, nullable
  - `createdAtTimestamp` number, nullable
  - `session` ChatSessionOutDTO, required: One row of chat history — a live conversation, an ended one, or a stub. A purged session survives here as a STUB: ids and timestamps, never a title and never content (design D4/D10). The console's purge copy already promises "a record of the purge will be kept", and document lists expose exactly this shape behind the same ``with_purged`` flag.
    - `createdAt` string, date-time, nullable
    - `createdAtTimestamp` number, nullable
    - `id` string, uuid, required
    - `title` string, nullable: LLM-generated label; null for pre-history or purged sessions
    - `endUserId` string, nullable: The end-user this conversation was scoped to; null for tenant-wide (all-documents) chats. An identifier, not content — it survives on purged stubs so tenants can attribute the purge.
    - `lastActivityAt` string, date-time, nullable
    - `turnCount` integer
    - `purgeAt` string, date-time, nullable: When retention will delete this chat; null = kept always
    - `resumable` boolean: False: the transcript is read-only; a new turn on it would 404
    - `purgedAt` string, date-time, nullable
    - `purgeReason` string, nullable: user_deleted | retention_expired | admin_action
  - `count` integer, required: Total messages in the session, not just this page
  - `messages` ChatMessageOutDTO[], required
    - `createdAt` string, date-time, nullable
    - `createdAtTimestamp` number, nullable
    - `role` string, required: user | assistant
    - `content` string, required
    - `turnIndex` integer, required
    - `citations` string[], nullable
    - `intent` string, nullable
    - `confident` boolean, nullable

## Other responses

- `404`: The resource does not exist, or is not visible to the caller. Ownership failures are deliberately indistinguishable from a missing resource.
- `422`: Validation Error

---

[API](https://skmtc.dev/gemina/apis/gemina-api.md) · [All operations](https://skmtc.dev/gemina/apis/gemina-api/llms.txt) · [OpenAPI document](https://skmtc.dev/gemina/apis/gemina-api/revisions/152fd3f6f6ec?raw)
