Kenso

Voices

The Voices endpoints of the Kenso API.

4 endpointsKen-Version: 1.1AuthenticationWorkspacesErrors

List the voices this workspace can use

GET/v1/voicesvoices.list

Needs the linkedin_voice_notes feature on your workspace. Until it is on, calls answer 404.

Try it on developer.ken.so

Deepgram's generally available voices, ElevenLabs stock voices and the workspace's imported ElevenLabs voices, never early-access voices. This is a catalogue, not a cursor API: pagination.nextCursor is null and pagination.hasMore is false. provider is deepgram or elevenlabs; language is a language (fr, every French locale) or a locale (fr-CA), and a multilingual voice (multi, every ElevenLabs voice) matches every language; includeImported defaults to true. sampleUrl is a presigned URL valid for one hour. Any workspace member.

Parameters

Name
In
Type
Required
Description
provider
In: query
string
optional
deepgram or elevenlabs; omitted lists both.
language
In: query
string
optional
A language (fr) or a locale (fr-CA). A language matches every locale of it; a multilingual voice matches every filter.
includeImported
In: query
boolean
optional
Include the workspace's imported ElevenLabs voices. Default true.
Ken-Version
In: header
string, one of: 2026-11-02, 1.1
optional
The API version: a dated version (YYYY-MM-DD), or 1.1, another name for the first dated version. Optional: without it the request uses your API key's pinned version. Keys created in the Kenso app are pinned to the newest version; keys minted by the CLI login are not. A key with no pinned version and no header gets the legacy shape where the path has one, and 404 where the path exists only in this version. A date that is not a version answers 400 unsupported_version; any other value that is not a version is treated as legacy.
X-Ken-Workspace-Id
In: header
integer (int64)
optional
Workspace to act in. Required when your credential can reach more than one workspace (otherwise 400 workspace_required).

Response 200

data is a list of VoiceModel. Each item has these fields. The response also carries pagination.

Field
Type
Description
provider
string
deepgram or elevenlabs.
voiceId
string
name
string
family
string
Flux, Aura-2, Aura-1, ElevenLabs or Imported.
language
string
The voice's language or locale (en, fr-CA).
languageName
string
accent
string
gender
string
age
string
traits
array of string
earlyAccess
boolean
imported
boolean
True for this workspace's imported ElevenLabs voices.
featured
boolean
sampleUrl
string
A presigned sample URL valid for one hour, or absent.
Request
curl -X GET "https://api.ken.so/v1/voices" \
  -H "Authorization: Bearer $KEN_API_KEY" \
  -H "Ken-Version: 1.1" \
  -H "X-Ken-Workspace-Id: $KEN_WORKSPACE_ID"
Response 200
{
  "success": true,
  "data": [
    {
      "provider": "string",
      "voiceId": "string",
      "name": "string",
      "family": "string",
      "language": "string",
      "languageName": "string",
      "accent": "string",
      "gender": "string",
      "age": "string",
      "traits": [
        "string"
      ],
      "earlyAccess": true,
      "imported": true,
      "featured": true,
      "sampleUrl": "https://example.com"
    }
  ],
  "pagination": {
    "nextCursor": "eyJpZCI6ODE1fQ",
    "hasMore": true,
    "total": 1,
    "isTotalCapped": true
  }
}

Import a voice from the workspace's ElevenLabs account

POST/v1/voicesvoices.import

Needs the linkedin_voice_notes feature on your workspace. Until it is on, calls answer 404.

Try it on developer.ken.so

Body { provider: "elevenlabs", voiceId, rightsConfirmed: true }. rightsConfirmed must be true: the caller confirms the workspace has the rights to use the voice. Kenso checks the voice is on the workspace's ElevenLabs account right now. Answers 201 with the catalog item, or 200 when it was already imported. A removed voice can be imported again. 400 for a bad field, 404 when the voice is not on the account, 409 provider_key_missing, 502 provider_rejected. Needs the integrations feature; never a Client seat.

Parameters

Name
In
Type
Required
Description
Ken-Version
In: header
string, one of: 2026-11-02, 1.1
optional
The API version: a dated version (YYYY-MM-DD), or 1.1, another name for the first dated version. Optional: without it the request uses your API key's pinned version. Keys created in the Kenso app are pinned to the newest version; keys minted by the CLI login are not. A key with no pinned version and no header gets the legacy shape where the path has one, and 404 where the path exists only in this version. A date that is not a version answers 400 unsupported_version; any other value that is not a version is treated as legacy.
X-Ken-Workspace-Id
In: header
integer (int64)
optional
Workspace to act in. Required when your credential can reach more than one workspace (otherwise 400 workspace_required).

Request body

application/json, optional.

Field
Type
Required
Description
provider
string
optional
elevenlabs, the only provider whose voices are imported.
voiceId
string
optional
The voice id on the workspace's ElevenLabs account.
rightsConfirmed
boolean
optional
Must be true: the caller confirms the workspace has the rights to use this voice.

Response 201

Also answers 200. data is a VoiceModel.

