Agent permission settings
The Agent permission settings endpoints of the Kenso API.
Get Ken's agent permissions
/v1/agent-permission-settingsagent-permission-settings.getNeeds the agent_permissions feature on your workspace. Until it is on, calls answer 404.
Returns every action with its mode, always all seven in page order. An action the workspace never set has its default (send_email, send_linkedin and build_assets ask first; the others run on their own) and updatedAt null. available is false for an action Kenso does not follow yet: its mode cannot change. book_meetings reads asks_first with lockedReason reply_agent_not_autonomous while the reply agent is off or not autonomous. That asks_first is not the stored mode: send the row back in a PATCH only to store asks_first. clientWorkspace is true for a workspace run for a client.
Errors:
- 404 not_found: the workspace does not have the agent_permissions feature.
Open to any workspace member except a Client seat.
Parameters
YYYY-MM-DD form. 1.1 is another name for the first dated version. Leave it out to use 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.400 workspace_required. A workspace you are not a member of answers 404 not_found.Response 200
data is a AgentPermissionSettings.
send_email or send_linkedin to runs_on_its_own needs clientYes.curl -X GET "https://api.ken.so/v1/agent-permission-settings" \ -H "Authorization: Bearer $KENSO_API_KEY" \ -H "Ken-Version: 2026-11-02" \ -H "X-Ken-Workspace-Id: $KENSO_WORKSPACE_ID"
{
"success": true,
"data": {
"permissions": [
{
"action": "send_email",
"mode": "string",
"available": true,
"lockedReason": "string",
"updatedAt": "2026-09-23T15:02:11Z"
}
],
"clientWorkspace": true
}
}Update Ken's agent permissions
/v1/agent-permission-settingsagent-permission-settings.updateNeeds the agent_permissions feature on your workspace. Until it is on, calls answer 404.
Sets the mode of each action you name and leaves the others as they are. Body: { "permissions": [ { "action": "send_email", "mode": "runs_on_its_own", "clientYes": "Jane Doe (client) on the 2026-11-10 call" } ] }. Returns every action after the change, in the same shape as the GET. A mode equal to the stored one (else the default) writes nothing. A new clientYes on a client workspace's send_email or send_linkedin that already runs on its own is a change: it is stored and audited and moves updatedAt; a missing one keeps the stored yes. Each change is recorded in the workspace's audit log (agent_permission.changed) before it is saved, so a save that then fails (500) keeps those lines: the log can show a change that was not saved, never a saved change without its line.
Errors (nothing is saved on any of them):
- 400 validation_failed, one details[] entry per problem, such as permissions[1].action: required (permissions missing or empty), unknown_action, unknown_mode, duplicate_action, action_not_available (Kenso does not follow this action's mode yet), reply_agent_not_autonomous (book_meetings set to runs_on_its_own while the reply agent is off or not autonomous, even when that is already its mode), client_yes_required (send_email or send_linkedin changed to runs_on_its_own on a client workspace without clientYes, or with one over 500 characters). - 403 approval_requires_human: send_email or send_linkedin changed to runs_on_its_own (a new clientYes counts) by a caller that is not a person signed in to the Kenso app (an agent, an API key, the MCP): their runs_on_its_own removes a person's approval of each send. It comes before any 400. Switching one of them back to asks_first, and every other action either way, is open to every caller with workspace_settings. - 404 not_found: the workspace does not have the agent_permissions feature.
Requires the workspace_settings permission.
Parameters
YYYY-MM-DD form. 1.1 is another name for the first dated version. Leave it out to use 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.400 workspace_required. A workspace you are not a member of answers 404 not_found.Request body
application/json, optional.
Response 200
data is a AgentPermissionSettings.
send_email or send_linkedin to runs_on_its_own needs clientYes.curl -X PATCH "https://api.ken.so/v1/agent-permission-settings" \
-H "Authorization: Bearer $KENSO_API_KEY" \
-H "Ken-Version: 2026-11-02" \
-H "X-Ken-Workspace-Id: $KENSO_WORKSPACE_ID" \
-H "Content-Type: application/json" \
-d '{
"permissions": [
{
"action": "send_email",
"mode": "asks_first",
"clientYes": "string"
}
]
}'{
"success": true,
"data": {
"permissions": [
{
"action": "send_email",
"mode": "string",
"available": true,
"lockedReason": "string",
"updatedAt": "2026-09-23T15:02:11Z"
}
],
"clientWorkspace": true
}
}