Skip navigation

Speak API

Rooms, participants, calls, and transcripts.

Speak

Rooms

Create Room

POST https://api.kinescope.io/v1/speak/rooms

Creates a new Speak room. You can pre-create participants or add them later.

FieldTypeDescription
namestringRoom name
owner_iduuidUser ID
typestringRoom type - instant_meeting, permanent_meeting, scheduled_meeting
transcription_autostartbooleanEnable automatic call transcription. Optional, defaults to false. When it is enabled, transcription starts automatically as soon as the first participant joins the call
autorecordingbooleanEnable automatic call recording. Optional, defaults to false. When it is enabled, recording starts automatically as soon as the room owner joins the room and any stream (audio or video) appears
waiting_roombooleanEnable the waiting room. Optional, defaults to false. When it is enabled, participants other than the room owner and participants with the admin role wait until the owner or an admin lets them in
wait_for_hostbooleanMake participants wait for the host. Optional, defaults to false. When it is enabled, participants other than the room owner and participants with the admin role wait until the owner or an admin joins the call, then they are let in automatically. If waiting_room is enabled too, participants still have to be let in manually after the host joins
Request body (json)
{
  "name": "New Room",
  "owner_id": "<UUID>",
  "type": "scheduled_meeting",
  "transcript_enabled": false,
  "autorecording": false
}
Responses
{
  "data": {
    "id": "<UUID>",
    "workspace_id": "<UUID>",
    "owner_id": "<UUID>",
    "type": "scheduled_meeting",
    "transcription_autostart": false,
    "waiting_room": false,
    "wait_for_host": false,
    "participants": [],
    "code": "zqu-kqyh-ymz",
    "name": "New Room",
    "link": "https://speak.kinescope.io/zqu-kqyh-ymz",
    "status": "scheduled",
    "created_at": "2025-10-22T02:32:32.840208Z",
    "updated_at": null
  }
}

List Rooms

GET https://api.kinescope.io/v1/speak/rooms

Returns all Speak rooms in the workspace.

Responses
{
  "meta": {
    "pagination": {
      "page": 1,
      "per_page": 10,
      "total": 0
    },
    "order": {
      "created_at": "desc",
      "name": "asc"
    }
  },
  "data": []
}

Get Room

GET https://api.kinescope.io/v1/speak/rooms/:room_id

Retrieves a single Speak room by ID.

Responses
{
  "data": {
    "id": "<UUID>",
    "workspace_id": "<UUID>",
    "owner_id": "<UUID>",
    "type": "scheduled_meeting",
    "transcription_autostart": false,
    "waiting_room": false,
    "wait_for_host": false,
    "participants": [
      {
        "id": "<UUID>",
        "user_id": "<UUID>",
        "room_id": "<UUID>",
        "name": "Name Updated",
        "role": "admin",
        "created_at": "2025-10-22T02:41:14.945244Z",
        "updated_at": "2025-10-22T02:46:57.84099Z"
      }
    ],
    "code": "zqu-kqyh-ymz",
    "name": "Room Update",
    "link": "https://speak.kinescope.io/zqu-kqyh-ymz",
    "status": "cancelled",
    "created_at": "2025-10-22T02:32:32.840208Z",
    "updated_at": "2025-10-22T03:33:22.877221Z"
  }
}
{
  "error": {
    "code": 400404,
    "message": "not found"
  }
}

Update Room

PATCH https://api.kinescope.io/v1/speak/rooms/:room_id

Updates properties of a Speak room.

FieldTypeDescription
namestringRoom name
autorecordingbooleanEnable automatic call recording. Optional, defaults to false. When it is enabled, recording starts automatically as soon as the room owner joins the room and any stream (audio or video) appears
transcription_autostartbooleanEnable automatic call transcription. Optional, defaults to false. When it is enabled, transcription starts automatically as soon as the first participant joins the call
Responses
{
  "data": {
    "id": "<UUID>",
    "workspace_id": "<UUID>",
    "owner_id": "<UUID>",
    "type": "scheduled_meeting",
    "transcription_autostart": false,
    "waiting_room": false,
    "wait_for_host": false,
    "participants": [],
    "code": "zqu-kqyh-ymz",
    "name": "Room Update",
    "link": "https://speak.kinescope.io/zqu-kqyh-ymz",
    "status": "scheduled",
    "created_at": "2025-10-22T02:32:32.840208Z",
    "updated_at": "2025-10-22T02:34:28.336038Z"
  }
}

