# List meeting recordings (Legacy)

`GET /recording.list`

## Description

**Legacy:** Prefer [`/meeting.list`](/docs/api/meeting-list) /
[`/meeting.info`](/docs/api/meeting-info) for new integrations.

Lists recordings in your home Roam, filtered by date range (after/before).
Organization clients without roam-wide meeting access
([`admin:meetings:read`](/docs/guides/scopes#meeting-width-adminmeetingsread))
receive `403`; use [`/meeting.list`](/docs/api/meeting-list) instead.
This route remains registered for existing callers. It returns v0-style
identifiers and is not a v1 media-download path.

The plural alias `/recordings.list` is also registered for existing callers;
use this singular form in new documentation and tooling.

The ordering of results depends on the filter specified:

- When no parameters are provided, the most recent recordings are returned,
  sorted in reverse chronological order. This is equivalent to specifying `before`
  as NOW and leaving `after` unspecified.

- If `after` is specified, the results are sorted in forward chronological order.

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

**Access:** Organization only. Requires roam-wide meeting access.

**Required scope:** `recordings:read` and `admin:meetings:read` (or a grandfathered roam-wide API key)

---

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

## Authentication

```
Authorization: Bearer YOUR_API_KEY
```

## Parameters

| Name | In | Type | Required | Description |
|------|-----|------|----------|-------------|
| `after` | query | string | No | The datetime to begin listing recordings (YYYY-MM-DD or RFC-3339). Defaults to "no filter".  |
| `before` | query | string | No | The datetime until which to list recordings (YYYY-MM-DD or RFC-3339). Defaults to "now".  |
| `limit` | query | integer | No | The number of recordings 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 |
|----------|------|----------|-------------|
| `recordings` | object[] | No |  |
| `nextCursor` | string | No | Returned if there is a subsequent page of recordings. |

**recordings** (array item):

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `recordingId` | string | No | A unique identifier for the recording |
| `location` | string | No | Name of the Roam room where the recording took place |
| `startTime` | string | No | Exact time when the recording began |
| `endTime` | string | No | Exact time when the recording stopped |
| `videoUrl` | string | No | URL where the video file may be downloaded |


#### Example Response

```json
{
  "recordings": [
    {
      "recordingId": "9003ec0e-ea7d-41b4-93cf-ef42d730f771",
      "location": "Conference Room A",
      "startTime": "2026-01-21T14:10:54Z",
      "endTime": "2026-01-21T15:12:27Z",
      "videoUrl": "https://ro.am/recordings/video/9003ec0e-ea7d-41b4-93cf-ef42d730f771.mp4?pwd=abc123"
    },
    {
      "recordingId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "location": "Huddle Space",
      "startTime": "2026-01-21T10:00:00Z",
      "endTime": "2026-01-21T10:45:00Z",
      "videoUrl": "https://ro.am/recordings/video/a1b2c3d4-e5f6-7890-abcd-ef1234567890.mp4?pwd=def456"
    }
  ],
  "nextCursor": "YzE6MjAyNi0wMS0yMVQxMDowMDowMC4wMDBa"
}
```

### 401 - Presented invalid authentication credentials.

### 500 - An internal error occurred.

---

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