Meet API Docs Dashboard
On this page

Recordings API

Read Record calls and get transcripts for how recording works. A recording is audio, or a 1280x720 MP4 of the call with "video": true, plus the transcript and chat. Test keys see test recordings only; another project's recording is 404.

Start recording a live room (audio by default, composite MP4 with video true)#

POST /api/v1/rooms/{name}/recordings

Video recordings are capped per server (MEET_VIDEO_RECORDING_MAX, default 2): beyond that the answer is 429 video_recording_limit. Layouts: a grid of up to 9 tiles (the most recent speakers first) or, while someone shares a screen, the screen large with the speakers small. 1280x720, H.264 + AAC, faststart.

Parameters

NameInTypeDescription
name requiredpathstring

Body (JSON)

FieldTypeDescription
videobooleantrue records the composite video as MP4. Default false

Response

201 The recording, status recording

FieldTypeDescription
object"recording"
idstring
livemodeboolean
roomstring
statusstringOne of recording, processing, ready, failed
kindstringaudio is mono Opus in WebM; video is the composite MP4. One of audio, video
resolutionstring or nullPicture size such as 1280x720; null for audio
size_bytesinteger
duration_secondsinteger
mimestring or null
started_atstring
ended_atstring or null
json
{
  "object": "recording",
  "id": "6f1c2b7e-3a54-4d0e-9c1b-2f7a8e5d4c10",
  "livemode": false,
  "room": "order-1042",
  "status": "recording",
  "kind": "audio",
  "resolution": "resolution",
  "size_bytes": 1,
  "duration_seconds": 1860,
  "mime": "mime",
  "started_at": "2026-11-02T09:31:12Z",
  "ended_at": "2026-11-02T09:30:00Z"
}

Errors

StatusMeaning
400invalid_parameter, unknown_parameter or invalid_json; param names the field
401invalid_api_key or revoked_api_key
404room_not_found, session_not_found or participant_not_found
409room_exists, idempotency_key_reused, room_not_live
429rate_limited; wait Retry-After seconds
503engine_unavailable; the call engine did not pick up the command in 5 seconds, try again

Every error has the shape {"error": {"code", "message", "param"?}}. See Errors.

Examples

bash
curl "https://meet.respiresoft.com/api/v1/rooms/order-1042/recordings" \
  -H "Authorization: Bearer $MEET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
javascript
import { Meet } from "@respiresoft/meet";

const meet = new Meet({ apiKey: process.env.MEET_API_KEY });

undefined

Stop a running recording#

POST /api/v1/recordings/{id}/stop

Parameters

NameInTypeDescription
id requiredpathstring (uuid)

Response

200 The recording, now processing

FieldTypeDescription
object"recording"
idstring
livemodeboolean
roomstring
statusstringOne of recording, processing, ready, failed
kindstringaudio is mono Opus in WebM; video is the composite MP4. One of audio, video
resolutionstring or nullPicture size such as 1280x720; null for audio
size_bytesinteger
duration_secondsinteger
mimestring or null
started_atstring
ended_atstring or null
json
{
  "object": "recording",
  "id": "6f1c2b7e-3a54-4d0e-9c1b-2f7a8e5d4c10",
  "livemode": false,
  "room": "order-1042",
  "status": "recording",
  "kind": "audio",
  "resolution": "resolution",
  "size_bytes": 1,
  "duration_seconds": 1860,
  "mime": "mime",
  "started_at": "2026-11-02T09:31:12Z",
  "ended_at": "2026-11-02T09:30:00Z"
}

Errors

StatusMeaning
404room_not_found, session_not_found or participant_not_found
409room_exists, idempotency_key_reused, room_not_live

Every error has the shape {"error": {"code", "message", "param"?}}. See Errors.

Examples

bash
curl "https://meet.respiresoft.com/api/v1/recordings/id/stop" \
  -H "Authorization: Bearer $MEET_API_KEY"
javascript
import { Meet } from "@respiresoft/meet";

const meet = new Meet({ apiKey: process.env.MEET_API_KEY });

undefined

List recordings#

GET /api/v1/recordings

Parameters

