# List meeting transcripts

`GET /transcript.list`

## Description

Lists transcripts the app has access to, filtered by date range (after/before).

This endpoint returns transcript metadata only. To retrieve the full transcript
content including cues (speaker text), summary, and action items, use
[`/transcript.info`](/docs/chat-api/get-transcript).

The ordering of results depends on `ascending` and `after`:

- `ascending=true` sorts in forward chronological order (oldest first).
  `ascending=false` sorts in reverse chronological order (newest first),
  even when `after` is specified.

- When `ascending` is omitted and `after` is not specified, the most recent
  transcripts are returned in reverse chronological order. This is equivalent
  to specifying `before` as NOW and leaving `after` unspecified.

- When `ascending` is omitted and `after` is specified, the results are
  sorted in forward chronological order.

Send the same `ascending` value on every page. The cursor marks where to
resume, not which direction to sort.

Either dates or datetimes may be specified. Dates are interpreted in UTC.

Note that the API operates in UTC with respect to the date range filter.

**Access:** Organization and Personal. In Personal mode, only transcripts from meetings where the authenticated user was a participant are returned.

**Required scope:** `transcript:read`

---

**OpenAPI Spec:** [chat.json](https://developer.ro.am/chat.json)

## Authentication

```
Authorization: Bearer YOUR_API_KEY
```

## Parameters

| Name | In | Type | Required | Description |
|------|-----|------|----------|-------------|
| `after` | query | string | No | The datetime to begin listing transcripts (YYYY-MM-DD or RFC-3339). Defaults to "no filter".  |
| `before` | query | string | No | The datetime until which to list transcripts (YYYY-MM-DD or RFC-3339). Defaults to "now".  |
| `ascending` | query | boolean | No | `true` sorts oldest-first. `false` sorts newest-first, even when `after` is set. When omitted, results are oldest-first if `after` is set and newest-first otherwise. Send the same value on every page; |
| `limit` | query | integer | No | The number of transcripts to return per response. Default is 10. |
| `cursor` | query | string | No | Opaque pagination cursor from a previous response's `nextCursor`. Do not construct cursors manually. |

## Responses

### 200 - OK

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `transcripts` | TranscriptMetadata[] | No |  |
| `nextCursor` | string | No | Returned if there is a subsequent page of transcripts. |

**TranscriptMetadata** (array item):

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `id` | string | No | A unique identifier for the transcript |
| `meetingId` | string | No | A unique identifier for the meeting. A meeting may encompass 0 or multiple transcripts.  |
| `start` | string | No | Exact time when the transcript began |
| `end` | string | No | Exact time when the transcript stopped |
| `participants` | ConversationParticipant[] | No |  |

**ConversationParticipant** (array item):

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `name` | string | No |  |
| `email` | string | No |  |
| `unconfirmedEmail` | string | No | Self-reported email address provided by a guest participant. Not verified — the guest was not logged in. |
| `type` | "member" | "guest" | No | Whether the participant is a workspace member or a guest |
| `user` | TaggedUUID | No |  |


#### Example Response

```json
{
  "transcripts": [
    {
      "id": "f9274881-c48f-4838-865d-98140ea7016d",
      "meetingId": "dde68f39-3eb0-42ef-9873-511509c8764f",
      "start": "2026-01-21T17:32:39Z",
      "end": "2026-01-21T17:48:04Z",
      "participants": [
        {
          "name": "Alex Chen",
          "email": "alex.chen@example.com",
          "user": "U-0cc74785-e31e-4403-aa5e-0cc7c1897e66"
        },
        {
          "name": "Jordan Smith",
          "email": "jordan.smith@example.com",
          "user": "U-6a897aa3-0cab-4ba4-a48b-4be14a9585d0"
        }
      ]
    },
    {
      "id": "59bbf979-ec0a-4cd7-a29b-d09bced32819",
      "meetingId": "419479dd-b506-4fa4-bd04-e1b871309fe9",
      "start": "2026-01-21T17:29:13Z",
      "end": "2026-01-21T17:32:39Z",
      "participants": [
        {
          "name": "Alex Chen",
          "email": "alex.chen@example.com",
          "user": "U-0cc74785-e31e-4403-aa5e-0cc7c1897e66"
        },
        {
          "name": "Taylor Williams",
          "email": "taylor@example.com",
          "user": "U-6a897aa3-0cab-4ba4-a48b-4be14a9585d0"
        }
      ]
    }
  ],
  "nextCursor": "YzE6MjAyNi0wMS0yMVQxNzoyODo1OS4wMDBa"
}
```

### 400 - Bad request, including an unparseable `ascending` value (`code` is `invalid_parameter`).

---

*Machine-readable API documentation.*
*Full documentation: https://developer.ro.am/docs/chat-api/list-transcripts*
