# List recruitments

Operation ID: `recruitments`

Group: People Management › Recruitments

[Open in the interactive reference](https://docs.api.lensing.ai/lensing/v1/endpoints/recruitments)

`GET /people/recruitments`

Read-only: Reads and returns; changes nothing.

Lists recruitments.

## Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `Api-Version` | header | string · v1 | yes | The API version this request targets, named by its public identifier. Required on every request; omitting it, or naming a version this company does not have, is answered with 400. This document describes version `v1`. |

## Query surface

- `id` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between, like
- `name` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between, like
- `category` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between, like
- `status` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between, like
- `published` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between
- `unsolicited` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between
- `deadline` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between
- `vacancies` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between
- `departmentId` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between, like
- `positionId` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between, like
- `teamId` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between, like
- `locationId` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between, like
- `entityId` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between, like
- `employmentCategoryId` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between, like
- `hiringManagerId` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between, like
- `ownerId` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between, like
- `lastModifiedDate` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between
- Orderable: id, recruitmentNumber, name, category, status, published, unsolicited, deadline, vacancies, lastModifiedDate
- Selectable: id, recruitmentNumber, name, category, status, published, unsolicited, deadline, vacancies, departmentId, departmentName, positionId, positionName, teamId, teamName, locationId, locationName, entityId, entityName, employmentCategoryId, hiringManagerId, hiringManagerName, ownerId, ownerName, jobDescription, viabilityCriteria, website, relocationRequired, lastModifiedDate
- `page[size]` — Page size
- `page[cursor]` — Opaque continuation cursor

## Response

`200` Success

Under `data`, an array of recruitmentsRow:

| Field | Type | Required | Filter | Sort | Description |
| --- | --- | --- | --- | --- | --- |
| `id` | string | no | Exact (`eq`, `ne`), Range (`gt`, `gte`, `lt`, `lte`, `between`), Any of (`in`, `notIn`), Pattern (`like`) | yes | The unique identifier for the recruitment. |
| `recruitmentNumber` | string \| null | no | no | yes | The system-generated recruitment number. Absent while none has been assigned. |
| `name` | string \| null | no | Exact (`eq`, `ne`), Range (`gt`, `gte`, `lt`, `lte`, `between`), Any of (`in`, `notIn`), Pattern (`like`) | yes | The name of the opening. |
| `category` | string \| null | no | Exact (`eq`, `ne`), Range (`gt`, `gte`, `lt`, `lte`, `between`), Any of (`in`, `notIn`), Pattern (`like`) | yes | A free-text category of the opening, for example internal, external or student. |
| `status` | string \| null | no | Exact (`eq`, `ne`), Range (`gt`, `gte`, `lt`, `lte`, `between`), Any of (`in`, `notIn`), Pattern (`like`) | yes | The status of the opening, derived from the deadline. 'inactive' once the deadline has passed, 'active' otherwise, including when no deadline is set. |
| `published` | boolean \| null | no | Exact (`eq`, `ne`), Range (`gt`, `gte`, `lt`, `lte`, `between`), Any of (`in`, `notIn`) | yes | Whether the opening is published externally. It is set by the external-publishing flow, not through this API. |
| `unsolicited` | boolean \| null | no | Exact (`eq`, `ne`), Range (`gt`, `gte`, `lt`, `lte`, `between`), Any of (`in`, `notIn`) | yes | Whether this is the catch-all opening that unsolicited applications are filed against. |
| `deadline` | date-time \| null | no | Exact (`eq`, `ne`), Range (`gt`, `gte`, `lt`, `lte`, `between`), Any of (`in`, `notIn`) | yes | The application deadline, in UTC. Format YYYY-MM-DDTHH:mm:ss.sssZ. Absent when no deadline is set. |
| `vacancies` | number \| null | no | Exact (`eq`, `ne`), Range (`gt`, `gte`, `lt`, `lte`, `between`), Any of (`in`, `notIn`) | yes | The number of vacant positions the opening covers. |
| `departmentId` | string \| null | no | Exact (`eq`, `ne`), Range (`gt`, `gte`, `lt`, `lte`, `between`), Any of (`in`, `notIn`), Pattern (`like`) | no | The identifier of the department the opening belongs to. Absent when not set. See id on GET people/departments/:id. |
| `departmentName` | string \| null | no | no | no | The name of the department. Absent when not set. |
| `positionId` | string \| null | no | Exact (`eq`, `ne`), Range (`gt`, `gte`, `lt`, `lte`, `between`), Any of (`in`, `notIn`), Pattern (`like`) | no | The identifier of the position being recruited for. Absent when not set. See id on GET people/positions/:id. |
| `positionName` | string \| null | no | no | no | The name of the position. Absent when not set. |
| `teamId` | string \| null | no | Exact (`eq`, `ne`), Range (`gt`, `gte`, `lt`, `lte`, `between`), Any of (`in`, `notIn`), Pattern (`like`) | no | The identifier of the team. Absent when none is assigned. See id on GET people/teams/:id. |
| `teamName` | string \| null | no | no | no | The name of the team. Absent when none is assigned. |
| `locationId` | string \| null | no | Exact (`eq`, `ne`), Range (`gt`, `gte`, `lt`, `lte`, `between`), Any of (`in`, `notIn`), Pattern (`like`) | no | The identifier of the work location. Absent when none is assigned. There is no endpoint for it. |
| `locationName` | string \| null | no | no | no | The name of the work location. Absent when none is assigned. |
| `entityId` | string \| null | no | Exact (`eq`, `ne`), Range (`gt`, `gte`, `lt`, `lte`, `between`), Any of (`in`, `notIn`), Pattern (`like`) | no | The legal entity that will employ the hire. Absent when none is assigned. |
| `entityName` | string \| null | no | no | no | The name of the legal entity that will employ the hire. Absent when none is assigned. |
| `employmentCategoryId` | string \| null | no | Exact (`eq`, `ne`), Range (`gt`, `gte`, `lt`, `lte`, `between`), Any of (`in`, `notIn`), Pattern (`like`) | no | The identifier of the employment category. Absent when none is assigned. There is no endpoint for it. |
| `hiringManagerId` | string \| null | no | Exact (`eq`, `ne`), Range (`gt`, `gte`, `lt`, `lte`, `between`), Any of (`in`, `notIn`), Pattern (`like`) | no | The identifier of the hiring manager. Absent when none is assigned. See id on GET people/person/:id. |
| `hiringManagerName` | string \| null | no | no | no | The full name of the hiring manager. Absent when none is assigned. |
| `ownerId` | string \| null | no | Exact (`eq`, `ne`), Range (`gt`, `gte`, `lt`, `lte`, `between`), Any of (`in`, `notIn`), Pattern (`like`) | no | The identifier of the recruitment owner, the recruiter. Absent when none is assigned. See id on GET people/person/:id. |
| `ownerName` | string \| null | no | no | no | The full name of the recruitment owner. Absent when none is assigned. |
| `jobDescription` | string \| null | no | no | no | The job description, as plain text. |
| `viabilityCriteria` | string \| null | no | no | no | The internal viability criteria used to screen applicants, as plain text. |
| `website` | string \| null | no | no | no | The URL of the posting or the hiring team's page. |
| `relocationRequired` | string \| null | no | no | no | Whether and how relocation is required. Free text, not a boolean. |
| `lastModifiedDate` | date-time | no | Exact (`eq`, `ne`), Range (`gt`, `gte`, `lt`, `lte`, `between`), Any of (`in`, `notIn`) | yes | The date and time the recruitment record last changed, in UTC. Format YYYY-MM-DDTHH:mm:ss.sssZ. |

```json
{
  "data": [
    {
      "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "recruitmentNumber": "<recruitmentNumber>",
      "name": "<name>",
      "category": "<category>",
      "status": "<status>",
      "published": true,
      "unsolicited": true,
      "deadline": "2026-01-15T09:30:00.000Z",
      "vacancies": 0,
      "departmentId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "departmentName": "<departmentName>",
      "positionId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "positionName": "<positionName>",
      "teamId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "teamName": "<teamName>",
      "locationId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "locationName": "<locationName>",
      "entityId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "entityName": "<entityName>",
      "employmentCategoryId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "hiringManagerId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "hiringManagerName": "<hiringManagerName>",
      "ownerId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "ownerName": "<ownerName>",
      "jobDescription": "<jobDescription>",
      "viabilityCriteria": "<viabilityCriteria>",
      "website": "<website>",
      "relocationRequired": "<relocationRequired>",
      "lastModifiedDate": "2026-01-15T09:30:00.000Z"
    }
  ],
  "pagination": {
    "hasMore": true,
    "nextCursor": "<nextCursor>"
  }
}
```

## Statuses

- `400` — Invalid request or business failure
- `401` — The request carries no valid access token.
- `403` — Not authorized
- `404` — Not found
- `429` — Too many requests from this client address. The response has no body and no `Retry-After` header.
- `500` — Internal server error
