Back to Blog
Features 9 min read Dec 28, 2024

Call Recording: Storage, Compliance & Best Practices

Everything you need to know about implementing call recordings.

Recording Overview

CallPayMin supports recording of video and audio calls. Recordings are stored securely and can be accessed via API or downloaded from the dashboard.

Enabling Recording

Enable Recording
const call = await client.calls.create({
  expertId: 'expert_123',
  questerId: 'quester_456',
  type: 'video',
  settings: {
    recording: true,
    recordingFormat: 'mp4',     // mp4, webm, or audio-only (mp3)
    recordingQuality: 'hd',     // sd, hd, or full-hd
  },
});

Accessing Recordings

Recordings are available after the call ends. Listen for the recording.ready webhook or fetch via API:

Get Recording
// Get recording for a call
const recording = await client.recordings.get('call_xyz789');

console.log('Download URL:', recording.downloadUrl);
console.log('Duration:', recording.duration);
console.log('Size:', recording.fileSize);
console.log('Expires:', recording.expiresAt);

// The download URL is a signed URL valid for 1 hour
// Store the file in your own storage if needed

Storage & Retention

Recordings are stored securely in cloud storage with configurable retention policies:

PlanDefault RetentionMax Retention
Free7 days7 days
Starter30 days90 days
Growth90 days1 year
EnterpriseCustomUnlimited

Compliance Considerations

Important Legal Notice

Recording laws vary by jurisdiction. Many require consent from all parties. Consult legal counsel for your specific use case.

Consent Requirements

One-Party Consent

Only one participant needs to consent.

US: ~38 states, UK, Canada (federal)

All-Party Consent

All participants must consent.

US: CA, FL, IL, etc. EU (GDPR)

Implementing Consent

Recording Consent Flow
// Option 1: Pre-call consent in your app
const userConsent = await showConsentDialog({
  message: 'This call will be recorded for quality purposes.',
  acceptText: 'I consent to recording',
  declineText: 'Do not record',
});

const call = await client.calls.create({
  // ...
  settings: {
    recording: userConsent.accepted,
  },
});

// Option 2: In-call consent announcement
const call = await client.calls.create({
  // ...
  settings: {
    recording: true,
    recordingConsent: {
      announceOnJoin: true,
      message: 'This call is being recorded.',
    },
  },
});

Pricing

Self-Managed Mode

Recording: $0.014/min

Fully Managed Mode

Recording: $0.019/min

Best Practices

  • Always obtain consent before recording
  • Set appropriate retention policies
  • Use audio-only when video isn't needed (cost savings)
  • Download and store recordings in your own storage for long-term
  • Implement secure access controls for recordings

View and manage your recordings in the Calls Dashboard.