---
title: "Search retained user and assistant transcript messages"
method: POST
path: "/api/v1/organizations/{org_slug}/transcripts/search"
tags: ["organizations"]
---

# Search retained user and assistant transcript messages

`POST /api/v1/organizations/{org_slug}/transcripts/search`

## Request

- Base URL: `https://composal.com` (the document declares no server; this is the origin it was published from)
- URL: `https://composal.com/api/v1/organizations/{org_slug}/transcripts/search`
- Auth: HTTP bearer

## Path parameters

- `org_slug` string, required
- `org_slug` string, required

## Request body

- TranscriptSearchRequest
  - `query` string, required
  - `mode` 'hybrid' | 'keyword' | 'semantic'
  - `repo` string
  - `user` string
  - `adapter` string
  - `status` string
  - `from` string
  - `to` string
  - `cursor` string
  - `limit` integer
  - `max_bytes` integer

## Response `200`

Bounded ranked session window and indexing coverage

- TranscriptSearchResult
  - `query` string, required
  - `mode_requested` string, required
  - `mode_used` string, required
  - `status` 'ready' | 'empty' | 'not_ready' | 'degraded', required
  - `coverage` object, required
    - `sessions` integer, required
    - `ready` integer, required
    - `pending` integer, required
    - `failed` integer, required
    - `indexed_at` string, nullable, required
  - `results` TranscriptSearchHit[], required
    - `session_id` string, required
    - `title` string, nullable, required
    - `repository` object, required
      - `id` string, required
      - `slug` string, required
    - `user` object, required
      - `id` string, required
      - `name` string, nullable, required
    - `harness` string, required
    - `model` string, nullable, required
    - `started_at` string, required
    - `url` string, required
    - `matches` TranscriptSearchMatch[], required
      - `role` 'user' | 'assistant', required
      - `excerpt` string, required
      - `source_ref` string, required
      - `checkpoint_id` string, required
      - `event_index` integer, required
      - `event_digest` string, required
      - `byte_start` integer, required
      - `byte_end` integer, required
      - `truncated` boolean, required
  - `pagination` object, required
    - `next_cursor` string, nullable, required
    - `window_exhausted` boolean, required
    - `budget_limited` boolean, required
  - `limits` object, required
    - `limit` integer, required
    - `max_bytes` integer, required
    - `candidate_window` integer, required
  - `degradation` string

## Other responses

- `400`: Invalid request
- `401`: Authentication required
- `403`: Forbidden
- `404`: Missing or inaccessible scope
- `409`: Stale cursor
- `422`: Unprocessable entity
- `429`: Search quota exceeded
- `502`: Bad gateway
- `503`: Dependency unavailable

## Changes

- **2026-11-03** `74298a24e040`: 1 breaking, 1 warning
  - added the new path request parameter `org_slug`
  - deleted the `path` request parameter `org_slug`
- **2026-11-02** `0afeb1a84736`: 1 breaking, 1 warning
  - added the new path request parameter `org_slug`
  - deleted the `path` request parameter `org_slug`
- **2026-11-02** `d241f0ecfba3`: 1 breaking, 1 warning
  - added the new path request parameter `org_slug`
  - deleted the `path` request parameter `org_slug`

[Operation history](https://skmtc.dev/composal/apis/vex-api/changes/api/v1/organizations/:org_slug/transcripts/search/post.md)

---

[API](https://skmtc.dev/composal/apis/vex-api.md) - [All operations](https://skmtc.dev/composal/apis/vex-api/llms.txt) - [OpenAPI document](https://skmtc.dev/composal/apis/vex-api/revisions/74298a24e040?raw)
