List candidates in a project
Changed onUse 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.
Request
- Base URLhttps://api.recruitwithatlas.com
- AuthHTTP bearer
- TypeScriptA function with typed inputs. Its response is checked against the schema.
Path parameters
Project ID
Query parameters
Comma-separated pipeline phases to filter by
Comma-separated CandidateStage UUIDs to filter by
Comma-separated CandidateStatus UUIDs to filter by
When true, rejected candidates (non-null rejectedAt) are excluded
Sort direction applied to pipeline position (stage, then status)
Page number (min: 1)
Results per page
Response
Paginated list of candidates
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
undefinedenum 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
- warning
- info
added the required property
//to the response with the status - info
added the required property
//to the response with the status
- info