Call Recording

DropOnAir relays call signaling; call media is peer-to-peer (a WebRTC mesh) and never passes through the platform. So recording is done by a participant, and the platform's job is to make it transparent and to wire up the lifecycle events. The platform never holds the media, recordings go to your own storage, exactly like attachments.

Two client-side modes

  • A - a human participant records. A participant's app captures the streams it already receives and uploads the file to your storage.
  • B - a recording participant. A headless participant you run joins the call as a real peer and records. More reliable for unattended capture.

Both keep end-to-end encryption intact, the recorder is a genuine call participant. A server-side recording mode (media routed through a platform media server) is a future option and would be explicitly non-E2EE for media.

SDK signal

The SDK signals recording state; your app owns the actual capture (MediaRecorder or equivalent) and the upload, the same split as screen sharing. The platform broadcasts the signal to every participant, including anyone who joins later - that transparency is enforced server-side and cannot be turned off.

client.startRecording(callId);
// ... your app records the streams and uploads the file to your storage ...
client.markRecordingAvailable(callId, 's3://my-bucket/recordings/call-123.webm');
client.stopRecording(callId);

client.onGroupCallEvent((e) => {
  if (e.type === 'GROUP_CALL_RECORDING_STARTED') showRecordingBanner(e.payload);
});

Webhook events

  • recording.started / recording.stopped - a participant started or stopped recording.
  • recording.available - a recording was uploaded; carries the location in your storage.

Requires SDK 0.16.0+. Works on group and room calls. Verify support via GET /api/info, features includes "call_recording".