AI line holds
Contacts the AI line check held because their personalization lines failed it: list them and approve one to send its lines as they are.
List the contacts the AI line check held in a campaign
/v1/campaigns/{campaignId}/ai-line-holdsai-line-holds.listNewest hold first, with the reasons and the lines each hold keeps. Pages with limit (1 to 200, default 50) and cursor. A contact appears until it is approved or regenerated. A campaign outside the workspace is not_found. Requires ReadAccess.
Parameters
400 workspace_required).Response 200
data is a list of AiLineHoldModel. Each item has these fields. The response also carries pagination.
ungrounded (a fact the lead's data does not support), not_specific, tone (a phrase a person would not say), or too_long. Clients tolerate new values.curl -X GET "https://api.ken.so/v1/campaigns/812/ai-line-holds?limit=1" \ -H "Authorization: Bearer $KEN_API_KEY" \ -H "Ken-Version: 2026-11-02" \ -H "X-Ken-Workspace-Id: $KEN_WORKSPACE_ID"
{
"success": true,
"data": [
{
"contactId": 812,
"reasons": [
"string"
],
"heldAt": "2026-09-23T15:02:11Z",
"lines": [
{
"id": 812,
"promptId": 812,
"variable": "string",
"text": "string",
"segmentId": 812,
"stepOrder": 1
}
]
}
],
"pagination": {
"nextCursor": "eyJpZCI6ODE1fQ",
"hasMore": true,
"total": 1,
"isTotalCapped": true
}
}Approve a held contact's lines
/v1/campaigns/{campaignId}/ai-line-holds/{contactId}/approveai-line-holds.approveThe lines the hold keeps become the contact's personalization lines and the contact counts as personalized, so it can send. Not charged. A contact with no hold in the campaign (never held, already approved, or regenerated) is not_held (409). When the contact already has a live line for one of the held variables the approval is conflict (409) and nothing changes; regenerate the contact instead. A campaign or contact outside the workspace, or a contact not in this campaign, is not_found. Requires WriteAccess.
Parameters
400 workspace_required).Response 200
data is a AiLineHoldApprovalModel.
curl -X POST "https://api.ken.so/v1/campaigns/812/ai-line-holds/812/approve" \ -H "Authorization: Bearer $KEN_API_KEY" \ -H "Ken-Version: 2026-11-02" \ -H "X-Ken-Workspace-Id: $KEN_WORKSPACE_ID"
{
"success": true,
"data": {
"contactId": 812,
"restoredLineCount": 1
}
}