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.