Skip to content

Recording

Set "record": true when you create a call and Tele records it automatically from the moment the first person joins. The recording is a single MP4 of the call in a grid layout, with everyone's video and audio mixed.

Starting and stopping

Action Request Who
Record from the start "record": true on POST /v1/calls host, service
Start mid-call POST /v1/calls/{id}/recording/start (the call must be live) host, service
Stop POST /v1/calls/{id}/recording/stop host, service

Recording also stops by itself when the call ends. A call has at most one recording running at a time.

Tell people they're being recorded

While a recording runs, the media SDK reports the room as recording (for example room.isRecording on web). Show a clear Recording banner in your app whenever it is true.

Recording needs a published track

The recorder starts once at least one participant is publishing audio or video. A room where nobody publishes anything produces no recording.

Recording states

GET /v1/calls/{id}/recordings lists recordings; each has a state:

state Meaning
recording In progress
processing Finishing and uploading
available Ready to download
failed Didn't complete; see error
archived Moved to cold storage after 90 days. Restore it first
restoring, restored Being thawed (a few hours), then downloadable for 7 days
expired Past its retention period (1 year in cold storage)
{
  "recordings": [{
    "id": "01a1321d-…", "call_id": "01a1321d-…", "state": "available",
    "started_at": "2026-10-13T09:00:05Z", "ended_at": "2026-10-13T09:00:58Z",
    "duration_seconds": 53, "size_bytes": 142576
  }]
}

Downloading

GET /v1/recordings/{id}/download streams the MP4 through the API. It supports Range requests, so a <video src> can seek. Send the host's user token or your service token. A browser <video> tag can't send headers, so fetch it from your backend and proxy it, or stream it into a blob.

Archived recordings return 409 archived. Call POST /v1/recordings/{id}/restore, then retry in a few hours. Expired ones return 410 expired.

Billing

Recording minutes are logged on every recording and appear in usage reports as recording_minutes. The current price is 0 BDT per minute.