Kenso

Saved lists

The Saved lists endpoints of the Kenso API.

Search and data18 endpointsKen-Version: 2026-11-02AuthenticationWorkspacesErrors

List a saved list's members

GET/v1/saved-lists/{savedListId}/memberssaved-lists.list-members

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

Try it on developer.ken.so

Members in id order. limit 1-100 (default 50); cursor is the previous page's nextCursor. q (up to 200 characters) matches a part of the full name, the title or the company name, any case, and is ignored when shorter than 2 characters. country, seniority, industry and headcountBand match the stored value exactly (take them from the list's counts breakdowns); title matches a part of the title, any case; hasSendableEmail is true or false. Opted-out members never show. includeTotal=true adds pagination.total, the filtered count; with no filter (and no q) on a library list it is the list's stored member count, the same number as counts.members. With q on a large list that count reads every row of it, so leave it off to page fast. A member never carries an email or a phone: emailCount and phoneCount say how many the list holds, an email identity key shows as em: plus the member id, and a custom field holding an email or a phone is left out. Each member on the page counts one row of the workspace's apiReadRows quota; past it, 429 quota_exceeded. Requires the Search page (view).

Parameters

Name
In
Type
Required
Description
savedListId
In: path
integer (int64)
required
Q
In: query
string
optional
Country
In: query
string
optional
Seniority
In: query
string
optional
Title
In: query
string
optional
Industry
In: query
string
optional
HeadcountBand
In: query
string
optional
HasSendableEmail
In: query
boolean
optional
IncludeTotal
In: query
boolean
optional
Limit
In: query
integer (int32)
optional
Cursor
In: query
string
optional
Ken-Version
In: header
string, one of: 2026-11-02, 1.1
required
The API version: a dated version (YYYY-MM-DD), or 1.1, another name for the first dated version. Without it the request uses your API key's pinned version; an unpinned key reaches the legacy shape of the same path. 1.0 selects the legacy shape explicitly.
X-Ken-Workspace-Id
In: header
integer (int64)
optional
Workspace to act in. Required when your credential can reach more than one workspace (otherwise 400 workspace_required).

Response 200

data is a list of SavedListMemberModel. Each item has these fields. The response also carries pagination.

Field
Type
Description
id
integer (int64)
identityKey
string
firstName
string
lastName
string
title
string
seniority
string
companyName
string
companyDomain
string
industry
string
headcountBand
string
country
string
state
string
city
string
linkedinUrl
string
hasSendableEmail
boolean
emailCount
integer (int32)
phoneCount
integer (int32)
sources
array of string
custom
map of string
Request
curl -X GET "https://api.ken.so/v1/saved-lists/812/members" \
  -H "Authorization: Bearer $KEN_API_KEY" \
  -H "Ken-Version: 2026-11-02" \
  -H "X-Ken-Workspace-Id: $KEN_WORKSPACE_ID"
Response 200
{
  "success": true,
  "data": [
    {
      "id": 812,
      "identityKey": "string",
      "firstName": "string",
      "lastName": "string",
      "title": "string",
      "seniority": "string",
      "companyName": "string",
      "companyDomain": "example.com",
      "industry": "string",
      "headcountBand": "string",
      "country": "string",
      "state": "string",
      "city": "string",
      "linkedinUrl": "https://example.com",
      "hasSendableEmail": true,
      "emailCount": 1,
      "phoneCount": 1,
      "sources": [
        "string"
      ],
      "custom": {
        "key": "string"
      }
    }
  ],
  "pagination": {
    "nextCursor": "eyJpZCI6ODE1fQ",
    "hasMore": true,
    "total": 1,
    "isTotalCapped": true
  }
}

Remove a member from a saved list

DELETE/v1/saved-lists/{savedListId}/members/{memberId}saved-lists.remove-member

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

Try it on developer.ken.so

Own lists only: a list shared with the workspace, a library list, another user's private list or a member of another list is 404. Recounts the list. 204 on success. Requires the Search page (edit).

Parameters

Name
In
Type
Required
Description
savedListId
In: path
integer (int64)
required
memberId
In: path
integer (int64)
required
Ken-Version
In: header
string, one of: 2026-11-02, 1.1
required
The API version: a dated version (YYYY-MM-DD), or 1.1, another name for the first dated version. Without it the request uses your API key's pinned version; an unpinned key reaches the legacy shape of the same path. 1.0 selects the legacy shape explicitly.
X-Ken-Workspace-Id
In: header
integer (int64)
optional
Workspace to act in. Required when your credential can reach more than one workspace (otherwise 400 workspace_required).

Response 204

Request
curl -X DELETE "https://api.ken.so/v1/saved-lists/812/members/812" \
  -H "Authorization: Bearer $KEN_API_KEY" \
  -H "Ken-Version: 2026-11-02" \
  -H "X-Ken-Workspace-Id: $KEN_WORKSPACE_ID"
Response 204
HTTP/1.1 204 No Content

List saved lists

GET/v1/saved-listssaved-lists.list

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

Try it on developer.ken.so

