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

# Recordings

> Retrieve, list, and manage call recordings

The Recording API lets you retrieve and manage recordings created during voice calls or conferences. Recordings can be created using the [Record a Call](https://plivo.com/docs/voice/api/calls.md#record-a-call) API or the [Record XML element](https://plivo.com/docs/voice/xml/record.md).

## The Recording Object

**recording\_id** `string`

Unique identifier for the recording.

**call\_uuid** `string`

Identifier of the call that was recorded.

**conference\_name** `string`

Name of the conference that was recorded. `null` for regular calls.

**recording\_url** `string`

URL where the recording file can be accessed.

**recording\_format** `string`

File format. Values: `wav`, `mp3`.

**recording\_type** `string`

Type of recording. Values: `conference`, `normal`.

**recording\_duration\_ms** `string`

Duration of the recording in milliseconds.

**recording\_start\_ms** `string`

Unix epoch timestamp, in milliseconds, when the recording started.

**recording\_end\_ms** `string`

Unix epoch timestamp, in milliseconds, when the recording ended.

**from\_number** `string`

Caller ID of the call that was recorded.

**to\_number** `string`

Number that was called on the recorded call.

**resource\_uri** `string`

URI of the recording resource.

**rounded\_recording\_duration** `integer`

Duration rounded to nearest 60-second interval. Recordings under 60s are rounded up.

**recording\_storage\_duration** `integer`

Time in days the recording has been stored. Increments after 24 hours from add time.

**recording\_storage\_rate** `string`

Unit cost of storing the recording per month.

**monthly\_recording\_storage\_amount** `string`

Monthly storage cost in the latest billing cycle.

**add\_time** `string`

Datetime when the recording was created.

### Example Recording Object

```json theme={null}
{
  "add_time": "2020-08-05 16:15:15.852059+05:30",
  "api_id": "7abf0744-1ca0-11e4-a2d1-22000ac5040c",
  "call_uuid": "c2c128e2-1c8c-11e4-9bff-1db8a9db0432",
  "conference_name": "noname",
  "recording_duration_ms": "345100.00000",
  "recording_end_ms": "1407235509007.00000",
  "recording_format": "mp3",
  "recording_id": "c2186400-1c8c-11e4-a664-0026b945b52x",
  "recording_start_ms": "1407235163907.00000",
  "recording_type": "conference",
  "recording_url": "http://s3.amazonaws.com/recordings_2013/c2186400-1c8c-11e4-a664-0026b945b52x.mp3",
  "resource_uri": "/v1/Account/MA2025RK4E639VJFZAGV/Recording/c2186400-1c8c-11e4-a664-0026b945b52x/",
  "recording_storage_duration": "723",
  "rounded_recording_duration": "3456",
  "recording_storage_rate": "0.0004",
  "monthly_recording_storage_amount": "0.02304"
}
```

***

## Access Original (Pre-Denoised) Recording

When [noise cancellation](https://plivo.com/docs/voice-agents/audio-streaming/concepts/audio-streaming-guide.md#enable-noise-cancellation) is enabled, the default recording is the denoised version. To access the original recording before noise cancellation was applied, append the `type=original` query parameter to the media fetch URL.

**Example:**

```
https://media.plivo.com/v1/Account/{auth_id}/Recording/{recording_id}.mp3?type=original
```

> [!NOTE]
>
> Pre-denoised recordings are currently available for **India region** accounts only.

***

## Recording Authentication

By default, recording URLs are publicly accessible. You can enable HTTP Basic Auth to restrict access to your recording media.

**To enable:**

1. Go to [Voice Settings](https://cx.plivo.com/voice-settings) in the Plivo console
2. Enable **HTTP Auth on recordings**

When enabled, all GET requests for recording media require HTTP Basic Auth:

* **Username:** Your Auth ID
* **Password:** Your Auth Token

For recordings created via a subaccount, use the subaccount's Auth ID and Auth Token.

***

## Retrieve a Recording

Get details of a specific recording by its ID.

```
GET https://api.plivo.com/v1/Account/{auth_id}/Recording/{recording_id}/
```

### Arguments

No arguments required.

```bash cURL theme={null}
curl -i --user AUTH_ID:AUTH_TOKEN \
    https://api.plivo.com/v1/Account/{auth_id}/Recording/{recording_id}/
```

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

client = plivo.RestClient('<auth_id>','<auth_token>')
response = client.recordings.get(recording_id='1ca34b00-3c5c-11e7-b213-06bcf6c57c65')
print(response)
```

```ruby Ruby theme={null}
require 'plivo'

api = Plivo::RestClient.new("<auth_id>","<auth_token>")
response = api.recordings.get('c2186400-1c8c-1124-a664-0026b945b522')
puts response
```

```javascript Node theme={null}
const plivo = require('plivo');

const client = new plivo.Client("<auth_id>","<auth_token>");
client.recordings.get("c2186400-1c8c-1124-a664-0026b945b522")
    .then(console.log);
```

```php PHP theme={null}
<?php
require 'vendor/autoload.php';
use Plivo\RestClient;

$client = new RestClient("<auth_id>","<auth_token>");
$response = $client->recordings->get('c2186400-1c8c-1124-a664-0026b945b522');
print_r($response);
```

```java Java theme={null}
import com.plivo.api.Plivo;
import com.plivo.api.models.recording.Recording;

Plivo.init("<auth_id>","<auth_token>");
Recording response = Recording.getter("c2186400-1c8c-1124-a664-0026b945b522").get();
System.out.println(response);
```

```csharp .NET theme={null}
using Plivo;

var api = new PlivoApi("<auth_id>","<auth_token>");
var response = api.Recording.Get(recordingId: "3ebae784-54fd-11e7-975a-024cb8ab2db9");
Console.WriteLine(response);
```

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

import "github.com/plivo/plivo-go/v7"

func main() {
    client, _ := plivo.NewClient("<auth_id>", "<auth_token>", &plivo.ClientOptions{})
    response, _ := client.Recordings.Get("c2186400-1c8c-1124-a664-0026b945b522")
}
```

#### Response

**add\_time** `string`

Datetime when the recording was created.

**api\_id** `string`

Unique identifier for the API request.

**call\_uuid** `string`

Identifier of the call that was recorded.

**conference\_name** `string`

Name of the conference that was recorded. `null` for regular calls.

**recording\_duration\_ms** `string`

Duration of the recording in milliseconds.

**recording\_format** `string`

File format. Values: `wav`, `mp3`.

**recording\_id** `string`

Unique identifier for the recording.

**recording\_type** `string`

Type of recording. Values: `conference`, `normal`.

**recording\_url** `string`

URL where the recording file can be accessed.

```json theme={null}
{
  "add_time": "2020-08-05 16:15:15.852059+05:30",
  "api_id": "7abf0744-1ca0-11e4-a2d1-22000ac5040c",
  "call_uuid": "c2c128e2-1c8c-11e4-9bff-1db8a9db0432",
  "conference_name": "noname",
  "recording_duration_ms": "345100.00000",
  "recording_end_ms": "1407235509007.00000",
  "recording_format": "mp3",
  "recording_id": "c2186400-1c8c-11e4-a664-0026b945b52x",
  "recording_start_ms": "1407235163907.00000",
  "recording_type": "conference",
  "recording_url": "http://s3.amazonaws.com/recordings_2013/c2186400-1c8c-11e4-a664-0026b945b52x.mp3",
  "resource_uri": "/v1/Account/MA2025RK4E639VJFZAGV/Recording/c2186400-1c8c-11e4-a664-0026b945b52x/"
}
```

***

## List All Recordings

Retrieve all recordings in your account with optional filters.

```
GET https://api.plivo.com/v1/Account/{auth_id}/Recording/
```

### Arguments

| Parameter | Description |
| - | - |
| `from_number` | Filter by source phone number (E.164 format) or SIP endpoint. |
| `to_number` | Filter by destination phone number (E.164 format) or SIP endpoint. |
| `subaccount` | Filter by subaccount `auth_id`. |
| `call_uuid` | Filter by specific call UUID. |
| `add_time` | Filter by creation time. Format: `YYYY-MM-DD HH:MM[:ss[.uuuuuu]]`. Supports: `add_time__gt`, `add_time__gte`, `add_time__lt`, `add_time__lte`. |
| `mpc_name` | Filter by multiparty call name. |
| `mpc_uuid` | Filter by multiparty call UUID. |
| `conference_name` | Filter by conference name. |
| `conference_uuid` | Filter by conference UUID. |
| `recording_storage_duration` | Filter by storage duration in days. Supports: `__gt`, `__gte`, `__lt`, `__lte`. Cannot be used with `add_time`. |
| `limit` | Number of results per page. Max: 20. |
| `offset` | Number of records to skip for pagination. |

> [!NOTE]
>
> * If no time filter is used, Plivo defaults to a 7-day search window.
> * `add_time` allows searching within a 30-day window. Exceeding 30 days returns a 400 error.
> * All timestamps must be in UTC.

```bash cURL theme={null}
curl -i --user AUTH_ID:AUTH_TOKEN \
    https://api.plivo.com/v1/Account/{auth_id}/Recording/
```

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

client = plivo.RestClient('<auth_id>','<auth_token>')
response = client.recordings.list(offset=0, limit=5)
print(response)
```

```ruby Ruby theme={null}
require 'plivo'

api = Plivo::RestClient.new("<auth_id>","<auth_token>")
response = api.recordings.list(limit: 5, offset: 0)
puts response
```

```javascript Node theme={null}
const plivo = require('plivo');

const client = new plivo.Client("<auth_id>","<auth_token>");
client.recordings.list({ offset: 0, limit: 5 }).then(console.log);
```

```php PHP theme={null}
<?php
require 'vendor/autoload.php';
use Plivo\RestClient;

$client = new RestClient("<auth_id>","<auth_token>");
$response = $client->recordings->list(['limit' => 2, 'offset' => 2]);
print_r($response);
```

```java Java theme={null}
import com.plivo.api.Plivo;
import com.plivo.api.models.recording.Recording;

Plivo.init("<auth_id>","<auth_token>");
ListResponse<Recording> response = Recording.lister().offset(0).limit(5).list();
System.out.println(response);
```

```csharp .NET theme={null}
using Plivo;

var api = new PlivoApi("<auth_id>","<auth_token>");
var response = api.Recording.List(limit: 5, offset: 0);
Console.WriteLine(response);
```

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

import "github.com/plivo/plivo-go/v7"

func main() {
    client, _ := plivo.NewClient("<auth_id>", "<auth_token>", &plivo.ClientOptions{})
    response, _ := client.Recordings.List(plivo.RecordingListParams{Offset: 0, Limit: 5})
}
```

#### Response

**api\_id** `string`

Unique identifier for the API request.

**meta** `object`

Pagination metadata: `limit` (results per page), `offset` (items skipped), `total_count` (total matching recordings).

**objects** `array`

Array of recording objects — see [The Recording Object](#the-recording-object).

```json theme={null}
{
  "api_id": "ff25223a-1c9f-11e4-80aa-12313f048015",
  "meta": {
    "limit": 3,
    "next": "/v1/Account/MA2025RK4E639VJFZAGV/Recording/?limit=3&offset=3",
    "offset": 0,
    "previous": null,
    "total_count": 948
  },
  "objects": [
    {
      "add_time": "2022-08-05 16:15:15.852059+05:30",
      "call_uuid": "c2c128e2-1c8c-11e4-9bff-1db8a9db0432",
      "conference_name": "noname",
      "recording_duration_ms": "345100.00000",
      "recording_format": "mp3",
      "recording_id": "c2186400-1c8c-1124-a664-0026b945b522",
      "recording_type": "conference",
      "recording_url": "http://s3.amazonaws.com/recordings_2013/c2186400-1c8c-1124-a664-0026b945b522.mp3"
    }
  ]
}
```

***

## Delete a Recording

Permanently delete a recording from your account.

```
DELETE https://api.plivo.com/v1/Account/{auth_id}/Recording/{recording_id}/
```

### Arguments

No arguments required.

### Returns

Returns `204 No Content` on success. Returns `404 Not Found` if the recording doesn't exist.

```bash cURL theme={null}
curl -X DELETE --user AUTH_ID:AUTH_TOKEN \
    https://api.plivo.com/v1/Account/{auth_id}/Recording/{recording_id}/
```

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

client = plivo.RestClient('<auth_id>','<auth_token>')
response = client.recordings.delete(recording_id='9684e812-4b88-11e7-b285-02fb5b2555e7')
print(response)
```

```ruby Ruby theme={null}
require 'plivo'

api = Plivo::RestClient.new("<auth_id>","<auth_token>")
response = api.recordings.delete('c2186400-1c8c-1124-a664-0026b945b522')
puts response
```

```php PHP theme={null}
<?php
require 'vendor/autoload.php';
use Plivo\RestClient;

$client = new RestClient("<auth_id>","<auth_token>");
$response = $client->recordings->delete('c2186400-1c8c-1124-a664-0026b945b522');
print_r($response);
```

```java Java theme={null}
import com.plivo.api.Plivo;
import com.plivo.api.models.recording.Recording;

Plivo.init("<auth_id>","<auth_token>");
Recording.deleter("c2186400-1c8c-1124-a664-0026b945b522").delete();
System.out.println("Deleted successfully.");
```

```csharp .NET theme={null}
using Plivo;

var api = new PlivoApi("<auth_id>","<auth_token>");
var response = api.Recording.Delete(recordingId: "3ebae784-54fd-11e7-975a-024cb8ab2db9");
Console.WriteLine(response);
```

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

import "github.com/plivo/plivo-go/v7"

func main() {
    client, _ := plivo.NewClient("<auth_id>", "<auth_token>", &plivo.ClientOptions{})
    client.Recordings.Delete("c2186400-1c8c-1124-a664-0026b945b522")
}
```

#### Response

```
HTTP Status Code: 204
```

***

## Get Recordings by Call UUID

To find all recordings for a specific call, use the `call_uuid` filter:

```bash cURL theme={null}
curl -i --user AUTH_ID:AUTH_TOKEN \
    "https://api.plivo.com/v1/Account/{auth_id}/Recording/?call_uuid=c2c128e2-1c8c-11e4-9bff-1db8a9db0432"
```

```python Python theme={null}
recordings = client.recordings.list(call_uuid='c2c128e2-1c8c-11e4-9bff-1db8a9db0432')
for recording in recordings:
    print(f"Recording URL: {recording.recording_url}")
```

***

## Recording Pricing

| Component | Rate |
| - | - |
| **Recording generation** | Free |
| **Storage (first 90 days)** | Free |
| **Storage (after 90 days)** | \$0.0004/minute/month |

The `recording_storage_rate` and `monthly_recording_storage_amount` fields in the recording object show current storage costs for recordings stored beyond 90 days.

See [Voice Pricing](https://www.plivo.com/voice/pricing/) for complete pricing details.

***

## Transcription API

Manage transcriptions generated from call recordings. You can list, retrieve, create, and delete transcriptions.

### API Endpoint

```bash theme={null}
https://api.plivo.com/v1/Account/{auth_id}/Transcription/
```

### List All Transcriptions

Returns a paginated list of all transcriptions associated with your account.

```bash theme={null}
GET https://api.plivo.com/v1/Account/{auth_id}/Transcription/
```

### Retrieve a Transcription

Get details of a specific transcription.

```bash theme={null}
GET https://api.plivo.com/v1/Account/{auth_id}/Transcription/{recording_id}/
```

#### Query Parameters

| Parameter | Type | Description |
| - | - | - |
| `type` | string | Filter by transcription type. Values: `transcription`, `raw`, `diarized` |

### Create a Transcription

Trigger transcription for a specific recording.

```bash theme={null}
POST https://api.plivo.com/v1/Account/{auth_id}/Transcription/{recording_id}/
```

### Delete a Transcription

Permanently delete a transcription record.

```bash theme={null}
DELETE https://api.plivo.com/v1/Account/{auth_id}/Transcription/{transcription_id}/
```

#### Response

```text theme={null}
HTTP Status Code: 204
```

***

## Related

* [Record a Call](https://plivo.com/docs/voice/api/calls.md#record-a-call) - Start/stop recording during an active call
* [Record XML Element](https://plivo.com/docs/voice/xml/record.md) - Record using XML
* [Conference Recording](https://plivo.com/docs/voice/api/conferences.md#record-a-conference) - Record conference calls
