Skip to content

Get your latest recordings

GET
/users/{user}/dashboard
curl --request GET \
--url 'https://collab.work.optidata.cloud/api/users/2d9e8f70-1a3b-4c5d-8e9f-a0b1c2d3e4f5/dashboard?limit=5' \
--header 'Authorization: Bearer <token>'

Your most recent recordings, newest first, each with its link to the recording page — the data behind the Call widget of the Optiwork home screen. Only the recordings you made are listed, with their transcripts.

Pass your own user uuid as user: another user’s uuid answers 403, company super-administrators included.

user
required
string format: uuid

Your own user uuid.

limit
required
integer
>= 1 <= 100

Number of recordings to return.

Your latest recordings.

Media typeapplication/json
Array<object>
object
id
required
integer
room_id
required
integer
user_id

The person who made the recording.

integer | null
name
string | null
status
required
  • creating, started — being recorded.
  • stopped_locally, pending, processing — recorded; being saved and processed.
  • stopped — done; the transcript follows when ready.
  • failed — interrupted; see startRecordingRecovery.
string
Allowed values: creating started pending processing stopped_locally stopped failed
type
required

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.

string
Allowed values: manual automatic audio_only_sibling
duration_ms
integer | null
chunks_count
integer | null
is_drive_saved

Whether a copy was saved to Optiwork Drive.

boolean
sibling_recording_id
integer | null
is_processing
boolean
is_in_progress
boolean
public_link_url

The public link, when the recording has one.

string | null
link

Address of the recording page in Optiwork.

string
meta

Technical details of the recording. Its content may change; do not rely on it.

object | null
created_at
string format: date-time
updated_at
string format: date-time
stopped_at
string | null format: date-time
room
object
id
required

Internal id. Address the room by hash or custom_hash, never by this id.

integer
room_settings_id
integer | null
cuid

Your company’s id.

string
name
required
string | null
description
string | null
icon_url
string | null
hash
required

The room’s identifier and link.

string
custom_hash

The permanent-link identifier, when the room has one.

string | null
owner_uuid

The user who created the room.

string | null format: uuid
conference_type

on_site for rooms holding an uploaded in-person meeting; null or virtual for video meetings.

string | null
Allowed values: virtual on_site
is_recording_in_progress
boolean
is_ai_notes_enabled

Whether AI meeting notes are on for this room.

boolean
is_ai_notes_locked

Whether participants are prevented from turning AI notes off.

boolean
is_hidden
boolean
chat_uuid
string | null
usage_url
required

The room’s link, to share with participants.

string format: uri
created_at
string format: date-time
updated_at
string format: date-time
deleted_at
string | null format: date-time
settings
object
id
integer
room_id
integer
max_users

Maximum number of people in the room at once.

integer | null
is_guests_allowed

Whether people without an Optiwork account may join.

boolean
join_mode

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.
string
Allowed values: automatic no_request unauthenticated_must_request authenticated_only_no_request authenticated_only_must_request any_must_request
created_at
string format: date-time
updated_at
string format: date-time
participations

Present on getRoom and listRooms.

Array<object>

One person’s presence in a room.

object
id
integer
room_id
integer
user_id

null for guests without an Optiwork account.

integer | null
role

admin for the room owner, moderator for co-hosts, guest for everyone else.

string | null
Allowed values: admin moderator guest
is_send_audio_allowed
boolean
is_send_video_allowed
boolean
is_send_chat_allowed
boolean
is_guest
boolean
guest_user

Details a guest gave when joining.

object
name
string | null
email

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.

string | null format: email
should_receive_call_summary
boolean
join_request_status

State of the person’s request to join, in rooms where joining must be requested.

string | null
origin_hash
string | null
is_ai_notes_enabled
boolean
last_active_at
string | null format: date-time
created_at
string format: date-time
updated_at
string format: date-time
deleted_at
string | null format: date-time
user
object
id
integer
uuid
string format: uuid
cuid
string
username
string
email
string format: email
name
string
company_name
string | null
status
string
avatar_url
string | null
settings

The user’s display preferences (language, theme, time zone).

