Skip to main content

Recording

Control recording for your classrooms. Start recording when a class begins, stop it when needed, list all recordings, and download them.

Recording Storage

Recordings are saved to cloud storage and are available for download for 6 hours after the class ends. After that, they're automatically deleted. If you need permanent storage, download the files within this window using the Download Recordings endpoint.

Start Recording​

POST /v1/room/:roomId/recording/start

Begin recording a live room. The recording captures the composite view—exactly what participants see.

Request​

Headers​

HeaderRequiredDescription
VF-ORG-IDYesYour organization ID
Content-TypeYesapplication/json

URL Parameters​

ParameterDescription
roomIdThe room to record

Request Body​

{
"options": {
"showLogo": true,
"layout": "grid",
"preset": "H264_1080P_30"
}
}
FieldTypeRequiredDescription
optionsobjectNoRecording configuration
options.showLogobooleanNoShow organization logo watermark (default: true)
options.layoutstringNogrid or speaker (default: grid)
options.presetstringNoQuality preset (see below)

Quality Presets:

PresetResolutionUsage
H264_720P_30720p 30fpsGood quality, smaller files
H264_1080P_301080p 30fpsHigh quality (default)

Example Request​

curl -X POST https://api.verriflo.com/v1/room/math-101/recording/start \
-H "VF-ORG-ID: your-organization-id" \
-H "Content-Type: application/json" \
-d '{
"options": {
"showLogo": true,
"layout": "grid",
"preset": "H264_1080P_30"
}
}'

Response (200)​

{
"success": true,
"message": "Recording started",
"data": {
"egressId": "EG_abc123xyz",
"roomId": "math-101",
"status": "EGRESS_STARTING",
"startedAt": "2024-01-15T09:05:00.000Z"
}
}
FieldTypeDescription
egressIdstringUnique identifier for this recording job
statusstringRecording status (STARTING → ACTIVE)
startedAtstringWhen recording started (ISO date)

Stop Recording​

POST /v1/room/:roomId/recording/stop

Stop an active recording. The file will be processed and available for download shortly after.

Request​

Headers​

HeaderRequiredDescription
VF-ORG-IDYesYour organization ID
Content-TypeYesapplication/json

Request Body (Optional)​

{
"egressId": "EG_abc123xyz"
}
FieldTypeRequiredDescription
egressIdstringNoSpecific recording to stop (auto-detected if omitted)

If you don't provide an egressId, we'll stop the active recording for that room.

Example Request​

curl -X POST https://api.verriflo.com/v1/room/math-101/recording/stop \
-H "VF-ORG-ID: your-organization-id" \
-H "Content-Type: application/json"

Response (200)​

{
"success": true,
"message": "Recording stopped",
"data": {
"egressId": "EG_abc123xyz",
"status": "EGRESS_ENDING",
"duration": 3600
}
}

List Recordings​

GET /v1/room/:roomId/recordings

Get all recordings for a room—past and current.

Request​

curl -X GET https://api.verriflo.com/v1/room/math-101/recordings \
-H "VF-ORG-ID: your-organization-id"

Response (200)​

{
"success": true,
"message": "Recordings retrieved",
"data": [
{
"recordingId": "rec_EG_abc123xyz",
"roomId": "math-101",
"status": "COMPLETED",
"startedAt": "2024-01-15T09:05:00.000Z",
"endedAt": "2024-01-15T10:05:00.000Z",
"duration": 3600
}
]
}

Download Recordings​

GET /v1/room/:roomId/recordings/download

Get secure, time-limited download URLs for recordings from a completed class session.

Time-Limited Access

Recordings are only available for 6 hours after a class ends. After that, they are automatically deleted.

Request​

Headers​

HeaderRequiredDescription
VF-ORG-IDYesYour organization ID

URL Parameters​

ParameterDescription
roomIdThe room identifier

Example Request​

curl -X GET https://api.verriflo.com/v1/room/math-101/recordings/download \
-H "VF-ORG-ID: your-organization-id"

Response (200)​

{
"success": true,
"message": "Recordings retrieved successfully",
"data": {
"roomId": "math-101",
"files": [
{
"filename": "recording.mp4",
"downloadUrl": "https://storage.verriflo.com/...?sig=...",
"size": 157286400,
"duration": 3600,
"startedAt": "2024-01-15T09:05:00.000Z",
"endedAt": "2024-01-15T10:05:00.000Z"
}
],
"expiresIn": "4h 23m"
}
}
FieldTypeDescription
roomIdstringThe room these recordings belong to
filesarrayList of recording files
files[].downloadUrlstringPre-signed URL for download (valid ~1 hour)
expiresInstringTime remaining before recordings are deleted

Errors​

StatusMessageWhat to Do
404Classroom not foundCheck roomId
409Recording in progressWait for class to end
410Download window expiredRecording deleted (past 6h window)

Recording Statuses​

StatusDescription
STARTINGRecording is initializing
ACTIVERecording in progress
ENDINGRecording is being finalized
COMPLETEDRecording finished, file available
FAILEDRecording failed (check logs)
ABORTEDRecording was aborted

Example: Auto-Download Script (Node.js)​

const fs = require("fs");
const https = require("https");

async function saveRecordings(roomId) {
const response = await fetch(
`https://api.verriflo.com/v1/room/${roomId}/recordings/download`,
{
headers: { "VF-ORG-ID": process.env.VERRIFLO_ORG_ID },
}
);

const data = await response.json();

if (!data.success) {
throw new Error(data.message);
}

for (const file of data.data.files) {
const dest = fs.createWriteStream(`./${file.filename}`);
https.get(file.downloadUrl, (res) => {
res.pipe(dest);
dest.on("finish", () => console.log(`Saved ${file.filename}`));
});
}
}