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

# Retrieve Recording

> Retrieve metadata for a recording

Retrieve the metadata for a specific recording by its ID.

## Path Parameters

<ParamField path="id" type="string" required>
  The unique recording identifier (e.g., `rec_01HABC987654321`).
</ParamField>

## Response

<ResponseField name="id" type="string">
  Unique recording identifier.
</ResponseField>

<ResponseField name="object" type="string">
  Always `recording`.
</ResponseField>

<ResponseField name="session_id" type="string">
  The session this recording belongs to.
</ResponseField>

<ResponseField name="channel" type="string">
  Audio channel: `agent`, `customer`, or `mixed`.
</ResponseField>

<ResponseField name="status" type="string">
  Recording status:

  * `processing` - Recording is being processed
  * `ready` - Recording is available for download
  * `failed` - Recording generation failed
</ResponseField>

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

<ResponseField name="format" type="string">
  Audio format (e.g., `mp3`, `wav`).
</ResponseField>

<ResponseField name="size" type="number">
  File size in bytes.
</ResponseField>

<ResponseField name="sample_rate" type="number">
  Audio sample rate in Hz.
</ResponseField>

<ResponseField name="bit_depth" type="number">
  Audio bit depth.
</ResponseField>

<ResponseField name="download_url" type="string">
  When the file is ready, a **relative** path such as `/v1/recordings/{id}/audio`. Call it on `https://api.kallglot.com` with your API key (no separate download token in the response contract).
</ResponseField>

<ResponseField name="created_at" type="string">
  Creation timestamp (ISO 8601).
</ResponseField>

<ResponseField name="expires_at" type="string">
  When the recording will be deleted based on retention policy (ISO 8601).
</ResponseField>

<RequestExample>
  ```bash cURL theme={null}
  curl https://api.kallglot.com/v1/recordings/rec_01HABC987654321 \
    -H "Authorization: Bearer sk_live_your_api_key"
  ```

  ```ruby Ruby theme={null}
  require 'net/http'
  require 'json'

  recording_id = 'rec_01HABC987654321'
  uri = URI("https://api.kallglot.com/v1/recordings/#{recording_id}")
  request = Net::HTTP::Get.new(uri)
  request['Authorization'] = "Bearer #{ENV['KALLGLOT_API_KEY']}"

  response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
    http.request(request)
  end

  recording = JSON.parse(response.body)
  puts "Recording ready: #{recording['download_url']}"
  ```

  ```go Go theme={null}
  package main

  import (
      "encoding/json"
      "fmt"
      "net/http"
      "os"
  )

  func main() {
      recordingID := "rec_01HABC987654321"
      req, _ := http.NewRequest("GET", "https://api.kallglot.com/v1/recordings/"+recordingID, nil)
      req.Header.Set("Authorization", "Bearer "+os.Getenv("KALLGLOT_API_KEY"))

      resp, _ := http.DefaultClient.Do(req)
      defer resp.Body.Close()

      var recording map[string]any
      json.NewDecoder(resp.Body).Decode(&recording)
      fmt.Printf("Recording ready: %s\n", recording["download_url"])
  }
  ```

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

  response = requests.get(
      'https://api.kallglot.com/v1/recordings/rec_01HABC987654321',
      headers={'Authorization': 'Bearer sk_live_your_api_key'}
  )
  recording = response.json()
  print(f"Recording ready: {recording['download_url']}")
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch('https://api.kallglot.com/v1/recordings/rec_01HABC987654321', {
    headers: {
      'Authorization': 'Bearer sk_live_your_api_key'
    }
  });

  const recording = await response.json();
  console.log(`Recording ready: ${recording.download_url}`);
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  {
    "id": "rec_01HABC987654321",
    "object": "recording",
    "session_id": "sess_01HXYZ123456789",
    "channel": "mixed",
    "status": "ready",
    "duration": 245.3,
    "format": "mp3",
    "size": 2943600,
    "sample_rate": 44100,
    "bit_depth": 16,
    "download_url": "/v1/recordings/rec_01HABC987654321/audio",
    "created_at": "2026-03-26T11:04:20Z",
    "expires_at": "2026-04-26T11:04:20Z"
  }
  ```

  ```json 202 Processing theme={null}
  {
    "id": "rec_01HABC987654321",
    "object": "recording",
    "session_id": "sess_01HXYZ123456789",
    "channel": "mixed",
    "status": "processing",
    "message": "Recording is being processed. Please retry in a few seconds.",
    "created_at": "2026-03-26T11:04:20Z"
  }
  ```

  ```json 404 theme={null}
  {
    "error": {
      "code": "recording_not_found",
      "message": "No recording found with ID 'rec_01HABC987654321'.",
      "type": "not_found_error"
    }
  }
  ```
</ResponseExample>

## Notes

<Note>
  When `download_url` is present it points at the **`/v1/recordings/{id}/audio`** path on `https://api.kallglot.com`. Use your normal API key—there is no separate download token in the REST contract.
</Note>

<Warning>
  Recordings are automatically deleted based on your retention policy. After the `expires_at` date, the recording will no longer be available.
</Warning>