scope: own (default; the workspace's lists, private ones only for their owner user), shared (lists other workspaces shared with this one through an accepted invite) or library (approved library lists). kind (people or companies), q (name contains, any case) and icpTag (one tag, exact) filter; slug with scope=library returns the one library list with that slug, or none. limit 1-100 (default 50) and cursor page the list in id order; pagination.total counts every match. On a shared or library list each source shows its type, status and counts but not its parameters. Requires search view.

Parameters

Name
In
Type
Required
Description
Scope
In: query
string
optional
own (default), shared or library.
Kind
In: query
string
optional
people or companies.
Q
In: query
string
optional
Case-insensitive contains on the list name.
IcpTag
In: query
string
optional
One ICP tag, matched exactly.
Slug
In: query
string
optional
A library list's slug; with scope=library only, and the other filters do not apply.
Limit
In: query
integer (int32)
optional
1 to 100, default 50.
Cursor
In: query
string
optional
Ken-Version
In: header
string, one of: 2026-11-02, 1.1
required
The API version: a dated version (YYYY-MM-DD), or 1.1, another name for the first dated version. Without it the request uses your API key's pinned version; an unpinned key reaches the legacy shape of the same path. 1.0 selects the legacy shape explicitly.
X-Ken-Workspace-Id
In: header
integer (int64)
optional
Workspace to act in. Required when your credential can reach more than one workspace (otherwise 400 workspace_required).

Response 200

data is a list of SavedListModel. Each item has these fields. The response also carries pagination.

Field
Type
Description
id
integer (int64)
kind
string, one of: people, companies
visibility
string, one of: private, workspace, library
access
string, one of: owner, shared, library
name
string
description
string
slug
string
icpTags
array of string
libraryState
string, one of: none, submitted, approved, rejected, retired
publicPageEnabled
boolean
ownerUserId
integer (int64)
createdByUserId
integer (int64)
rightsConfirmedAt
string (date-time)
hasCsvMembers
boolean
counts
SavedListCountsModel
sources
array of SavedListSourceModel
lastRefreshedAt
string (date-time)
submittedAt
string (date-time)
reviewedAt
string (date-time)
reviewReason
string
submittedByWorkspaceName
string
createdAt
string (date-time)
updatedAt
string (date-time)
Request
curl -X GET "https://api.ken.so/v1/saved-lists" \
  -H "Authorization: Bearer $KEN_API_KEY" \
  -H "Ken-Version: 2026-11-02" \
  -H "X-Ken-Workspace-Id: $KEN_WORKSPACE_ID"
Response 200
{
  "success": true,
  "data": [
    {
      "id": 812,
      "kind": "people",
      "visibility": "private",
      "access": "owner",
      "name": "string",
      "description": "string",
      "slug": "string",
      "icpTags": [
        "string"
      ],
      "libraryState": "none",
      "publicPageEnabled": true,
      "ownerUserId": 812,
      "createdByUserId": 812,
      "rightsConfirmedAt": "2026-09-23T15:02:11Z",
      "hasCsvMembers": true,
      "counts": {
        "members": 1,
        "sendableEmails": 1,
        "byCountry": {
          "key": 1
        },
        "bySeniority": {
          "key": 1
        },
        "byIndustry": {
          "key": 1
        },
        "byHeadcountBand": {
          "key": 1
        }
      },
      "sources": [
        {
          "id": 812,
          "sourceType": "search_filters",
          "parameters": null,
          "status": "pending",
          "statusMessage": "string",
          "addedByUserId": 812,
          "lastRefreshedAt": "2026-09-23T15:02:11Z",
          "lastRefreshAdded": 1,
          "createdAt": "2026-09-23T15:02:11Z"
        }
      ],
      "lastRefreshedAt": "2026-09-23T15:02:11Z",
      "submittedAt": "2026-09-23T15:02:11Z",
      "reviewedAt": "2026-09-23T15:02:11Z",
      "reviewReason": "string",
      "submittedByWorkspaceName": "string",
      "createdAt": "2026-09-23T15:02:11Z",
      "updatedAt": "2026-09-23T15:02:11Z"
    }
  ],
  "pagination": {
    "nextCursor": "eyJpZCI6ODE1fQ",
    "hasMore": true,
    "total": 1,
    "isTotalCapped": true
  }
}

Create a saved list

POST/v1/saved-listssaved-lists.create

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

Try it on developer.ken.so

Body: name (1-200), kind (people or companies), optional description (up to 2000), visibility (workspace, the default, or private: only you see it; needs a signed-in user) and icpTags (up to 20, each up to 50 characters). The list starts empty and belongs to you. Returns 201. Requires search edit.

Parameters

Name
In
Type
Required
Description
Ken-Version
In: header
string, one of: 2026-11-02, 1.1
required
The API version: a dated version (YYYY-MM-DD), or 1.1, another name for the first dated version. Without it the request uses your API key's pinned version; an unpinned key reaches the legacy shape of the same path. 1.0 selects the legacy shape explicitly.
X-Ken-Workspace-Id
In: header
integer (int64)
optional
Workspace to act in. Required when your credential can reach more than one workspace (otherwise 400 workspace_required).

Request body

application/json, optional.

Field
Type
Required
Description
name
string
optional
kind
string
optional
description
string
optional
visibility
string
optional
icpTags
array of string
optional

Response 201

data is a SavedListModel.

Field
Type
Description
id
integer (int64)
kind
string, one of: people, companies
visibility
string, one of: private, workspace, library
access
string, one of: owner, shared, library
name
string
description
string
slug
string
icpTags
array of string
libraryState
string, one of: none, submitted, approved, rejected, retired
publicPageEnabled
boolean
ownerUserId
integer (int64)
createdByUserId
integer (int64)
rightsConfirmedAt
string (date-time)
hasCsvMembers
boolean
counts
SavedListCountsModel
sources
array of SavedListSourceModel
lastRefreshedAt
string (date-time)
submittedAt
string (date-time)
reviewedAt
string (date-time)
reviewReason
string
submittedByWorkspaceName
string
createdAt
string (date-time)
updatedAt
string (date-time)
Request
curl -X POST "https://api.ken.so/v1/saved-lists" \
  -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 '{
  "name": "string",
  "kind": "string",
  "description": "string",
  "visibility": "string",
  "icpTags": [
    "string"
  ]
}'
Response 201
{
  "success": true,
  "data": {
    "id": 812,
    "kind": "people",
    "visibility": "private",
    "access": "owner",
    "name": "string",
    "description": "string",
    "slug": "string",
    "icpTags": [
      "string"
    ],
    "libraryState": "none",
    "publicPageEnabled": true,
    "ownerUserId": 812,
    "createdByUserId": 812,
    "rightsConfirmedAt": "2026-09-23T15:02:11Z",
    "hasCsvMembers": true,
    "counts": {
      "members": 1,
      "sendableEmails": 1,
      "byCountry": {
        "key": 1
      },
      "bySeniority": {
        "key": 1
      },
      "byIndustry": {
        "key": 1
      },
      "byHeadcountBand": {
        "key": 1
      }
    },
    "sources": [
      {
        "id": 812,
        "sourceType": "search_filters",
        "parameters": null,
        "status": "pending",
        "statusMessage": "string",
        "addedByUserId": 812,
        "lastRefreshedAt": "2026-09-23T15:02:11Z",
        "lastRefreshAdded": 1,
        "createdAt": "2026-09-23T15:02:11Z"
      }
    ],
    "lastRefreshedAt": "2026-09-23T15:02:11Z",
    "submittedAt": "2026-09-23T15:02:11Z",
    "reviewedAt": "2026-09-23T15:02:11Z",
    "reviewReason": "string",
    "submittedByWorkspaceName": "string",
    "createdAt": "2026-09-23T15:02:11Z",
    "updatedAt": "2026-09-23T15:02:11Z"
  }
}

