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}`));
});
}
}