Meeting Recordings
Import a meeting recording
Import an externally captured meeting recording and attach it to an incident. Video and transcript are fetched asynchronously. The existing POST /v1/incidents//meeting_recordings endpoint invites a bot — this endpoint handles recordings that were captured outside of the bot flow.
POST
/
v1
/
incidents
/
{incident_id}
/
meeting_recordings
/
import
Import a meeting recording
curl --request POST \
--url https://api.rootly.com/v1/incidents/{incident_id}/meeting_recordings/import \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/vnd.api+json' \
--data '
{
"source": "recall_desktop_sdk",
"recall_recording_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"started_at": "2023-11-07T05:31:56Z",
"ended_at": "2023-11-07T05:31:56Z",
"meeting_url": "<string>"
}
'import requests
url = "https://api.rootly.com/v1/incidents/{incident_id}/meeting_recordings/import"
payload = {
"source": "recall_desktop_sdk",
"recall_recording_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"started_at": "2023-11-07T05:31:56Z",
"ended_at": "2023-11-07T05:31:56Z",
"meeting_url": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/vnd.api+json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/vnd.api+json'},
body: JSON.stringify({
source: 'recall_desktop_sdk',
recall_recording_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
started_at: '2023-11-07T05:31:56Z',
ended_at: '2023-11-07T05:31:56Z',
meeting_url: '<string>'
})
};
fetch('https://api.rootly.com/v1/incidents/{incident_id}/meeting_recordings/import', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.rootly.com/v1/incidents/{incident_id}/meeting_recordings/import",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'source' => 'recall_desktop_sdk',
'recall_recording_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'started_at' => '2023-11-07T05:31:56Z',
'ended_at' => '2023-11-07T05:31:56Z',
'meeting_url' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/vnd.api+json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.rootly.com/v1/incidents/{incident_id}/meeting_recordings/import"
payload := strings.NewReader("{\n \"source\": \"recall_desktop_sdk\",\n \"recall_recording_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"started_at\": \"2023-11-07T05:31:56Z\",\n \"ended_at\": \"2023-11-07T05:31:56Z\",\n \"meeting_url\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/vnd.api+json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.rootly.com/v1/incidents/{incident_id}/meeting_recordings/import")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/vnd.api+json")
.body("{\n \"source\": \"recall_desktop_sdk\",\n \"recall_recording_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"started_at\": \"2023-11-07T05:31:56Z\",\n \"ended_at\": \"2023-11-07T05:31:56Z\",\n \"meeting_url\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.rootly.com/v1/incidents/{incident_id}/meeting_recordings/import")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/vnd.api+json'
request.body = "{\n \"source\": \"recall_desktop_sdk\",\n \"recall_recording_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"started_at\": \"2023-11-07T05:31:56Z\",\n \"ended_at\": \"2023-11-07T05:31:56Z\",\n \"meeting_url\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "<string>",
"type": "meeting_recordings",
"attributes": {
"session_number": 123,
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"started_at": "2023-11-07T05:31:56Z",
"ended_at": "2023-11-07T05:31:56Z",
"duration_minutes": 123,
"speaker_count": 123,
"word_count": 123,
"transcript_summary": "<string>",
"title": "<string>",
"meeting_url": "<string>",
"video_url": "<string>",
"created_by": "<string>"
}
}
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
Incident UUID
Body
application/vnd.api+json
Import source (currently only "recall_desktop_sdk")
Available options:
recall_desktop_sdk External recording UUID (required when source is recall_desktop_sdk)
Meeting platform
Available options:
zoom, google_meet, microsoft_teams, webex When the recording started
When the recording ended
Original meeting URL
Response
recording imported
Show child attributes
Show child attributes
Was this page helpful?
Previous
List all meeting recordingsList meeting recordings across the organization. Returns the current user's standalone recordings plus incident-backed recordings the user can access. Supports filtering by status, platform, and created_by.
Next
⌘I
Import a meeting recording
curl --request POST \
--url https://api.rootly.com/v1/incidents/{incident_id}/meeting_recordings/import \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/vnd.api+json' \
--data '
{
"source": "recall_desktop_sdk",
"recall_recording_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"started_at": "2023-11-07T05:31:56Z",
"ended_at": "2023-11-07T05:31:56Z",
"meeting_url": "<string>"
}
'import requests
url = "https://api.rootly.com/v1/incidents/{incident_id}/meeting_recordings/import"
payload = {
"source": "recall_desktop_sdk",
"recall_recording_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"started_at": "2023-11-07T05:31:56Z",
"ended_at": "2023-11-07T05:31:56Z",
"meeting_url": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/vnd.api+json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/vnd.api+json'},
body: JSON.stringify({
source: 'recall_desktop_sdk',
recall_recording_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
started_at: '2023-11-07T05:31:56Z',
ended_at: '2023-11-07T05:31:56Z',
meeting_url: '<string>'
})
};
fetch('https://api.rootly.com/v1/incidents/{incident_id}/meeting_recordings/import', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.rootly.com/v1/incidents/{incident_id}/meeting_recordings/import",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'source' => 'recall_desktop_sdk',
'recall_recording_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'started_at' => '2023-11-07T05:31:56Z',
'ended_at' => '2023-11-07T05:31:56Z',
'meeting_url' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/vnd.api+json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.rootly.com/v1/incidents/{incident_id}/meeting_recordings/import"
payload := strings.NewReader("{\n \"source\": \"recall_desktop_sdk\",\n \"recall_recording_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"started_at\": \"2023-11-07T05:31:56Z\",\n \"ended_at\": \"2023-11-07T05:31:56Z\",\n \"meeting_url\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/vnd.api+json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.rootly.com/v1/incidents/{incident_id}/meeting_recordings/import")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/vnd.api+json")
.body("{\n \"source\": \"recall_desktop_sdk\",\n \"recall_recording_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"started_at\": \"2023-11-07T05:31:56Z\",\n \"ended_at\": \"2023-11-07T05:31:56Z\",\n \"meeting_url\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.rootly.com/v1/incidents/{incident_id}/meeting_recordings/import")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/vnd.api+json'
request.body = "{\n \"source\": \"recall_desktop_sdk\",\n \"recall_recording_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"started_at\": \"2023-11-07T05:31:56Z\",\n \"ended_at\": \"2023-11-07T05:31:56Z\",\n \"meeting_url\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "<string>",
"type": "meeting_recordings",
"attributes": {
"session_number": 123,
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"started_at": "2023-11-07T05:31:56Z",
"ended_at": "2023-11-07T05:31:56Z",
"duration_minutes": 123,
"speaker_count": 123,
"word_count": 123,
"transcript_summary": "<string>",
"title": "<string>",
"meeting_url": "<string>",
"video_url": "<string>",
"created_by": "<string>"
}
}
}