Get a saved list

GET/v1/saved-lists/{savedListId}saved-lists.get

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

Try it on developer.ken.so

A list of this workspace, a list shared with it through an accepted invite, or an approved library list, with its counts and sources. Anything else is 404. Requires search view.

Parameters

Name
In
Type
Required
Description
savedListId
In: path
integer (int64)
required
Ken-Version
In: header
string, one of: 2026-11-02, 1.1
required
The API version: a dated version (YYYY-MM-DD), or 1.1, another name for the first dated version. Without it the request uses your API key's pinned version; an unpinned key reaches the legacy shape of the same path. 1.0 selects the legacy shape explicitly.
X-Ken-Workspace-Id
In: header
integer (int64)
optional
Workspace to act in. Required when your credential can reach more than one workspace (otherwise 400 workspace_required).

Response 200

data is a SavedListModel.

Field
Type
Description
id
integer (int64)
kind
string, one of: people, companies
visibility
string, one of: private, workspace, library
access
string, one of: owner, shared, library
name
string
description
string
slug
string
icpTags
array of string
libraryState
string, one of: none, submitted, approved, rejected, retired
publicPageEnabled
boolean
ownerUserId
integer (int64)
createdByUserId
integer (int64)
rightsConfirmedAt
string (date-time)
hasCsvMembers
boolean
counts
SavedListCountsModel
sources
array of SavedListSourceModel
lastRefreshedAt
string (date-time)
submittedAt
string (date-time)
reviewedAt
string (date-time)
reviewReason
string
submittedByWorkspaceName
string
createdAt
string (date-time)
updatedAt
string (date-time)
Request
curl -X GET "https://api.ken.so/v1/saved-lists/812" \
  -H "Authorization: Bearer $KEN_API_KEY" \
  -H "Ken-Version: 2026-11-02" \
  -H "X-Ken-Workspace-Id: $KEN_WORKSPACE_ID"
Response 200
{
  "success": true,
  "data": {
    "id": 812,
    "kind": "people",
    "visibility": "private",
    "access": "owner",
    "name": "string",
    "description": "string",
    "slug": "string",
    "icpTags": [
      "string"
    ],
    "libraryState": "none",
    "publicPageEnabled": true,
    "ownerUserId": 812,
    "createdByUserId": 812,
    "rightsConfirmedAt": "2026-09-23T15:02:11Z",
    "hasCsvMembers": true,
    "counts": {
      "members": 1,
      "sendableEmails": 1,
      "byCountry": {
        "key": 1
      },
      "bySeniority": {
        "key": 1
      },
      "byIndustry": {
        "key": 1
      },
      "byHeadcountBand": {
        "key": 1
      }
    },
    "sources": [
      {
        "id": 812,
        "sourceType": "search_filters",
        "parameters": null,
        "status": "pending",
        "statusMessage": "string",
        "addedByUserId": 812,
        "lastRefreshedAt": "2026-09-23T15:02:11Z",
        "lastRefreshAdded": 1,
        "createdAt": "2026-09-23T15:02:11Z"
      }
    ],
    "lastRefreshedAt": "2026-09-23T15:02:11Z",
    "submittedAt": "2026-09-23T15:02:11Z",
    "reviewedAt": "2026-09-23T15:02:11Z",
    "reviewReason": "string",
    "submittedByWorkspaceName": "string",
    "createdAt": "2026-09-23T15:02:11Z",
    "updatedAt": "2026-09-23T15:02:11Z"
  }
}

Update a saved list

PATCH/v1/saved-lists/{savedListId}saved-lists.update

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

Try it on developer.ken.so

Any of name, description (null clears it), visibility (workspace or private; only the list's owner can make it private) and icpTags ([] clears them). Absent fields stay. Only this workspace's lists; a shared or library list is 404. Requires search edit.

Parameters

Name
In
Type
Required
Description
savedListId
In: path
integer (int64)
required
Ken-Version
In: header
string, one of: 2026-11-02, 1.1
required
The API version: a dated version (YYYY-MM-DD), or 1.1, another name for the first dated version. Without it the request uses your API key's pinned version; an unpinned key reaches the legacy shape of the same path. 1.0 selects the legacy shape explicitly.
X-Ken-Workspace-Id
In: header
integer (int64)
optional
Workspace to act in. Required when your credential can reach more than one workspace (otherwise 400 workspace_required).

Request body

application/json, optional.

Field
Type
Required
Description
name
string
optional
description
string
optional
visibility
string
optional
icpTags
array of string
optional

Response 200

data is a SavedListModel.

Field
Type
Description
id
integer (int64)
kind
string, one of: people, companies
visibility
string, one of: private, workspace, library
access
string, one of: owner, shared, library
name
string
description
string
slug
string
icpTags
array of string
libraryState
string, one of: none, submitted, approved, rejected, retired
publicPageEnabled
boolean
ownerUserId
integer (int64)
createdByUserId
integer (int64)
rightsConfirmedAt
string (date-time)
hasCsvMembers
boolean
counts
SavedListCountsModel
sources
array of SavedListSourceModel
lastRefreshedAt
string (date-time)
submittedAt
string (date-time)
reviewedAt
string (date-time)
reviewReason
string
submittedByWorkspaceName
string
createdAt
string (date-time)
updatedAt
string (date-time)
Request
curl -X PATCH "https://api.ken.so/v1/saved-lists/812" \
  -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 '{
  "name": "string",
  "description": "string",
  "visibility": "string",
  "icpTags": [
    "string"
  ]
}'
Response 200
{
  "success": true,
  "data": {
    "id": 812,
    "kind": "people",
    "visibility": "private",
    "access": "owner",
    "name": "string",
    "description": "string",
    "slug": "string",
    "icpTags": [
      "string"
    ],
    "libraryState": "none",
    "publicPageEnabled": true,
    "ownerUserId": 812,
    "createdByUserId": 812,
    "rightsConfirmedAt": "2026-09-23T15:02:11Z",
    "hasCsvMembers": true,
    "counts": {
      "members": 1,
      "sendableEmails": 1,
      "byCountry": {
        "key": 1
      },
      "bySeniority": {
        "key": 1
      },
      "byIndustry": {
        "key": 1
      },
      "byHeadcountBand": {
        "key": 1
      }
    },
    "sources": [
      {
        "id": 812,
        "sourceType": "search_filters",
        "parameters": null,
        "status": "pending",
        "statusMessage": "string",
        "addedByUserId": 812,
        "lastRefreshedAt": "2026-09-23T15:02:11Z",
        "lastRefreshAdded": 1,
        "createdAt": "2026-09-23T15:02:11Z"
      }
    ],
    "lastRefreshedAt": "2026-09-23T15:02:11Z",
    "submittedAt": "2026-09-23T15:02:11Z",
    "reviewedAt": "2026-09-23T15:02:11Z",
    "reviewReason": "string",
    "submittedByWorkspaceName": "string",
    "createdAt": "2026-09-23T15:02:11Z",
    "updatedAt": "2026-09-23T15:02:11Z"
  }
}

