Contact exports
Export contacts as a file and download it.
Create a contact export and return its job
/v1/contact-exportscontact-exports.createkind is contacts (workspace filters), campaign, clicked, advanced, or events. Campaign kinds require campaignId in the current workspace. events also requires occurredAfter and occurredBefore. Requires ExportAccess. Poll GET /v1/jobs/{jobId}?type=contact_export. The job's downloadUrl streams the file. Contacts from a Kenso library list are never exported. For kinds contacts, campaign and advanced the job's excludedLibraryContacts says how many were left out, including 0. Kind contacts also takes campaignIds (1 to 50 campaigns of the workspace, not with campaignId), listId (a contact's import list), createdAfter (inclusive) and createdBefore (exclusive), maxRows (1 to 50000) and skipRows (in contact id order). Other kinds refuse them. readyOnly still needs one campaignId.
Parameters
400 workspace_required).Request body
application/json, required.
Response 202
data is a JobModel.
inbox_import job. Passwords are never returned.contact_import job with target people: each row created a person, updated (matched) one, or was skipped (no email, LinkedIn URL, or name with a business company domain, or intake refused it).contact_import job skipped, by reason. The duplicate counts name the rule that dropped the row: a contact already in this campaign, a contact in another campaign of the workspace (the campaign dedups against other campaigns), an earlier row of the same import, or the campaign's recently-emailed window.curl -X POST "https://api.ken.so/v1/contact-exports" \
-H "Authorization: Bearer $KEN_API_KEY" \
-H "Ken-Version: 2026-11-02" \
-H "X-Ken-Workspace-Id: $KEN_WORKSPACE_ID" \
-H "Content-Type: application/json" \
-d '{
"kind": "string",
"campaignId": 812,
"segmentId": 812,
"isQualified": true,
"hasValidEmail": true,
"doNotContact": true,
"q": "string",
"contactIds": [
812
],
"excludedContactIds": [
812
],
"fields": [
"string"
],
"readyOnly": true,
"includeEmails": true,
"includeCompany": true,
"includeClickEvents": true,
"includeTotalClicks": true,
"occurredAfter": "2026-09-23T15:02:11Z",
"occurredBefore": "2026-09-23T15:02:11Z",
"campaignIds": [
812
],
"listId": 812,
"createdAfter": "2026-09-23T15:02:11Z",
"createdBefore": "2026-09-23T15:02:11Z",
"maxRows": 1,
"skipRows": 1
}'{
"success": true,
"data": {
"id": 812,
"type": "string",
"status": "string",
"progress": {
"completed": 1,
"total": 1
},
"resource": {
"type": "string",
"id": 812
},
"createdAt": "2026-09-23T15:02:11Z",
"downloadUrl": "https://example.com",
"error": {
"code": "string",
"message": "string"
},
"result": null,
"domainsListed": 1,
"excludedLibraryContacts": 1,
"inboxImport": {
"connectedCount": 1,
"failedCount": 1,
"skippedCount": 1,
"startedAt": "2026-09-23T15:02:11Z",
"updatedAt": "2026-09-23T15:02:11Z",
"completedAt": "2026-09-23T15:02:11Z",
"rows": [
{
"index": 1,
"email": "[email protected]",
"status": "string",
"inboxId": 812,
"errorCode": "string",
"message": "string"
}
]
},
"personImport": {
"source": "string",
"createdCount": 1,
"updatedCount": 1,
"skippedCount": 1,
"startedAt": "2026-09-23T15:02:11Z",
"completedAt": "2026-09-23T15:02:11Z"
},
"skipped": {
"duplicateInCampaign": 1,
"duplicateInOtherCampaign": 1,
"duplicateInSource": 1,
"alreadyContacted": 1,
"blocklist": 1,
"failedValidation": 1,
"salesNavigatorProfileUnresolved": 1,
"other": 1,
"missingKey": 1,
"invalidEmail": 1,
"noMx": 1,
"catchAll": 1,
"personalEmail": 1,
"roleAddress": 1,
"companyContacted": 1,
"companyCap": 1
}
}
}Download a contact export file
/v1/contact-exports/{exportId}/contentcontact-exports.contentStreams CSV, or a ZIP when a campaign export is one file per segment. Each download is sized from a live count and charged to the export row quota before any row is read; a file over the per-request row cap is 429 quota_exceeded. Requires ExportAccess. A missing or expired export is not_found.
Parameters
400 workspace_required).Response 200
The body is a string (binary).
curl -X GET "https://api.ken.so/v1/contact-exports/812/content" \ -H "Authorization: Bearer $KEN_API_KEY" \ -H "Ken-Version: 2026-11-02" \ -H "X-Ken-Workspace-Id: $KEN_WORKSPACE_ID"
"<binary>"