---
title: "List Chat Sessions"
method: GET
path: "/api/v1/chat/sessions"
tags: ["Chat"]
---

# List Chat Sessions

`GET /api/v1/chat/sessions`

## 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`
- Auth: one of:
  - API key in header `X-API-Key`
  - OAuth 2 (password, token URL `token`)

List past conversations, newest first.

Sessions with no delivered turn yet are omitted. Ended conversations stay
listed and come back ``resumable: false``; purged ones are stubs, hidden
unless ``with_purged`` is set. A token-pinned caller sees only its own
end-user's chats.

## Query parameters

- `skip` integer: Number of items to skip
- `limit` integer: Number of items to retrieve
- `sort_field` string: Field to sort by
- `sort_method` 'asc' | 'desc'
- `with_purged` boolean: Include purged session stubs

## Response `200`

Successful Response

- ChatSessionListOutDTO
  - `servedAt` string, date-time
  - `servedAtTimestamp` number
  - `createdAt` string, date-time, nullable
  - `createdAtTimestamp` number, nullable
  - `count` integer, required
  - `sessions` ChatSessionOutDTO[], required
    - `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

## Other responses

- `400`: Malformed request — for example an unknown sort field.
- `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)