Delete a saved list

DELETE/v1/saved-lists/{savedListId}saved-lists.delete

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

Try it on developer.ken.so

Soft delete of one of this workspace's lists. A library copy approved from it stays. Returns 204. A shared or library list is 404. Requires search edit.

Parameters

Name
In
Type
Required
Description
savedListId
In: path
integer (int64)
required
Ken-Version
In: header
string, one of: 2026-11-02, 1.1
required
The API version: a dated version (YYYY-MM-DD), or 1.1, another name for the first dated version. Without it the request uses your API key's pinned version; an unpinned key reaches the legacy shape of the same path. 1.0 selects the legacy shape explicitly.
X-Ken-Workspace-Id
In: header
integer (int64)
optional
Workspace to act in. Required when your credential can reach more than one workspace (otherwise 400 workspace_required).

Response 204

Request
curl -X DELETE "https://api.ken.so/v1/saved-lists/812" \
  -H "Authorization: Bearer $KEN_API_KEY" \
  -H "Ken-Version: 2026-11-02" \
  -H "X-Ken-Workspace-Id: $KEN_WORKSPACE_ID"
Response 204
HTTP/1.1 204 No Content

Copy a saved list into a new list of this workspace

POST/v1/saved-lists/{savedListId}/copysaved-lists.copy

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

Try it on developer.ken.so

Copies any list you can read (your own, one shared with you, or a library list) into a new workspace list that belongs to you. Optional body: name (default "<name> (copy)") and memberFilters (country, seniority, title contains, industry, headcountBand, hasSendableEmail) to copy only matching members. Opted-out members are never copied. At most 500,000 members (400 too_many_members). Returns 201 with the new list. Requires search edit.

Parameters

Name
In
Type
Required
Description
savedListId
In: path
integer (int64)
required
Ken-Version
In: header
string, one of: 2026-11-02, 1.1
required
The API version: a dated version (YYYY-MM-DD), or 1.1, another name for the first dated version. Without it the request uses your API key's pinned version; an unpinned key reaches the legacy shape of the same path. 1.0 selects the legacy shape explicitly.
X-Ken-Workspace-Id
In: header
integer (int64)
optional
Workspace to act in. Required when your credential can reach more than one workspace (otherwise 400 workspace_required).

Request body

application/json, optional.

Field
Type
Required
Description
name
string
optional
memberFilters
SavedListMemberFiltersBody
optional

Response 201

data is a SavedListModel.

Field
Type
Description
id
integer (int64)
kind
string, one of: people, companies
visibility
string, one of: private, workspace, library
access
string, one of: owner, shared, library
name
string
description
string
slug
string
icpTags
array of string
libraryState
string, one of: none, submitted, approved, rejected, retired
publicPageEnabled
boolean
ownerUserId
integer (int64)
createdByUserId
integer (int64)
rightsConfirmedAt
string (date-time)
hasCsvMembers
boolean
counts
SavedListCountsModel
sources
array of SavedListSourceModel
lastRefreshedAt
string (date-time)
submittedAt
string (date-time)
reviewedAt
string (date-time)
reviewReason
string
submittedByWorkspaceName
string
createdAt
string (date-time)
updatedAt
string (date-time)
Request
curl -X POST "https://api.ken.so/v1/saved-lists/812/copy" \
  -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 '{
  "name": "string",
  "memberFilters": {
    "country": "string",
    "seniority": "string",
    "title": "string",
    "industry": "string",
    "headcountBand": "string",
    "hasSendableEmail": true
  }
}'
Response 201
{
  "success": true,
  "data": {
    "id": 812,
    "kind": "people",
    "visibility": "private",
    "access": "owner",
    "name": "string",
    "description": "string",
    "slug": "string",
    "icpTags": [
      "string"
    ],
    "libraryState": "none",
    "publicPageEnabled": true,
    "ownerUserId": 812,
    "createdByUserId": 812,
    "rightsConfirmedAt": "2026-09-23T15:02:11Z",
    "hasCsvMembers": true,
    "counts": {
      "members": 1,
      "sendableEmails": 1,
      "byCountry": {
        "key": 1
      },
      "bySeniority": {
        "key": 1
      },
      "byIndustry": {
        "key": 1
      },
      "byHeadcountBand": {
        "key": 1
      }
    },
    "sources": [
      {
        "id": 812,
        "sourceType": "search_filters",
        "parameters": null,
        "status": "pending",
        "statusMessage": "string",
        "addedByUserId": 812,
        "lastRefreshedAt": "2026-09-23T15:02:11Z",
        "lastRefreshAdded": 1,
        "createdAt": "2026-09-23T15:02:11Z"
      }
    ],
    "lastRefreshedAt": "2026-09-23T15:02:11Z",
    "submittedAt": "2026-09-23T15:02:11Z",
    "reviewedAt": "2026-09-23T15:02:11Z",
    "reviewReason": "string",
    "submittedByWorkspaceName": "string",
    "createdAt": "2026-09-23T15:02:11Z",
    "updatedAt": "2026-09-23T15:02:11Z"
  }
}

