For Customers building HIPAA-compliant workflows with Recordings, we require customers to enforce at least HTTP Authentication. To learn more about building for HIPAA compliance, please visit the latest requirements here.
A Recording resource represents the recording associated with a voice call, conference, or SIP Trunk. Using the Recordings REST API you can fetch, start, stop, pause, resume, and delete voice recordings.
You can initiate a recording for your call, conference, or trunk via one of the following methods.
Once a recording is initiated, you can optionally pause, resume, or stop the recording
The SID of the Account that created the Recording resource.
^AC[0-9a-fA-F]{32}$
Min length: 34
Max length: 34
The SID of the Call the Recording resource is associated with. This will always refer to the parent leg of a two-leg call.
^CA[0-9a-fA-F]{32}$
Min length: 34
Max length: 34
The Conference SID that identifies the conference associated with the recording, if a conference recording.
^CF[0-9a-fA-F]{32}$
Min length: 34
Max length: 34
The date and time in GMT that the resource was created specified in RFC 2822 format.
The date and time in GMT that the resource was last updated specified in RFC 2822 format.
The start time of the recording in GMT and in RFC 2822 format.
The unique string that that we created to identify the Recording resource.
^RE[0-9a-fA-F]{32}$
Min length: 34
Max length: 34
The status of the recording. Can be: processing
, completed
, absent
or deleted
. For information about more detailed statuses on in-progress recordings, check out how to Update a Recording Resource.
in-progress
paused
stopped
processing
completed
absent
deleted
The number of channels in the final recording file. Can be: 1
or 2
.
0
How the recording was created. Can be: DialVerb
, Conference
, OutboundAPI
, Trunking
, RecordVerb
, StartCallRecordingAPI
, and StartConferenceRecordingAPI
.
DialVerb
Conference
OutboundAPI
Trunking
RecordVerb
StartCallRecordingAPI
StartConferenceRecordingAPI
The error code that describes why the recording is absent
. The error code is described in our Error Dictionary. This value is null if the recording status
is not absent
.
How to decrypt the recording if it was encrypted using Call Recording Encryption feature.
A list of related resources identified by their relative URIs.
The URL of the media file associated with this recording resource. When stored externally, this is the full URL location of the media file.
POST https://api.twilio.com/2010-04-01/Accounts/{AccountSid}/Calls/{CallsSid}/Recordings.json
To start a recording on a live call, make an HTTP Post request to the Recordings list resource of an in-progress Call.
Note that the maximum length of the recording can be up to the maximum length of the Call itself.
If you choose to record voice or video calls, you need to comply with certain laws and regulations, including those regarding obtaining consent to record (such as California's Invasion of Privacy Act and similar laws in other jurisdictions). Additional information on the legal implications of call recording can be found in the "Legal Considerations with Recording Voice and Video Communications" Help Center article.
Notice: Twilio recommends that you consult with your legal counsel to make sure that you are complying with all applicable laws in connection with communications you record or store using Twilio.
The following optional parameters are available for you to POST
when starting a recording on a live call:
The SID of the Account that will create the resource.
^AC[0-9a-fA-F]{32}$
Min length: 34
Max length: 34
application/x-www-form-urlencoded
The recording status events on which we should call the recording_status_callback
URL. Can be: in-progress
, completed
and absent
and the default is completed
. Separate multiple event values with a space.
The URL we should call using the recording_status_callback_method
on each recording event specified in recording_status_callback_event
. For more information, see RecordingStatusCallback parameters.
The HTTP method we should use to call recording_status_callback
. Can be: GET
or POST
and the default is POST
.
GET
POST
Whether to trim any leading and trailing silence in the recording. Can be: trim-silence
or do-not-trim
and the default is do-not-trim
. trim-silence
trims the silence from the beginning and end of the recording and do-not-trim
does not.
The number of channels used in the recording. Can be: mono
or dual
and the default is mono
. mono
records all parties of the call into one channel. dual
records each party of a 2-party call into separate channels.
The audio track to record for the call. Can be: inbound
, outbound
or both
. The default is both
. inbound
records the audio that is received by Twilio. outbound
records the audio that is generated from Twilio. both
records the audio that is received and generated by Twilio.
Twilio will pass the following parameters with its request to your RecordingStatusCallback
URL:
Parameter | Description |
---|---|
AccountSid | The unique identifier of the Account responsible for this recording. |
CallSid | A unique identifier for the call associated with the recording. |
RecordingSid | The unique identifier for the recording. |
RecordingUrl | The URL of the recorded audio. |
RecordingStatus | The status of the recording. Possible values are: in-progress , completed , absent . |
RecordingDuration | The length of the recording, in seconds (only provided when RecordingStatus is completed ). |
RecordingChannels | The number of channels in the final recording file as an integer. Possible values are 1 , 2 . |
RecordingStartTime | The timestamp of when the recording started. |
RecordingSource | The initiation method used to create this recording. For recordings initiated with this API, the value will be StartCallRecordingAPI . |
RecordingTrack | The audio track recorded. Possible values are inbound , outbound or both . |
1// Download the helper library from https://www.twilio.com/docs/node/install2const twilio = require("twilio"); // Or, for ESM: import twilio from "twilio";34// Find your Account SID and Auth Token at twilio.com/console5// and set the environment variables. See http://twil.io/secure6const accountSid = process.env.TWILIO_ACCOUNT_SID;7const authToken = process.env.TWILIO_AUTH_TOKEN;8const client = twilio(accountSid, authToken);910async function createCallRecording() {11const recording = await client12.calls("CAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")13.recordings.create();1415console.log(recording.accountSid);16}1718createCallRecording();
1{2"account_sid": "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",3"api_version": "2010-04-01",4"call_sid": "CAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",5"conference_sid": null,6"channels": 2,7"date_created": "Fri, 14 Oct 2016 21:56:34 +0000",8"date_updated": "Fri, 14 Oct 2016 21:56:34 +0000",9"start_time": "Fri, 14 Oct 2016 21:56:34 +0000",10"price": null,11"price_unit": null,12"duration": null,13"sid": "REaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",14"source": "StartCallRecordingAPI",15"status": "in-progress",16"error_code": null,17"encryption_details": null,18"track": "both",19"uri": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Calls/CAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Recordings/REaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.json"20}
1// Download the helper library from https://www.twilio.com/docs/node/install2const twilio = require("twilio"); // Or, for ESM: import twilio from "twilio";34// Find your Account SID and Auth Token at twilio.com/console5// and set the environment variables. See http://twil.io/secure6const accountSid = process.env.TWILIO_ACCOUNT_SID;7const authToken = process.env.TWILIO_AUTH_TOKEN;8const client = twilio(accountSid, authToken);910async function createCallRecording() {11const recording = await client12.calls("CAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")13.recordings.create({14recordingChannels: "dual",15recordingStatusCallback: "https://myapp.com/recording-events",16recordingStatusCallbackEvent: ["in-progress completed"],17});1819console.log(recording.accountSid);20}2122createCallRecording();
1{2"account_sid": "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",3"api_version": "2010-04-01",4"call_sid": "CAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",5"conference_sid": null,6"channels": 2,7"date_created": "Fri, 14 Oct 2016 21:56:34 +0000",8"date_updated": "Fri, 14 Oct 2016 21:56:34 +0000",9"start_time": "Fri, 14 Oct 2016 21:56:34 +0000",10"price": null,11"price_unit": null,12"duration": null,13"sid": "REaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",14"source": "StartCallRecordingAPI",15"status": "in-progress",16"error_code": null,17"encryption_details": null,18"track": "both",19"uri": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Calls/CAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Recordings/REaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.json"20}
You can fetch a Recording Resource's metadata or you can fetch a WAV or MP3 media file of the Recording.
GET https://api.twilio.com/2010-04-01/Accounts/{AccountSid}/Recordings/{Sid}.json
A Recording Resource's metadata can be returned in JSON or XML format.
.json
to the Recording Resource's URI..xml
to the Recording Resource's URI.The table below lists the parameters for fetching a Recording Resource's metadata.
The SID of the Account that created the Recording resource to fetch.
^AC[0-9a-fA-F]{32}$
Min length: 34
Max length: 34
The Twilio-provided string that uniquely identifies the Recording resource to fetch.
^RE[0-9a-fA-F]{32}$
Min length: 34
Max length: 34
A boolean parameter indicating whether to retrieve soft deleted recordings or not. Recordings metadata are kept after deletion for a retention period of 40 days.
1// Download the helper library from https://www.twilio.com/docs/node/install2const twilio = require("twilio"); // Or, for ESM: import twilio from "twilio";34// Find your Account SID and Auth Token at twilio.com/console5// and set the environment variables. See http://twil.io/secure6const accountSid = process.env.TWILIO_ACCOUNT_SID;7const authToken = process.env.TWILIO_AUTH_TOKEN;8const client = twilio(accountSid, authToken);910async function fetchRecording() {11const recording = await client12.recordings("REXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")13.fetch();1415console.log(recording.accountSid);16}1718fetchRecording();
1{2"account_sid": "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",3"api_version": "2010-04-01",4"call_sid": "CAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",5"conference_sid": "CFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",6"channels": 1,7"date_created": "Fri, 14 Oct 2016 21:56:34 +0000",8"date_updated": "Fri, 14 Oct 2016 21:56:38 +0000",9"start_time": "Fri, 14 Oct 2016 21:56:34 +0000",10"price": "-0.00250",11"price_unit": "USD",12"duration": "4",13"sid": "REXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",14"source": "StartConferenceRecordingAPI",15"status": "completed",16"error_code": null,17"uri": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Recordings/REaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.json",18"subresource_uris": {19"add_on_results": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Recordings/REaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/AddOnResults.json",20"transcriptions": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Recordings/REaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Transcriptions.json"21},22"encryption_details": {23"encryption_public_key_sid": "CRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",24"encryption_cek": "OV4h6zrsxMIW7h0Zfqwfn6TI2GCNl54KALlg8wn8YB8KYZhXt6HlgvBWAmQTlfYVeLWydMiCewY0YkDDT1xmNe5huEo9vjuKBS5OmYK4CZkSx1NVv3XOGrZHpd2Pl/5WJHVhUK//AUO87uh5qnUP2E0KoLh1nyCLeGcEkXU0RfpPn/6nxjof/n6m6OzZOyeIRK4Oed5+rEtjqFDfqT0EVKjs6JAxv+f0DCc1xYRHl2yV8bahUPVKs+bHYdy4PVszFKa76M/Uae4jFA9Lv233JqWcxj+K2UoghuGhAFbV/JQIIswY2CBYI8JlVSifSqNEl9vvsTJ8bkVMm3MKbG2P7Q==",25"encryption_iv": "8I2hhNIYNTrwxfHk"26},27"media_url": "http://api.twilio.com/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Recordings/REaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"28}
GET https://api.twilio.com/2010-04-01/Accounts/{AccountSid}/Recordings/{Sid}.mp3
You can fetch a Recording's media file by appending .wav
or .mp3
to the Recording Resource's URI.
It's only possible to fetch a Recording's media file when the Recording's status is completed
and the media is stored at Twilio.
If the media associated with a Recording Resource is not available/was deleted/was uploaded to external storage, the request returns Not Found
.
Without an extension, or with a ".wav", a binary WAV audio file is returned with mime-type "audio/x-wav". For example:
1GET https://api.twilio.com/2010-04-01/Accounts/ACXXXXX.../Recordings/RE557ce644e5ab84fa21cc21112e22c4852
WAV files have a bitrate of 128kbps
Appending ".mp3" to the URI returns a binary MP3 audio file with mime-type type "audio/mpeg". For example:
1GET https://api.twilio.com/2010-04-01/Accounts/ACXXXXX.../Recordings/RE557ce644e5ab84fa21cc21112e22c485.mp32
MP3 files have a bitrate of 32kbps
Call and Conference Recordings are stored at Twilio in dual-channel format by default.
For a two-party Call, the Recording's dual-channel media file contains the audio from each call leg in separate channels.
For a Conference, the Recording's dual-channel media file contains the audio of the first participant that joined the Conference in the first channel and all other audio from the Call mixed in the second channel. Note: To access this feature, you need to enable Dual-channel Conference Recordings on the Voice Settings page in the Console. Read the Dual-channel Conference Recordings Changelog entry for more information.
When sending the GET
request to download a Recording's media file, the RequestedChannels
query parameter can be used to specify whether the media file should be downmixed to a single channel or if the file should be downloaded in its original, dual-channel format.
If the RequestedChannels
query parameter is not specified when requesting the media file for a two-party Call Recording, Twilio returns a media file in the format specified when the Recording was created.
If the RequestedChannels
query parameter is not specified when requesting the media file for a Conference Recording, Twilio returns a media file in mono-channel format.
Attempting to download a dual-channel media file when the dual-channel format is not available results in a 400 Bad Request
error. This may happen in the following cases:
<Record>
verb. All audio from those Recordings are mixed and saved in a mono-channel media file.To prevent application errors while managing Recordings, you should implement retry logic when sending a GET
request for a Recording's media file. If a request for a dual-channel media file fails, retry with a GET
request for with RequestedChannels=1
.
Example: Download MP3 media in dual-channel format
Append .mp3?RequestedChannels=2
to your Recording's URL
GET https://api.twilio.com/2010-04-01/Accounts/ACXXXXX.../Recordings/RE557ce644e5ab84fa21cc21112e22c485.mp3?RequestedChannels=2
Example: Download WAV media in dual-channel format
Append .wav?RequestedChannels=2
to your Recording's URL
GET https://api.twilio.com/2010-04-01/Accounts/ACXXXXX.../Recordings/RE557ce644e5ab84fa21cc21112e22c485.wav?RequestedChannels=2
Each Recording instance resource has a Transcriptions subresource which represents the set of transcriptions generated from the recording (if any):
GET https://api.twilio.com/2010-04-01/Accounts/{AccountSid}/Recordings/{RecordingSid}/Transcriptions
This will return the set of transcriptions available for the recording identified by {RecordingSid}
. See the Transcriptions resource documentation for properties and response formats.
GET https://api.twilio.com/2010-04-01/Accounts/{AccountSid}/Recordings.json
This API call returns a list of Recordings, each representing a recording generated during a call or conference for the given account. The list returned includes paging information.
The list of Recordings is protected by your account credentials like most parts of this API. You must use HTTP basic auth to access the Recordings list resource.
You can also get a list of Recordings from a specific call or conference by including the call or conference SID in your request like so:
1GET https://api.twilio.com/2010-04-01/Accounts/{AccountSid}/Calls/{CallSid}/Recordings.json2GET https://api.twilio.com/2010-04-01/Accounts/{AccountSid}/Conferences/{ConferenceSid}/Recordings.json
Only include recordings that were created on this date. Specify a date as YYYY-MM-DD
in GMT, for example: 2009-07-06
, to read recordings that were created on this date. You can also specify an inequality, such as DateCreated<=YYYY-MM-DD
, to read recordings that were created on or before midnight of this date, and DateCreated>=YYYY-MM-DD
to read recordings that were created on or after midnight of this date.
Only include recordings that were created on this date. Specify a date as YYYY-MM-DD
in GMT, for example: 2009-07-06
, to read recordings that were created on this date. You can also specify an inequality, such as DateCreated<=YYYY-MM-DD
, to read recordings that were created on or before midnight of this date, and DateCreated>=YYYY-MM-DD
to read recordings that were created on or after midnight of this date.
Only include recordings that were created on this date. Specify a date as YYYY-MM-DD
in GMT, for example: 2009-07-06
, to read recordings that were created on this date. You can also specify an inequality, such as DateCreated<=YYYY-MM-DD
, to read recordings that were created on or before midnight of this date, and DateCreated>=YYYY-MM-DD
to read recordings that were created on or after midnight of this date.
The Call SID of the resources to read.
^CA[0-9a-fA-F]{32}$
Min length: 34
Max length: 34
The Conference SID that identifies the conference associated with the recording to read.
^CF[0-9a-fA-F]{32}$
Min length: 34
Max length: 34
A boolean parameter indicating whether to retrieve soft deleted recordings or not. Recordings metadata are kept after deletion for a retention period of 40 days.
How many resources to return in each list page. The default is 50, and the maximum is 1000.
1
Maximum: 1000
The page token. This is provided by the API.
Examples
1// Download the helper library from https://www.twilio.com/docs/node/install2const twilio = require("twilio"); // Or, for ESM: import twilio from "twilio";34// Find your Account SID and Auth Token at twilio.com/console5// and set the environment variables. See http://twil.io/secure6const accountSid = process.env.TWILIO_ACCOUNT_SID;7const authToken = process.env.TWILIO_AUTH_TOKEN;8const client = twilio(accountSid, authToken);910async function listRecording() {11const recordings = await client.recordings.list({12callSid: "CAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",13limit: 20,14});1516recordings.forEach((r) => console.log(r.accountSid));17}1819listRecording();
1{2"end": 0,3"first_page_uri": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Recordings.json?PageSize=1&Page=0",4"next_page_uri": null,5"page": 0,6"page_size": 1,7"previous_page_uri": null,8"recordings": [9{10"account_sid": "ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",11"api_version": "2010-04-01",12"call_sid": "CAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",13"conference_sid": "CFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",14"channels": 1,15"date_created": "Fri, 14 Oct 2016 21:56:34 +0000",16"date_updated": "Fri, 14 Oct 2016 21:56:38 +0000",17"start_time": "Fri, 14 Oct 2016 21:56:34 +0000",18"price": "0.04",19"price_unit": "USD",20"duration": "4",21"sid": "REaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",22"source": "StartConferenceRecordingAPI",23"status": "completed",24"error_code": null,25"uri": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Recordings/REaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.json",26"subresource_uris": {27"add_on_results": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Recordings/REaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/AddOnResults.json",28"transcriptions": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Recordings/REaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Transcriptions.json"29},30"encryption_details": {31"encryption_public_key_sid": "CRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",32"encryption_cek": "OV4h6zrsxMIW7h0Zfqwfn6TI2GCNl54KALlg8wn8YB8KYZhXt6HlgvBWAmQTlfYVeLWydMiCewY0YkDDT1xmNe5huEo9vjuKBS5OmYK4CZkSx1NVv3XOGrZHpd2Pl/5WJHVhUK//AUO87uh5qnUP2E0KoLh1nyCLeGcEkXU0RfpPn/6nxjof/n6m6OzZOyeIRK4Oed5+rEtjqFDfqT0EVKjs6JAxv+f0DCc1xYRHl2yV8bahUPVKs+bHYdy4PVszFKa76M/Uae4jFA9Lv233JqWcxj+K2UoghuGhAFbV/JQIIswY2CBYI8JlVSifSqNEl9vvsTJ8bkVMm3MKbG2P7Q==",33"encryption_iv": "8I2hhNIYNTrwxfHk"34},35"media_url": "http://api.twilio.com/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Recordings/REaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"36}37],38"start": 0,39"uri": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Recordings.json?PageSize=1&Page=0"40}
1// Download the helper library from https://www.twilio.com/docs/node/install2const twilio = require("twilio"); // Or, for ESM: import twilio from "twilio";34// Find your Account SID and Auth Token at twilio.com/console5// and set the environment variables. See http://twil.io/secure6const accountSid = process.env.TWILIO_ACCOUNT_SID;7const authToken = process.env.TWILIO_AUTH_TOKEN;8const client = twilio(accountSid, authToken);910async function listRecording() {11const recordings = await client.recordings.list({ limit: 20 });1213recordings.forEach((r) => console.log(r.accountSid));14}1516listRecording();
1{2"end": 0,3"first_page_uri": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Recordings.json?PageSize=1&Page=0",4"next_page_uri": null,5"page": 0,6"page_size": 1,7"previous_page_uri": null,8"recordings": [9{10"account_sid": "ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",11"api_version": "2010-04-01",12"call_sid": "CAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",13"conference_sid": "CFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",14"channels": 1,15"date_created": "Fri, 14 Oct 2016 21:56:34 +0000",16"date_updated": "Fri, 14 Oct 2016 21:56:38 +0000",17"start_time": "Fri, 14 Oct 2016 21:56:34 +0000",18"price": "0.04",19"price_unit": "USD",20"duration": "4",21"sid": "REaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",22"source": "StartConferenceRecordingAPI",23"status": "completed",24"error_code": null,25"uri": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Recordings/REaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.json",26"subresource_uris": {27"add_on_results": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Recordings/REaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/AddOnResults.json",28"transcriptions": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Recordings/REaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Transcriptions.json"29},30"encryption_details": {31"encryption_public_key_sid": "CRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",32"encryption_cek": "OV4h6zrsxMIW7h0Zfqwfn6TI2GCNl54KALlg8wn8YB8KYZhXt6HlgvBWAmQTlfYVeLWydMiCewY0YkDDT1xmNe5huEo9vjuKBS5OmYK4CZkSx1NVv3XOGrZHpd2Pl/5WJHVhUK//AUO87uh5qnUP2E0KoLh1nyCLeGcEkXU0RfpPn/6nxjof/n6m6OzZOyeIRK4Oed5+rEtjqFDfqT0EVKjs6JAxv+f0DCc1xYRHl2yV8bahUPVKs+bHYdy4PVszFKa76M/Uae4jFA9Lv233JqWcxj+K2UoghuGhAFbV/JQIIswY2CBYI8JlVSifSqNEl9vvsTJ8bkVMm3MKbG2P7Q==",33"encryption_iv": "8I2hhNIYNTrwxfHk"34},35"media_url": "http://api.twilio.com/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Recordings/REaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"36}37],38"start": 0,39"uri": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Recordings.json?PageSize=1&Page=0"40}
1// Download the helper library from https://www.twilio.com/docs/node/install2const twilio = require("twilio"); // Or, for ESM: import twilio from "twilio";34// Find your Account SID and Auth Token at twilio.com/console5// and set the environment variables. See http://twil.io/secure6const accountSid = process.env.TWILIO_ACCOUNT_SID;7const authToken = process.env.TWILIO_AUTH_TOKEN;8const client = twilio(accountSid, authToken);910async function listRecording() {11const recordings = await client.recordings.list({12dateCreated: new Date("2016-10-18 00:00:00"),13limit: 20,14});1516recordings.forEach((r) => console.log(r.accountSid));17}1819listRecording();
1{2"end": 0,3"first_page_uri": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Recordings.json?PageSize=1&Page=0",4"next_page_uri": null,5"page": 0,6"page_size": 1,7"previous_page_uri": null,8"recordings": [9{10"account_sid": "ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",11"api_version": "2010-04-01",12"call_sid": "CAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",13"conference_sid": "CFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",14"channels": 1,15"date_created": "Fri, 14 Oct 2016 21:56:34 +0000",16"date_updated": "Fri, 14 Oct 2016 21:56:38 +0000",17"start_time": "Fri, 14 Oct 2016 21:56:34 +0000",18"price": "0.04",19"price_unit": "USD",20"duration": "4",21"sid": "REaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",22"source": "StartConferenceRecordingAPI",23"status": "completed",24"error_code": null,25"uri": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Recordings/REaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.json",26"subresource_uris": {27"add_on_results": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Recordings/REaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/AddOnResults.json",28"transcriptions": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Recordings/REaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Transcriptions.json"29},30"encryption_details": {31"encryption_public_key_sid": "CRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",32"encryption_cek": "OV4h6zrsxMIW7h0Zfqwfn6TI2GCNl54KALlg8wn8YB8KYZhXt6HlgvBWAmQTlfYVeLWydMiCewY0YkDDT1xmNe5huEo9vjuKBS5OmYK4CZkSx1NVv3XOGrZHpd2Pl/5WJHVhUK//AUO87uh5qnUP2E0KoLh1nyCLeGcEkXU0RfpPn/6nxjof/n6m6OzZOyeIRK4Oed5+rEtjqFDfqT0EVKjs6JAxv+f0DCc1xYRHl2yV8bahUPVKs+bHYdy4PVszFKa76M/Uae4jFA9Lv233JqWcxj+K2UoghuGhAFbV/JQIIswY2CBYI8JlVSifSqNEl9vvsTJ8bkVMm3MKbG2P7Q==",33"encryption_iv": "8I2hhNIYNTrwxfHk"34},35"media_url": "http://api.twilio.com/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Recordings/REaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"36}37],38"start": 0,39"uri": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Recordings.json?PageSize=1&Page=0"40}
1// Download the helper library from https://www.twilio.com/docs/node/install2const twilio = require("twilio"); // Or, for ESM: import twilio from "twilio";34// Find your Account SID and Auth Token at twilio.com/console5// and set the environment variables. See http://twil.io/secure6const accountSid = process.env.TWILIO_ACCOUNT_SID;7const authToken = process.env.TWILIO_AUTH_TOKEN;8const client = twilio(accountSid, authToken);910async function listRecording() {11const recordings = await client.recordings.list({12dateCreatedBefore: new Date("2016-10-15 00:00:00"),13dateCreatedAfter: new Date("2016-10-12 00:00:00"),14limit: 20,15});1617recordings.forEach((r) => console.log(r.accountSid));18}1920listRecording();
1{2"end": 0,3"first_page_uri": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Recordings.json?PageSize=1&Page=0",4"next_page_uri": null,5"page": 0,6"page_size": 1,7"previous_page_uri": null,8"recordings": [9{10"account_sid": "ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",11"api_version": "2010-04-01",12"call_sid": "CAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",13"conference_sid": "CFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",14"channels": 1,15"date_created": "Fri, 14 Oct 2016 21:56:34 +0000",16"date_updated": "Fri, 14 Oct 2016 21:56:38 +0000",17"start_time": "Fri, 14 Oct 2016 21:56:34 +0000",18"price": "0.04",19"price_unit": "USD",20"duration": "4",21"sid": "REaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",22"source": "StartConferenceRecordingAPI",23"status": "completed",24"error_code": null,25"uri": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Recordings/REaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.json",26"subresource_uris": {27"add_on_results": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Recordings/REaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/AddOnResults.json",28"transcriptions": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Recordings/REaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Transcriptions.json"29},30"encryption_details": {31"encryption_public_key_sid": "CRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",32"encryption_cek": "OV4h6zrsxMIW7h0Zfqwfn6TI2GCNl54KALlg8wn8YB8KYZhXt6HlgvBWAmQTlfYVeLWydMiCewY0YkDDT1xmNe5huEo9vjuKBS5OmYK4CZkSx1NVv3XOGrZHpd2Pl/5WJHVhUK//AUO87uh5qnUP2E0KoLh1nyCLeGcEkXU0RfpPn/6nxjof/n6m6OzZOyeIRK4Oed5+rEtjqFDfqT0EVKjs6JAxv+f0DCc1xYRHl2yV8bahUPVKs+bHYdy4PVszFKa76M/Uae4jFA9Lv233JqWcxj+K2UoghuGhAFbV/JQIIswY2CBYI8JlVSifSqNEl9vvsTJ8bkVMm3MKbG2P7Q==",33"encryption_iv": "8I2hhNIYNTrwxfHk"34},35"media_url": "http://api.twilio.com/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Recordings/REaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"36}37],38"start": 0,39"uri": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Recordings.json?PageSize=1&Page=0"40}
1POST https://api.twilio.com/2010-04-01/Accounts/{AccountSid}/Calls/{CallSid}/Recordings/{Sid}.json2POST https://api.twilio.com/2010-04-01/Accounts/{AccountSid}/Conferences/{ConferenceSid}/Recordings/{Sid}.json
An active call or conference recording can be paused and resumed. Additionally, an active call recording can be stopped which will end the recording immediately. (stopped not supported for conference recordings)
The SID of the Account that created the Recording resource to update.
^AC[0-9a-fA-F]{32}$
Min length: 34
Max length: 34
The Call SID of the resource to update.
^CA[0-9a-fA-F]{32}$
Min length: 34
Max length: 34
The Twilio-provided string that uniquely identifies the Recording resource to update.
application/x-www-form-urlencoded
The new status of the recording. Can be: stopped
, paused
, in-progress
.
in-progress
paused
stopped
processing
completed
absent
Whether to record during a pause. Can be: skip
or silence
and the default is silence
. skip
does not record during the pause period, while silence
will replace the actual audio of the call with silence during the pause period. This parameter only applies when setting status
is set to paused
.
Examples:
Note in examples below that the API responses for updates to the recording resource will provide a more detailed inflight 'status' including paused, in-progress, or stopped but a fetch on the recording resource will only show processing or completed.
1// Download the helper library from https://www.twilio.com/docs/node/install2const twilio = require("twilio"); // Or, for ESM: import twilio from "twilio";34// Find your Account SID and Auth Token at twilio.com/console5// and set the environment variables. See http://twil.io/secure6const accountSid = process.env.TWILIO_ACCOUNT_SID;7const authToken = process.env.TWILIO_AUTH_TOKEN;8const client = twilio(accountSid, authToken);910async function updateCallRecording() {11const recording = await client12.calls("CAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")13.recordings("REXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")14.update({15pauseBehavior: "skip",16status: "paused",17});1819console.log(recording.accountSid);20}2122updateCallRecording();
1{2"account_sid": "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",3"api_version": "2010-04-01",4"call_sid": "CAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",5"conference_sid": null,6"channels": 2,7"date_created": "Fri, 14 Oct 2016 21:56:34 +0000",8"date_updated": "Fri, 14 Oct 2016 21:56:36 +0000",9"start_time": "Fri, 14 Oct 2016 21:56:34 +0000",10"price": null,11"price_unit": null,12"duration": null,13"sid": "REXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",14"source": "StartCallRecordingAPI",15"status": "paused",16"error_code": null,17"encryption_details": null,18"track": "both",19"uri": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Calls/CAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Recordings/REaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.json"20}
1// Download the helper library from https://www.twilio.com/docs/node/install2const twilio = require("twilio"); // Or, for ESM: import twilio from "twilio";34// Find your Account SID and Auth Token at twilio.com/console5// and set the environment variables. See http://twil.io/secure6const accountSid = process.env.TWILIO_ACCOUNT_SID;7const authToken = process.env.TWILIO_AUTH_TOKEN;8const client = twilio(accountSid, authToken);910async function updateConferenceRecording() {11const recording = await client12.conferences("CFXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")13.recordings("REXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")14.update({ status: "paused" });1516console.log(recording.accountSid);17}1819updateConferenceRecording();
1{2"account_sid": "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",3"api_version": "2010-04-01",4"call_sid": "CAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",5"conference_sid": "CFXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",6"channels": 1,7"date_created": "Fri, 14 Oct 2016 21:56:34 +0000",8"date_updated": "Fri, 14 Oct 2016 21:56:39 +0000",9"start_time": "Fri, 14 Oct 2016 21:56:34 +0000",10"price": null,11"price_unit": null,12"duration": null,13"sid": "REXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",14"source": "StartConferenceRecordingAPI",15"status": "paused",16"error_code": null,17"encryption_details": null,18"uri": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Conferences/CFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Recordings/REaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.json"19}
In the following two examples, note the use of Twilio.CURRENT
to reference the currently active recording without requiring an explicit Recording SID.
Twilio.CURRENT
can be used for pause, resume, or stop actions on calls with only one active recording.
Note that if your use case has multiple or concurrent recordings for a call or conference, you will need to use the Recording SID to reference the correct one. Using Twilio.CURRENT
to reference a recording on a resource that has multiple recordings will result in an error that the request failed because there is more than one recording for the given Call.
1// Download the helper library from https://www.twilio.com/docs/node/install2const twilio = require("twilio"); // Or, for ESM: import twilio from "twilio";34// Find your Account SID and Auth Token at twilio.com/console5// and set the environment variables. See http://twil.io/secure6const accountSid = process.env.TWILIO_ACCOUNT_SID;7const authToken = process.env.TWILIO_AUTH_TOKEN;8const client = twilio(accountSid, authToken);910async function updateCallRecording() {11const recording = await client12.calls("CAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")13.recordings("Twilio.CURRENT")14.update({ status: "paused" });1516console.log(recording.accountSid);17}1819updateCallRecording();
1{2"account_sid": "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",3"api_version": "2010-04-01",4"call_sid": "CAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",5"conference_sid": null,6"channels": 2,7"date_created": "Fri, 14 Oct 2016 21:56:34 +0000",8"date_updated": "Fri, 14 Oct 2016 21:56:36 +0000",9"start_time": "Fri, 14 Oct 2016 21:56:34 +0000",10"price": null,11"price_unit": null,12"duration": null,13"sid": "Twilio.CURRENT",14"source": "StartCallRecordingAPI",15"status": "paused",16"error_code": null,17"encryption_details": null,18"track": "both",19"uri": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Calls/CAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Recordings/REaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.json"20}
1// Download the helper library from https://www.twilio.com/docs/node/install2const twilio = require("twilio"); // Or, for ESM: import twilio from "twilio";34// Find your Account SID and Auth Token at twilio.com/console5// and set the environment variables. See http://twil.io/secure6const accountSid = process.env.TWILIO_ACCOUNT_SID;7const authToken = process.env.TWILIO_AUTH_TOKEN;8const client = twilio(accountSid, authToken);910async function updateConferenceRecording() {11const recording = await client12.conferences("CFXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")13.recordings("Twilio.CURRENT")14.update({ status: "paused" });1516console.log(recording.accountSid);17}1819updateConferenceRecording();
1{2"account_sid": "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",3"api_version": "2010-04-01",4"call_sid": "CAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",5"conference_sid": "CFXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",6"channels": 1,7"date_created": "Fri, 14 Oct 2016 21:56:34 +0000",8"date_updated": "Fri, 14 Oct 2016 21:56:39 +0000",9"start_time": "Fri, 14 Oct 2016 21:56:34 +0000",10"price": null,11"price_unit": null,12"duration": null,13"sid": "Twilio.CURRENT",14"source": "StartConferenceRecordingAPI",15"status": "paused",16"error_code": null,17"encryption_details": null,18"uri": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Conferences/CFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Recordings/REaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.json"19}
1// Download the helper library from https://www.twilio.com/docs/node/install2const twilio = require("twilio"); // Or, for ESM: import twilio from "twilio";34// Find your Account SID and Auth Token at twilio.com/console5// and set the environment variables. See http://twil.io/secure6const accountSid = process.env.TWILIO_ACCOUNT_SID;7const authToken = process.env.TWILIO_AUTH_TOKEN;8const client = twilio(accountSid, authToken);910async function updateCallRecording() {11const recording = await client12.calls("CAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")13.recordings("REXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")14.update({ status: "in-progress" });1516console.log(recording.accountSid);17}1819updateCallRecording();
1{2"account_sid": "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",3"api_version": "2010-04-01",4"call_sid": "CAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",5"conference_sid": null,6"channels": 2,7"date_created": "Fri, 14 Oct 2016 21:56:34 +0000",8"date_updated": "Fri, 14 Oct 2016 21:56:36 +0000",9"start_time": "Fri, 14 Oct 2016 21:56:34 +0000",10"price": null,11"price_unit": null,12"duration": null,13"sid": "REXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",14"source": "StartCallRecordingAPI",15"status": "in-progress",16"error_code": null,17"encryption_details": null,18"track": "both",19"uri": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Calls/CAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Recordings/REaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.json"20}
1// Download the helper library from https://www.twilio.com/docs/node/install2const twilio = require("twilio"); // Or, for ESM: import twilio from "twilio";34// Find your Account SID and Auth Token at twilio.com/console5// and set the environment variables. See http://twil.io/secure6const accountSid = process.env.TWILIO_ACCOUNT_SID;7const authToken = process.env.TWILIO_AUTH_TOKEN;8const client = twilio(accountSid, authToken);910async function updateCallRecording() {11const recording = await client12.calls("CAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")13.recordings("REXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")14.update({ status: "stopped" });1516console.log(recording.accountSid);17}1819updateCallRecording();
1{2"account_sid": "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",3"api_version": "2010-04-01",4"call_sid": "CAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",5"conference_sid": null,6"channels": 2,7"date_created": "Fri, 14 Oct 2016 21:56:34 +0000",8"date_updated": "Fri, 14 Oct 2016 21:56:36 +0000",9"start_time": "Fri, 14 Oct 2016 21:56:34 +0000",10"price": null,11"price_unit": null,12"duration": null,13"sid": "REXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",14"source": "StartCallRecordingAPI",15"status": "stopped",16"error_code": null,17"encryption_details": null,18"track": "both",19"uri": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Calls/CAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Recordings/REaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.json"20}
DELETE https://api.twilio.com/2010-04-01/Accounts/{AccountSid}/Recordings/{Sid}.json
Deletes a recording from your account. Once the recording is deleted:
deleted
If successful, DELETE
returns HTTP 204 (No Content) with no body.
Please note that only completed
recordings can be deleted. Recordings with any other status are not available for deletion.
The SID of the Account that created the Recording resources to delete.
^AC[0-9a-fA-F]{32}$
Min length: 34
Max length: 34
The Twilio-provided string that uniquely identifies the Recording resource to delete.
^RE[0-9a-fA-F]{32}$
Min length: 34
Max length: 34
To to delete a large set of Voice Recordings, you can use the bulk deletion capabilities available in the Twilio Console.
Example:
1// Download the helper library from https://www.twilio.com/docs/node/install2const twilio = require("twilio"); // Or, for ESM: import twilio from "twilio";34// Find your Account SID and Auth Token at twilio.com/console5// and set the environment variables. See http://twil.io/secure6const accountSid = process.env.TWILIO_ACCOUNT_SID;7const authToken = process.env.TWILIO_AUTH_TOKEN;8const client = twilio(accountSid, authToken);910async function deleteRecording() {11await client.recordings("REXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX").remove();12}1314deleteRecording();