Kenso

Workspaces

The workspaces your key can reach: list, read and update them.

Workspace and credits3 endpointsKen-Version: 2026-11-02AuthenticationWorkspacesErrors

Replaces GET /v1/workspaces/me, GET /v1/workspaces/search, and GET /v1/clients for the caller's own memberships. Ordered by id. q matches the workspace name. Requires ReadAccess.

Parameters

Name
In
Type
Required
Description
Q
In: query
string
optional
Limit
In: query
integer (int32)
optional
Cursor
In: query
string
optional
Ken-Version
In: header
string, one of: 2026-11-02, 1.1
required
The API version: a dated version (YYYY-MM-DD), or 1.1, another name for the first dated version. Without it the request uses your API key's pinned version; an unpinned key reaches the legacy shape of the same path. 1.0 selects the legacy shape explicitly.

Response 200

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

Field
Type
Description
id
integer (int64)
name
string
isActive
boolean
logoUrl
string
The square Icon. Omitted when none.
wordmarkUrl
string
The wide Logo (wordmark). Omitted when none.
parentWorkspaceId
integer (int64)
The white-label master of this workspace. Omitted for a master.
brandHostname
string
The master's verified custom hostname. Omitted when the workspace is unbranded.
isDemo
boolean
Kenso's demo workspace (client.is_demo, MAR-6): the Ken Demo switcher marks it for staff, and staff-only Studio chat and Agent team open to its members.
Request
curl -X GET "https://api.ken.so/v1/workspaces" \
  -H "Authorization: Bearer $KEN_API_KEY" \
  -H "Ken-Version: 2026-11-02"
Response 200
{
  "success": true,
  "data": [
    {
      "id": 812,
      "name": "Northwind Outbound",
      "isActive": true,
      "logoUrl": "https://cdn.example.com/workspaces/812/icon.png",
      "isDemo": false
    }
  ],
  "pagination": {
    "nextCursor": "eyJpZCI6ODE1fQ",
    "hasMore": true,
    "total": 1,
    "isTotalCapped": true
  }
}

Return one workspace

GET/v1/workspaces/{workspaceId}workspaces.get

Try it on developer.ken.so

Replaces GET /v1/clients/{id} and GET /v1/workspaces/{id}/company. Non-members receive 403. Requires ReadAccess.

Parameters

Name
In
Type
Required
Description
workspaceId
In: path
integer (int64)
required
Ken-Version
In: header
string, one of: 2026-11-02, 1.1
required
The API version: a dated version (YYYY-MM-DD), or 1.1, another name for the first dated version. Without it the request uses your API key's pinned version; an unpinned key reaches the legacy shape of the same path. 1.0 selects the legacy shape explicitly.

Response 200

data is a WorkspaceModel.

Field
Type
Description
id
integer (int64)
name
string
isActive
boolean
website
string
linkedinCompanyUrl
string
companyContext
string
ownerLink
string
Only on the staff create response (POST /v1/admin/workspaces) when ownerEmail was sent: linked, already_member, user_not_found or failed.
logoUrl
string
The square Icon. Omitted when none.
wordmarkUrl
string
The wide Logo (wordmark). Omitted when none.
pauseSendingOnUsHolidays
boolean
replyRateBenchmark
number (double)
The reply rate benchmark, in percent (2.5 is 2.5%). Null when not set.
replyRateTarget
number (double)
The reply rate target, in percent. Null when not set.
positiveReplyRateBenchmark
number (double)
The interested-reply rate benchmark, in percent. Null when not set.
positiveReplyRateTarget
number (double)
The interested-reply rate target, in percent. Null when not set.
meetingsPerMonthBenchmark
number (double)
Meetings booked per month, benchmark. Null when not set.
meetingsPerMonthTarget
number (double)
Meetings booked per month, target. Null when not set.
replyTo
string
The Reply-To on every Kenso Sequencer cold send of this workspace, unless the campaign sets its own. A connected inbox of this workspace that Kenso reads replies from. Omitted when none.
parentWorkspaceId
integer (int64)
The white-label master of this workspace. Omitted for a master.
isChild
boolean
True when this workspace is a white-label child.
hasClients
boolean
True when this workspace has at least one active member with the Client role or at least one child workspace.
brand
WorkspaceBrandModel
isDemo
boolean
Kenso's demo workspace (client.is_demo, MAR-6): the Ken Demo switcher marks it for staff, and staff-only Studio chat and Agent team open to its members.
Request
curl -X GET "https://api.ken.so/v1/workspaces/812" \
  -H "Authorization: Bearer $KEN_API_KEY" \
  -H "Ken-Version: 2026-11-02"
Response 200
{
  "success": true,
  "data": {
    "id": 812,
    "name": "Northwind Outbound",
    "isActive": true,
    "website": "https://northwind-outbound.example.com",
    "companyContext": "Northwind Outbound runs cold email for B2B SaaS companies selling to engineering leaders in North America.",
    "logoUrl": "https://cdn.example.com/workspaces/812/icon.png",
    "pauseSendingOnUsHolidays": true,
    "replyRateBenchmark": 3.5,
    "replyRateTarget": 5,
    "positiveReplyRateBenchmark": 1.2,
    "positiveReplyRateTarget": 2,
    "meetingsPerMonthBenchmark": 8,
    "meetingsPerMonthTarget": 12,
    "replyTo": "[email protected]",
    "isChild": false,
    "hasClients": false,
    "isDemo": false
  }
}