Invite an email address to a saved list

POST/v1/saved-lists/{savedListId}/invitessaved-lists.create-invite

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

Try it on developer.ken.so

Body {email}. Creates a read-only grant with status pending and emails the address a link (https://app.ken.so/lists/accept/{token}); the invitee picks which of their workspaces receives the list. A list with CSV-uploaded members needs POST /v1/saved-lists/{savedListId}/rights-confirmation first, else 409 rights_confirmation_required. A private list cannot be shared (409 invalid_state). A second invite to an address with a pending invite on the list is 409 conflict. The grant is created even when the email cannot be sent. Returns 201. Requires the Search page at edit and the share feature.

Parameters

Name
In
Type
Required
Description
savedListId
In: path
integer (int64)
required
Ken-Version
In: header
string, one of: 2026-11-02, 1.1
required
The API version: a dated version (YYYY-MM-DD), or 1.1, another name for the first dated version. Without it the request uses your API key's pinned version; an unpinned key reaches the legacy shape of the same path. 1.0 selects the legacy shape explicitly.
X-Ken-Workspace-Id
In: header
integer (int64)
optional
Workspace to act in. Required when your credential can reach more than one workspace (otherwise 400 workspace_required).

Request body

application/json, optional.

Field
Type
Required
Description
email
string
optional

Response 201

data is a SavedListGrantModel.

Field
Type
Description
id
integer (int64)
savedListId
integer (int64)
inviteeEmail
string
status
string, one of: pending, accepted, revoked
receivingWorkspaceId
integer (int64)
receivingWorkspaceName
string
invitedByUserId
integer (int64)
acceptedAt
string (date-time)
revokedAt
string (date-time)
createdAt
string (date-time)
Request
curl -X POST "https://api.ken.so/v1/saved-lists/812/invites" \
  -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 '{
  "email": "[email protected]"
}'
Response 201
{
  "success": true,
  "data": {
    "id": 812,
    "savedListId": 812,
    "inviteeEmail": "[email protected]",
    "status": "pending",
    "receivingWorkspaceId": 812,
    "receivingWorkspaceName": "string",
    "invitedByUserId": 812,
    "acceptedAt": "2026-09-23T15:02:11Z",
    "revokedAt": "2026-09-23T15:02:11Z",
    "createdAt": "2026-09-23T15:02:11Z"
  }
}

List a saved list's grants

GET/v1/saved-lists/{savedListId}/grantssaved-lists.list-grants

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

Try it on developer.ken.so

Every grant of one of the workspace's lists, pending, accepted and revoked, in id order (hasMore is always false). An accepted or revoked grant names the receiving workspace. Requires the Search page at view.

Parameters

Name
In
Type
Required
Description
savedListId
In: path
integer (int64)
required
Ken-Version
In: header
string, one of: 2026-11-02, 1.1
required
The API version: a dated version (YYYY-MM-DD), or 1.1, another name for the first dated version. Without it the request uses your API key's pinned version; an unpinned key reaches the legacy shape of the same path. 1.0 selects the legacy shape explicitly.
X-Ken-Workspace-Id
In: header
integer (int64)
optional
Workspace to act in. Required when your credential can reach more than one workspace (otherwise 400 workspace_required).

Response 200

data is a list of SavedListGrantModel. Each item has these fields. The response also carries pagination.

Field
Type
Description
id
integer (int64)
savedListId
integer (int64)
inviteeEmail
string
status
string, one of: pending, accepted, revoked
receivingWorkspaceId
integer (int64)
receivingWorkspaceName
string
invitedByUserId
integer (int64)
acceptedAt
string (date-time)
revokedAt
string (date-time)
createdAt
string (date-time)
Request
curl -X GET "https://api.ken.so/v1/saved-lists/812/grants" \
  -H "Authorization: Bearer $KEN_API_KEY" \
  -H "Ken-Version: 2026-11-02" \
  -H "X-Ken-Workspace-Id: $KEN_WORKSPACE_ID"
Response 200
{
  "success": true,
  "data": [
    {
      "id": 812,
      "savedListId": 812,
      "inviteeEmail": "[email protected]",
      "status": "pending",
      "receivingWorkspaceId": 812,
      "receivingWorkspaceName": "string",
      "invitedByUserId": 812,
      "acceptedAt": "2026-09-23T15:02:11Z",
      "revokedAt": "2026-09-23T15:02:11Z",
      "createdAt": "2026-09-23T15:02:11Z"
    }
  ],
  "pagination": {
    "nextCursor": "eyJpZCI6ODE1fQ",
    "hasMore": true,
    "total": 1,
    "isTotalCapped": true
  }
}

Revoke a saved-list grant

DELETE/v1/saved-lists/{savedListId}/grants/{grantId}saved-lists.revoke-grant

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

Try it on developer.ken.so

Status revoked: the receiving workspace stops reading the list; contacts it already copied into campaigns stay. Revoking a revoked grant is fine. Returns 204. Requires the Search page at edit and the share feature.

Parameters

Name
In
Type
Required
Description
savedListId
In: path
integer (int64)
required
grantId
In: path
integer (int64)
required
Ken-Version
In: header
string, one of: 2026-11-02, 1.1
required
The API version: a dated version (YYYY-MM-DD), or 1.1, another name for the first dated version. Without it the request uses your API key's pinned version; an unpinned key reaches the legacy shape of the same path. 1.0 selects the legacy shape explicitly.
X-Ken-Workspace-Id
In: header
integer (int64)
optional
Workspace to act in. Required when your credential can reach more than one workspace (otherwise 400 workspace_required).

Response 204

Request
curl -X DELETE "https://api.ken.so/v1/saved-lists/812/grants/812" \
  -H "Authorization: Bearer $KEN_API_KEY" \
  -H "Ken-Version: 2026-11-02" \
  -H "X-Ken-Workspace-Id: $KEN_WORKSPACE_ID"
Response 204
HTTP/1.1 204 No Content

Confirm the right to share a saved list's uploaded data

