Record video calls automatically with the Daily API

Overview

There should be a word for that feeling when, halfway through leading a meeting that you meant to record, you realize you forgot to click the little red button. This can be especially frustrating in lots of situations:

  • Webinars: customers looking forward to a recording miss out on new ways to use a product.
  • Team meetings: OOO colleagues might’ve needed the context later.
  • Employee training: employees onboarding to new roles lose the chance to learn from customer interactions (e.g. video calls via Intercom).
  • Classrooms: students don’t get to hear the smart questions their peers ask during lecture.

At Daily, we want to make every part of a video call easier: before, during, and after. That’s why we baked an auto recording option into our API. All you have to do is create a meeting token and set its start_cloud_recording property to true.

Create the meeting token

Before you can auto record, you’ll need to sign up for our Scale Plan. You should be able to sign up right from your Daily.co dashboard, but if you need help or have questions please reach out.

You’ll need a Daily.co room link handy. There are lots of ways to create one (you can read more about configuring rooms in our docs or in other blog posts).

I’ll run this curl command to create a private test room with recording enabled for our use case:

curl --request POST \
--url https://api.daily.co/v1/rooms \
--header 'authorization: Bearer INSERT_YOUR_TOKEN_HERE' \
--header 'content-type: application/json' \
--data '{"name":"test-room","privacy":"private","enable_recording":"cloud"}'

We’ll use the /meeting-tokens endpoint to set up auto recording. If you’ve ever set up private access to a Daily.co room, this might sound familiar. The Daily meeting token object not only helps us manage who can access a room, but also lets us configure how that person experiences the meeting once they get there. Will they join with mics on or off? Are they allowed to screen share? You can explore all the possible configuration properties in our docs.

For now, we’re most interested in the start_cloud_recording property. When we set this to true, cloud recording will automatically start when a participant joins the room.

Run the below curl command to create a meeting token with those two properties set to true:

curl --request POST \
--url https://api.daily.co/v1/meeting-tokens \
--header 'authorization: Bearer INSERT_YOUR_TOKEN_HERE' \ 
--header 'content-type: application/json' \
--data '{"properties":{"start_cloud_recording":true}}'

You should see a response like this if all went as planned:

{"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJvIjp0cnVlLCJ1IjoiQWRtaW5pc3RyYXRvciIsImQiOiI4Y2I3MzhlMS02YTk1LTQ3ZjEtYTUxNy0wYTE5Y2YzMjhhNzkiLCJpYXQiOjE1ODkzMjU2MzZ9.SNC-UGVRlItIGpw-ufKgGsYRxA0d9MSuUqezNiiY9oQ"}

‍ To quickly test that auto recording works, add the t=INSERT_TOKEN query parameter to your meeting link. ‍

The link should look something like:

https://kimberlee-daily.daily.co/test-room?t=INSERT_TOKEN_HERE

When you paste that url into your browser, you should see a message that this meeting is set to auto record:

screenshot of ‘Click to start recording’ notification when joining Daily.co call
You should see a prompt to start recording the call as soon as you join.

After you click it, you should see a recording bar at the bottom of the call:

person points down on video call screen at recording bar
You should see "Recording in progress" noted at the bottom of your screen. Roughly where I'm pointing! ‍

Once you’re done with the recording and the call, you can find the recording in your dashboard at dashboard.daily.co/recordings.

What’s next?

Pasting tokens into your browser link is great for testing, but you’ll probably need to embed auto recording directly within your own video application. To do that, you can pass the token as a property to any of the Daily.co factory methods, or to the .join() method. If you’re using createFrame() for example, this might look something like:

callFrame = window.DailyIframe.createFrame({
  url: 'YOUR_URL_HERE' 
  token: 'YOUR_TOKEN_HERE'
});

To learn about generating your own tokens and meeting rooms dynamically on the server, see this blog post.

And there you have it! Now you won’t have to worry about forgetting to record meetings you’ll need to share later.

To dive deeper into our /meeting-tokens endpoint, have a look at Phil’s blog post on introducing room access control. Or, to try out other Scale Plan features, experiment with live streaming. And, as always, please let us know of any feedback or feature requests.

Never miss a story

Get the latest direct to your inbox.