Overview
VoIPBIN’s Recording API enables you to capture, store, and manage audio from calls and conferences. Whether you need recordings for compliance, quality assurance, training, or analytics, the Recording API provides a complete solution for managing call audio throughout its lifecycle.
With the Recording API you can:
Record calls and conferences in real-time
Start and stop recordings programmatically or via flow actions
Download recordings as audio files
Export recordings in bulk for archival
Manage recording lifecycle and storage
How Recording Works
When you start a recording, VoIPBIN captures the audio stream and writes it to cloud storage. The recording continues until you stop it, the call ends, or the maximum duration is reached.
Recording Architecture
+--------+ +----------------+ +-----------+
| Call |--audio-->| Recording |--file-->| Storage |
+--------+ | Engine | | (GCS) |
+----------------+ +-----------+
+------------+ |
| Conference |--audio----+
+------------+
Key Components
Audio Source: The call or conference being recorded
Recording Engine: Captures audio in real-time, handles encoding
Storage: Google Cloud Storage for reliable, scalable file storage
Recording Types
Type |
Description |
|---|---|
Call Recording |
Records a single call’s audio (both directions mixed) |
Conference Recording |
Records all participant audio mixed together |
File Format
Format: WAV (PCM)
Sample Rate: 8 kHz
Channels: Mono (all audio mixed)
Bit Depth: 16-bit
Recording Lifecycle
Every recording moves through a predictable set of states from creation to availability.
State Diagram
POST /recording_start or flow action
|
v
+------------+ +------------+
| starting |------recording-------->| recording |
+------------+ +-----+------+
|
POST /recording_stop, hangup, or max duration
|
v
+------------+
| stopping |
+-----+------+
|
v (file processing)
+------------+
| available |
+------------+
State Descriptions
State |
What’s happening |
|---|---|
starting |
Recording initialization. Audio capture is being set up. |
recording |
Actively capturing audio. File is being written to storage. |
stopping |
Recording is ending. Final audio is being flushed to storage. |
available |
Recording is complete. File is ready for download or streaming. |
Key Behaviors
States only move forward, never backward
A recording in “available” state cannot be modified
If the call/conference ends, active recordings automatically stop
Maximum recording duration is 24 hours
Starting and Stopping Recordings
VoIPBIN provides multiple ways to control recordings based on your use case.
Method 1: Via Flow Action
Use recording_start and recording_stop actions in your call flow for automatic recording control.
Your Flow VoIPBIN Storage
| | |
| recording_start action | |
+-------------------------->| |
| | Initialize recording |
| +-------------------------->|
| | |
| |<=====audio stream=======>|
| | |
| recording_stop action | |
+-------------------------->| |
| | Finalize recording |
| +-------------------------->|
| | |
Example flow with recording:
{
"actions": [
{
"type": "answer"
},
{
"type": "recording_start",
"option": {
"format": "wav"
}
},
{
"type": "talk",
"option": {
"text": "This call is being recorded for quality purposes."
}
},
{
"type": "connect",
"option": {
"destinations": [{"type": "tel", "target": "+15551234567"}]
}
},
{
"type": "recording_stop"
}
]
}
Method 2: Via API (Interrupt Method)
Start or stop recording on an active call or conference programmatically.
Start recording on a call:
$ curl -X POST 'https://api.voipbin.net/v1.0/calls/<call-id>/recording_start?token=<token>' \
--header 'Content-Type: application/json' \
--data '{
"format": "wav"
}'
Stop recording on a call:
$ curl -X POST 'https://api.voipbin.net/v1.0/calls/<call-id>/recording_stop?token=<token>'
Start recording on a conference:
$ curl -X POST 'https://api.voipbin.net/v1.0/conferences/<conference-id>/recording_start?token=<token>' \
--header 'Content-Type: application/json' \
--data '{
"format": "wav"
}'
When to Use Each Method
Method |
Best for |
|---|---|
Flow Action |
Automated recording based on call flow logic |
API (Interrupt) |
Dynamic control - start/stop based on external events |
Recording Storage
Recordings are stored securely in Google Cloud Storage and accessible via the VoIPBIN API.
Storage Architecture
Download: Stream:
+------+ GET /recordings/{id}/file +------+ GET (Range header)
| Your |------------------------------->| Your |<- - - - - - - - - - ->
| App |<--------full file--------------| App | chunks
+------+ | +------+ |
v v
+-------------+ +-------------+
| Recording | | Recording |
| File | | File |
+-------------+ +-------------+
Accessing Recordings
List all recordings:
$ curl -X GET 'https://api.voipbin.net/v1.0/recordings?token=<token>'
Get recording metadata:
$ curl -X GET 'https://api.voipbin.net/v1.0/recordings/<recording-id>?token=<token>'
Download recording file:
$ curl -X GET 'https://api.voipbin.net/v1.0/recordings/<recording-id>/file?token=<token>' \
--output recording.wav
Storage Details
Aspect |
Details |
|---|---|
Storage Location |
Google Cloud Storage (GCS) |
Retention Period |
Configurable per customer (default: 30 days) |
Maximum Duration |
24 hours per recording |
File Size |
~1 MB per minute (8 kHz mono WAV) |
Bulk Export
For exporting large numbers of recordings, use the asynchronous bulk export API:
$ curl -X POST 'https://api.voipbin.net/v1.0/recordings/export?token=<token>' \
--header 'Content-Type: application/json' \
--data '{
"recording_ids": [
"recording-id-1",
"recording-id-2",
"recording-id-3"
]
}'
The export runs asynchronously and you’ll receive a webhook when complete.
Recording and Calls/Conferences
Understanding how recordings relate to calls and conferences helps you track and manage them effectively.
Call Recording Relationship
+-------------------------------------------------------------------+
| Call |
| |
| recording_id: "abc-123" <- Currently active recording |
| |
| recording_ids: [ <- All recordings from this call |
| "abc-123", |
| "def-456", |
| "ghi-789" |
| ] |
| |
+-------------------------------------------------------------------+
recording_id: The currently active recording (empty if not recording)recording_ids: History of all recordings made during this call
Multiple Recordings Per Call
You can start and stop recording multiple times during a single call:
Call Timeline:
|-----|=========|-----|=========|-----|=========|----->
^ ^ ^ ^ ^ ^
| | | | | |
start stop start stop start stop
rec 1 rec 1 rec 2 rec 2 rec 3 rec 3
Result: 3 separate recording files
Common Scenarios
Scenario 1: Record Entire Call
Start recording immediately when the call is answered.
{
"actions": [
{"type": "answer"},
{"type": "recording_start"},
{"type": "connect", "option": {"destinations": [...]}},
{"type": "recording_stop"}
]
}
Scenario 2: Record Only After Consent
Play a consent message, then start recording.
Call answered
|
v
+------------------+
| "Press 1 to |
| consent to |
| recording" |
+--------+---------+
|
+----+----+
| |
Pressed 1 Other
| |
v v
Start Continue
Recording without
| recording
v
Continue
call
Scenario 3: Conference Recording
Record all participants in a conference.
Conference
+-------------------------------------------------------+
| +------+ +------+ +------+ |
| |User A| |User B| |User C| |
| +--+---+ +--+---+ +--+---+ |
| | | | |
| +-----+-----+-----+-----+ |
| | |
| v |
| +----------+ |
| |Recording | <- All audio mixed together |
| | File | |
| +----------+ |
+-------------------------------------------------------+
Scenario 4: Pause and Resume Recording
Stop and start recording to skip sensitive information.
Recording active
|
v
"Please provide your credit card number"
|
v
STOP recording
|
v
Customer provides card number (not recorded)
|
v
START recording (new recording file)
|
v
Continue call
Best Practices
1. Legal Compliance
Consent: Many jurisdictions require consent before recording. Always announce recordings.
Retention: Define clear retention policies. Delete recordings when no longer needed.
Access Control: Limit who can access recordings. Use VoIPBIN’s permission system.
2. Announcement Examples
{
"type": "talk",
"option": {
"text": "This call may be recorded for quality and training purposes.",
"language": "en-US"
}
}
3. Storage Management
Set appropriate retention periods for your use case
Use bulk export for long-term archival
Monitor storage usage to manage costs
Delete recordings that are no longer needed
4. Recording Quality
Ensure good network connectivity for clear audio
Monitor for recording failures via webhooks
Test recording playback regularly
Troubleshooting
Recording Not Starting
Symptom |
Solution |
|---|---|
No recording_id returned |
Verify call/conference is in “progressing” status before starting recording |
Permission denied |
Check API token has recording permissions |
Recording starts but immediately stops |
Check if another recording is already active (only one active recording per call) |
Empty or Corrupted Files
Symptom |
Solution |
|---|---|
File size is 0 bytes |
Recording may have been stopped immediately after starting. Ensure audio is flowing. |
File won’t play |
Verify file format. VoIPBIN uses WAV format. Some players may not support 8kHz mono. |
Audio is silent |
Check that audio was flowing during recording. Muted calls produce silent recordings. |
Download Failures
Symptom |
Solution |
|---|---|
404 Not Found |
Recording may still be processing. Wait for “available” status before downloading. |
Timeout on large files |
Use streaming download with Range headers for large recordings. |
Recording expired |
Recording exceeded retention period. Check your retention settings. |