Workspaces
The workspaces your key can reach: list, read and update them.
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
Response 200
data is a list of WorkspaceSummaryModel. Each item has these fields. The response also carries pagination.
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.curl -X GET "https://api.ken.so/v1/workspaces" \ -H "Authorization: Bearer $KEN_API_KEY" \ -H "Ken-Version: 2026-11-02"
{
"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
}
}Replaces GET /v1/clients/{id} and GET /v1/workspaces/{id}/company. Non-members receive 403. Requires ReadAccess.
Parameters
Response 200
data is a WorkspaceModel.
POST /v1/admin/workspaces) when ownerEmail was sent: linked, already_member, user_not_found or failed.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.curl -X GET "https://api.ken.so/v1/workspaces/812" \ -H "Authorization: Bearer $KEN_API_KEY" \ -H "Ken-Version: 2026-11-02"
{
"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
}
}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
Request body
application/json, optional.
Response 200
data is a WorkspaceModel.
POST /v1/admin/workspaces) when ownerEmail was sent: linked, already_member, user_not_found or failed.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.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
}'{
"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
}
}