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.
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.
The number of channels in the final recording file. Can be: 1 or 2. You can split a call with two legs into two separate recording channels if you record using TwiML Dial or the Outbound Rest API.
How the recording was created. Can be: DialVerb, Conference, OutboundAPI, Trunking, RecordVerb, StartCallRecordingAPI, and 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.
The URL of the media file associated with this recording resource. When stored externally, this is the full URL location of the media file.
Create a Recording resource
_10
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.
(warning)
Legal implications of call recording
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.
Optional Parameters
The following optional parameters are available for you to POST when starting a recording on a live call:
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.
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.
RecordingStatusCallback
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.
Create Recording on a Live Call
Node.js
Python
C#
Java
Go
PHP
Ruby
twilio-cli
curl
_11
// Download the helper library from https://www.twilio.com/docs/node/install
_11
// Find your Account SID and Auth Token at twilio.com/console
_11
// and set the environment variables. See http://twil.io/secure
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.
Fetch a Recording Resource's metadata in JSON format
Node.js
Python
C#
Java
Go
PHP
Ruby
twilio-cli
curl
_10
// Download the helper library from https://www.twilio.com/docs/node/install
_10
// Find your Account SID and Auth Token at twilio.com/console
_10
// and set the environment variables. See http://twil.io/secure
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.
WAV
Without an extension, or with a ".wav", a binary WAV audio file is returned with mime-type "audio/x-wav". For example:
_10
GET https://api.twilio.com/2010-04-01/Accounts/ACXXXXX.../Recordings/RE557ce644e5ab84fa21cc21112e22c485
WAV files have a bitrate of 128kbps
MP3
Appending ".mp3" to the URI returns a binary MP3 audio file with mime-type type "audio/mpeg". For example:
_10
GET https://api.twilio.com/2010-04-01/Accounts/ACXXXXX.../Recordings/RE557ce644e5ab84fa21cc21112e22c485.mp3
MP3 files have a bitrate of 32kbps
Download dual-channel media file
Call recordings are stored at Twilio in dual-channel by default. The media file associated with the recording resource of a two-party call has two channels and contains the audio from each call leg in a separate channel. The RequestedChannels query parameter can be used to specify whether the file should be downmixed to a single channel or if the file should be downloaded in its original, dual-channel format.
(warning)
Warning
For backward compatibility, if the RequestedChannels query parameter is not specified, the downloaded file's format will be the format that was specified when the recording was created.
For voice recordings in which dual-channel is not supported, like those created with <Conference> or <Record>, all audio from a recording will be saved in a single channel file. If a dual-channel recording is explicitly requested for download in these instances, the response will be Not Found.
Example: Download MP3 media in dual-channel format
Append .mp3?RequestedChannels=2 to your Recording's URL
_10
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=2to your Recording's URL
_10
GET https://api.twilio.com/2010-04-01/Accounts/ACXXXXX.../Recordings/RE557ce644e5ab84fa21cc21112e22c485.wav?RequestedChannels=2
Fetch a Recording's Transcriptions
Each Recording instance resource has a Transcriptions subresource which represents the set of transcriptions generated from the recording (if any):
_10
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.
Read multiple Recording Resources
_10
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.
(warning)
Warning
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:
_10
GET https://api.twilio.com/2010-04-01/Accounts/{AccountSid}/Calls/{CallSid}/Recordings.json
_10
GET 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.
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.
POST https://api.twilio.com/2010-04-01/Accounts/{AccountSid}/Calls/{CallSid}/Recordings/{Sid}.json
_10
POST 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)
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:
(warning)
Warning
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.
Pause a call recording with skip option
Node.js
Python
C#
Java
Go
PHP
Ruby
twilio-cli
curl
_11
// Download the helper library from https://www.twilio.com/docs/node/install
_11
// Find your Account SID and Auth Token at twilio.com/console
_11
// and set the environment variables. See http://twil.io/secure
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.
(warning)
Warning
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.
Pause a call recording with Twilio.CURRENT
Node.js
Python
C#
Java
Go
PHP
Ruby
twilio-cli
curl
_11
// Download the helper library from https://www.twilio.com/docs/node/install
_11
// Find your Account SID and Auth Token at twilio.com/console
_11
// and set the environment variables. See http://twil.io/secure