NameInTypeDescription
statusquerystringOne of recording, processing, ready, failed
roomquerystring
limitqueryintegerDefault 20. Between 1 and 100
starting_afterquerystring

Response

200 A page of recordings (audio and video)

FieldTypeDescription
object"list"
dataarray of Recording
data[].object"recording"
data[].idstring
data[].livemodeboolean
data[].roomstring
data[].statusstringOne of recording, processing, ready, failed
data[].kindstringaudio is mono Opus in WebM; video is the composite MP4. One of audio, video
data[].resolutionstring or nullPicture size such as 1280x720; null for audio
data[].size_bytesinteger
data[].duration_secondsinteger
data[].mimestring or null
data[].started_atstring
data[].ended_atstring or null
has_moreboolean
json
{
  "object": "list",
  "data": [
    {
      "object": "recording",
      "id": "6f1c2b7e-3a54-4d0e-9c1b-2f7a8e5d4c10",
      "livemode": false,
      "room": "order-1042",
      "status": "recording",
      "kind": "audio",
      "resolution": "resolution",
      "size_bytes": 1,
      "duration_seconds": 1860,
      "mime": "mime",
      "started_at": "2026-11-02T09:31:12Z",
      "ended_at": "2026-11-02T09:30:00Z"
    }
  ],
  "has_more": false
}

Errors

StatusMeaning
401invalid_api_key or revoked_api_key

Every error has the shape {"error": {"code", "message", "param"?}}. See Errors.

Examples

bash
curl "https://meet.respiresoft.com/api/v1/recordings" \
  -H "Authorization: Bearer $MEET_API_KEY"
javascript
import { Meet } from "@respiresoft/meet";

const meet = new Meet({ apiKey: process.env.MEET_API_KEY });

undefined

One recording, with transcript and chat#

GET /api/v1/recordings/{id}

Parameters

NameInTypeDescription
id requiredpathstring (uuid)

Response

200 The recording

FieldTypeDescription
object"recording"
idstring
livemodeboolean
roomstring
statusstringOne of recording, processing, ready, failed
kindstringaudio is mono Opus in WebM; video is the composite MP4. One of audio, video
resolutionstring or nullPicture size such as 1280x720; null for audio
size_bytesinteger
duration_secondsinteger
mimestring or null
started_atstring
ended_atstring or null
json
{
  "object": "recording",
  "id": "6f1c2b7e-3a54-4d0e-9c1b-2f7a8e5d4c10",
  "livemode": false,
  "room": "order-1042",
  "status": "recording",
  "kind": "audio",
  "resolution": "resolution",
  "size_bytes": 1,
  "duration_seconds": 1860,
  "mime": "mime",
  "started_at": "2026-11-02T09:31:12Z",
  "ended_at": "2026-11-02T09:30:00Z"
}

Errors

StatusMeaning
404room_not_found, session_not_found or participant_not_found

Every error has the shape {"error": {"code", "message", "param"?}}. See Errors.

Examples

bash
curl "https://meet.respiresoft.com/api/v1/recordings/id" \
  -H "Authorization: Bearer $MEET_API_KEY"
javascript
import { Meet } from "@respiresoft/meet";

const meet = new Meet({ apiKey: process.env.MEET_API_KEY });

undefined

GET /api/v1/recordings/{id}/download-link returns { "url", "expires_at", "expires_in": 3600 }. The link is signed and works for one hour without a key. Until the recording is ready the answer is 409 recording_not_ready.

bash
curl "https://meet.respiresoft.com/api/v1/recordings/$RECORDING_ID/download-link" -H "Authorization: Bearer $MEET_API_KEY"
js
const { url } = await meet.recordings.downloadLink(process.env.RECORDING_ID);
const res = await fetch(url);                         // the audio file, audio/webm

Delete a recording#

DELETE /api/v1/recordings/{id} removes the row and the file. While a recording is still recording or processing the answer is 409 recording_in_progress.

bash
curl -X DELETE "https://meet.respiresoft.com/api/v1/recordings/$RECORDING_ID" -H "Authorization: Bearer $MEET_API_KEY"
js
await meet.recordings.delete(process.env.RECORDING_ID);