> ## Documentation Index
> Fetch the complete documentation index at: https://docs.bota.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# List Recordings

> Retrieve a paginated list of recordings

Retrieve a paginated list of recordings in your project, with optional filters for device, end user, and status.

## Authentication

Requires an [API key](/authentication) with `recordings:read` scope.

<RequestExample>
  ```bash cURL theme={null}
  curl "https://api.bota.dev/v1/recordings?status=completed&limit=10" \
    -H "Authorization: Bearer sk_live_..."
  ```

  ```javascript Node.js theme={null}
  const params = new URLSearchParams({
    status: 'completed',
    limit: '10',
  });

  const response = await fetch(`https://api.bota.dev/v1/recordings?${params}`, {
    headers: {
      'Authorization': 'Bearer sk_live_...',
    },
  });

  const { data, has_more, next_cursor, total } = await response.json();
  ```

  ```python Python theme={null}
  import requests

  response = requests.get(
      'https://api.bota.dev/v1/recordings',
      headers={'Authorization': 'Bearer sk_live_...'},
      params={
          'status': 'completed',
          'limit': 10,
      },
  )

  result = response.json()
  recordings = result['data']
  ```
</RequestExample>

## Query Parameters

<ParamField query="limit" type="integer" default="25">
  Maximum number of items to return (1-100).
</ParamField>

<ParamField query="cursor" type="string">
  Opaque pagination cursor from a previous response's `next_cursor` field. Omit for the first page.
</ParamField>

<ParamField query="device_id" type="string">
  Filter recordings by device.
</ParamField>

<ParamField query="end_user_id" type="string">
  Filter recordings by end user.
</ParamField>

<ParamField query="status" type="string">
  Filter by status: `pending`, `uploaded`, `processing`, `completed`, or `failed`.
</ParamField>

## Response

Returns a paginated list of recording objects.

<ResponseExample>
  ```json 200 theme={null}
  {
    "data": [
      {
        "id": "rec_abc123",
        "device_id": "dev_abc123",
        "end_user_id": "eu_xyz789",
        "name": "Product interview - Jane Doe",
        "status": "completed",
        "duration_ms": 1800000,
        "started_at": "2025-01-15T09:00:00Z",
        "ended_at": "2025-01-15T09:30:00Z",
        "transcription_id": "txn_abc123",
        "transcription_status": "completed",
        "summary_status": "completed",
        "media": [
          {
            "id": "med_001",
            "type": "audio",
            "mime_type": "audio/opus",
            "file_size_bytes": 2048576,
            "status": "uploaded",
            "captured_at": "2025-01-15T09:00:00Z",
            "created_at": "2025-01-15T10:00:00Z"
          }
        ],
        "metadata": {
          "meeting_type": "interview"
        },
        "created_at": "2025-01-15T10:00:00Z"
      },
      {
        "id": "rec_def456",
        "device_id": "dev_abc123",
        "end_user_id": "eu_xyz789",
        "name": null,
        "status": "completed",
        "duration_ms": 900000,
        "started_at": "2025-01-14T14:00:00Z",
        "ended_at": "2025-01-14T14:15:00Z",
        "transcription_id": "txn_def456",
        "transcription_status": "processing",
        "summary_status": null,
        "media": [
          {
            "id": "med_010",
            "type": "audio",
            "mime_type": "audio/opus",
            "file_size_bytes": 1024000,
            "status": "uploaded",
            "captured_at": "2025-01-14T14:00:00Z",
            "created_at": "2025-01-14T15:00:00Z"
          }
        ],
        "metadata": null,
        "created_at": "2025-01-14T15:00:00Z"
      }
    ],
    "has_more": true,
    "next_cursor": "eyJjcmVhdGVkX2F0IjoiMjAyNS0wMS0xNFQxNTowMDowMFoiLCJpZCI6InJlY19kZWY0NTYifQ==",
    "total": 42
  }
  ```
</ResponseExample>

## Response Fields

| Field         | Type    | Description                                                                                          |
| ------------- | ------- | ---------------------------------------------------------------------------------------------------- |
| `data`        | array   | Array of recording objects.                                                                          |
| `has_more`    | boolean | Whether there are more results beyond this page.                                                     |
| `next_cursor` | string  | Opaque cursor to pass as `cursor` to retrieve the next page. Present only when `has_more` is `true`. |
| `total`       | integer | Total number of recordings matching the query filters (across all pages).                            |

Each recording object in `data` contains:

| Field                     | Type            | Description                                                                                                                                            |
| ------------------------- | --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `id`                      | string          | Unique identifier for the recording (prefixed with `rec_`).                                                                                            |
| `device_id`               | string          | ID of the device that captured the recording.                                                                                                          |
| `end_user_id`             | string          | ID of the associated end user.                                                                                                                         |
| `name`                    | string \| null  | Human-readable name for the recording.                                                                                                                 |
| `status`                  | string          | Current recording status: `pending`, `uploaded`, `processing`, `completed`, or `failed`.                                                               |
| `duration_ms`             | integer \| null | Recording duration in milliseconds.                                                                                                                    |
| `started_at`              | string          | ISO 8601 timestamp of when the recording started.                                                                                                      |
| `ended_at`                | string          | ISO 8601 timestamp of when the recording ended.                                                                                                        |
| `transcription_id`        | string \| null  | ID of the associated transcription.                                                                                                                    |
| `transcription_status`    | string \| null  | Status of the latest transcription for this recording: `pending`, `processing`, `completed`, or `failed`. `null` if no transcription has been started. |
| `summary_status`          | string \| null  | Status of the latest summary for this recording: `pending`, `processing`, `completed`, or `failed`. `null` if no summary has been generated.           |
| `media`                   | array           | Files associated with this recording (audio, images, video).                                                                                           |
| `media[].id`              | string          | Media identifier (`med_*`).                                                                                                                            |
| `media[].type`            | string          | Media type: `audio`, `image`, or `video`.                                                                                                              |
| `media[].mime_type`       | string          | MIME type (e.g., `audio/opus`, `image/jpeg`).                                                                                                          |
| `media[].file_size_bytes` | integer         | File size in bytes.                                                                                                                                    |
| `media[].status`          | string          | Upload status: `pending`, `uploaded`.                                                                                                                  |
| `media[].captured_at`     | string \| null  | ISO 8601 timestamp of when the media was captured.                                                                                                     |
| `media[].created_at`      | string          | ISO 8601 timestamp of when the media record was created.                                                                                               |
| `metadata`                | object \| null  | Arbitrary key-value metadata.                                                                                                                          |
| `created_at`              | string          | ISO 8601 timestamp of when the recording was created.                                                                                                  |
