DeewanDocs
API keys

Recordings

List meeting recordings and download them — decrypted on your side, never on ours.

A host starts a recording inside the meeting. It is composed and encrypted in that browser and uploaded in parts, so the stored file is ciphertext: our servers keep the parts, not the meeting. The API lists recordings and hands you the parts with the key for that one recording.

List recordings

ts
const { data } = await deewan.recordings.list({ room_id: roomId, limit: 20 });
// { id, title, status, mime_type, parts, bytes, duration_ms, started_at, … }

Download one

The SDK fetches every part and decrypts them locally, returning a playable file:

ts
import { writeFile } from "node:fs/promises";

const { bytes, mimeType } = await deewan.recordings.download(recordingId);
await writeFile("lesson.webm", bytes);  // mimeType is usually video/webm

Without the SDK: POST /recordings/{id}/download returns the key and the part URLs. Fetch the parts in order; each is a 12-byte IV followed by AES-256-GCM ciphertext, with deewan-recording:<id>:<index> as additional authenticated data. Concatenate the decrypted parts — that is the file.

That key decrypts the meeting. Treat the download response like a password: fetch it from your server, never from a browser, and don't log it.

When a recording is ready

  • recording.ready fires when the host stops (or leaves and the recording closes itself).
  • status is recording, then ready; parts is how many pieces to fetch.
  • Deleting a recording removes its stored parts and cannot be undone.
  • Who may watch a recording in Deewan follows the room: everyone who can use it, or only its hosts.