Update a workspace

PATCH/v1/workspaces/{workspaceId}workspaces.update

Try it on developer.ken.so

Absent fields stay unchanged. Null clears a string field, except name: a workspace keeps a name of 1 to 50 characters. Requires a workspace admin. The benchmark and target: replyRateBenchmark, replyRateTarget, positiveReplyRateBenchmark and positiveReplyRateTarget in percent from 0 to 100 (replies and interested replies per person contacted, as analytics computes them, not the share of replies), meetingsPerMonthBenchmark and meetingsPerMonthTarget from 0 to 10000. Two decimals are kept, and null clears one. Out of range is 400 validation_failed on that field.

Parameters

Name
In
Type
Required
Description
workspaceId
In: path
integer (int64)
required
Ken-Version
In: header
string, one of: 2026-11-02, 1.1
required
The API version: a dated version (YYYY-MM-DD), or 1.1, another name for the first dated version. Without it the request uses your API key's pinned version; an unpinned key reaches the legacy shape of the same path. 1.0 selects the legacy shape explicitly.

Request body

application/json, optional.

Field
Type
Required
Description
name
string
optional
website
string
optional
linkedinCompanyUrl
string
optional
companyContext
string
optional
pauseSendingOnUsHolidays
boolean
optional
replyTo
string
optional
The workspace's Reply-To. A live mailbox connected to this workspace that Kenso reads replies from (not a member's own mailbox). Null or empty clears it.
replyRateBenchmark
number (double)
optional
replyRateTarget
number (double)
optional
positiveReplyRateBenchmark
number (double)
optional
positiveReplyRateTarget
number (double)
optional
meetingsPerMonthBenchmark
number (double)
optional
meetingsPerMonthTarget
number (double)
optional

Response 200

data is a WorkspaceModel.

Field
Type
Description
id
integer (int64)
name
string
isActive
boolean
website
string
linkedinCompanyUrl
string
companyContext
string
ownerLink
string
Only on the staff create response (POST /v1/admin/workspaces) when ownerEmail was sent: linked, already_member, user_not_found or failed.
logoUrl
string
The square Icon. Omitted when none.
wordmarkUrl
string
The wide Logo (wordmark). Omitted when none.
pauseSendingOnUsHolidays
boolean
replyRateBenchmark
number (double)
The reply rate benchmark, in percent (2.5 is 2.5%). Null when not set.
replyRateTarget
number (double)
The reply rate target, in percent. Null when not set.
positiveReplyRateBenchmark
number (double)
The interested-reply rate benchmark, in percent. Null when not set.
positiveReplyRateTarget
number (double)
The interested-reply rate target, in percent. Null when not set.
meetingsPerMonthBenchmark
number (double)
Meetings booked per month, benchmark. Null when not set.
meetingsPerMonthTarget
number (double)
Meetings booked per month, target. Null when not set.
replyTo
string
The Reply-To on every Kenso Sequencer cold send of this workspace, unless the campaign sets its own. A connected inbox of this workspace that Kenso reads replies from. Omitted when none.
parentWorkspaceId
integer (int64)
The white-label master of this workspace. Omitted for a master.
isChild
boolean
True when this workspace is a white-label child.
hasClients
boolean
True when this workspace has at least one active member with the Client role or at least one child workspace.
brand
WorkspaceBrandModel
isDemo
boolean
Kenso's demo workspace (client.is_demo, MAR-6): the Ken Demo switcher marks it for staff, and staff-only Studio chat and Agent team open to its members.
Request
curl -X PATCH "https://api.ken.so/v1/workspaces/812" \
  -H "Authorization: Bearer $KEN_API_KEY" \
  -H "Ken-Version: 2026-11-02" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "string",
  "website": "https://example.com",
  "linkedinCompanyUrl": "https://example.com",
  "companyContext": "string",
  "pauseSendingOnUsHolidays": true,
  "replyTo": "string",
  "replyRateBenchmark": 0.5,
  "replyRateTarget": 0.5,
  "positiveReplyRateBenchmark": 0.5,
  "positiveReplyRateTarget": 0.5,
  "meetingsPerMonthBenchmark": 0.5,
  "meetingsPerMonthTarget": 0.5
}'
Response 200
{
  "success": true,
  "data": {
    "id": 812,
    "name": "Northwind Outbound",
    "isActive": true,
    "website": "https://northwind-outbound.example.com",
    "companyContext": "Northwind Outbound runs cold email for B2B SaaS companies selling to engineering leaders in North America.",
    "logoUrl": "https://cdn.example.com/workspaces/812/icon.png",
    "pauseSendingOnUsHolidays": true,
    "replyRateBenchmark": 3.5,
    "replyRateTarget": 5,
    "positiveReplyRateBenchmark": 1.2,
    "positiveReplyRateTarget": 2,
    "meetingsPerMonthBenchmark": 8,
    "meetingsPerMonthTarget": 12,
    "replyTo": "[email protected]",
    "isChild": false,
    "hasClients": false,
    "isDemo": false
  }
}