Projects

List candidates in a project

Changed on

Use this endpoint to retrieve a paginated list of candidates enrolled in a specific project, including both active and rejected candidates by default.

In Atlas, a candidate represents a person who has been added to a project's recruitment pipeline. Each candidate sits at a specific status within a specific stage of the pipeline (e.g. Sourcing → Added, Shortlist → Reviewed). This endpoint lets you read the current state of every candidate in a project, with the same ordering and filtering used by the Atlas web app candidate list.

What you can filter by:

  • phase — comma-separated pipeline phase names (internal_selection, presentation, first_round, late_stage)
  • stageId — comma-separated CandidateStage UUIDs
  • statusId — comma-separated CandidateStatus UUIDs
  • excludeRejected — when true, rejected candidates (non-null rejectedAt) are omitted

Ordering: Results are sorted by pipeline position — first by stage position, then by status position. Use sortDirection=asc or sortDirection=desc (default desc) to control the order. This matches the in-app candidate list ordering.

Pagination: Use page (1-based) and pageSize (1–100, default 25). The response includes a pagination object with page, pageSize, total, and hasMore.

What you get back: Each candidate includes its ID, a nested person object (with id, name, headline, and avatarUrl — use person.id with the People endpoints to fetch the person's full details, history, etc.), the current pipeline phase/stage/status, rejection state (rejectedAt, rejectionType, rejectionReason, customRejectionReasonId, rejectionDetails, rejectedBy — where rejectionType says who rejected the candidate (by_us, by_client or self), rejectionReason is the label of the agency-defined reason when one was picked, falling back to the predefined reason code, and rejectedBy is the Atlas user who recorded the rejection), the recruiter's shortlist comment (comment as plain text, commentFormatted as HTML), and timestamps. Rejected candidates are not moved, so a rejected candidate's stage and status are the ones they were rejected at — combine rejectionType with stage to tell, for example, a client rejection from the longlist apart from one after interview. To find the available stage/status IDs for a project, call the Get project details endpoint first.

Deprecated fields: firstName, lastName, headlineRole, and headlineCompanyName are still returned at the top level for backwards compatibility but are deprecated — use the equivalent fields inside person instead.

get/api/v1/projects/{id}/candidates

Request

Path parameters

idstring uuid required

Project ID

Example:550e8400-e29b-41d4-a716-446655440000

Query parameters

phasestring

Comma-separated pipeline phases to filter by

Example:internal_selection,presentation
stageIdstring

Comma-separated CandidateStage UUIDs to filter by

Example:550e8400-e29b-41d4-a716-446655440002
statusIdstring

Comma-separated CandidateStatus UUIDs to filter by

Example:550e8400-e29b-41d4-a716-446655440003
excludeRejected'true' | 'false'

When true, rejected candidates (non-null rejectedAt) are excluded

Example:true
sortDirection'asc' | 'desc'

Sort direction applied to pipeline position (stage, then status)

Example:desc
pageinteger

Page number (min: 1)

Example:1
pageSizeinteger

Results per page

Example:25

Response

Paginated list of candidates

status'ok' required

Example response

{
  "data": [
    {
      "person": {
        "avatarUrl": "https://berg-atlas-public.s3-eu-west-1.amazonaws.com/550e8400-e29b-41d4-a716-446655440000/7c9e6679-7425-40de-944b-e07fc1f90ae7/avatar/a1b2c3d4.jpeg"
      },
      "stage": {
        "name": "Sourcing"
      },
      "status": {
        "name": "Added"
      },
      "rejectionType": "by_client",
      "rejectionReason": "Above budget",
      "rejectedBy": {
        "name": "Jane Smith",
        "email": "jane@agency.com"
      },
      "comment": "Strong fit: 5 years in fintech, open to hybrid.",
      "commentFormatted": "<p>Strong fit: 5 years in fintech, open to hybrid.</p>"
    }
  ],
  "pagination": {
    "page": 1,
    "pageSize": 25,
    "total": 42,
    "hasMore": true
  }
}

Changes

    • warning

      added the new undefined enum value to the // response property for the response status

    • info

      added the required property // to the response with the status

    • info

      added the required property // to the response with the status

    • info

      added the required property // to the response with the status

    • info

      added the required property // to the response with the status