Recordings
List recordings
Section titled “List recordings”GET /api/v1/recordingsReturns a paginated list of recordings accessible to the authenticated user.
Query parameters
Section titled “Query parameters”| Parameter | Type | Default | Description |
|---|---|---|---|
limit | number | 20 | Number of results (1–100) |
offset | number | 0 | Pagination offset |
search | string | - | Filter by title (partial match) |
status | string | - | Filter by status (see Recording statuses) |
date_from | string | - | ISO 8601 date - only return recordings created on or after |
date_to | string | - | ISO 8601 date - only return recordings created on or before |
organization_id | string | - | Scope to an organization |
folder_id | string | - | Scope to a folder (requires organization_id) |
Response
Section titled “Response”{ "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 recording
Section titled “Get recording”GET /api/v1/recordings/:idReturns 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.
Response
Section titled “Response”{ "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 transcript segments
Section titled “Get transcript segments”GET /api/v1/recordings/:id/transcriptReturns 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.
Query parameters
Section titled “Query parameters”| Parameter | Type | Default | Description |
|---|---|---|---|
start_chunk | number | 0 | Chunk index to start from |
limit | number | 50 | Number of chunks (1–100) |
Response
Section titled “Response”{ "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 } }}Update recording
Section titled “Update recording”PATCH /api/v1/recordings/:idUpdate the title or notes of a recording. At least one field is required.
Request body
Section titled “Request body”{ "title": "New title (1–500 characters)", "notes": "Optional notes (max 100,000 characters)"}Response
Section titled “Response”{ "data": { "success": true }}Delete recording
Section titled “Delete recording”DELETE /api/v1/recordings/:idPermanently deletes a recording and all associated data (transcript, summary, shares).
Response
Section titled “Response”{ "data": { "success": true }}Create share link
Section titled “Create share link”POST /api/v1/recordings/:id/share-linkGenerates 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.
Request body
Section titled “Request body”{ "permission": "view"}| Value | Description |
|---|---|
view | Recipients can watch the video and access the transcript/summary |
download | Recipients can also download the video file |
Response
Section titled “Response”{ "data": { "share_url": "https://recordmeeting.com/app/shared/abc123", "share_token": "abc123", "permission": "view" }}Recording statuses
Section titled “Recording statuses”| Status | Description |
|---|---|
STARTING | Recording request received, setup in progress |
CONNECTING | Connecting to the Google Meet session |
WAIT_APPROVAL | Waiting for in-call approval to record |
RECORDING | Actively recording |
UPLOADING | Client-side upload in progress (chunks draining to storage) |
PROCESSING | Cloudflare Stream packaging HLS/DASH - not yet playable |
MIGRATING | Video fully playable; HLS being migrated to long-term storage |
COMPLETED | Recording fully processed and stored |
ERROR | Recording failed |
API consumers should treat
MIGRATINGidentically toCOMPLETEDfor playback, download, and share operations - the distinction is internal.