Start and stop recording

This guide focuses on using room composite (browser-based) recordings. Learn more in recordings overview.

A composite recording is a single MP4 file that records all peers and their tracks (audio, video and screen share). It captures the experience that a peer has in the room and is equivalent to recordings generated from Google Meet and Zoom.

A composite recording is different from track-level recordings, which generate single file per audio/video track. To use track-level recordings, enable SFU recordings on your template.

Enable recordings on the dashboard

In your template configuration, enable room composite recordings.

Composite recording on 100ms Dashboard

Start recording with API

Use the server-side API to start recording for a given room (passed as room_id in the request body). Any configuration specified here will override the configuration on the template.

Also see API reference.

POSThttps://api.100ms.live/v2/recordings/room/<room_id>/start
curl --request POST 'https://api.100ms.live/v2/recordings/room/<room_id>/start' \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer <management_token>' \ --data-raw '{ "resolution" : {"width": 1280, "height": 720} }'

Automate start recording (Optional)

If you wish to automatically start 'Room composite' recordings for all your rooms and sessions when the first peer joins, you can enable the 'Enable auto-start on room join' toggle in the Recording tab of the template in the 100ms dashboard. Note that enabling this will disable HLS and RTMP streaming for that template if you have them enabled.

enable autostart recording

Listen to recording status updates

Start recording is asynchronous and you can listen to status changes to the recording jobs with webhooks.

Stop recording with API

Use the server-side API to end recording for a given room (passed as room_id in the request body).

POSThttps://api.100ms.live/v2/recordings/room/<room_id>/stop
curl --request POST 'https://api.100ms.live/v2/recordings/room/<room_id>/stop' \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer <management_token>'

Also see API reference.

Automatically stop recording

Note that recording automatically ends in 5 minutes after all peers (excluding Beam) have left the room.

To instantly end recording when peers have left the room, you can also chain up our APIs to run relevant business logic before stopping the recording. This ensures the video file will not have the extra 5 minutes of empty frames.

Get recording assets

There are multiple ways to get the recording assets (files). By default, recording assets are saved in 100ms storage buckets and retained up to 15 days. We recommend configuring your own storage buckets so that assets are automatically transferred and you control their retention lifecycle.

If you are relying on the 100ms storage bucket, we recommend downloading the asset from the dashboard or programmatically via the webhook/API.

Configure your own storage

100ms supports AWS S3, Google Cloud Storage and Alibaba OSS as storage buckets. These can be configured on the 100ms dashboard.

Download assets from dashboard

Recording assets can be downloaded from the 100ms dashboard. Use the sessions page to navigate to the relevant session page, which has links to the recorded assets.

Recording links

Download assets via webhooks

The beam.recording.success webhook event contains the pre-signed URL to the recording asset (in the property called recording_presigned_url). This is a short-lived URL, that can be used to download the asset.

Fetch assets via API

You can use the recording assets REST APIs to fetch the assets:


Have a suggestion? Recommend changes ->

Run in postman

Was this helpful?

1234