POST/v1/saved-lists/{savedListId}/rights-confirmationsaved-lists.confirm-rights

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

Try it on developer.ken.so

The owner confirms "I have the right to share this data" for a list with CSV-uploaded members; sharing and library submission need it. Records who and when (the latest confirmation wins) and returns the list. Needs a user (a session or an API key that belongs to a user), else 403. Requires the Search page at edit and the share feature.

Parameters

Name
In
Type
Required
Description
savedListId
In: path
integer (int64)
required
Ken-Version
In: header
string, one of: 2026-11-02, 1.1
required
The API version: a dated version (YYYY-MM-DD), or 1.1, another name for the first dated version. Without it the request uses your API key's pinned version; an unpinned key reaches the legacy shape of the same path. 1.0 selects the legacy shape explicitly.
X-Ken-Workspace-Id
In: header
integer (int64)
optional
Workspace to act in. Required when your credential can reach more than one workspace (otherwise 400 workspace_required).

Response 200

data is a SavedListRightsModel.

Field
Type
Description
id
integer (int64)
kind
string, one of: people, companies
visibility
string, one of: private, workspace, library
access
string
name
string
description
string
slug
string
icpTags
array of string
libraryState
string, one of: none, submitted, approved, rejected, retired
publicPageEnabled
boolean
ownerUserId
integer (int64)
createdByUserId
integer (int64)
rightsConfirmedAt
string (date-time)
hasCsvMembers
boolean
counts
SavedListRightsCountsModel
sources
array of SavedListSourceModel
lastRefreshedAt
string (date-time)
submittedAt
string (date-time)
reviewedAt
string (date-time)
reviewReason
string
createdAt
string (date-time)
updatedAt
string (date-time)
Request
curl -X POST "https://api.ken.so/v1/saved-lists/812/rights-confirmation" \
  -H "Authorization: Bearer $KEN_API_KEY" \
  -H "Ken-Version: 2026-11-02" \
  -H "X-Ken-Workspace-Id: $KEN_WORKSPACE_ID"
Response 200
{
  "success": true,
  "data": {
    "id": 812,
    "kind": "people",
    "visibility": "private",
    "access": "string",
    "name": "string",
    "description": "string",
    "slug": "string",
    "icpTags": [
      "string"
    ],
    "libraryState": "none",
    "publicPageEnabled": true,
    "ownerUserId": 812,
    "createdByUserId": 812,
    "rightsConfirmedAt": "2026-09-23T15:02:11Z",
    "hasCsvMembers": true,
    "counts": {
      "members": 1,
      "sendableEmails": 1,
      "byCountry": {
        "key": 1
      },
      "bySeniority": {
        "key": 1
      },
      "byIndustry": {
        "key": 1
      },
      "byHeadcountBand": {
        "key": 1
      }
    },
    "sources": [
      {
        "id": 812,
        "sourceType": "search_filters",
        "parameters": null,
        "status": "pending",
        "statusMessage": "string",
        "addedByUserId": 812,
        "lastRefreshedAt": "2026-09-23T15:02:11Z",
        "lastRefreshAdded": 1,
        "createdAt": "2026-09-23T15:02:11Z"
      }
    ],
    "lastRefreshedAt": "2026-09-23T15:02:11Z",
    "submittedAt": "2026-09-23T15:02:11Z",
    "reviewedAt": "2026-09-23T15:02:11Z",
    "reviewReason": "string",
    "createdAt": "2026-09-23T15:02:11Z",
    "updatedAt": "2026-09-23T15:02:11Z"
  }
}

Add a source to a saved list

POST/v1/saved-lists/{savedListId}/sourcessaved-lists.create-source

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

Try it on developer.ken.so

Body { sourceType, parameters }. search_filters: a people-search body (paging keys are dropped, at least one filter is required); search_selection: { personIds }, 1 to 1,000 picked people; saved_search: { savedSearchId }, resolved as you each time it runs; campaign: { campaignId }, the campaign's contacts (also needs campaigns view); list: { savedListId }, another list you can read. A company list takes only a list source; a list has at most 50 sources. Returns 202 with the source in pending; poll it until done or failed (statusMessage says why). Requires search edit.

Parameters

Name
In
Type
Required
Description
savedListId
In: path
integer (int64)
required
Ken-Version
In: header
string, one of: 2026-11-02, 1.1
required
The API version: a dated version (YYYY-MM-DD), or 1.1, another name for the first dated version. Without it the request uses your API key's pinned version; an unpinned key reaches the legacy shape of the same path. 1.0 selects the legacy shape explicitly.
X-Ken-Workspace-Id
In: header
integer (int64)
optional
Workspace to act in. Required when your credential can reach more than one workspace (otherwise 400 workspace_required).

Request body

application/json, optional.

Field
Type
Required
Description
sourceType
string
optional
parameters
object
optional

Response 202

data is a SavedListSourceModel.

Field
Type
Description
id
integer (int64)
sourceType
string, one of: search_filters, search_selection, saved_search, csv, campaign, list, vendor_import, registry, ...
parameters
object
status
string, one of: pending, running, done, failed
statusMessage
string
addedByUserId
integer (int64)
lastRefreshedAt
string (date-time)
lastRefreshAdded
integer (int32)
createdAt
string (date-time)
Request
curl -X POST "https://api.ken.so/v1/saved-lists/812/sources" \
  -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 '{
  "sourceType": "string",
  "parameters": null
}'
Response 202
{
  "success": true,
  "data": {
    "id": 812,
    "sourceType": "search_filters",
    "parameters": null,
    "status": "pending",
    "statusMessage": "string",
    "addedByUserId": 812,
    "lastRefreshedAt": "2026-09-23T15:02:11Z",
    "lastRefreshAdded": 1,
    "createdAt": "2026-09-23T15:02:11Z"
  }
}

Get one source of a saved list

GET/v1/saved-lists/{savedListId}/sources/{sourceId}saved-lists.get-source

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

Try it on developer.ken.so

Poll this after adding or refreshing a source: status is pending, running, done or failed, lastRefreshAdded counts the members the last run added. Requires search view.

Parameters

