Kenso

Job post searches

Find the companies and people behind job postings and import them.

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

Preview the companies hiring for the job filters

POST/v1/job-post-searches/companiesjob-post-searches.companies

Try it on developer.ken.so

Body { jobFilters }. Returns one ken-jobs hiring-companies page verbatim (the client pages with jobFilters.cursor and jobFilters.limit) plus hiringSet: { total, truncated } for the whole set. ken-jobs 422 codes (filter_required, invalid_cursor) pass through. Free.

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: object.

Response 200

data is a object.

Request
curl -X POST "https://api.ken.so/v1/job-post-searches/companies" \
  -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 '{}'
Response 200
{
  "success": true,
  "data": null
}

Search people at the hiring companies

POST/v1/job-post-searches/peoplejob-post-searches.people

Try it on developer.ken.so

Body { jobFilters, peopleFilters }. Forwards { ...peopleFilters, accountIds } to ken-search for the backend user and returns its page plus hiringSet: { count, truncated } and, on every person, jobPost: { title, url, location, postedAt, openRoles, moreRoles }. An empty hiring set is an empty page without a ken-search call. Each person on the page counts one row of the workspace's searchBrowseRows quota; past it, 429 quota_exceeded.

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: object.

Response 200

data is a object.

Request
curl -X POST "https://api.ken.so/v1/job-post-searches/people" \
  -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 '{}'
Response 200
{
  "success": true,
  "data": null
}

Count people at the hiring companies

POST/v1/job-post-searches/people/countjob-post-searches.count

Try it on developer.ken.so

Same body as people, sent with the smallest page. Returns { totalResults, hiringSet }.

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: object.

Response 200

data is a object.

Request
curl -X POST "https://api.ken.so/v1/job-post-searches/people/count" \
  -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 '{}'
Response 200
{
  "success": true,
  "data": null
}

Import people at the hiring companies into a campaign

POST/v1/job-post-searches/importjob-post-searches.import

Try it on developer.ken.so

Body { jobFilters, peopleFilters, campaignId, importLimit }. Forwards { campaignId, clientId, peopleFilters: { ...peopleFilters, accountIds }, importLimit } to ken-search v1/export/campaign for the backend user, records the five "Hiring for" variables per hiring company for the import batches, and returns { jobId }. Poll the job the way the Search Contacts import does. An empty hiring set is 400 validation_failed with detail code empty_hiring_set. ken-search refusals keep their status (400 validation_failed, 403 forbidden).

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: object.

Response 200

data is a JobPostSearchImportResult.

Field
Type
Description
jobId
integer (int64)
Request
curl -X POST "https://api.ken.so/v1/job-post-searches/import" \
  -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 '{}'
Response 200
{
  "success": true,
  "data": {
    "jobId": 812
  }
}