Delete Room

DELETE https://api.kinescope.io/v1/speak/rooms/:room_id

Permanently deletes the Speak room. All participants lose access.

Responses
{
  "data": {
    "success": true
  }
}

Participants

Create Participant
POST https://api.kinescope.io/v1/speak/rooms/:room_id/participants

Adds a participant to a Speak room, optionally with a specific role.

FieldTypeDescription
user_iduuidUser ID
namestringParticipant name
rolestringadmin, manager
Request body (json)
{
  "user_id": "<UUID>",
  "name": "New Admin",
  "role": "admin"
}
Responses
{
  "data": {
    "id": "<UUID>",
    "user_id": "<UUID>",
    "room_id": "<UUID>",
    "name": "New Admin",
    "role": "admin",
    "created_at": "2025-10-22T02:41:14.945244Z",
    "updated_at": null
  }
}
List Participants
GET https://api.kinescope.io/v1/speak/rooms/:room_id/participants

Returns the participants of a Speak room.

Responses
{
  "meta": {
    "pagination": {
      "page": 1,
      "per_page": 10,
      "total": 0
    },
    "order": {
      "created_at": "desc",
      "name": "asc"
    }
  },
  "data": []
}
Get Participant
GET https://api.kinescope.io/v1/speak/rooms/:room_id/participants/:participant_id

Retrieves a participant by ID.

Responses
{
  "data": {
    "id": "<UUID>",
    "user_id": "<UUID>",
    "room_id": "<UUID>",
    "name": "Name Updated",
    "role": "admin",
    "created_at": "2025-10-22T02:41:14.945244Z",
    "updated_at": "2025-10-22T02:46:57.84099Z"
  }
}
Update Participant
PATCH https://api.kinescope.io/v1/speak/rooms/:room_id/participants/:participant_id

Updates a participant — typically to change their role or display name.

FieldTypeDescription
namestringParticipant name
Responses
{
  "data": {
    "id": "<UUID>",
    "user_id": "<UUID>",
    "room_id": "<UUID>",
    "name": "Name Updated",
    "role": "admin",
    "created_at": "2025-10-22T02:41:14.945244Z",
    "updated_at": "2025-10-22T02:46:57.84099Z"
  }
}
Delete Participant
DELETE https://api.kinescope.io/v1/speak/rooms/:room_id/participants/:participant_id

Removes a participant from the Speak room.

Responses
{
  "data": {
    "success": true
  }
}

Calls

List Calls
GET https://api.kinescope.io/v1/speak/rooms/:room_id/calls

Returns a paginated list of calls for a Speak room.

Responses
{
  "meta": {
    "pagination": {
      "page": 1,
      "per_page": 10,
      "total": 0
    },
    "order": {
      "created_at": "desc"
    }
  },
  "data": []
}
Get Call
GET https://api.kinescope.io/v1/speak/rooms/:room_id/calls/:call_id

Retrieves a single call by ID.

Responses
{
  "data": {
    "id": "<UUID>",
    "room_id": "<UUID>",
    "transcript_id": "<UUID>",
    "created_at": "2025-10-22T02:32:32.840208Z",
    "updated_at": "2025-10-22T03:33:22.877221Z"
  }
}
{
  "error": {
    "code": 400404,
    "message": "not found"
  }
}
Transcript
Get Transcript
GET https://api.kinescope.io/v1/speak/rooms/:room_id/calls/:call_id/transcript

Returns metadata for the transcript of a call.

Responses
{
  "data": {
    "call_id": "<UUID>",
    "room_id": "<UUID>",
    "status": "done",
    "created_at": "2025-10-22T02:32:32.840208Z",
    "updated_at": "2025-10-22T03:33:22.877221Z"
  }
}
{
  "error": {
    "code": 400404,
    "message": "not found"
  }
}
Download Transcript
GET https://api.kinescope.io/v1/speak/rooms/:room_id/calls/:call_id/transcript/content.txt

Downloads the transcript as a plain-text file. Returns Content-Type: text/plain with a Content-Disposition: attachment header. Each line has the format [MM:SS.T-MM:SS.T] Speaker: Text. Available only when transcript status is done.

Responses
[00:00.0-00:05.3] Alice: Hello everyone, let's get started.
[00:05.3-00:12.1] Bob: Sounds good, I have a few updates to share.
{
  "error": {
    "code": 422100,
    "message": "transcript not ready"
  }
}