Name
In
Type
Required
Description
savedListId
In: path
integer (int64)
required
sourceId
In: path
integer (int64)
required
Ken-Version
In: header
string, one of: 2026-11-02, 1.1
required
The API version: a dated version (YYYY-MM-DD), or 1.1, another name for the first dated version. Without it the request uses your API key's pinned version; an unpinned key reaches the legacy shape of the same path. 1.0 selects the legacy shape explicitly.
X-Ken-Workspace-Id
In: header
integer (int64)
optional
Workspace to act in. Required when your credential can reach more than one workspace (otherwise 400 workspace_required).

Response 200

data is a SavedListSourceModel.

Field
Type
Description
id
integer (int64)
sourceType
string, one of: search_filters, search_selection, saved_search, csv, campaign, list, vendor_import, registry, ...
parameters
object
status
string, one of: pending, running, done, failed
statusMessage
string
addedByUserId
integer (int64)
lastRefreshedAt
string (date-time)
lastRefreshAdded
integer (int32)
createdAt
string (date-time)
Request
curl -X GET "https://api.ken.so/v1/saved-lists/812/sources/812" \
  -H "Authorization: Bearer $KEN_API_KEY" \
  -H "Ken-Version: 2026-11-02" \
  -H "X-Ken-Workspace-Id: $KEN_WORKSPACE_ID"
Response 200
{
  "success": true,
  "data": {
    "id": 812,
    "sourceType": "search_filters",
    "parameters": null,
    "status": "pending",
    "statusMessage": "string",
    "addedByUserId": 812,
    "lastRefreshedAt": "2026-09-23T15:02:11Z",
    "lastRefreshAdded": 1,
    "createdAt": "2026-09-23T15:02:11Z"
  }
}

Refresh one Search source of a saved list

POST/v1/saved-lists/{savedListId}/sources/{sourceId}/refreshsaved-lists.refresh-source

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

Try it on developer.ken.so

Re-runs a search_filters, search_selection or saved_search source and adds new matches; members that no longer match stay. A campaign or list source answers 400 not_refreshable. Returns 202 with the source. Requires search edit.

Parameters

Name
In
Type
Required
Description
savedListId
In: path
integer (int64)
required
sourceId
In: path
integer (int64)
required
Ken-Version
In: header
string, one of: 2026-11-02, 1.1
required
The API version: a dated version (YYYY-MM-DD), or 1.1, another name for the first dated version. Without it the request uses your API key's pinned version; an unpinned key reaches the legacy shape of the same path. 1.0 selects the legacy shape explicitly.
X-Ken-Workspace-Id
In: header
integer (int64)
optional
Workspace to act in. Required when your credential can reach more than one workspace (otherwise 400 workspace_required).

Response 202

data is a SavedListSourceModel.

Field
Type
Description
id
integer (int64)
sourceType
string, one of: search_filters, search_selection, saved_search, csv, campaign, list, vendor_import, registry, ...
parameters
object
status
string, one of: pending, running, done, failed
statusMessage
string
addedByUserId
integer (int64)
lastRefreshedAt
string (date-time)
lastRefreshAdded
integer (int32)
createdAt
string (date-time)
Request
curl -X POST "https://api.ken.so/v1/saved-lists/812/sources/812/refresh" \
  -H "Authorization: Bearer $KEN_API_KEY" \
  -H "Ken-Version: 2026-11-02" \
  -H "X-Ken-Workspace-Id: $KEN_WORKSPACE_ID"
Response 202
{
  "success": true,
  "data": {
    "id": 812,
    "sourceType": "search_filters",
    "parameters": null,
    "status": "pending",
    "statusMessage": "string",
    "addedByUserId": 812,
    "lastRefreshedAt": "2026-09-23T15:02:11Z",
    "lastRefreshAdded": 1,
    "createdAt": "2026-09-23T15:02:11Z"
  }
}

Refresh every Search source of a saved list

POST/v1/saved-lists/{savedListId}/refreshsaved-lists.refresh

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

Try it on developer.ken.so

Re-runs the list's Search sources and adds new matches; campaign, list and CSV sources are not re-run and no member is removed. Returns 202 with the Search sources. Requires search edit.

Parameters

Name
In
Type
Required
Description
savedListId
In: path
integer (int64)
required
Ken-Version
In: header
string, one of: 2026-11-02, 1.1
required
The API version: a dated version (YYYY-MM-DD), or 1.1, another name for the first dated version. Without it the request uses your API key's pinned version; an unpinned key reaches the legacy shape of the same path. 1.0 selects the legacy shape explicitly.
X-Ken-Workspace-Id
In: header
integer (int64)
optional
Workspace to act in. Required when your credential can reach more than one workspace (otherwise 400 workspace_required).

Response 202

data is a list of SavedListSourceModel. Each item has these fields.

Field
Type
Description
id
integer (int64)
sourceType
string, one of: search_filters, search_selection, saved_search, csv, campaign, list, vendor_import, registry, ...
parameters
object
status
string, one of: pending, running, done, failed
statusMessage
string
addedByUserId
integer (int64)
lastRefreshedAt
string (date-time)
lastRefreshAdded
integer (int32)
createdAt
string (date-time)
Request
curl -X POST "https://api.ken.so/v1/saved-lists/812/refresh" \
  -H "Authorization: Bearer $KEN_API_KEY" \
  -H "Ken-Version: 2026-11-02" \
  -H "X-Ken-Workspace-Id: $KEN_WORKSPACE_ID"
Response 202
{
  "success": true,
  "data": [
    {
      "id": 812,
      "sourceType": "search_filters",
      "parameters": null,
      "status": "pending",
      "statusMessage": "string",
      "addedByUserId": 812,
      "lastRefreshedAt": "2026-09-23T15:02:11Z",
      "lastRefreshAdded": 1,
      "createdAt": "2026-09-23T15:02:11Z"
    }
  ]
}

Submit a list to the library

POST/v1/saved-lists/{savedListId}/submissionssaved-lists.submit

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

Try it on developer.ken.so

Puts one of the workspace's own lists in libraryStatesubmitted, credited to the workspace and the signed-in person, for a Kenso review. Nothing reaches the library until staff approve it; approval copies the list, so later edits change only the workspace's list and the owner resubmits. icpTags and description replace the list's when given. 409 rights_confirmation_required while the list holds uploaded CSV data (or a CSV upload is still running) without a rights confirmation; 409 already_submitted while a submission waits. A list of another workspace, a list shared with this workspace, a library list and another member's private list are 404. Needs Search edit, the share permission and a signed-in person (a workspace API key is 403).