Field
Type
Description
provider
string
deepgram or elevenlabs.
voiceId
string
name
string
family
string
Flux, Aura-2, Aura-1, ElevenLabs or Imported.
language
string
The voice's language or locale (en, fr-CA).
languageName
string
accent
string
gender
string
age
string
traits
array of string
earlyAccess
boolean
imported
boolean
True for this workspace's imported ElevenLabs voices.
featured
boolean
sampleUrl
string
A presigned sample URL valid for one hour, or absent.
Request
curl -X POST "https://api.ken.so/v1/voices" \
  -H "Authorization: Bearer $KEN_API_KEY" \
  -H "Ken-Version: 1.1" \
  -H "X-Ken-Workspace-Id: $KEN_WORKSPACE_ID" \
  -H "Content-Type: application/json" \
  -d '{
  "provider": "string",
  "voiceId": "string",
  "rightsConfirmed": true
}'
Response 201
{
  "success": true,
  "data": {
    "provider": "string",
    "voiceId": "string",
    "name": "string",
    "family": "string",
    "language": "string",
    "languageName": "string",
    "accent": "string",
    "gender": "string",
    "age": "string",
    "traits": [
      "string"
    ],
    "earlyAccess": true,
    "imported": true,
    "featured": true,
    "sampleUrl": "https://example.com"
  }
}

List the voices on the workspace's own ElevenLabs account that it can import

GET/v1/voices/importablevoices.list-importable

Needs the linkedin_voice_notes feature on your workspace. Until it is on, calls answer 404.

Try it on developer.ken.so

Needs the workspace's ElevenLabs key (Settings, Integrations): 409 provider_key_missing without one, 502 provider_rejected when ElevenLabs refuses it. Stock voices are left out: they are in GET /v1/voices already. imported marks voices this workspace already imported. Needs the integrations feature; never a Client seat.

Parameters

Name
In
Type
Required
Description
Ken-Version
In: header
string, one of: 2026-11-02, 1.1
optional
The API version: a dated version (YYYY-MM-DD), or 1.1, another name for the first dated version. Optional: without it the request uses your API key's pinned version. Keys created in the Kenso app are pinned to the newest version; keys minted by the CLI login are not. A key with no pinned version and no header gets the legacy shape where the path has one, and 404 where the path exists only in this version. A date that is not a version answers 400 unsupported_version; any other value that is not a version is treated as legacy.
X-Ken-Workspace-Id
In: header
integer (int64)
optional
Workspace to act in. Required when your credential can reach more than one workspace (otherwise 400 workspace_required).

Response 200

data is a list of ImportableVoiceModel. Each item has these fields. The response also carries pagination.

Field
Type
Description
voiceId
string
name
string
category
string
cloned, professional, generated or library.
labels
map of string
previewUrl
string
imported
boolean
True when this workspace already imported it.
Request
curl -X GET "https://api.ken.so/v1/voices/importable" \
  -H "Authorization: Bearer $KEN_API_KEY" \
  -H "Ken-Version: 1.1" \
  -H "X-Ken-Workspace-Id: $KEN_WORKSPACE_ID"
Response 200
{
  "success": true,
  "data": [
    {
      "voiceId": "string",
      "name": "string",
      "category": "string",
      "labels": {
        "key": "string"
      },
      "previewUrl": "https://example.com",
      "imported": true
    }
  ],
  "pagination": {
    "nextCursor": "eyJpZCI6ODE1fQ",
    "hasMore": true,
    "total": 1,
    "isTotalCapped": true
  }
}

Remove an imported voice from this workspace

DELETE/v1/voices/{provider}/{voiceId}voices.remove

Needs the linkedin_voice_notes feature on your workspace. Until it is on, calls answer 404.

Try it on developer.ken.so

Answers 204, or 404 when the voice is not imported here. Sequence steps that use it keep their settings; their notes fail with voice_removed and the step sends its text instead. Needs the integrations feature; never a Client seat.

Parameters

Name
In
Type
Required
Description
provider
In: path
string
required
voiceId
In: path
string
required
Ken-Version
In: header
string, one of: 2026-11-02, 1.1
optional
The API version: a dated version (YYYY-MM-DD), or 1.1, another name for the first dated version. Optional: without it the request uses your API key's pinned version. Keys created in the Kenso app are pinned to the newest version; keys minted by the CLI login are not. A key with no pinned version and no header gets the legacy shape where the path has one, and 404 where the path exists only in this version. A date that is not a version answers 400 unsupported_version; any other value that is not a version is treated as legacy.
X-Ken-Workspace-Id
In: header
integer (int64)
optional
Workspace to act in. Required when your credential can reach more than one workspace (otherwise 400 workspace_required).

Response 204

Request
curl -X DELETE "https://api.ken.so/v1/voices/string/string" \
  -H "Authorization: Bearer $KEN_API_KEY" \
  -H "Ken-Version: 1.1" \
  -H "X-Ken-Workspace-Id: $KEN_WORKSPACE_ID"
Response 204
HTTP/1.1 204 No Content