Managing Cloud Recordings


The Zoom platform provides a few ways to manage your recordings. You can use our API to manage your recordings post meeting or you can use our webhooks to get alerted when recordings are ready.

Webhooks

We provide many webhooks but we’ll be focusing on just a single webhoook for the purposes of managing our recordings. We’re starting with webhooks because they will give us an easy way to be notified when recordings are ready on our account.

To start head to the marketplace and create your webhook.

  1. Click here to create an app on our marketplace.
  2. Uncheck the option to publish to the marketplace.
  3. Select a “Webhook Only” app as your type.
  4. Click next and setup your webhook details.
    1. In this case we will just use the “All Recordings Have Completed” event, but definitely take a look at the other events as we have a lot of events you can subscribe to!

Once you have your webhook setup you will be able to receive an event every time a recording is completed on your account. You should test this out for yourself but to make it easier, we’ll just show you what that looks like. Below is the payload for a recording completed webhook event:

object
event
string
payload
object

Once you have the payload from the webhook you get a good amount of information, but the important ones are:

  1. download_url
    1. A link to the meeting recording for download
  2. play_url
    1. A link to a web playable version of the recording

But, there is a ton of other information here and you can take this and move recordings to your own cloud/intenral storage or create a listing of recordings for your customers that can deisplay all their recordings. The sky is the limit!

REST API

You can also use the REST API to manage your recordings. The REST API really allows you to manage the recordings post meeting and lets you list recordings for a user, retrieve all recordings for a user, delete, and recover recordings.

If you aren’t familiar with calling our REST APIs we recommend playing around with Postman and our APIs.

Retrieving a Cloud Recording

If you want to retreive a recording, you can use the /meetings/{meetingId}/recordings endpoint to retrieve the recordings for a specific meetingID.

Retrieving Cloud Recordings

var http = require("https");

var options = {
  "method": "GET",
  "hostname": "api.zoom.us",
  "port": null,
  "path": "/v2/meetings/%3CMEETINGID%3E/recordings",
  "headers": {
    "authorization": "Bearer <TOKEN>"
  }
};

var req = http.request(options, function (res) {
  var chunks = [];

  res.on("data", function (chunk) {
    chunks.push(chunk);
  });

  res.on("end", function () {
    var body = Buffer.concat(chunks);
    console.log(body.toString());
  });
});

req.end();

Deleting a Cloud Recording

If you want to delete a recording, you can use the /meetings/{meetingId}/recordings endpoint to retrieve the recordings for a specific meetingID.

Deleting Cloud Recordings

var http = require("https");

var options = {
  "method": "DELETE",
  "hostname": "api.zoom.us",
  "port": null,
  "path": "/v2/meetings/%3CMEETINGID%3E/recordings?action=trash",
  "headers": {
    "authorization": "Bearer <TOKEN>"
  }
};

var req = http.request(options, function (res) {
  var chunks = [];

  res.on("data", function (chunk) {
    chunks.push(chunk);
  });

  res.on("end", function () {
    var body = Buffer.concat(chunks);
    console.log(body.toString());
  });
});

req.end();

Deleting a Meetings Recordings

If you want to delete all a meeting’s recordings, you can send a DELETE to the /meetings/{meetingId}/recordings endpoint to delete the recordings for a specific meetingID.

Deleting Cloud Recordings

var http = require("https");

var options = {
  "method": "DELETE",
  "hostname": "api.zoom.us",
  "port": null,
  "path": "/v2/meetings/%3CMEETINGID%3E/recordings?action=trash",
  "headers": {
    "authorization": "Bearer <TOKEN>"
  }
};

var req = http.request(options, function (res) {
  var chunks = [];

  res.on("data", function (chunk) {
    chunks.push(chunk);
  });

  res.on("end", function () {
    var body = Buffer.concat(chunks);
    console.log(body.toString());
  });
});

req.end();

Deleting a single meeting recording

If you want to delete a single recording, you can send a DELETE to the /meetings/{meetingId}/recordings/{recordingId} endpoint to delete the recordings for a specific meetingID.

Deleting a Single Recording

var http = require("https");

var options = {
  "method": "DELETE",
  "hostname": "api.zoom.us",
  "port": null,
  "path": "/v2/meetings/%3CMEETINGID%3E/recordings/%3CRECORDINGID%3E?action=trash",
  "headers": {
    "authorization": "Bearer <TOKEN>"
  }
};

var req = http.request(options, function (res) {
  var chunks = [];

  res.on("data", function (chunk) {
    chunks.push(chunk);
  });

  res.on("end", function () {
    var body = Buffer.concat(chunks);
    console.log(body.toString());
  });
});

req.end();

Recovering a meeting’s recordings

If you want to recover all a meeting’s recordings, you can send a PUT to the /meetings/{meetingId}/recordings/{recordingId}/status endpoint to recover the recordings for a specific meetingID.

Deleting a Single Recording

var http = require("https");

var options = {
  "method": "PUT",
  "hostname": "api.zoom.us",
  "port": null,
  "path": "/v2/meetings/%3CMEETINGID%3E/recordings/status",
  "headers": {
    "content-type": "application/json",
    "authorization": "Bearer <TOKEN>"
  }
};

var req = http.request(options, function (res) {
  var chunks = [];

  res.on("data", function (chunk) {
    chunks.push(chunk);
  });

  res.on("end", function () {
    var body = Buffer.concat(chunks);
    console.log(body.toString());
  });
});

req.write(JSON.stringify({ action: 'recover' }));
req.end();

Recover a single meeting recording

If you want to recover a single meeting recording, you can send a PUT to the /meetings/{meetingId}/recordings/{recordingId} endpoint to recover the recordings for a specific meetingID.

Deleting a Single Recording

var http = require("https");

var options = {
  "method": "PUT",
  "hostname": "api.zoom.us",
  "port": null,
  "path": "/v2/meetings/%3CMEETINGID%3E/recordings/%3CRECORDINGID%3E/status",
  "headers": {
    "content-type": "application/json",
    "authorization": "Bearer <TOKEN>"
  }
};

var req = http.request(options, function (res) {
  var chunks = [];

  res.on("data", function (chunk) {
    chunks.push(chunk);
  });

  res.on("end", function () {
    var body = Buffer.concat(chunks);
    console.log(body.toString());
  });
});

req.write(JSON.stringify({ action: 'recover' }));
req.end();