Parameters

Name
In
Type
Required
Description
savedListId
In: path
integer (int64)
required
Ken-Version
In: header
string, one of: 2026-11-02, 1.1
required
The API version: a dated version (YYYY-MM-DD), or 1.1, another name for the first dated version. Without it the request uses your API key's pinned version; an unpinned key reaches the legacy shape of the same path. 1.0 selects the legacy shape explicitly.
X-Ken-Workspace-Id
In: header
integer (int64)
optional
Workspace to act in. Required when your credential can reach more than one workspace (otherwise 400 workspace_required).

Request body

application/json, optional.

Field
Type
Required
Description
icpTags
array of string
optional
Replaces the list's ICP tags when given: up to 20, each up to 50 characters. An empty array clears them.
description
string
optional
Replaces the list's description when given: up to 2000 characters, not blank.

Response 200

data is a SavedListSubmissionModel.

Field
Type
Description
id
integer (int64)
kind
string, one of: people, companies
visibility
string, one of: private, workspace, library
access
string
name
string
description
string
slug
string
icpTags
array of string
libraryState
string, one of: none, submitted, approved, rejected, retired
publicPageEnabled
boolean
ownerUserId
integer (int64)
createdByUserId
integer (int64)
rightsConfirmedAt
string (date-time)
hasCsvMembers
boolean
counts
SavedListSubmissionCountsModel
sources
array of SavedListSourceModel
lastRefreshedAt
string (date-time)
submittedAt
string (date-time)
reviewedAt
string (date-time)
reviewReason
string
createdAt
string (date-time)
updatedAt
string (date-time)
Request
curl -X POST "https://api.ken.so/v1/saved-lists/812/submissions" \
  -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 '{
  "icpTags": [
    "string"
  ],
  "description": "string"
}'
Response 200
{
  "success": true,
  "data": {
    "id": 812,
    "kind": "people",
    "visibility": "private",
    "access": "string",
    "name": "string",
    "description": "string",
    "slug": "string",
    "icpTags": [
      "string"
    ],
    "libraryState": "none",
    "publicPageEnabled": true,
    "ownerUserId": 812,
    "createdByUserId": 812,
    "rightsConfirmedAt": "2026-09-23T15:02:11Z",
    "hasCsvMembers": true,
    "counts": {
      "members": 1,
      "sendableEmails": 1,
      "byCountry": {
        "key": 1
      },
      "bySeniority": {
        "key": 1
      },
      "byIndustry": {
        "key": 1
      },
      "byHeadcountBand": {
        "key": 1
      }
    },
    "sources": [
      {
        "id": 812,
        "sourceType": "search_filters",
        "parameters": null,
        "status": "pending",
        "statusMessage": "string",
        "addedByUserId": 812,
        "lastRefreshedAt": "2026-09-23T15:02:11Z",
        "lastRefreshAdded": 1,
        "createdAt": "2026-09-23T15:02:11Z"
      }
    ],
    "lastRefreshedAt": "2026-09-23T15:02:11Z",
    "submittedAt": "2026-09-23T15:02:11Z",
    "reviewedAt": "2026-09-23T15:02:11Z",
    "reviewReason": "string",
    "createdAt": "2026-09-23T15:02:11Z",
    "updatedAt": "2026-09-23T15:02:11Z"
  }
}

Add a CSV's rows to a saved list

POST/v1/saved-lists/{savedListId}/uploadssaved-lists.create-upload

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

Try it on developer.ken.so

Multipart: the CSV in field file (at most 400 MB and 100,000 rows) and, optionally, columnMappings: the JSON array the contact-import upload takes, for example [{"csvColumn":"Email","targetField":"email"},{"csvColumn":"Deal size","targetField":"custom_variable","customVariableName":"deal_size"}]. Without it the columns map by their headers, as on the campaign upload. Kenso checks the file and answers 202 with a csv source in pending, then adds the rows in the background: read the source until it is done or failed; its parameters then carry rowCount, inserted, merged and rejected (rows with no LinkedIn URL, email or name and company domain; for a company list, no domain or company page). Uploaded emails enter unverified, every phone is kept, and personal columns (birth date, gender, age, personal email and the like) are never stored. Only the workspace's own lists: a shared or library list is 404. Requires Search edit and the Import feature.

Parameters

Name
In
Type
Required
Description
savedListId
In: path
integer (int64)
required
Ken-Version
In: header
string, one of: 2026-11-02, 1.1
required
The API version: a dated version (YYYY-MM-DD), or 1.1, another name for the first dated version. Without it the request uses your API key's pinned version; an unpinned key reaches the legacy shape of the same path. 1.0 selects the legacy shape explicitly.
X-Ken-Workspace-Id
In: header
integer (int64)
optional
Workspace to act in. Required when your credential can reach more than one workspace (otherwise 400 workspace_required).

Response 202

data is a SavedListSourceModel.

Field
Type
Description
id
integer (int64)
sourceType
string, one of: search_filters, search_selection, saved_search, csv, campaign, list, vendor_import, registry, ...
parameters
object
status
string, one of: pending, running, done, failed
statusMessage
string
addedByUserId
integer (int64)
lastRefreshedAt
string (date-time)
lastRefreshAdded
integer (int32)
createdAt
string (date-time)
Request
curl -X POST "https://api.ken.so/v1/saved-lists/812/uploads" \
  -H "Authorization: Bearer $KEN_API_KEY" \
  -H "Ken-Version: 2026-11-02" \
  -H "X-Ken-Workspace-Id: $KEN_WORKSPACE_ID"
Response 202
{
  "success": true,
  "data": {
    "id": 812,
    "sourceType": "search_filters",
    "parameters": null,
    "status": "pending",
    "statusMessage": "string",
    "addedByUserId": 812,
    "lastRefreshedAt": "2026-09-23T15:02:11Z",
    "lastRefreshAdded": 1,
    "createdAt": "2026-09-23T15:02:11Z"
  }
}