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

# List Recordings

> List all recordings with optional filtering and pagination

Returns a paginated list of your recordings, sorted by creation date (newest first).

## Query Parameters

<ParamField query="page" type="integer" default="1">
  Page number (1-indexed)
</ParamField>

<ParamField query="limit" type="integer" default="20">
  Results per page (max 100)
</ParamField>

<ParamField query="status" type="string">
  Filter by status: `completed`, `transcribing`, `processing`, `failed`
</ParamField>

<ParamField query="direction" type="string">
  Filter by call direction: `outbound` or `inbound`
</ParamField>

<ParamField query="search" type="string">
  Search transcript text
</ParamField>

## Request

<CodeGroup>
  ```bash cURL theme={null}
  curl -X GET "https://app.transcord.app/api/v1/recordings?limit=10" \
    -H "Authorization: Bearer tr_live_your_api_key"
  ```

  ```javascript Node.js theme={null}
  const response = await fetch('https://app.transcord.app/api/v1/recordings?limit=10', {
    headers: {
      'Authorization': 'Bearer tr_live_your_api_key'
    }
  });
  const { data, pagination } = await response.json();
  ```

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

  response = requests.get(
      'https://app.transcord.app/api/v1/recordings',
      headers={'Authorization': 'Bearer tr_live_your_api_key'},
      params={'limit': 10}
  )
  data = response.json()
  ```
</CodeGroup>

## Response

<ResponseField name="data" type="array">
  Array of recording objects

  <Expandable title="recording object">
    <ResponseField name="id" type="string">
      Unique recording identifier
    </ResponseField>

    <ResponseField name="toNumber" type="string">
      Destination phone number
    </ResponseField>

    <ResponseField name="fromNumber" type="string">
      Caller phone number
    </ResponseField>

    <ResponseField name="duration" type="number">
      Call duration in seconds
    </ResponseField>

    <ResponseField name="status" type="string">
      Recording status: `completed`, `transcribing`, `processing`, `failed`
    </ResponseField>

    <ResponseField name="direction" type="string">
      Call direction: `outbound` or `inbound`
    </ResponseField>

    <ResponseField name="createdAt" type="string">
      ISO 8601 timestamp
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="pagination" type="object">
  <Expandable title="properties">
    <ResponseField name="page" type="number">
      Current page number
    </ResponseField>

    <ResponseField name="limit" type="number">
      Results per page
    </ResponseField>

    <ResponseField name="total" type="number">
      Total number of recordings
    </ResponseField>

    <ResponseField name="totalPages" type="number">
      Total number of pages
    </ResponseField>

    <ResponseField name="hasMore" type="boolean">
      Whether more pages exist
    </ResponseField>
  </Expandable>
</ResponseField>

```json Response theme={null}
{
  "data": [
    {
      "id": "clx1234567890",
      "toNumber": "+14155551234",
      "fromNumber": "+14155555678",
      "duration": 342,
      "status": "completed",
      "direction": "outbound",
      "createdAt": "2026-01-15T10:30:00.000Z"
    },
    {
      "id": "clx0987654321",
      "toNumber": "+12125559999",
      "fromNumber": "+14155555678",
      "duration": 128,
      "status": "completed",
      "direction": "outbound",
      "createdAt": "2026-01-14T15:45:00.000Z"
    }
  ],
  "pagination": {
    "page": 1,
    "limit": 10,
    "total": 47,
    "totalPages": 5,
    "hasMore": true
  }
}
```

## Errors

| Status | Description                |
| ------ | -------------------------- |
| `400`  | Invalid query parameters   |
| `401`  | Invalid or missing API key |
