---
title: "Discover saved conversations associated with one repository target"
method: GET
path: "/api/v1/transcripts"
tags: ["transcripts"]
---

# Discover saved conversations associated with one repository target

`GET /api/v1/transcripts`

## 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/transcripts`
- Auth: HTTP bearer

Requires a Vex tenant/repository slug and exactly one of change, pr, or commit. Returns observed associations without synchronization. A selected checkpoint belongs to the target; a session-only link never substitutes unrelated context. Git commit IDs must be complete (40 hexadecimal characters). Resolve short IDs in the checkout before requesting this endpoint.

## Query parameters

- `repo` string, required
- `change` string
- `pr` string
- `commit` string
- `patchset` integer
- `limit` integer
- `cursor` string
- `session` string
- `checkpoint_cursor` string

## Response `200`

A bounded page of associated conversations, including an empty known target.

- TranscriptDiscoveryPage
  - `target` object, required
    - `kind` 'github_pr' | 'change' | 'commit', required
    - `reference` string, required
    - `repo` string, required
    - `observed_head` string, nullable, required
    - `change_id` string
    - `number` integer
    - `github_url` string
    - `commit` string
  - `sessions` TranscriptDiscoverySession[], required
    - `id` string, required
    - `title` string, nullable, required
    - `agent` string, required
    - `author` object, required
      - `id` string, required
      - `name` string, nullable, required
    - `started_at` string, required
    - `last_checkpoint_at` string, nullable, required
    - `source_url` string, required
    - `status` 'available' | 'preparing' | 'pending' | 'unavailable' | 'expired' | 'no_matching_checkpoint', required
    - `selected_checkpoint` TranscriptCheckpoint, required
      - `id` string, required
      - `captured_at` string, nullable, required
      - `status` 'available' | 'preparing' | 'pending' | 'unavailable' | 'expired', required
      - `source_ref` string, required: Opaque saved-content reference. It grants no access.
      - `matches` object, required
        - `truncated` boolean, required
        - `entries` object[], required
          - `kind` string, required
          - `commit` string, required
          - `patchset` integer, nullable
          - `current_patchset` boolean, nullable
    - `checkpoints` TranscriptCheckpoint[], required
      - `id` string, required
      - `captured_at` string, nullable, required
      - `status` 'available' | 'preparing' | 'pending' | 'unavailable' | 'expired', required
      - `source_ref` string, required: Opaque saved-content reference. It grants no access.
      - `matches` object, required
        - `truncated` boolean, required
        - `entries` object[], required
          - `kind` string, required
          - `commit` string, required
          - `patchset` integer, nullable
          - `current_patchset` boolean, nullable
    - `checkpoint_pagination` TranscriptPagination, required
      - `next_cursor` string, nullable, required
      - `has_more` boolean, required
      - `limit` integer, required
  - `pagination` TranscriptPagination, required
    - `next_cursor` string, nullable, required
    - `has_more` boolean, required
    - `limit` integer, required
  - `as_of` string, required
  - `linkage` 'observed', required

## Other responses

- `400`: Invalid or conflicting selectors
- `401`: Authentication required.
- `403`: Forbidden
- `404`: Missing or inaccessible target.
- `422`: Unprocessable entity
- `502`: Bad gateway
- `503`: Association lookup is temporarily unavailable.

---

[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)
