Finish recovering a recording
const url = 'https://collab.work.optidata.cloud/api/rooms/a3050cd3-5921-4153-b90a-owt42-e94de63c7b15/recordings/1739/recovery/finish';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"media_server_type":"jitsi","chunks_count":12}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://collab.work.optidata.cloud/api/rooms/a3050cd3-5921-4153-b90a-owt42-e94de63c7b15/recordings/1739/recovery/finish \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "media_server_type": "jitsi", "chunks_count": 12 }'Closes a recovery: the pieces sent with uploadRecordingChunk are
assembled and the recording is processed (transcript, summary) like any
other. Send media_server_type and chunks_count as your Optiwork
client recorded them; media_server_url is required when
media_server_type is livekit.
Authorizations
Section titled “Authorizations”Parameters
Section titled “ Parameters ”Path Parameters
Section titled “Path Parameters”The room’s hash (from its link) or its permanent-link identifier custom_hash.
The recording’s id. The recording must belong to the room in the path.
Request Bodyrequired
Section titled “Request Bodyrequired”object
The kind of meeting server the recording was made on.
Required when media_server_type is livekit.
Number of pieces sent. Required when media_server_type is jitsi.
Examples
{ "media_server_type": "jitsi", "chunks_count": 12}Responses
Section titled “ Responses ”The recording, now being processed.
object
The person who made the recording.
creating,started— being recorded.stopped_locally,pending,processing— recorded; being saved and processed.stopped— done; the transcript follows when ready.failed— interrupted; seestartRecordingRecovery.
manual when a participant pressed record; automatic for the audio
recorded to produce AI meeting notes; audio_only_sibling for the
audio track kept next to a manual recording.
Whether a copy was saved to Optiwork Drive.
The public link, when the recording has one.
Address of the recording page in Optiwork.
Technical details of the recording. Its content may change; do not rely on it.
object
Internal id. Address the room by hash or custom_hash, never by this id.
Your company’s id.
The room’s identifier and link.
The permanent-link identifier, when the room has one.
The user who created the room.
on_site for rooms holding an uploaded in-person meeting; null or virtual for video meetings.
Whether AI meeting notes are on for this room.
Whether participants are prevented from turning AI notes off.
The room’s link, to share with participants.
object
Maximum number of people in the room at once.
Whether people without an Optiwork account may join.
Who may enter the room and whether they must ask first:
automatic— anyone with the link enters straight away; guests without an account appear as “Guest”.no_request— anyone with the link enters without asking; guests type their name first.unauthenticated_must_request— signed-in Optiwork users enter; guests type their name and ask to join.authenticated_only_no_request— only signed-in Optiwork users, without asking; guests are turned away.authenticated_only_must_request— only signed-in Optiwork users, and they ask to join; guests are turned away.any_must_request— everyone asks to join; guests type their name first.
Present on getRoom and listRooms.
One person’s presence in a room.
object
null for guests without an Optiwork account.
admin for the room owner, moderator for co-hosts, guest for everyone else.
Details a guest gave when joining.
object
Where the guest gets the meeting summary. Shown only on your own participation, or to the room’s owner, its moderators and company super-administrators.
State of the person’s request to join, in rooms where joining must be requested.
object
The user’s display preferences (language, theme, time zone).
object
The user’s display preferences (language, theme, time zone).
Who was in the meeting while it was recorded.
One person’s presence in a room.
object
null for guests without an Optiwork account.
admin for the room owner, moderator for co-hosts, guest for everyone else.
Details a guest gave when joining.
object
Where the guest gets the meeting summary. Shown only on your own participation, or to the room’s owner, its moderators and company super-administrators.
State of the person’s request to join, in rooms where joining must be requested.
object
The user’s display preferences (language, theme, time zone).
People and groups the recording is shared with.
object
The public-link setting, when the recording has a public link.
object
AI summary of the meeting.
AI key points, as a JSON-encoded string: an array of
{ "title", "items": [string] } sections.
The full transcript as produced by the speech-to-text engine (utterances, words, speakers, timings). Its exact shape depends on the engine and may change.
Example
{ "status": "creating", "type": "manual", "room": { "conference_type": "virtual", "settings": { "join_mode": "automatic" }, "participations": [ { "role": "admin", "user": { "status": "active" } } ] }, "user": { "status": "active" }, "participations": [ { "role": "admin", "user": { "status": "active" } } ], "transcription": { "status": "queued" }}No authentication key was sent, or it is malformed.
Authentication failures use an error key rather than message.
object
Examples
No bearer token sent
{ "error": "JWT passport exception: Missing bearer token in request"}Only the person who made the recording may recover it — or recordings are not enabled for your company.
A refused or not-found request.
object
An error raised by the application’s own rules.
object
What went wrong.
The HTTP status, repeated.
What to do about it, when there is a hint.
Examples
{ "message": "You do not have permission to update this recording."}The room does not exist, or the recording does not belong to it.
An error raised by the application’s own rules.
object
What went wrong.
The HTTP status, repeated.
What to do about it, when there is a hint.
A refused or not-found request.
object
Examples
{ "error": "Recording not found or access denied"}The recording is already stopped.
An error raised by the application’s own rules.
object
What went wrong.
The HTTP status, repeated.
What to do about it, when there is a hint.
Examples
{ "error": "Recording is already stopped"}The authentication key is expired or not recognised. Get a fresh one and retry.
Authentication failures use an error key rather than message.
object
Examples
{ "error": "JWT passport expired: Passport expired"}The body failed validation.
object
The first validation message.
Validation messages keyed by field name.
object
Examples
{ "message": "The media server url field is required when media server type is livekit.", "errors": { "media_server_url": [ "The media server url field is required when media server type is livekit." ] }}