Whatsapp accounts
The Whatsapp accounts endpoints of the Kenso API.
List WhatsApp accounts in the current workspace
/v1/whatsapp-accountswhatsapp-accounts.listNeeds the whatsapp feature on your workspace. Until it is on, calls answer 404.
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 list of WhatsAppAccount. Each item has these fields. The response also carries pagination.
mon to sun, in the account's time zone. Kenso runs the account's LinkedIn actions only inside these hours. A day with no entry uses the default: 08:00 to 18:00 on weekdays, closed on weekends. An update must include all seven days.curl -X GET "https://api.ken.so/v1/whatsapp-accounts?limit=1" \ -H "Authorization: Bearer $KEN_API_KEY" \ -H "Ken-Version: 1.1" \ -H "X-Ken-Workspace-Id: $KEN_WORKSPACE_ID"
{
"success": true,
"data": [
{
"id": 812,
"phoneE164": "string",
"displayName": "string",
"profileImageUrl": "https://example.com",
"status": "string",
"statusChangedAt": "2026-09-23T15:02:11Z",
"connectedAt": "2026-09-23T15:02:11Z",
"connectedByMemberId": 812,
"quietUntil": "2026-09-23T15:02:11Z",
"rampupStartedAt": "2026-09-23T15:02:11Z",
"rampStage": 1,
"lowHistory": true,
"paused": true,
"pausedAt": "2026-09-23T15:02:11Z",
"pauseReason": "string",
"pausedUntil": "2026-09-23T15:02:11Z",
"timezone": "string",
"workingHoursSchedule": {
"mon": {
"open": true,
"start": "string",
"end": "string"
},
"tue": {
"open": true,
"start": "string",
"end": "string"
},
"wed": {
"open": true,
"start": "string",
"end": "string"
},
"thu": {
"open": true,
"start": "string",
"end": "string"
},
"fri": {
"open": true,
"start": "string",
"end": "string"
},
"sat": {
"open": true,
"start": "string",
"end": "string"
},
"sun": {
"open": true,
"start": "string",
"end": "string"
}
},
"dailyNewChatCap": 1,
"dailyMessageCap": 1,
"newChatCap": 1,
"coldNewChatCap": 1,
"messageCap": 1,
"checkCap": 1,
"newChatCapCeiling": 1,
"messageCapCeiling": 1,
"newChatsToday": 1,
"messagesToday": 1,
"checksToday": 1,
"unpaid": true,
"lastSyncedAt": "2026-09-23T15:02:11Z",
"createdAt": "2026-09-23T15:02:11Z",
"updatedAt": "2026-09-23T15:02:11Z"
}
],
"pagination": {
"nextCursor": "eyJpZCI6ODE1fQ",
"hasMore": true,
"total": 1,
"isTotalCapped": true
}
}Start a hosted WhatsApp connect or reconnect session
/v1/whatsapp-accounts/connect-sessionswhatsapp-accounts.create-connect-sessionNeeds the whatsapp feature on your workspace. Until it is on, calls answer 404.
Omit whatsappAccountId to connect a new account (it shows as connecting until the scan completes); pass it to reconnect. A new account needs one month of credits up front (400 validation_failed with the credit refusal otherwise). A client seat reconnects only the account it connected (403 forbidden with not_your_whatsapp). 503 service_unavailable while WhatsApp is switched off or Unipile is throttled.
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 201
data is a WhatsAppConnectSession.
curl -X POST "https://api.ken.so/v1/whatsapp-accounts/connect-sessions" \
-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 '{
"whatsappAccountId": 812
}'{
"success": true,
"data": {
"whatsappAccountId": 812,
"url": "https://example.com"
}
}Return one WhatsApp account in the current workspace
/v1/whatsapp-accounts/{whatsappAccountId}whatsapp-accounts.getNeeds the whatsapp feature on your workspace. Until it is on, calls answer 404.
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 WhatsAppAccount.
mon to sun, in the account's time zone. Kenso runs the account's LinkedIn actions only inside these hours. A day with no entry uses the default: 08:00 to 18:00 on weekdays, closed on weekends. An update must include all seven days.curl -X GET "https://api.ken.so/v1/whatsapp-accounts/812" \ -H "Authorization: Bearer $KEN_API_KEY" \ -H "Ken-Version: 1.1" \ -H "X-Ken-Workspace-Id: $KEN_WORKSPACE_ID"
{
"success": true,
"data": {
"id": 812,
"phoneE164": "string",
"displayName": "string",
"profileImageUrl": "https://example.com",
"status": "string",
"statusChangedAt": "2026-09-23T15:02:11Z",
"connectedAt": "2026-09-23T15:02:11Z",
"connectedByMemberId": 812,
"quietUntil": "2026-09-23T15:02:11Z",
"rampupStartedAt": "2026-09-23T15:02:11Z",
"rampStage": 1,
"lowHistory": true,
"paused": true,
"pausedAt": "2026-09-23T15:02:11Z",
"pauseReason": "string",
"pausedUntil": "2026-09-23T15:02:11Z",
"timezone": "string",
"workingHoursSchedule": {
"mon": {
"open": true,
"start": "string",
"end": "string"
},
"tue": {
"open": true,
"start": "string",
"end": "string"
},
"wed": {
"open": true,
"start": "string",
"end": "string"
},
"thu": {
"open": true,
"start": "string",
"end": "string"
},
"fri": {
"open": true,
"start": "string",
"end": "string"
},
"sat": {
"open": true,
"start": "string",
"end": "string"
},
"sun": {
"open": true,
"start": "string",
"end": "string"
}
},
"dailyNewChatCap": 1,
"dailyMessageCap": 1,
"newChatCap": 1,
"coldNewChatCap": 1,
"messageCap": 1,
"checkCap": 1,
"newChatCapCeiling": 1,
"messageCapCeiling": 1,
"newChatsToday": 1,
"messagesToday": 1,
"checksToday": 1,
"unpaid": true,
"lastSyncedAt": "2026-09-23T15:02:11Z",
"createdAt": "2026-09-23T15:02:11Z",
"updatedAt": "2026-09-23T15:02:11Z"
}
}Update a WhatsApp account
/v1/whatsapp-accounts/{whatsappAccountId}whatsapp-accounts.updateNeeds the whatsapp feature on your workspace. Until it is on, calls answer 404.
Absent fields stay unchanged.
Requires Delivery edit. dailyNewChatCap runs from 0 to newChatCapCeiling and dailyMessageCap from 0 to messageCapCeiling (above is 400 validation_failed naming the field); resetCaps goes back to the ramp defaults. timezone takes an IANA id (empty clears it); workingHoursSchedule takes all seven days and resetWorkingHours clears them. paused: true pauses the account; paused: false resumes a manual or low-reply-rate pause, and is 409 conflict with restricted_pause while WhatsApp restricts it.
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.
mon to sun, in the account's time zone. Kenso runs the account's LinkedIn actions only inside these hours. A day with no entry uses the default: 08:00 to 18:00 on weekdays, closed on weekends. An update must include all seven days.Response 200
data is a WhatsAppAccount.
mon to sun, in the account's time zone. Kenso runs the account's LinkedIn actions only inside these hours. A day with no entry uses the default: 08:00 to 18:00 on weekdays, closed on weekends. An update must include all seven days.curl -X PATCH "https://api.ken.so/v1/whatsapp-accounts/812" \
-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 '{
"dailyNewChatCap": 1,
"dailyMessageCap": 1,
"resetCaps": true,
"timezone": "string",
"workingHoursSchedule": {
"mon": {
"open": true,
"start": "string",
"end": "string"
},
"tue": {
"open": true,
"start": "string",
"end": "string"
},
"wed": {
"open": true,
"start": "string",
"end": "string"
},
"thu": {
"open": true,
"start": "string",
"end": "string"
},
"fri": {
"open": true,
"start": "string",
"end": "string"
},
"sat": {
"open": true,
"start": "string",
"end": "string"
},
"sun": {
"open": true,
"start": "string",
"end": "string"
}
},
"resetWorkingHours": true,
"paused": true
}'{
"success": true,
"data": {
"id": 812,
"phoneE164": "string",
"displayName": "string",
"profileImageUrl": "https://example.com",
"status": "string",
"statusChangedAt": "2026-09-23T15:02:11Z",
"connectedAt": "2026-09-23T15:02:11Z",
"connectedByMemberId": 812,
"quietUntil": "2026-09-23T15:02:11Z",
"rampupStartedAt": "2026-09-23T15:02:11Z",
"rampStage": 1,
"lowHistory": true,
"paused": true,
"pausedAt": "2026-09-23T15:02:11Z",
"pauseReason": "string",
"pausedUntil": "2026-09-23T15:02:11Z",
"timezone": "string",
"workingHoursSchedule": {
"mon": {
"open": true,
"start": "string",
"end": "string"
},
"tue": {
"open": true,
"start": "string",
"end": "string"
},
"wed": {
"open": true,
"start": "string",
"end": "string"
},
"thu": {
"open": true,
"start": "string",
"end": "string"
},
"fri": {
"open": true,
"start": "string",
"end": "string"
},
"sat": {
"open": true,
"start": "string",
"end": "string"
},
"sun": {
"open": true,
"start": "string",
"end": "string"
}
},
"dailyNewChatCap": 1,
"dailyMessageCap": 1,
"newChatCap": 1,
"coldNewChatCap": 1,
"messageCap": 1,
"checkCap": 1,
"newChatCapCeiling": 1,
"messageCapCeiling": 1,
"newChatsToday": 1,
"messagesToday": 1,
"checksToday": 1,
"unpaid": true,
"lastSyncedAt": "2026-09-23T15:02:11Z",
"createdAt": "2026-09-23T15:02:11Z",
"updatedAt": "2026-09-23T15:02:11Z"
}
}Delete a WhatsApp account
/v1/whatsapp-accounts/{whatsappAccountId}whatsapp-accounts.deleteNeeds the whatsapp feature on your workspace. Until it is on, calls answer 404.
Returns 204. Requires Delivery edit. Removes the Unipile session too and stops the monthly charge.
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 204
curl -X DELETE "https://api.ken.so/v1/whatsapp-accounts/812" \ -H "Authorization: Bearer $KEN_API_KEY" \ -H "Ken-Version: 1.1" \ -H "X-Ken-Workspace-Id: $KEN_WORKSPACE_ID"
HTTP/1.1 204 No Content