object | null
created_at
string format: date-time
updated_at
string format: date-time
deleted_at
string | null format: date-time
last_recording
One of:
object recursive
user
object
id
integer
uuid
string format: uuid
cuid
string
username
string
email
string format: email
name
string
company_name
string | null
status
string
avatar_url
string | null
settings

The user’s display preferences (language, theme, time zone).

object | null
created_at
string format: date-time
updated_at
string format: date-time
deleted_at
string | null format: date-time
participations

Who was in the meeting while it was recorded.

Array<object>

One person’s presence in a room.

object
id
integer
room_id
integer
user_id

null for guests without an Optiwork account.

integer | null
role

admin for the room owner, moderator for co-hosts, guest for everyone else.

string | null
Allowed values: admin moderator guest
is_send_audio_allowed
boolean
is_send_video_allowed
boolean
is_send_chat_allowed
boolean
is_guest
boolean
guest_user

Details a guest gave when joining.

object
name
string | null
email

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.

string | null format: email
should_receive_call_summary
boolean
join_request_status

State of the person’s request to join, in rooms where joining must be requested.

string | null
origin_hash
string | null
is_ai_notes_enabled
boolean
last_active_at
string | null format: date-time
created_at
string format: date-time
updated_at
string format: date-time
deleted_at
string | null format: date-time
user
object
id
integer
uuid
string format: uuid
cuid
string
username
string
email
string format: email
name
string
company_name
string | null
status
string
avatar_url
string | null
settings

The user’s display preferences (language, theme, time zone).

object | null
created_at
string format: date-time
updated_at
string format: date-time
deleted_at
string | null format: date-time
permissions

People and groups the recording is shared with.

Array<object>
object
key
additional properties
any
link_permission

The public-link setting, when the recording has a public link.

object | null
transcription
One of:
object
id
integer
recording_id
integer
status
string
Allowed values: queued processing completed error
summary

AI summary of the meeting.

string | null
key_points

AI key points, as a JSON-encoded string: an array of { "title", "items": [string] } sections.

string | null
content

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.

object | null
transcript_id
string | null
transcript_error
string | null
meta
object | null
created_at
string format: date-time
updated_at
string format: date-time
Examples
Examplerecordings
[
{
"id": 1739,
"status": "stopped",
"type": "manual",
"user_id": 59,
"room_id": 10783,
"name": "Friday, June 26, 2026 3:25 PM",
"duration_ms": 904161,
"chunks_count": 0,
"is_drive_saved": false,
"sibling_recording_id": null,
"created_at": "2026-06-26T18:25:18.000000Z",
"updated_at": "2026-06-26T18:40:22.000000Z",
"stopped_at": "2026-06-26T18:40:22.000000Z",
"is_processing": false,
"is_in_progress": false,
"public_link_url": null,
"link": "https://collab.work.optidata.cloud/urn/owt42/v1-4-eyJyZWNvcmRpbmdfaWQiOjE3MzksInJvb21faWQiOjEwNzgzfQ==",
"permissions": [],
"link_permission": null
}
]

No authentication key was sent, or it is malformed.

Media typeapplication/json

Authentication failures use an error key rather than message.

object
error
required
string
Examples
Examplemissing

No bearer token sent

{
"error": "JWT passport exception: Missing bearer token in request"
}

user is not your own uuid.

Media typeapplication/json

A refused or not-found request.

object
message
required
string
Examples
ExampleotherUser
{
"message": "You do not have permission to view this dashboard."
}

No user has this uuid.

Media typeapplication/json

A refused or not-found request.

object
message
required
string
Examplegenerated
{
"message": "example"
}

The authentication key is expired or not recognised. Get a fresh one and retry.

Media typeapplication/json

Authentication failures use an error key rather than message.

object
error
required
string
Examples
Exampleexpired
{
"error": "JWT passport expired: Passport expired"
}

limit is missing or out of range.

Media typeapplication/json
object
message
required

The first validation message.

string
errors
required

Validation messages keyed by field name.

object
key
additional properties
Array<string>
Examples
ExamplemissingLimit
{
"message": "The limit field is required.",
"errors": {
"limit": [
"The limit field is required."
]
}
}