Kenso

Agent permission settings

The Agent permission settings endpoints of the Kenso API.

2 endpointsKen-Version: 2026-11-02AuthenticationWorkspacesErrors

Get Ken's agent permissions

GET/v1/agent-permission-settingsagent-permission-settings.get

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

Try it on developer.ken.so

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

Name
In
Type
Required
Description
Ken-Version
In: header
string, one of: 2026-11-02, 1.1
optional
The API version, a date in 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.
X-Ken-Workspace-Id
In: header
integer (int64)
optional
The id of the workspace to act in. Leave it out when your API key reaches only one workspace. When the key reaches more than one, a request without this header answers 400 workspace_required. A workspace you are not a member of answers 404 not_found.

Response 200

data is a AgentPermissionSettings.

Field
Type
Description
permissions
array of AgentPermission
All seven actions, always, in page order.
clientWorkspace
boolean
The workspace is run for a client (a white-label child, or marked so by its team). Then switching send_email or send_linkedin to runs_on_its_own needs clientYes.
Request
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"
Response 200
{
  "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

PATCH/v1/agent-permission-settingsagent-permission-settings.update

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

Try it on developer.ken.so

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

Name
In
Type
Required
Description
Ken-Version
In: header
string, one of: 2026-11-02, 1.1
optional
The API version, a date in 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.
X-Ken-Workspace-Id
In: header
integer (int64)
optional
The id of the workspace to act in. Leave it out when your API key reaches only one workspace. When the key reaches more than one, a request without this header answers 400 workspace_required. A workspace you are not a member of answers 404 not_found.

Request body

application/json, optional.

Field
Type
Required
Description
permissions
array of AgentPermissionInputBody
optional
One entry per action to change, each action at most once. At least one entry.

Response 200

data is a AgentPermissionSettings.

Field
Type
Description
permissions
array of AgentPermission
All seven actions, always, in page order.
clientWorkspace
boolean
The workspace is run for a client (a white-label child, or marked so by its team). Then switching send_email or send_linkedin to runs_on_its_own needs clientYes.
Request
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"
    }
  ]
}'
Response 200
{
  "success": true,
  "data": {
    "permissions": [
      {
        "action": "send_email",
        "mode": "string",
        "available": true,
        "lockedReason": "string",
        "updatedAt": "2026-09-23T15:02:11Z"
      }
    ],
    "clientWorkspace": true
  }
}