Skip to content

Recordings

GET /api/v1/recordings

Returns a paginated list of recordings accessible to the authenticated user.

ParameterTypeDefaultDescription
limitnumber20Number of results (1–100)
offsetnumber0Pagination offset
searchstring-Filter by title (partial match)
statusstring-Filter by status (see Recording statuses)
date_fromstring-ISO 8601 date - only return recordings created on or after
date_tostring-ISO 8601 date - only return recordings created on or before
organization_idstring-Scope to an organization
folder_idstring-Scope to a folder (requires organization_id)
{
"data": [
{
"id": "uuid",
"status": "COMPLETED",
"title": "Weekly sync",
"createdAt": "2025-09-19T15:00:00.000Z",
"thumbnailUrl": "https://...",
"progress": 1.0,
"capabilities": {
"canDownload": true,
"canShare": true,
"canViewTranscription": true,
"canGenerateSummary": true,
"canAskQuestions": true
}
}
],
"pagination": {
"total": 42,
"limit": 20,
"offset": 0,
"has_more": true
}
}

GET /api/v1/recordings/:id

Returns full details for a single recording.

Organization recordings are available to any organization member who is allowed to view them. Owners and admins can open every recording in their organization; editors and viewers see the recordings their role and folder access permit. For an organization recording, is_locked, download_url and capabilities reflect the organization’s plan and the member’s feature flags, not the caller’s personal plan.

Returns 402 ORGANIZATION_SUBSCRIPTION_EXPIRED when the organization’s Enterprise subscription is no longer active.

{
"data": {
"id": "uuid",
"status": "COMPLETED",
"title": "Weekly sync",
"createdAt": "2025-09-19T15:00:00.000Z",
"updatedAt": "2025-09-19T15:30:00.000Z",
"startedAt": "2025-09-19T15:01:00.000Z",
"endedAt": "2025-09-19T15:30:00.000Z",
"videoUrl": "https://...",
"hlsUrl": "https://...",
"downloadUrl": "https://...",
"downloadUrlExpiresAt": "2025-09-19T21:00:00.000Z",
"thumbnailUrl": "https://...",
"organizationId": "org_uuid or null",
"transcription": {
"status": "completed",
"language": "en",
"speakers": ["Speaker 1", "Speaker 2"],
"segmentsCount": 184,
"duration": 1740.5
},
"summary": {
"status": "completed",
"content": "## Key topics\n...",
"topics": [
{
"title": "Project timeline",
"keyPoints": [
{ "point": "Launch date confirmed", "details": ["Set for Q1"] }
]
}
]
},
"isLocked": false,
"capabilities": {
"canDownload": true,
"canShare": true,
"canViewTranscription": true,
"canStartTranscription": true,
"canRegenerateTranscription": false,
"canRenameSpeaker": true,
"canViewSummary": true,
"canGenerateSummary": true,
"canAskQuestions": true
}
}
}

GET /api/v1/recordings/:id/transcript

Returns paginated transcript segments for a recording.

Organization recordings follow the same access rules as Get recording. Returns 403 RECORDING_LOCKED when the recording is locked and 403 TRANSCRIPT_NOT_AVAILABLE when transcription is disabled for the organization or the member. A recording that has not been transcribed yet still returns 200 with "status": "not_started" and an empty segments array.

ParameterTypeDefaultDescription
start_chunknumber0Chunk index to start from
limitnumber50Number of chunks (1–100)
{
"data": {
"status": "completed",
"language": "en",
"speakers": ["Speaker 1", "Alice"],
"duration": 1740.5,
"segments": [
{
"id": 1,
"start": 0.5,
"end": 3.2,
"text": "Good morning everyone.",
"speaker": "Alice",
"confidence": 0.97
}
],
"pagination": {
"total_chunks": 184,
"has_more": true
}
}
}

PATCH /api/v1/recordings/:id

Update the title or notes of a recording. At least one field is required.

{
"title": "New title (1–500 characters)",
"notes": "Optional notes (max 100,000 characters)"
}
{
"data": { "success": true }
}

DELETE /api/v1/recordings/:id

Permanently deletes a recording and all associated data (transcript, summary, shares).

{
"data": { "success": true }
}

POST /api/v1/recordings/:id/share-link

Generates a public share link for the recording.

For an organization recording, any member who can view the recording may create the link. The link is created on the recording owner’s behalf and uses the organization’s plan, so download links work for organization recordings even when the caller’s personal plan is free. Returns 403 RECORDING_LOCKED when the recording is locked and 403 SHARING_DISABLED when sharing is disabled for the organization or the member.

{
"permission": "view"
}
ValueDescription
viewRecipients can watch the video and access the transcript/summary
downloadRecipients can also download the video file
{
"data": {
"share_url": "https://recordmeeting.com/app/shared/abc123",
"share_token": "abc123",
"permission": "view"
}
}

StatusDescription
STARTINGRecording request received, setup in progress
CONNECTINGConnecting to the Google Meet session
WAIT_APPROVALWaiting for in-call approval to record
RECORDINGActively recording
UPLOADINGClient-side upload in progress (chunks draining to storage)
PROCESSINGCloudflare Stream packaging HLS/DASH - not yet playable
MIGRATINGVideo fully playable; HLS being migrated to long-term storage
COMPLETEDRecording fully processed and stored
ERRORRecording failed

API consumers should treat MIGRATING identically to COMPLETED for playback, download, and share operations - the distinction is internal.