> ## 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.

# Get Recording

> Get a single recording with its full transcript

Returns detailed information about a specific recording, including the full transcript with word-level timestamps.

## Path Parameters

<ParamField path="id" type="string" required>
  The recording ID
</ParamField>

## Request

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

  ```javascript Node.js theme={null}
  const recordingId = 'clx1234567890';
  const response = await fetch(`https://app.transcord.app/api/v1/recordings/${recordingId}`, {
    headers: {
      'Authorization': 'Bearer tr_live_your_api_key'
    }
  });
  const recording = await response.json();
  ```

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

  recording_id = 'clx1234567890'
  response = requests.get(
      f'https://app.transcord.app/api/v1/recordings/{recording_id}',
      headers={'Authorization': 'Bearer tr_live_your_api_key'}
  )
  recording = response.json()
  ```
</CodeGroup>

## Response

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

<ResponseField name="transcript" type="object">
  Full transcript data (only present when status is `completed`)

  <Expandable title="properties">
    <ResponseField name="text" type="string">
      Full transcript as plain text
    </ResponseField>

    <ResponseField name="wordCount" type="number">
      Total number of words
    </ResponseField>

    <ResponseField name="words" type="array">
      Word-level transcript with timestamps

      <Expandable title="word object">
        <ResponseField name="word" type="string">
          The transcribed word including punctuation
        </ResponseField>

        <ResponseField name="start" type="number">
          Start time in seconds
        </ResponseField>

        <ResponseField name="end" type="number">
          End time in seconds
        </ResponseField>

        <ResponseField name="speaker" type="string">
          Speaker identifier: `you` or `them`
        </ResponseField>
      </Expandable>
    </ResponseField>
  </Expandable>
</ResponseField>

```json Response theme={null}
{
  "id": "clx1234567890",
  "toNumber": "+14155551234",
  "fromNumber": "+14155555678",
  "duration": 342,
  "status": "completed",
  "direction": "outbound",
  "createdAt": "2026-01-15T10:30:00.000Z",
  "transcript": {
    "text": "Hello, this is John calling about the interview...",
    "wordCount": 847,
    "words": [
      {
        "word": "Hello,",
        "start": 0.5,
        "end": 0.9,
        "speaker": "you"
      },
      {
        "word": "this",
        "start": 1.0,
        "end": 1.2,
        "speaker": "you"
      }
    ]
  }
}
```

## Processing Status

If the recording is still being processed, the `transcript` field will be absent and the status will indicate the current state:

```json theme={null}
{
  "id": "clx1234567890",
  "status": "transcribing",
  ...
}
```

Poll the endpoint until `status` becomes `completed`.

## Errors

| Status | Description                |
| ------ | -------------------------- |
| `401`  | Invalid or missing API key |
| `404`  | Recording not found        |
