List your permanent links
const url = 'https://collab.work.optidata.cloud/api/rooms/custom';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url https://collab.work.optidata.cloud/api/rooms/custom \ --header 'Authorization: Bearer <token>'The rooms you own that have a permanent link (custom_hash), newest
first. Only the 5 most recent are returned.
Authorizations
Section titled “Authorizations”Responses
Section titled “ Responses ”Up to five rooms with a permanent link.
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 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
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.
Examples
[ { "id": 12226, "room_settings_id": 12220, "cuid": "7f3c2a10-5b8e-4d21-9c6a-0e4f1b2d3c4a", "name": "Weekly sync", "description": "Product team weekly meeting.", "icon_url": "https://collab.work.optidata.cloud/images/pages/bs-icon-camera-video.svg", "created_at": "2026-10-19T14:40:53.000000Z", "updated_at": "2026-10-19T14:40:53.000000Z", "deleted_at": null, "hash": "a3050cd3-5921-4153-b90a-owt42-e94de63c7b15", "is_recording_in_progress": false, "chat_uuid": null, "owner_uuid": "2d9e8f70-1a3b-4c5d-8e9f-a0b1c2d3e4f5", "custom_hash": "owt42-acme-weekly-sync", "is_hidden": false, "conference_type": null, "is_ai_notes_enabled": false, "is_ai_notes_locked": false, "usage_url": "https://collab.work.optidata.cloud/rooms/a3050cd3-5921-4153-b90a-owt42-e94de63c7b15" }]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"}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"}