Kenso

Job postings

Search job postings, read one with its history and export the results.

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

Search job postings

POST/v1/job-postings/searchjob-postings.search

Try it on developer.ken.so

At least one filter is required (filter_required). limit 1 to 50, cursor pagination through pagination.next_cursor. groupBy: "company" returns one row per company. Free: does not use the export allowance.

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).

Response 200

data is a object.

Request
curl -X POST "https://api.ken.so/v1/job-postings/search" \
  -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": null
}

Export job postings as JSON or CSV

POST/v1/job-postings/search/exportjob-postings.export

Try it on developer.ken.so

Same filters as search, plus format (json default, or csv) and limit (default 100). The export runs with min(limit, 5000, remaining monthly allowance) rows. The monthly allowance is the workspace's lead limit; exporting does not use lead credits. A larger match set returns 422 export_limit_exceeded with details[0].count and details[0].limit, and uses nothing. Other ken-jobs 422s keep their code and message (filter_required when no filter is set, validation_error when a filter list has more than 100 items) and also use nothing. No allowance left, or rows that no longer fit because another export used them first, returns 402 plan_limit_reached with refusal code JOBS_EXPORT_ROWS_LIMIT_REACHED. Success uses one allowance row per returned row, charged once the whole export is in hand, and sets X-Ken-Row-Count. CSV is a file download. An export larger than 512 MB returns 422 export_too_large and uses nothing. When too many exports are running, returns 503 with Retry-After. The returned rows also count on the workspace's jobsExportRows fair-use quota; past it, 429 quota_exceeded with Retry-After, and nothing is used.

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).

Response 200

data is a object.

Request
curl -X POST "https://api.ken.so/v1/job-postings/search/export" \
  -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": null
}

Get the job-postings export allowance for this calendar month

GET/v1/job-postings/export-allowancejob-postings.get-export-allowance

Try it on developer.ken.so

Free. The allowance is the workspace's lead limit, in rows per calendar month, and resets on the first of each month, UTC. Unlimited when the workspace bypasses limits.

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).

Response 200

data is a JobPostingsExportAllowanceModel.

Field
Type
Description
limit
integer (int32)
Rows the workspace may export this month: its lead limit.
used
integer (int32)
Rows exported this month, including exports still running.
remaining
integer (int32)
Rows left this month. 2147483647 when Ken.Scraper.API.Canonical.JobPostingsExportAllowanceModel.IsUnlimited.
maxPerExport
integer (int32)
Most rows one export can return.
isUnlimited
boolean
True when the workspace bypasses limits or its lead limit is unlimited.
periodStart
string (date-time)
First instant of this calendar month, UTC.
periodEnd
string (date-time)
First instant of next calendar month, UTC. The allowance resets then.
Request
curl -X GET "https://api.ken.so/v1/job-postings/export-allowance" \
  -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": {
    "limit": 1,
    "used": 1,
    "remaining": 1,
    "maxPerExport": 1,
    "isUnlimited": true,
    "periodStart": "2026-09-23T15:02:11Z",
    "periodEnd": "2026-09-23T15:02:11Z"
  }
}

Free. Closed postings stay readable.

Parameters

Name
In
Type
Required
Description
jobPostingId
In: path
string
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 object.

Request
curl -X GET "https://api.ken.so/v1/job-postings/string" \
  -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": null
}

Free. Needs no search filter.

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).

Response 200

data is a object.

Request
curl -X POST "https://api.ken.so/v1/job-postings/filters/resolve" \
  -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": null
}